REPORT de la branche 1.1 : 477->494
[euphorik.git] / js / pageMinichat / conversation.js
index 70be515..60b22a6 100644 (file)
@@ -56,7 +56,7 @@ euphorik.Conversation = function(conversations, num) {
          '<div class="titre">' +\r
             (reverse ? messageRacineXHTML : "") +\r
             '<div class="nav">' +\r
-               (this.num === 0 ? '' : '<div class="fermer"></div><div class="lien"></div>') + //</div><div class="reduire">\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
@@ -70,13 +70,13 @@ euphorik.Conversation = function(conversations, num) {
    // 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 .lien"));\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
@@ -244,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
@@ -274,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
@@ -286,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
@@ -298,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
@@ -325,11 +347,17 @@ euphorik.Conversation.prototype.attacherEventsSurMessage = function(element) {
       // donne le focus à la ligne de saisie\r
       $("form input.message").focus();\r
    }).hover(function() { // affiche les outils liées au message\r
-      var top = $(this).offset().top\r
-      var left = $(this).offset().left + $(this).width() - thisConversation.util.outilsMessage.largeur\r
-      thisConversation.util.outilsMessage.css("top", top + 1).css("left", left).prependTo(this).show();\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
+      thisConversation.util.outilsMessage.hide();\r
    });\r
 \r
    // mise en évidence de la conversation\r