ADD Lien vers les conversations (pas fini)
[euphorik.git] / js / pageMinichat.js
index ed1a46c..454b357 100755 (executable)
@@ -132,7 +132,7 @@ PageMinichat.prototype.getXMLMessage = function(pseudo, message, repondA)
       {
          var nodeReponse = XMLDocument.createElement("reponse")
          nodeReponse.setAttribute("id", repondA[i])
-         nodeReponses.appendChild(nodeReponse)      
+         nodeReponses.appendChild(nodeReponse)
       }
    }
    
@@ -291,7 +291,7 @@ Message.prototype.getConversation = function(messages)
   * @param numConv le numéro (appelé id) de la conversation
   * @param formateur outil permettant la mise en forme du texte des messages
   */
-function Conversation(num, util, formateur, funFermer)
+function Conversation(num, util, formateur)
 {
    var thisConversation = this
 
@@ -306,7 +306,7 @@ function Conversation(num, util, formateur, funFermer)
    jQuery("#conversations").append(
       '<div id="' + this.getId() + '" class="conversation">\
       <div class="titre">' +
-         (funFermer == undefined ? '' : '<div class="fermer">x</div>') +
+         (num == 0 ? '' : '<div class="fermer">x</div><div class="lien">c</div>') +
          '<span class="next">&lt;</span><span class="numPage">1</span><span class="prev">&gt;</span>\
          </div>\
       </div>'
@@ -321,15 +321,6 @@ function Conversation(num, util, formateur, funFermer)
          thisConversation.messageOver = null
       }
    )
-   
-   // suppression de la conversation
-   if (funFermer != undefined)
-      jQuery("#conversations #" + this.getId() + " .titre .fermer").click(
-         function()
-         {
-            funFermer(thisConversation.num)
-         }
-      )
 }
 
 /**
@@ -337,13 +328,43 @@ function Conversation(num, util, formateur, funFermer)
   * @pageCourante la page courante
   * @dernierePage true si c'est la dernière page sinon false
   */
-Conversation.prototype.setPage = function(pageCourante, dernierePage)
+Conversation.prototype.eventsPage = function(pageCourante, dernierePage)
 {
    jQuery("#conversations #" + this.getId() + " .numPage").text(pageCourante)
    jQuery("#conversations #" + this.getId() + " .next").css("display", pageCourante == 1 ? "none" : "inline")
    jQuery("#conversations #" + this.getId() + " .prev").css("display", dernierePage ? "none" : "inline")
 }
 
+/**
+  * Evenement déclanché lors de l'insertion du lien de la conversation dans le message courant.
+  */
+Conversation.prototype.eventLien = function(fun)
+{
+   var thisConversation = this
+   
+   jQuery("#conversations #" + this.getId() + " .titre .lien").click(
+      function()
+      {
+         fun(thisConversation.num)
+      }
+   )
+}
+
+/**
+  * Evenement déclanché lors de la fermeture de la conversation.
+  */
+Conversation.prototype.eventFermer = function(fun)
+{
+   var thisConversation = this
+   
+   jQuery("#conversations #" + this.getId() + " .titre .fermer").click(
+      function()
+      {
+         fun(thisConversation.num)
+      }
+   )
+}
+
 /**
   * @funNext appelé lorsque l'on passe à la page suivante (de 2 à 1 par exemple)
   * @funPrev appelé lorsque l'on passe à la page précédente (de 1 à 2 par exemple)
@@ -391,13 +412,14 @@ Conversation.prototype.viderMessages = function()
   * d'afficher les messages non-affichés.
   * @param funClickExtract fonction (fun(numMess)) appellée lors du clic sur un bouton "extraire"
   */
