ADD possibilité de cacher les infos bulles
authorGreg Burri <greg.burri@gmail.com>
Wed, 28 May 2008 20:51:18 +0000 (20:51 +0000)
committerGreg Burri <greg.burri@gmail.com>
Wed, 28 May 2008 20:51:18 +0000 (20:51 +0000)
ADD possibilité de cacher les dates des messages

doc/protocole3.txt
js/euphorik.js
js/pageMinichat.js
js/pageProfile.js
modules/erl/euphorik_bd.erl
modules/erl/euphorik_protocole.erl
modules/include/euphorik_bd.hrl

index 4b18f9e..66f688d 100644 (file)
@@ -82,7 +82,9 @@ ou
       "login" : "paul49",\r
       "email" : "paul@pierre.com",\r
       "css" : "css/3/euphorik.css",
-      "nick_format" : "nick" | "login" | "nick_login",\r
+      "nick_format" : "nick" | "login" | "nick_login",
+      "view_times" : true | false,
+      "view_tooltips" : true | false,\r
       "main_page" : 1,
       "conversations" : [
          {
@@ -112,7 +114,9 @@ c -> s
       "nick" : "Paul",\r
       "email" : "paul@pierre.com",\r
       "css" : "css/3/euphorik.css",
-      "nick_format" : "nick" | "login" | "nick_login",\r
+      "nick_format" : "nick" | "login" | "nick_login",
+      "view_times" : true | false,
+      "view_tooltips" : true | false,\r
       "main_page" : 1,
       "conversations" : [
          {
index 1b78ba8..ca84a02 100755 (executable)
@@ -90,7 +90,10 @@ function Util(formateur)
       $("#info").slideUp(50) 
    })
    
+   $("body").append('<div id="flecheBulle"></div>').append('<div id="messageBulle"><p></p></div>')
+   
    this.formateur = formateur
+   this.bulleActive = true
 }
 
 var messageType = {informatif: 0, question: 1, erreur: 2}
@@ -140,19 +143,25 @@ Util.prototype.messageDialogue = function(message, type, boutons, formate)
   */
 Util.prototype.infoBulle = function(message, element)
 {
-   var virerMess = function()
+   var thisUtil = this
+
+   var cacherBulle = function()
       {   
-         $("#flecheBulle").remove()
-         $("#messageBulle").remove()
+         $("#flecheBulle").hide()
+         $("#messageBulle").hide()
       }
 
-   element.click(virerMess)
-
    element.hover(
       function(e)
       {
-         f = $('<div id="flecheBulle"></div>').appendTo("body")
-         m = $('<div id="messageBulle"><p>' + message + '</p></div>').appendTo("body")
+         if (!thisUtil.bulleActive)
+            return
+         
+         var m = $("#messageBulle")
+         var f = $("#flecheBulle")
+         
+         $("p", m).html(message)
+      
          var positionFleche = {
             left : element.offset().left + element.width() / 2 - f.width() / 2,
             top : element.offset().top - f.height()
@@ -173,8 +182,8 @@ Util.prototype.infoBulle = function(message, element)
          m.css("top", positionMessage.top).css("left", positionMessage.left).show()
          f.css("top", positionFleche.top).css("left", positionFleche.left).show()
       },
-      virerMess
-   )
+      cacherBulle
+   ).click(cacherBulle)
 }
 
 /**
@@ -522,6 +531,8 @@ Client.prototype.resetDonneesPersonnelles = function()
    this.email = ""\r
    this.css = $("link#cssPrincipale").attr("href")
    this.nickFormat = "nick"
+   this.viewTimes = true
+   this.viewTooltips = true
    this.cookie = undefined
    
    this.pagePrincipale = 1
@@ -667,6 +678,8 @@ Client.prototype.getJSONProfile = function()
       "email" : this.email,
       "css" : this.css,
       "nick_format" : this.nickFormat,
+      "view_times" : this.viewTimes,
+      "view_tooltips" : this.viewTooltips,
       "main_page" : this.pagePrincipale < 1 ? 1 : this.pagePrincipale,
       "conversations" : this.getJSONConversations()
    }
@@ -808,12 +821,16 @@ Client.prototype.chargerDonnees = function(data)
       this.email = data["email"]\r
       this.setCss(data["css"])
       this.nickFormat = data["nick_format"]
+      this.viewTimes = data["view_times"]
+      this.viewTooltips = data["view_tooltips"]
       
       // la page de la conversation principale
       this.pagePrincipale = data["main_page"] == undefined ? 1 : data["main_page"]
       
       // les conversations
       this.conversations = data["conversations"]
+      
+      this.majBulle()
    }
 }
 
@@ -850,6 +867,10 @@ Client.prototype.flush = function(async)
                   thisClient.util.messageDialogue(data["error_message"])
                   ok = false
                }
+               else
+               {
+                  thisClient.majBulle()
+               }
             }
       }
    )
@@ -886,6 +907,14 @@ Client.prototype.majMenu = function()
    }
 }
 
+/**
+  * Met à jour l'affichage des infos bulles en fonction du profile.
+  */
+Client.prototype.majBulle = function()
+{
+   this.util.bulleActive = this.viewTooltips
+}
+
 Client.prototype.slap = function(userId, raison)
 {
    var thisClient = this
index 19fadb0..461c924 100755 (executable)
@@ -60,24 +60,27 @@ PageMinichat.prototype.charger = function()
    // les outils de bannissement (uniquement pour les ekMaster)
    if (this.client.ekMaster)
    {    
-      $("body").append(
+      $(
          '<div id="outilsBan">' +
          '<form action=""><p><input id="raison" name="raison" type="text" size="10" maxlength="200"></input></p></form>' +
          '<img id="ban" src="img/ban.gif" alt="Ban de 3 jours" />' +
          '<img id="kick" src="img/kick.gif" alt="Ban de 15min" />' +
          '<img id="slap" src="img/slap.gif" alt="Avertissement" />' +
          '</div>'
-      )
-      $("#outilsBan").hover(
+      ).hover(
          function(){},
          function()
          {
             $("#outilsBan").hide()
          }
-      )
+      ).appendTo("body")
+      
+      this.util.infoBulle("Slap", $("#outilsBan #slap"))
+      this.util.infoBulle("Kick", $("#outilsBan #kick"))
+      this.util.infoBulle("Ban", $("#outilsBan #ban"))
    }
    
-   this.util.infoBulle("Ouvrir la conversation liée au troll de la semaine", $("#trollCourant")) 
+   this.util.infoBulle("Ouvrir la conversation liée au troll de la semaine", $("#trollCourant .troll")) 
 
    // <smiles>
    $("body").append("<div id=\"smiles\"></div>")
@@ -538,7 +541,7 @@ Conversation.prototype.flush = function(funClickOuvrirConv)
                (this.messages[i].ekMaster ? " ekMaster" : "") +
             "\">" +
                "<div class=\"extraire\"></div><span class=\"entete\">" +
-               "[<span class=\"date\">" + message.date + "</span>]" +
+               "<span class=\"dateComplete\">[<span class=\"date\">" + message.date + "</span>]</span>" +
                "<span class=\"pseudo\"><span class=\"id\" style=\"display: none\">" + message.auteurId + "</span class=\"ident\">" + identifiant + "</span></span><span class=\"delimitationEntete\"></span>" +
                XHTMLrepondA +
                "<span class=\"contenu\">" + this.formateur.traitementComplet(message.contenu, message.pseudo) + "</span>" +
@@ -567,6 +570,11 @@ Conversation.prototype.flush = function(funClickOuvrirConv)
             }
          )
          
