ADD ajout d'une version de protocole, chaque message du client est taggé avec la...
[euphorik.git] / js / pageMinichat.js
index 29effac..2de1531 100755 (executable)
@@ -174,7 +174,7 @@ PageMinichat.prototype.getJSONMessage = function(pseudo, message)
       repondA.push(parseInt(id)) // FIXME : une propriété ne peut pas être de type int ?
       
    return {
-      "action" : "put_message",
+      "header" : { "action" : "put_message", "version" : conf.versionProtocole },
       "cookie" : this.client.cookie,
       "nick" : pseudo,
       "content" : message,
@@ -437,8 +437,8 @@ function Conversation(num, util, formateur, client)
    this.client = client
    this.idDernierMessageAffiche = 0
    
-   this.messages = new Array()
-   this.messagesParId = new Object()
+   this.messages = []
+   this.messagesParId = {}
    
    this.nbMessageMax = conf.nbMessageAffiche // Le nombre de message affiché par page
 
@@ -472,11 +472,11 @@ Conversation.prototype.colorerEntetes = function()
    for (var i = 0; i < this.messages.length; i++)
    {
       if (this.messages[i].appartientAuClient)
-         messagesProprietaire += "#" + this.messages[i].getId() + ","
+         messagesProprietaire += "#" + this.messages[i].getId(this.getId()) + ","
       else if (this.messages[i].clientARepondu)
-         messagesRepondu += "#" + this.messages[i].getId() + ","
+         messagesRepondu += "#" + this.messages[i].getId(this.getId()) + ","
       else if (this.messages[i].estUneReponse)
-         messagesReponse += "#" + this.messages[i].getId() + ","
+         messagesReponse += "#" + this.messages[i].getId(this.getId()) + ","
    }
    $(messagesReponse).addClass("reponse")
    $(messagesRepondu).addClass("repondu")
@@ -579,6 +579,11 @@ Conversation.prototype.viderMessages = function()
    $("#conversations #" + this.getId() + " .message").remove()
 }
 
+Conversation.prototype.idMessageFromString = function(idString)
+{
+   return parseInt(idString.substr(4 + this.getId().length), 36)
+}
+
 /**
   * Après l'ajout d'un ou plusieurs message cette méthode est appelée afin
   * d'afficher les messages non-affichés.
@@ -600,7 +605,7 @@ Conversation.prototype.flush = function(funClickOuvrirConv, funClickMessage)
    for (var i = 0; i < this.messages.length; i++)
       if (this.messages[i].id > this.idDernierMessageAffiche)
       {
-         XHTML += this.messages[i].XHTML(messagePair)
+         XHTML += this.messages[i].XHTML(messagePair, this.getId())
          messagePair = !messagePair
       }
    
@@ -613,7 +618,7 @@ Conversation.prototype.flush = function(funClickOuvrirConv, funClickMessage)
             {          
                // FIXME : ya pas mieux ?
                var racine = $(event.target).text()
-               funClickOuvrirConv(parseInt(racine.substring(1, racine.length - 1), 36))
+               funClickOuvrirConv(parseInt(idString.substring(1, racine.length - 1), 36))
                return false
             }
          )         
@@ -622,7 +627,7 @@ Conversation.prototype.flush = function(funClickOuvrirConv, funClickMessage)
          thisConversation.util.infoBulle("Extraction de la conversation complète", $(".extraireCompletement", this))
          
          // l'id du message
-         var idMess = parseInt($(this).attr("id").substr(4), 36)
+         var idMess = thisConversation.idMessageFromString($(this).attr("id"))
          
          $(this).click(
             function(event)
@@ -674,7 +679,7 @@ Conversation.prototype.flush = function(funClickOuvrirConv, funClickMessage)
             $(".pseudo", this).hover(
                function(e)
                {     
-                  var userId =  parseInt($(".id", this).text())
+                  var userId = parseInt($(".id", this).text())
                   var element = $(this)
                   var h = element.height()
                   var offset = element.offset()
@@ -730,6 +735,8 @@ Conversation.prototype.flush = function(funClickOuvrirConv, funClickMessage)
   */
 Conversation.prototype.afficherConversation = function(id)
 {   
+   var thisConversation = this
+    
    var message = this.messagesParId[id]
    if (message == undefined) return
       
@@ -740,7 +747,7 @@ Conversation.prototype.afficherConversation = function(id)
       function()
       {
          var jq = $(this)
-         var statut = mess[parseInt(jq.attr("id").substr(4), 36)]
+         var statut = mess[thisConversation.idMessageFromString(jq.attr("id"))]
          if (statut == undefined)
             jq.addClass("cache")
          else
@@ -822,8 +829,13 @@ Messages.prototype.toggleMessageRepond = function(mess)
   */
 Messages.prototype.enleverMessagesRepond = function()
 {
+   for (var messId in this.messagesRepond)
+      this.enleverMessageRepond(this.messagesRepond[messId])
+    
+   // on réinitialise pour être sur que tout est bien enlevé
    this.messagesRepond = {}
-   $(".message").removeClass("repondEnEvidence")
+   $("#conversations div.message").removeClass("repondEnEvidence")
+   $("form#posterMessage #repondA .messages").empty()
 }
 
 /**
@@ -833,7 +845,6 @@ Messages.prototype.enleverMessageRepond = function(mess)
 {
    $("#" + mess.getId()).removeClass("repondEnEvidence")
    $("#" + mess.getId(this.prefixIdMessage)).remove()
-   $("form#posterMessage #repondA .messages").empty()
    delete this.messagesRepond[mess.id]
    this.rafraichireNombreMessagesRepond()
 }
@@ -873,7 +884,7 @@ Messages.prototype.ajouterMessageRepond = function(mess)
 }
 
 /**
-  * Met à jour le nombre qui indique à l'utilisateur à combien de messages il répond
+  * Met à jour le nombre qui indique à l'utilisateur à combien de messages il répond.
   */
 Messages.prototype.rafraichireNombreMessagesRepond = function()
 {
@@ -888,6 +899,18 @@ Messages.prototype.rafraichireNombreMessagesRepond = function()
    else boite.hide()
 }
 
+/**
+  * Affiche les messages auquel l'utilisateur souhaite répondre au sein des messages des conversations.
+  * Utilisé lorsqu'une conversation est extraite.
+  */
+Messages.prototype.afficherMessagesRepondConversations = function()
+{
+   var expr = ""
+   for(var messId in this.messagesRepond)
+      expr += "#" + this.messagesRepond[messId].getId() + ","
+   $(expr).addClass("repondEnEvidence")
+}
+
 /**
   * Crée un message JSON contenant le message demandant un rafraichissement.
   */
@@ -1092,6 +1115,8 @@ Messages.prototype.flush = function(numConv)
       {
          // met ou enlève la mise en evidence du message
          thisMessages.toggleMessageRepond(Mess)
+         // donne le focus à la ligne de saisie
+         $("form input.message").focus()
       }
    )
 }
@@ -1146,10 +1171,7 @@ Messages.prototype.rafraichirMessages = function(vider)
             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++)
                {
@@ -1159,6 +1181,9 @@ Messages.prototype.rafraichirMessages = function(vider)
                      thisMessages.client.supprimerConversation(numConv - 1) 
                   }
                }
+               if (vider)
+                  thisMessages.afficherMessagesRepondConversations()
+               vider = false
             }
       }
    )