FIX#64
[euphorik.git] / js / pageMinichat / conversation.js
index 77ee3a2..f821f9c 100644 (file)
@@ -56,22 +56,52 @@ 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
       '</td>';\r
     \r
    $("#conversations tr").append(XHTML);\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
+   // 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 .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(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
+/*\r
+euphorik.Conversation.prototype.getMessageReduit = function() {\r
+   return '' +\r
+      '<svg:svg version="1.1" baseProfile="full" width="100px" height="200px">' +\r
+         '<svg:image x="10" y="10" height="10" width="10" class="fermer" />' +\r
+         '<svg:text transform="rotate(-90)" y="15" x="-200" >' +\r
+            'Blabla blablablabla bla blabla ..' +\r
+         '</svg:text>' +\r
+      '</svg:svg>';\r
+}*/\r
 \r
 /**\r
   * @racine un message représentant la racine de la conversation, vaut undefined pour la conversation générale\r
@@ -139,32 +169,6 @@ euphorik.Conversation.prototype.setPage = function(pageCourante, dernierePage) {
    $("#" + this.getId() + " .prev").css("display", dernierePage ? "none" : "inline");\r
 };\r
 \r
-/**\r
-  * Evenement déclanché lors de l'insertion du lien de la conversation dans le message courant.\r
-  */\r
-euphorik.Conversation.prototype.eventLien = function(fun) {\r
-   var thisConversation = this;\r
-   \r
-   $("#" + this.getId() + " .titre .lien").click(\r
-      function() {\r
-         fun(thisConversation.num);\r
-      }\r
-   );\r
-};\r
-\r
-/**\r
-  * Evenement déclanché lors de la fermeture de la conversation.\r
-  */\r
-euphorik.Conversation.prototype.eventFermer = function(fun) {\r
-   var thisConversation = this;\r
-   \r
-   $("#" + this.getId() + " .titre .fermer").click(\r
-      function() {\r
-         fun(thisConversation.num);\r
-      }\r
-   );\r
-};\r
-\r
 /**\r
   * @funNext appelé lorsque l'on passe à la page suivante (de 2 à 1 par exemple)\r
   * @funPrev appelé lorsque l'on passe à la page précédente (de 1 à 2 par exemple)\r
@@ -191,14 +195,25 @@ euphorik.Conversation.prototype.getId = function() {
    return "conv" + this.id;\r
 };\r
 \r
+/**\r
+  * Après avoir créé un message celui ci est ajouté à une conversation via cette méthode.\r
+  */\r
 euphorik.Conversation.prototype.ajouterMessage = function(message) {\r
    this.messages.push(message);\r
    this.messagesParId[message.id] = message;\r
    \r
-   // enlève les messages exedentaires\r
+   // enlève le message exedentaire si nécessaire\r
    if (this.messages.length > this.nbMessageMax) {\r
       delete this.messagesParId[this.messages.shift().id];\r
    }\r
+   \r
+   // met à jour le membre 'estReponduPar' des messages de la conversation\r
+   for (var i = 0; i < this.messages.length - 1; i++) {\r
+     var autreMess = this.messages[i];\r
+     if (autreMess.id in message.repondA) {\r
+        autreMess.estReponduPar[message.id] = true;\r
+     }\r
+   }\r
 };\r
 \r
 /**\r
@@ -227,7 +242,6 @@ euphorik.Conversation.prototype.flush = function() {
    var thisConversation = this;\r
    var reverse = this.client.chatOrder === "reverse";\r
 \r
-   // est-ce que le prochain message est pair ? (permet d'alterner le style des messages)\r
    var messagePair = (this.idDernierMessageAffiche === 0 ? true :\r
       ($("#" + this.getId() + " .messages div:" + (reverse ? "first" : "last")).attr("class").search("messagePair") === -1)\r
    );\r
@@ -240,8 +254,8 @@ euphorik.Conversation.prototype.flush = function() {
          messagePair = !messagePair;\r
       }\r
    });\r
-      \r
-   var DOM = $(XHTML);\r
+   \r
+   var DOM = $(XHTML);       \r
        \r
    // pour chaque nouveau message au niveau du document on lui assigne ses événements\r
    DOM.each(function() { thisConversation.attacherEventsSurMessage(this); });\r
@@ -272,49 +286,59 @@ 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
    // l'id du message\r
    var idMess = this.idMessageFromString($(element).attr("id"));\r
-\r
-   this.util.infoBulle("Extraction de la conversation à partir de ce message", $(".extraire", element));\r
-   this.util.infoBulle("Extraction de la conversation complète", $(".extraireCompletement", element));\r
+   \r
+   if (idMess in this.conversations.messagesRepond) {\r
+      $(element).addClass("repondEnEvidence");\r
+   }\r
    \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(idString.substring(1, racine.length - 1), 36));\r
+         thisConversation.conversations.ouvrirConversation(parseInt(racine.substring(1, racine.length - 1), 36));\r
          return false;\r
       }\r
    );\r
        \r
-   $(element).click(\r
-      function(event) {\r
-         if ($(event.target).is("a") || $(event.target).parents("#outilsBan").length > 0) {\r
-            return;\r
-         }\r
-         \r
-          // extraction d'une conversation\r
-         if ($(event.target).is(".extraire")) {\r
-            thisConversation.conversations.ouvrirConversation(idMess);\r
-            return;\r
-         }\r
+   $(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
-         if ($(event.target).is(".extraireCompletement")) {\r
-            thisConversation.conversations.ouvrirConversation(thisConversation.messagesParId[idMess].racineId);\r
-            return;\r
-         }\r
+      // met ou enlève la mise en evidence du message\r
+      thisConversation.conversations.toggleMessageRepond(thisConversation.messagesParId[idMess]);\r
 \r
-         // met ou enlève la mise en evidence du message\r
-         thisConversation.conversations.toggleMessageRepond(thisConversation.messagesParId[idMess]);\r
-         \r
-         // donne le focus à la ligne de saisie\r
-         $("form input.message").focus();\r
-      }\r
-   );\r
+      // 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).outerWidth() - thisConversation.util.outilsMessage.largeur\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
+      thisConversation.util.outilsMessage.largeur = thisConversation.util.outilsMessage.outerWidth();\r
+   }, function() {\r
+      thisConversation.util.outilsMessage.hide()\r
+   });\r
 \r
    // mise en évidence de la conversation\r
    $(".entete", element).hover(\r
@@ -373,7 +397,7 @@ euphorik.Conversation.prototype.attacherEventsSurMessage = function(element) {
             );\r
          },\r
          function() {\r
-            $("#outilsBan", this).hide();\r
+            thisConversation.util.outilsBan.hide();\r
          }\r
       );\r
    }\r
@@ -399,7 +423,7 @@ euphorik.Conversation.prototype.afficherConversation = function(id) {
       function() {\r
          var jq = $(this);\r
          var statut = mess[thisConversation.idMessageFromString(jq.attr("id"))];\r
-         if (!statut) {\r
+         if (statut === undefined) {\r
             jq.addClass("cache");\r
          } else {\r
             jq.removeClass("cache");\r
@@ -422,8 +446,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