(no commit message)
[euphorik.git] / js / pageMinichat.js
index 53f4ab2..03024bc 100755 (executable)
@@ -301,20 +301,24 @@ Message.prototype.setRepondA = function(repondAJSON)
 /**
   * Renvoie les messages faisant partie d'une conversation.
   * @param messages l'ensemble des messages de la conversation
-  * @return les id des messages qui ont été mis en evidence sous la forme d'un hash (object) {id => bool}
+  * @return les id des messages qui ont été mis en evidence sous la forme
+  *   d'un hash (object) {id => 0 | 1 | 2 | 3}. 1 : proprietaire, 2 : reponse directe, 3 : message repondu
   */
 Message.prototype.getConversation = function(messages)
 {
+   var thisMessage = this
+
    // les messages faisant partie de la conversation
    var messagesEnEvidence = {}
    
-   messagesEnEvidence[this.id] = true
+   messagesEnEvidence[this.id] = 1
    
    // recherche les réponses (O(n))
    for (var i = 0; i < messages.messages.length; i++)
       if (messages.messages[i].repondA.hasOwnProperty(this.id))
-         messagesEnEvidence[messages.messages[i].id] = true
+         messagesEnEvidence[messages.messages[i].id] = messages.messages[i].auteurId == this.auteurId ? 1 : 2
    
+   var premierNiveau = true
    var f = function(tabIds)
    {
       for(var id in tabIds)
@@ -322,7 +326,8 @@ Message.prototype.getConversation = function(messages)
          var message = messages.messagesParId[id]
          if (message != undefined)
          {         
-            messagesEnEvidence[id] = true
+            messagesEnEvidence[id] = message.auteurId == thisMessage.auteurId ? 1 : ( premierNiveau ? 3 : 0 )
+            premierNiveau = false
             f (message.repondA)
          }
       }
@@ -345,7 +350,6 @@ function Conversation(num, util, formateur, client)
    
    this.num = num // peut changer au cours de la vie de la conversation
    this.id = Math.floor(Math.random() * 1000000).toString(36)
-   this.messageOver = null // le message sur lequel se trouve le curseur
    this.util = util
    this.formateur = formateur
    this.client = client
@@ -371,15 +375,6 @@ function Conversation(num, util, formateur, client)
       this.util.infoBulle("Créer un lien vers la conversation", $("#conversations #" + this.getId() + " .lien"))
       this.util.infoBulle("Fermer la conversation", $("#conversations #" + this.getId() + " .fermer"))   
    }
-   
-   // enlève la mise en évidence pour la conversation
-   $("#conversations #" + this.getId()).hover(
-      function(){},
-      function(event)
-      {
-         thisConversation.enleverMiseEnEvidence()
-      }
-   )
 }
 
 /**
@@ -388,7 +383,33 @@ function Conversation(num, util, formateur, client)
 Conversation.prototype.enleverMiseEnEvidence = function()
 {
    $("#conversations .message").removeClass("cache")
-   this.messageOver = null
+}
+
+Conversation.prototype.colorerEntetes = function()
+{
+   var messagesReponse = ""
+   var messagesRepondu = ""
+   var messagesProprietaire = ""
+   for (var i = 0; i < this.messages.length; i++)
+   {
+      if (this.messages[i].appartientAuClient)
+         messagesProprietaire += "#mess" + this.messages[i].id.toString(36) + ","
+      else if (this.messages[i].estUneReponse)
+         messagesReponse += "#mess" + this.messages[i].id.toString(36) + ","
+      else if (this.messages[i].clientARepondu)
+         messagesRepondu += "#mess" + this.messages[i].id.toString(36) + ","
+   }
+   $(messagesReponse).addClass("reponse")
+   $(messagesRepondu).addClass("repondu")
+   $(messagesProprietaire).addClass("proprietaire")
+}
+
+Conversation.prototype.decolorerEntetes = function()
+{
+   $("#" + this.getId() + " .message")
+      .removeClass("reponse")
+      .removeClass("repondu")
+      .removeClass("proprietaire")   
 }
 
 /**
@@ -625,25 +646,21 @@ Conversation.prototype.flush = function(funClickOuvrirConv)
                   $("input.message").val(tag + " " + valCourant)
                thisConversation.util.setCaretToEnd($("form input.message")[0])
             }
-         )
-         
-         // Q : pourquoi pas un .hover ?
-         // R : simplement pour éviter que lorsqu'un message arrive cela n'affecte la conversation actuellement mise en évidence (uniquement pour Firefox)
-         $(".entete", this).mousemove(
-            function(e)
+         )\r
+         \r
+         // mise en évidence de la conversation
+         $(".entete", this).hover(\r
+            function()\r
             {
-               if (this !== thisConversation.messageOver)
-               {
-                  thisConversation.afficherConversation(idMess)
-                  thisConversation.messageOver = this
-               }
-            }
-         ).hover(
-            function(){},
+               thisConversation.decolorerEntetes()\r
+               thisConversation.afficherConversation(idMess)\r
+            },
             // quand on sort de l'entête du message la mise en évidence est enlevée
             function()
             {
-               thisConversation.enleverMiseEnEvidence()            
+               thisConversation.enleverMiseEnEvidence()
+               thisConversation.decolorerEntetes()
+               thisConversation.colorerEntetes()
             }
          )
       }
@@ -676,10 +693,25 @@ Conversation.prototype.afficherConversation = function(id)
       function()
       {
          var jq = $(this)
-         if (!mess.hasOwnProperty(parseInt(jq.attr("id").substr(4), 36)))
+         var statut = mess[parseInt(jq.attr("id").substr(4), 36)]
+         if (statut == undefined)
             jq.addClass("cache")
-         else         
+         else
+         {
             jq.removeClass("cache")
+            switch (statut)
+            {
+               case 1 :
+                  jq.addClass("proprietaire")
+                  break;
+               case 2 :
+                  jq.addClass("reponse")
+                  break;
+               case 3 :
+                  jq.addClass("repondu")
+                  break;
+            }
+         }
       }
    )
 }
@@ -936,18 +968,10 @@ Messages.prototype.rafraichirMessages = function(vider)
    
    this.pageEvent.waitEvent(
       function() { return thisMessages.getJSONrafraichirMessages() },
-      function(data)
-      {   
-         if (vider)
-         {
-            thisMessages.viderMessages()
-            vider = false
-         }
-               
-         // en fonction du message
-         switch(data["reply"])
-         {
-            case "new_troll" :
+      {
+         "new_troll" :
+            function(data)
+            {   
                thisMessages.trollIdCourant = data["troll_id"]
                $("#trollCourant .troll").html(thisMessages.formateur.traitementComplet(data["content"])).unbind("click").click(
                   function()
@@ -957,9 +981,15 @@ Messages.prototype.rafraichirMessages = function(vider)
                )
                
                $("#trollCourant .troll a[@rel*=lightbox]").lightBox()
-               break
-               
-            case "new_messages" :   
+            },
+         "new_messages" :   
+            function(data)
+            {
+               if (vider)
+               {
+                  thisMessages.viderMessages()
+                  vider = false
+               }
                // ajoute les messages reçus à leur conversation respective
                for (var numConv = 0; numConv < data["conversations"].length; numConv++)
                {
@@ -969,8 +999,7 @@ Messages.prototype.rafraichirMessages = function(vider)
                      thisMessages.client.supprimerConversation(numConv - 1) 
                   }
                }
-               break
-         }
+            }
       }
    )
 }