+         if (thisConversation.client.viewTimes)
+            $(".dateComplete", this).show()
+         else
+            $(".dateComplete", this).hide()
+         
          $("a[@rel*=lightbox]", this).lightBox()
          
          // les outils de bannissement (uniquement pour les ekMaster)
@@ -579,7 +587,7 @@ Conversation.prototype.flush = function(funClickOuvrirConv)
                   var h = element.height()
                   var offset = element.offset()
                   var outils = $("#outilsBan").css("top", offset.top - 2).css("left", offset.left - 2).height(h < 16 ? 16 : h).width(element.width() + 16 * 3 + 4 + 64).show()
-                  $("img", outils).unbind()
+                  $("img", outils).unbind("click")
                   $("#slap", outils).click(
                      function(e)
                      {
@@ -943,7 +951,7 @@ Messages.prototype.rafraichirMessages = function(vider)
          {
             case "new_troll" :
                thisMessages.trollIdCourant = data["troll_id"]
-               $("#trollCourant .troll").html(thisMessages.formateur.traitementComplet(data["content"])).unbind().click(
+               $("#trollCourant .troll").html(thisMessages.formateur.traitementComplet(data["content"])).unbind("click").click(
                   function()
                   {
                      thisMessages.ouvrirConversation(data["message_id"])
index b6920d2..5c78846 100755 (executable)
@@ -51,6 +51,8 @@ PageProfile.prototype.chargerProfile = function()
    $("form#profile input.login").val(this.client.login)\r
    $("form#profile input.pseudo").val(this.client.pseudo)\r
    $("form#profile input.email").val(this.client.email)
+   $("form#profile input#viewTooltips").attr("checked", this.client.viewTooltips)
+   $("form#profile input#viewTimes").attr("checked", this.client.viewTimes)
    
    $("form#profile select#affichagePseudo option").removeAttr("selected")
    $("form#profile select#affichagePseudo option[value=" + this.client.nickFormat + "]").attr("selected", "selected")
@@ -62,6 +64,8 @@ PageProfile.prototype.chargerProfile = function()
          thisPage.client.pseudo = thisPage.formateur.filtrerInputPseudo($("form#profile input.pseudo").val())\r
          thisPage.client.email = $("form#profile input.email").val()
          thisPage.client.nickFormat = $("form#profile select#affichagePseudo option:selected").attr("value") 
+         thisPage.client.viewTooltips = $("form#profile input#viewTooltips").attr("checked")
+         thisPage.client.viewTimes = $("form#profile input#viewTimes").attr("checked")
          \r
          var password = $("form#profile input.password").val()\r
          var passwordRe = $("form#profile input.passwordRe").val()  \r
@@ -78,10 +82,7 @@ PageProfile.prototype.chargerProfile = function()
          if(!thisPage.client.flush())\r
             thisPage.util.messageDialogue("Impossible de mettre à jour votre profile, causes inconnues", messageType.erreur)\r
          else
-         {
             thisPage.util.messageDialogue("Votre profile a été mis à jour")\r
-            //thisPage.pages.afficherPage("minichat")         
-         }\r
       }\r
    )
 }
@@ -138,10 +139,17 @@ return '\
     </select>\
    </td>\
   </tr>\
-  <tr>' : '') + '\
   <tr>\
-  <td></td>\
-  <td><button>Valider</button>\
+   <td>Afficher les infos bulles</td>\
+   <td><input type="checkbox" id="viewTooltips" /></td>\
+  </tr>\
+  <tr>\
+   <td>Afficher les dates</td>\
+   <td><input type="checkbox" id="viewTimes" /></td>\
+  </tr>' : '') + '\
+  <tr>\
+   <td></td>\
+   <td><button>Valider</button>\
   </tr>\
  </table>\
 </form>' 
index 91d6f67..13acf96 100755 (executable)
@@ -33,7 +33,7 @@
    % users :
    nouveau_user/2,
    nouveau_user/3,
-   set_profile/9,
+   set_profile/11,
    update_date_derniere_connexion/1,
    update_ip/2,
    update_pseudo_user/2,
@@ -184,12 +184,12 @@ nouveau_user(Login, Password, Cookie) ->
 
 
 % Mise à par Cookie les autres peuvent être undefined ce qui veut dire qu'ils ne seront pas modifié.
-set_profile(Cookie, Login, Password, Pseudo, Email, Css, Nick_format, Page_principale, Conversations) ->
+set_profile(Cookie, Login, Password, Pseudo, Email, Css, Nick_format, View_times, View_tooltips, Page_principale, Conversations) ->
    if Nick_format =:= nick; Nick_format =:= login; Nick_format =:= nick_login ->
          resultat_transaction(mnesia:transaction(
             fun() ->
                case user_by_cookie(Cookie) of
-                  {ok, User} ->               
+                  {ok, User} ->
                      case user_by_login(Login) of
                         {ok, U} when Login =/= [], U#user.id =/= User#user.id ->
                            login_deja_pris;
@@ -203,6 +203,8 @@ set_profile(Cookie, Login, Password, Pseudo, Email, Css, Nick_format, Page_princ
                               email = if is_list(Email) -> Email; true -> User#user.email end,
                               css = if is_list(Css) -> Css; true -> User#user.css end,
                               nick_format = Nick_format,
+                              view_times = View_times,
+                              view_tooltips = View_tooltips,
                               page_principale = if is_integer(Page_principale), Page_principale > 0 -> Page_principale; true -> User#user.page_principale end,
                               conversations = if is_list(Conversations) -> Conversations; true -> User#user.conversations end
                            },
index 58a8df9..faf877d 100755 (executable)
@@ -111,6 +111,8 @@ profile(
       {email, Email},
       {css, Css},
       {nick_format, Nick_format_str},
+      {view_times, View_times},
+      {view_tooltips, View_tooltips},
       {main_page, Main_page},
       {conversations, {array, Conversations_json}}
    ]
@@ -128,7 +130,19 @@ profile(
       [],
       Conversations_json
    ),
-   case euphorik_bd:set_profile(Cookie, Login, Password, Pseudo, Email, Css, list_to_atom(Nick_format_str), Main_page, Conversations) of
+   %  TODO : pas très beau, mieux vaut construire un #user
+   case euphorik_bd:set_profile(
+         Cookie,
+         Login,
+         Password,
+         Pseudo,
+         Email,
+         Css,
+         list_to_atom(Nick_format_str),
+         View_times,
+         View_tooltips,
+         Main_page,
+         Conversations) of
       ok ->
          json_reponse_ok();
       login_deja_pris ->
@@ -662,6 +676,8 @@ json_reponse_login_ok(User) ->
          {email, User#user.email},
          {css, User#user.css},
          {nick_format, atom_to_list(User#user.nick_format)},
+         {view_times, User#user.view_times},
+         {view_tooltips, User#user.view_tooltips},
          {main_page, User#user.page_principale},
          {conversations, 
             {array,
index ff1ca40..4ef15a4 100755 (executable)
@@ -59,6 +59,8 @@
       date_derniere_connexion, % erlang:now(), est mis à jour lors de n'importe quelle activitée (envoie de message par exemple)\r
       css = [], % string()
       nick_format = nick, %atom(), peut valoir 'nick', 'login' ou 'nick_login'
+      view_times = true,
+      view_tooltips = true,
       indice_flood = 0, % integer() est incrémenté lorsque l'utilisateur envoie trop rapidement des messages.
       page_principale = 1, % la page de la conversation principale
       conversations = [], % [{integer(), integer()}], la liste des messages correspondant au conversation ainsi que la page affichée