-Conversation.prototype.flush = function(funClickExtract)
+Conversation.prototype.flush = function(funClickExtract, funClickLienConv)
 {
    var thisConversation = this
 
    var idDernierMessageAffiche = jQuery("#conversations #" + this.getId() + " div:first").attr("id")
    if (idDernierMessageAffiche == undefined) idDernierMessageAffiche = "0"
       
+   // construction de l'XHTML des messages
    var XHTML = ""
    for (var i = this.messages.length - 1; i >= 0; i--)
       if (parseInt(this.messages[i].id, 36) > parseInt(idDernierMessageAffiche, 36))
@@ -405,13 +427,13 @@ Conversation.prototype.flush = function(funClickExtract)
          var message = this.messages[i]
          var XHTMLrepondA = ""
          for (var id in message.repondA)
-            XHTMLrepondA += this.formateur.traitementComplet(message.repondA[id].pseudo) + "> "
+            XHTMLrepondA += this.formateur.traitementComplet(message.repondA[id].pseudo) + "&gt; "
          XHTMLrepondA = "<span class=\"repondA\">" + XHTMLrepondA + "</span>"
          
          XHTML += 
             "<div id=\"" + message.id + "\" class=\"" + (parseInt(message.id, 36) % 2 == 0 ? "messagePair" : "messageImpair") + " message" +
                (this.messages[i].appartientAuClient ? " proprietaire" : "")  + (this.messages[i].clientARepondu ? " repondu" : "") + (this.messages[i].estUneReponse ? " reponse" : "") + (this.messages[i].systeme ? " systeme" : "") +
-            "\" &gt;" +
+            "\">" +
                "<div class=\"extraire\">&gt;</div>" +
                "[<span class=\"date\">" + message.date + "</span>]" +
                "<span class=\"pseudo\">" + this.formateur.traitementComplet(message.pseudo) + "</span>:" +
@@ -426,6 +448,7 @@ Conversation.prototype.flush = function(funClickExtract)
    if (myLightbox != null)
       myLightbox.updateImageList()
    
+   // enlève les messages exedentaires
    var nbMessagesAffiche = jQuery("#conversations #" + this.getId() + " .message").size()
    if (nbMessagesAffiche > this.nbMessageMax)
       jQuery("#conversations #" + this.getId() + " .message").slice(this.nbMessageMax, nbMessagesAffiche).empty();
@@ -434,6 +457,16 @@ Conversation.prototype.flush = function(funClickExtract)
    jQuery("#conversations #" + this.getId() + " .message").filter(function(){return parseInt(jQuery(this).attr("id"), 36) > parseInt(idDernierMessageAffiche, 36)}).each(
       function()
       {
+         jQuery(".lienConv", this).click(
+            function(event)
+            {          
+               // FIXME : ya pas mieux ?
+               var racine = jQuery(event.target).text()
+               funClickLienConv(racine.substring(1, racine.length - 1))
+               return false
+            }
+         )
+         
          jQuery(this).click(
             function(event)
             {
@@ -515,6 +548,8 @@ Conversation.prototype.supprimer = function()
   */
 function Messages(client, formateur, util)
 {
+   var thisMessages = this
+
    this.client = client
    this.formateur = formateur
    this.util = util
@@ -604,6 +639,13 @@ Messages.prototype.ajouterMessage = function(element, numConversation)
          function(num) // fermeture de la conversation
          {
             thisMessages.supprimerConversation(num)
+         },
+         function(num) // insertion du lien vers la conversation
+         {
+               thisPage.util.replaceSelection(
+                  jQuery("form input.message")[0],
+                  "{" + thisMessages.client.conversations[num-1].racine + "}"
+               )
          }
       )
    }
@@ -611,11 +653,15 @@ Messages.prototype.ajouterMessage = function(element, numConversation)
    this.conversations[numConversation].ajouterMessage(message)
 }
 
-Messages.prototype.nouvelleConversation = function(num, funFermer)
+Messages.prototype.nouvelleConversation = function(num, funFermer, funLien)
 {
    var thisMessages = this
 
-   this.conversations[num] = new Conversation(num, this.util, this.formateur, funFermer)
+   this.conversations[num] = new Conversation(num, this.util, this.formateur)
+   if (funFermer != undefined)
+      this.conversations[num].eventFermer(funFermer)
+   if (funLien != undefined)
+      this.conversations[num].eventLien(funLien)
 
    this.conversations[num].setFunPage(
       function(num) // page suivante
@@ -684,13 +730,17 @@ Messages.prototype.flush = function(numConv)
 {
    var thisMessages = this
 
-   this.conversations[numConv].flush
-   (
+   this.conversations[numConv].flush(
       // fonction appelée lors de la demande d'extraction d'une conversation
       function(idMess)
       {
          if (thisMessages.client.ajouterConversation(idMess))
             thisMessages.rafraichirMessages(true)
+      },
+      function(racine) // appelé lorsqu'un utilisateur click sur un lien vers une conversation
+      {
+         if (thisMessages.client.ajouterConversation(racine))
+            thisMessages.rafraichirMessages(true)
       }
    )
 }
@@ -721,7 +771,7 @@ Messages.prototype.rafraichirMessages = function(vider)
    if (vider)
       this.idDernierMessage = null\r
       
-   //this.util.xmlVersAction(this.getXMLrafraichirMessages()).action.dump()
+   this.util.xmlVersAction(this.getXMLrafraichirMessages()).action.dump("Client")
    this.attenteCourante = jQuery.ajax({
          type: "POST",
          url: "request",
@@ -730,7 +780,7 @@ Messages.prototype.rafraichirMessages = function(vider)
          success:
             function(data)
             {            \r
-               //thisMessages.util.serializer.serializeToString(data).dump()\r
+               thisMessages.util.serializer.serializeToString(data).dump("Serveur")\r
             
                if (vider)
                   thisMessages.viderMessages()
@@ -751,7 +801,7 @@ Messages.prototype.rafraichirMessages = function(vider)
                      
                      thisMessages.ajouterMessages(messages, numConv)
                      
-                     thisMessages.conversations[numConv].setPage(
+                     thisMessages.conversations[numConv].eventsPage(
                         numConv == 0 ? thisMessages.client.pagePrincipale : thisMessages.client.conversations[numConv - 1].page,
                         jQuery("autresPages", this).text() != "true"
                      )