FIX #74
[euphorik.git] / js / pageMinichat / conversations.js
index 2b78fc5..94236c1 100644 (file)
 /**\r
   * Représente l'ensemble des conversations affichés.\r
   */\r
-euphorik.Conversations = function(client, formateur, util) {\r
+euphorik.Conversations = function(client, formateur, util, fragment) {\r
    this.client = client;\r
    this.formateur = formateur;\r
    this.util = util;\r
+   this.fragment = fragment;\r
    \r
    // un ensemble des messages (id) auquel l'utilisateur répond (vider après l'envoie du message courant)\r
    this.messagesRepond = {};\r
@@ -35,11 +36,11 @@ euphorik.Conversations = function(client, formateur, util) {
    \r
    this.trollIdCourant = 0;\r
    \r
-   this.pageEvent = new euphorik.PageEvent("chat", this.util);\r
+   this.comet = new Comet("chat", euphorik.conf.versionProtocole);\r
 };\r
 \r
-// les messages insérés dans le document XHTML on leur id prefixé par cette valeur\r
-// cela permet de les distinguer des "vrais" messages\r
+// les messages auquels l'utilisateur répond et qui sont insérés dans le document XHTML\r
+// ont leur id prefixé par cette valeur, cela permet de les distinguer des "vrais" messages\r
 euphorik.Conversations.prototype.prefixIdMessage = "rep";\r
 \r
 /**\r
@@ -57,12 +58,24 @@ euphorik.Conversations.prototype.toggleMessageRepond = function(mess) {
 };\r
 \r
 /**\r
-  * Enlève tous les messages auquel l'utilisateur souhaite répond.\r
+  * Met à jour le fragment de l'url renseignant sur les conversations ouvertes.\r
+  */\r
+euphorik.Conversations.prototype.mettreAJourFragment = function() {\r
+   conv = [];\r
+   for(var i = 1; i < this.conversations.length; i++) {\r
+       conv.push(this.conversations[i].racine.id);\r
+   }\r
+   this.fragment.setVal("conv", conv);\r
+   this.fragment.write();\r
+};\r
+\r
+/**\r
+  * Enlève tous les messages auquel l'utilisateur souhaite répondre.\r
   */\r
 euphorik.Conversations.prototype.enleverMessagesRepond = function() {\r
    var thisConversations = this;\r
    \r
-   objectEach(function(messId, mess) {\r
+   objectEach(this.messagesRepond, function(messId, mess) {\r
       thisConversations.enleverMessageRepond(mess);\r
    });\r
     \r
@@ -86,19 +99,19 @@ euphorik.Conversations.prototype.enleverMessageRepond = function(mess) {
   * Définit un message comme y répondant.\r
   */\r
 euphorik.Conversations.prototype.ajouterMessageRepond = function(mess) {\r
-   var thisMessages = this;\r
+   var thisConversations = this;\r
     \r
    // est-ce que le message fait partie de la même conversation que les autres messages ?\r
    // TODO : solution plus élégante pour prendre un mess parmis messagesRepond !?\r
    var mess2;\r
    for (mess2 in this.messagesRepond) {\r
       if (this.messagesRepond.hasOwnProperty(mess2)) {\r
+         mess2 = this.messagesRepond[mess2];\r
          break;\r
       }\r
    }\r
-   mess2 = this.messagesRepond[mess2];\r
    \r
-   if (!mess2 && mess2.racineId !== mess.racineId) {\r
+   if (mess2 && mess2.racineId !== mess.racineId) {\r
       this.util.messageDialogue("Impossible de répondre à deux messages ne faisant pas partie de la même conversation");\r
       return;\r
    }\r
@@ -113,7 +126,7 @@ euphorik.Conversations.prototype.ajouterMessageRepond = function(mess) {
    $("#" + mess.getId(this.prefixIdMessage)).click(\r
       function() {\r
          $(this).fadeOut("normal", function() {\r
-            thisMessages.enleverMessageRepond(mess);\r
+            thisConversations.enleverMessageRepond(mess);\r
             $("form#posterMessage #repondA .messages").hide();\r
          });\r
       }\r
@@ -156,7 +169,7 @@ euphorik.Conversations.prototype.rafraichireNombreMessagesRepond = function() {
   */\r
 euphorik.Conversations.prototype.afficherMessagesRepondConversations = function() {\r
    var expr = "";\r
-   objectEach(function(messId, mess) {\r
+   objectEach(this.messagesRepond, function(messId, mess) {\r
       expr += "#" + mess.getId() + ",";\r
    });\r
    $(expr).addClass("repondEnEvidence");\r
@@ -182,13 +195,14 @@ euphorik.Conversations.prototype.getJSONrafraichirMessages = function() {
 };\r
 \r
 euphorik.Conversations.prototype.getJSONConversations = function() {\r
+   var thisConversations = this;\r
    var clientConv = [];\r
    \r
    this.client.conversations.each(function(i, conv) {\r
       clientConv.push({\r
          root : conv.root,\r
          page : conv.page,\r
-         last_message_id : this.conversations[i + 1] ? this.conversations[i + 1].idDernierMessageAffiche : 0\r
+         last_message_id : thisConversations.conversations[i + 1] ? thisConversations.conversations[i + 1].idDernierMessageAffiche : 0\r
       });\r
    });\r
    return clientConv;\r
@@ -204,11 +218,13 @@ euphorik.Conversations.prototype.ajouterMessages = function(elements, numConvers
    if (!elements.messages.length) {\r
       return this.conversations[numConversation] !== undefined;\r
    }\r
-\r
+   \r
    for (var i = 0; i < elements.messages.length; i++) {\r
-      // si une nouvelle conversation a été créée alors on lui donne la racine\r
       if (this.ajouterMessage(elements.messages[i], numConversation)) {\r
+         // si une nouvelle conversation a été créée alors on lui donne la racine\r
+         // TODO : ce block ne devrait pas se trouver ici mais dans "nouvelleConversation"\r
          this.conversations[numConversation].setRacine(elements.first);\r
+         this.mettreAJourFragment();\r
       }\r
    }\r
          \r
@@ -230,10 +246,7 @@ euphorik.Conversations.prototype.ajouterMessages = function(elements, numConvers
   * @param numConversation le numéro de la conversation, 0 = principale\r
   * @return true si une nouvelle conversation a été créée sinon false\r
   */\r
-euphorik.Conversations.prototype.ajouterMessage = function(element, numConversation) {\r
-   var thisMessages = this;\r
-\r
-   // pas d'utilisation de jquery pour des raisons de performance      \r
+euphorik.Conversations.prototype.ajouterMessage = function(element, numConversation) {   \r
    var message = \r
       new euphorik.Message(\r
          this.client,\r
@@ -245,50 +258,30 @@ euphorik.Conversations.prototype.ajouterMessage = function(element, numConversat
    \r
    if (!this.conversations[numConversation]) {\r
       nouvelleConversation = true;\r
-      this.nouvelleConversation(\r
-         numConversation,\r
-         function(num) { // fermeture de la conversation\r
-            thisMessages.supprimerConversation(num);\r
-         },\r
-         function(num) { // insertion du lien vers la conversation\r
-            thisPage.util.replaceSelection(\r
-               $("form#posterMessage input.message")[0],\r
-               "{" + thisMessages.client.conversations[num-1].root.toString(36) + "}"\r
-            );\r
-         }\r
-      );\r
+      this.nouvelleConversation(numConversation);\r
    }\r
 \r
    this.conversations[numConversation].ajouterMessage(message);\r
    return nouvelleConversation;\r
 };\r
 \r
-euphorik.Conversations.prototype.nouvelleConversation = function(num, funFermer, funLien)\r
-{\r
-   var thisMessages = this;\r
+euphorik.Conversations.prototype.nouvelleConversation = function(num) {\r
+   var thisConversations = this;\r
 \r
    this.conversations[num] = new euphorik.Conversation(this, num);\r
-   \r
-   if (funFermer) {\r
-      this.conversations[num].eventFermer(funFermer);\r
-   }\r
-   \r
-   if (funLien) {\r
-      this.conversations[num].eventLien(funLien);\r
-   }\r
-\r
+      \r
    this.conversations[num].setFunPage(\r
       function(num) { // page suivante\r
-         thisMessages.client.pageSuivante(num - 1);\r
-         thisMessages.rafraichirMessages(true);\r
+         thisConversations.client.pageSuivante(num - 1);\r
+         thisConversations.rafraichirMessages(true);\r
       },\r
       function(num) { // page précédente\r
-         thisMessages.client.pagePrecedente(num - 1);\r
-         thisMessages.rafraichirMessages(true);\r
+         thisConversations.client.pagePrecedente(num - 1);\r
+         thisConversations.rafraichirMessages(true);\r
       },\r
       function(num) { // retour à la page une\r
-         if (thisMessages.client.goPremierePage(num - 1)) {\r
-            thisMessages.rafraichirMessages(true);\r
+         if (thisConversations.client.goPremierePage(num - 1)) {\r
+            thisConversations.rafraichirMessages(true);\r
          }\r
       }\r
    );\r
@@ -305,7 +298,7 @@ euphorik.Conversations.prototype.supprimerConversation = function(num) {
    }\r
    this.conversations[num].supprimer();\r
    \r
-   // décalage TODO : supprimer le dernier élément \r
+   // les numéros sont réassigné\r
    for (var i = num; i < this.conversations.length - 1; i++) {\r
       this.conversations[i] = this.conversations[i+1];\r
       this.conversations[i].num -= 1;\r
@@ -316,6 +309,7 @@ euphorik.Conversations.prototype.supprimerConversation = function(num) {
    this.client.supprimerConversation(num - 1);\r
       \r
    this.rafraichirMessages(true);\r
+   this.mettreAJourFragment();\r
 };\r
 \r
 /**\r
@@ -368,7 +362,7 @@ euphorik.Conversations.prototype.viderMessages = function() {
   * @param vider vide tous les messages avant d'afficher les nouveaux\r
   */\r
 euphorik.Conversations.prototype.rafraichirMessages = function(vider) {\r
-   var thisMessages = this;\r
+   var thisConversations = this;\r
    \r
    vider = vider || false;\r
    \r
@@ -378,15 +372,15 @@ euphorik.Conversations.prototype.rafraichirMessages = function(vider) {
       });\r
    }\r
    \r
-   this.pageEvent.waitEvent(\r
-      function() { return thisMessages.getJSONrafraichirMessages(); },\r
+   this.comet.waitEvent(\r
+      function() { return thisConversations.getJSONrafraichirMessages(); },\r
       {\r
          "new_troll" :\r
-            function(data) {   \r
-               thisMessages.trollIdCourant = data.troll_id;\r
-               $("#trollCourant .troll").html(thisMessages.formateur.traitementComplet(data.content)).unbind("click").click(\r
+            function(data) {\r
+               thisConversations.trollIdCourant = data.troll_id;\r
+               $("#trollCourant .troll").html(thisConversations.formateur.traitementComplet(data.content)).unbind("click").click(\r
                   function() {\r
-                     thisMessages.ouvrirConversation(data.message_id);\r
+                     thisConversations.ouvrirConversation(data.message_id);\r
                   }\r
                );\r
                \r
@@ -395,19 +389,19 @@ euphorik.Conversations.prototype.rafraichirMessages = function(vider) {
          "new_messages" :\r
             function(data) {\r
                if (vider) {\r
-                  thisMessages.viderMessages();\r
+                  thisConversations.viderMessages();\r
                }\r
                \r
                // ajoute les messages reçus à leur conversation respective\r
                data.conversations.each(function(numConv, conv) {\r
-                  if (!thisMessages.ajouterMessages(conv, numConv)) {\r
-                     thisMessages.util.messageDialogue("La conversation {" + thisMessages.client.conversations[numConv - 1].root.toString(36) + "} n'existe pas");\r
-                     thisMessages.client.supprimerConversation(numConv - 1);\r
+                  if (!thisConversations.ajouterMessages(conv, numConv)) {\r
+                     thisConversations.util.messageDialogue("La conversation {" + thisConversations.client.conversations[numConv - 1].root.toString(36) + "} n'existe pas");\r
+                     thisConversations.client.supprimerConversation(numConv - 1);\r
                   }\r
                });\r
                \r
                if (vider) {\r
-                  thisMessages.afficherMessagesRepondConversations();\r
+                  thisConversations.afficherMessagesRepondConversations();\r
                }\r
                \r
                vider = false;\r