REPORT de la branche 1.1 : 477->494
[euphorik.git] / js / pageMinichat / conversation.js
index 70f8d2b..60b22a6 100644 (file)
@@ -56,41 +56,43 @@ euphorik.Conversation = function(conversations, num) {
          '<div class="titre">' +\r
             (reverse ? messageRacineXHTML : "") +\r
             '<div class="nav">' +\r
-               (num === 0 ? '' : '<div class="fermer"></div><div class="lien"></div><div class="reduire"></div>') +\r
+               (this.num === 0 ? '' : '<div class="fermer"></div><div class="creerLien"></div>') + //</div><div class="reduire">\r
                '<span class="next">&lt;</span><span class="numPage">1</span><span class="prev">&gt;</span>' +\r
             '</div>' +\r
             (reverse ? "" : messageRacineXHTML) +\r
          '</div>' +\r
          (reverse ? "" : messagesXHTML) +\r
-         '<div class="messageReduit" style="height:200px; width:50px"></div>' +\r
+         //'<div class="messageReduit" style="height:200px; width:50px"></div>' +\r
       '</td>';\r
     \r
    $("#conversations tr").append(XHTML);\r
    \r
+   // les infos bulles\r
+   this.util.infoBulle("Aller à la première page", $("#" + this.getId() + " .titre .numPage"), euphorik.Util.positionBulleType.haut);\r
+   if (this.num !== 0) {\r
+      this.util.infoBulle("Créer un lien vers la conversation", $("#" + this.getId() + " .titre .creerLien"));\r
+      this.util.infoBulle("Fermer la conversation", $("#" + this.getId() + " .titre .fermer"));\r
+   }\r
+   \r
     // les différents événements liés à la conversation\r
    var thisConversation = this;   \r
-   $("#" + this.getId() + " .titre .lien").click(function() {\r
+   $("#" + this.getId() + " .titre .creerLien").click(function() {\r
         thisConversation.util.replaceSelection(\r
            $("form#posterMessage input.message")[0],\r
            "{" + thisConversation.client.conversations[thisConversation.num - 1].root.toString(36) + "}"\r
         );\r
    });   \r
    $("#" + this.getId() + " .titre .fermer").click(function() {\r
-      thisConversation.conversations.supprimerConversation(num);\r
+      thisConversation.conversations.supprimerConversation(thisConversation.num);\r
    });\r
+   /*\r
    $("#" + this.getId() + " .titre .reduire").click(function() {\r
       $("#" + thisConversation.getId() + " .titre, #" + thisConversation.getId() + " .messages").hide()\r
       var e = $("#" + thisConversation.getId() +  " .messageReduit");\r
       e.get()[0].innerHTML = thisConversation.getMessageReduit()\r
-   });\r
-\r
-   this.util.infoBulle("Aller à la première page", $("#" + this.getId() + " .numPage"), euphorik.Util.positionBulleType.haut);\r
-   if (num !== 0) {\r
-      this.util.infoBulle("Créer un lien vers la conversation", $("#" + this.getId() + " .lien"));\r
-      this.util.infoBulle("Fermer la conversation", $("#" + this.getId() + " .fermer"));\r
-   }\r
+   });*/\r
 };\r
-\r
+/*\r
 euphorik.Conversation.prototype.getMessageReduit = function() {\r
    return '' +\r
       '<svg:svg version="1.1" baseProfile="full" width="100px" height="200px">' +\r
@@ -99,7 +101,7 @@ euphorik.Conversation.prototype.getMessageReduit = function() {
             'Blabla blablablabla bla blabla ..' +\r
          '</svg:text>' +\r
       '</svg:svg>';\r
-}\r
+}*/\r
 \r
 /**\r
   * @racine un message représentant la racine de la conversation, vaut undefined pour la conversation générale\r
@@ -242,15 +244,22 @@ euphorik.Conversation.prototype.flush = function() {
 \r
    var messagePair = (this.idDernierMessageAffiche === 0 ? true :\r
       ($("#" + this.getId() + " .messages div:" + (reverse ? "first" : "last")).attr("class").search("messagePair") === -1)\r
-   );\r
+   );
+   
+   // permet d'itérer sur les nouveaux messages à afficher
+   var pourChaqueNouveauMessage = function(f) {
+      thisConversation.messages.each(function(i, mess) {
+         if (mess.id > thisConversation.idDernierMessageAffiche) {
+            f(mess);
+         }
+      });
+   };\r
       \r
    // construction de l'XHTML des messages\r
-   var XHTML = "";\r
-   this.messages.each(function(i, mess) {\r
-      if (mess.id > thisConversation.idDernierMessageAffiche) {\r
-         XHTML += mess.XHTML(messagePair, thisConversation.getId());\r
-         messagePair = !messagePair;\r
-      }\r
+   var XHTML = "";
+   pourChaqueNouveauMessage(function(mess) {\r
+      XHTML += mess.XHTML(messagePair, thisConversation.getId());\r
+      messagePair = !messagePair;\r
    });\r
    \r
    var DOM = $(XHTML);       \r
@@ -272,11 +281,25 @@ euphorik.Conversation.prototype.flush = function() {
       } else {\r
          $("#" + this.getId() + " .messages .message").slice(0, nbMessagesAffiche - this.nbMessageMax).remove();\r
       }\r
-   }\r
+   }
+  
+   // met à jour la classe des messages auquels repondent les nouveaux messages
+   // dans le cas où ce message appartient au client courant (c'est un peu de la triche) TODO : ya mieux ?    
+   pourChaqueNouveauMessage(function(mess) {
+      if (mess.auteurId === thisConversation.client.id) {
+         objectEach(mess.repondA, function(messId) {
+            var mess = thisConversation.messagesParId[messId];
+            if (mess) {
+               mess.clientARepondu = true;
+               $("#conversations #" + mess.getId(thisConversation.getId())).addClass("repondu");
+            }
+         });
+      }
+   });\r
    \r
    if (this.messages.length > 0) {\r
       this.idDernierMessageAffiche = this.messages[this.messages.length-1].id;\r
-   }\r
+   }
   \r
    // met à jour la racine de la conversation\r
    this.majRacine();\r
@@ -284,6 +307,7 @@ euphorik.Conversation.prototype.flush = function() {
 \r
 /**\r
   * Attache des événements à un message donné.\r
+  * Utilisé lorsqu'un message est ajouté au document HTML.\r
   * @element le message du DOM\r
   */\r
 euphorik.Conversation.prototype.attacherEventsSurMessage = function(element) {\r
@@ -296,7 +320,7 @@ euphorik.Conversation.prototype.attacherEventsSurMessage = function(element) {
    \r
    var thisConversation = this;\r
    $(".lienConv", element).click(\r
-      function(event) {          \r
+      function(event) {\r
          // FIXME : ya pas mieux ?\r
          var racine = $(event.target).text();\r
          thisConversation.conversations.ouvrirConversation(parseInt(racine.substring(1, racine.length - 1), 36));\r
@@ -307,30 +331,32 @@ euphorik.Conversation.prototype.attacherEventsSurMessage = function(element) {
    $(element).click(function(event) {\r
       if ($(event.target).is("a") || $(event.target).parents("#outilsBan").length > 0) {\r
          return;\r
+      } else if ($(event.target).is(".extraire")) {\r
+         thisConversation.util.outilsMessage.hide();\r
+         thisConversation.conversations.ouvrirConversation(idMess);\r
+         return;\r
+      } else if ($(event.target).is(".extraireCompletement")) {\r
+         thisConversation.util.outilsMessage.hide();\r
+         thisConversation.conversations.ouvrirConversation(thisConversation.messagesParId[idMess].racineId);\r
+         return;\r
       }\r
 \r
       // met ou enlève la mise en evidence du message\r
       thisConversation.conversations.toggleMessageRepond(thisConversation.messagesParId[idMess]);\r
-         \r
+\r
       // donne le focus à la ligne de saisie\r
       $("form input.message").focus();\r
-   }).hover(function(event) { // affiche les outils liées au message\r
-      var top = $(this).offset().top\r
-      var left = $(this).offset().left + $(this).width() - thisConversation.util.outilsMessage.width()\r
-      thisConversation.util.outilsMessage.css("top", top + 1).css("left", left).prependTo(this).show();\r
-      //TODO\r
-      //\r
-      // extraction d'une conversation\r
-      /*if ($(event.target).is(".extraire")) {\r
-         thisConversation.conversations.ouvrirConversation(idMess);\r
-         return;\r
-      }\r
-\r
-      if ($(event.target).is(".extraireCompletement")) {\r
-         thisConversation.conversations.ouvrirConversation(thisConversation.messagesParId[idMess].racineId);\r
-         return;\r
-      }*/\r
-   }, function(event) {\r
+   }).hover(function() { // affiche les outils liées au message\r
+      var top = $(this).offset().top;\r
+      var left = $(this).offset().left + $(this).outerWidth() - thisConversation.util.outilsMessage.outerWidth();\r
+      $(".extraire", thisConversation.util.outilsMessage).unbind();\r
+      $(".extraireCompletement", thisConversation.util.outilsMessage).unbind();\r
+      // TODO : ces deux appels devraient se trouver dans "PageMinichat" lors de la création de thisConversation.util\r
+      // malheureusement lors de la modification du DOM (suppression des conversations) les événements liés sont supprimés\r
+      thisConversation.util.infoBulle("Extraction de la conversation à partir de ce message", $(".extraire", thisConversation.util.outilsMessage));\r
+      thisConversation.util.infoBulle("Extraction de la conversation complète", $(".extraireCompletement", thisConversation.util.outilsMessage));\r
+      thisConversation.util.outilsMessage.css("top", top).css("left", left).prependTo(this).show();\r
+   }, function() {\r
       thisConversation.util.outilsMessage.hide();\r
    });\r
 \r
@@ -440,8 +466,7 @@ euphorik.Conversation.prototype.afficherConversation = function(id) {
 };\r
 \r
 /**\r
-  * Supprime une conversation.\r
-  * Ne l'enlève pas du DOM.\r
+  * Supprime la conversation du DOM.\r
   */\r
 euphorik.Conversation.prototype.supprimer = function() {\r
    $("#" + this.getId()).remove();\r