ADD LOGO + favicon
[euphorik.git] / js / pageMinichat.js
index a6ba5a6..31d19ba 100755 (executable)
@@ -296,6 +296,7 @@ function Conversation(num, util, formateur, client)
    this.util = util
    this.formateur = formateur
    this.client = client
+   this.idDernierMessageAffiche = 0
    
    this.messages = new Array()
    this.messagesParId = new Object()
@@ -403,6 +404,7 @@ Conversation.prototype.ajouterMessage = function(message)
 Conversation.prototype.viderMessages = function()
 {
    this.messages = new Array()
+   this.idDernierMessageAffiche = 0
    jQuery("#conversations #" + this.getId() + " .message").remove()
 }
 
@@ -411,22 +413,19 @@ 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, funClickLienConv)
+Conversation.prototype.flush = function(funClickOuvrirConv)
 {
    var thisConversation = this
 
-   var idDernierMessageAffiche = jQuery("#conversations #" + this.getId() + " div:first").attr("id")
-   idDernierMessageAffiche = (idDernierMessageAffiche == undefined ? 0 : parseInt(idDernierMessageAffiche, 36))
-      
    // est-ce que le prochain message est pair ? (permet d'alterner le style des messages)
-   var messagePair = (idDernierMessageAffiche == 0 ? true :
+   var messagePair = (this.idDernierMessageAffiche == 0 ? true :
       (jQuery("#conversations #" + this.getId() + " div:first").attr("class").search("messagePair") == -1)
    )
       
    // construction de l'XHTML des messages
    var XHTML = ""
    for (var i = this.messages.length - 1; i >= 0; i--)
-      if (this.messages[i].id > idDernierMessageAffiche)
+      if (this.messages[i].id > this.idDernierMessageAffiche)
       {      
          var message = this.messages[i]
          
@@ -470,7 +469,7 @@ Conversation.prototype.flush = function(funClickExtract, funClickLienConv)
       jQuery("#conversations #" + this.getId() + " .message").slice(this.nbMessageMax, nbMessagesAffiche).empty()
 
    // Ajoute les événements liés à chaque message
-   jQuery("#conversations #" + this.getId() + " .message").filter(function(){return parseInt(jQuery(this).attr("id"), 36) > idDernierMessageAffiche}).each(
+   jQuery("#conversations #" + this.getId() + " .message").filter(function(){return parseInt(jQuery(this).attr("id"), 36) > thisConversation.idDernierMessageAffiche}).each(
       function()
       {
          jQuery(".lienConv", this).click(
@@ -478,7 +477,7 @@ Conversation.prototype.flush = function(funClickExtract, funClickLienConv)
             {          
                // FIXME : ya pas mieux ?
                var racine = jQuery(event.target).text()
-               funClickLienConv(parseInt(racine.substring(1, racine.length - 1), 36))
+               funClickOuvrirConv(parseInt(racine.substring(1, racine.length - 1), 36))
                return false
             }
          )
@@ -494,7 +493,7 @@ Conversation.prototype.flush = function(funClickExtract, funClickLienConv)
                // extraction d'une conversation
                if (jQuery(event.target).is(".extraire"))
                {
-                  funClickExtract(parseInt(idMess, 36))
+                  funClickOuvrirConv(parseInt(idMess, 36))
                   return
                }
             
@@ -520,6 +519,9 @@ Conversation.prototype.flush = function(funClickExtract, funClickLienConv)
          )
       }
    )
+   
+   if (this.messages.length > 0)
+      this.idDernierMessageAffiche = this.messages[this.messages.length-1].id
 }
 
 /**
@@ -574,7 +576,8 @@ function Messages(client, formateur, util)
    this.conversations = new Array() // les conversations, la première représente la conversation principale
    this.nouvelleConversation(0)
 
-   this.idDernierMessage = null // l'id du dernier message connu
+// Obsolète
+   //this.idDernierMessage = null // l'id du dernier message connu
    
    // l'objet JSONHttpRequest représentant la connexion d'attente
    this.attenteCourante = null
@@ -590,15 +593,28 @@ Messages.prototype.getJSONrafraichirMessages = function()
       "page" : "chat",
       "message_count" : conf.nbMessageAffiche,
       "main_page" : this.client.pagePrincipale,
-      "conversations" : this.client.getJSONConversations()
+      "conversations" : this.getJSONConversations()
    }
    
    if (this.client.cookie != null) mess["cookie"] = this.client.cookie;
-   if (this.idDernierMessage != null) mess["last_message_id"] = this.idDernierMessage
+   mess["last_message_id"] = this.conversations[0].idDernierMessageAffiche
+   
+   // obsolète
+   //if (this.idDernierMessage != null) mess["last_message_id"] = this.idDernierMessage
    
    return mess
 }
 
+Messages.prototype.getJSONConversations = function()
+{
+   var clientConv = this.client.getJSONConversations()
+   for (var i = 1; i < this.conversations.length; i++)
+   {
+      clientConv[i-1]["last_message_id"] = this.conversations[i].idDernierMessageAffiche
+   }
+   return clientConv
+}
+
 /**
   * Ajoute un ensemble de messages puis les affiches.
   * @param elements un tableau d'éléments JSON représentant les messages, voir protocole.txt
@@ -624,8 +640,9 @@ Messages.prototype.ajouterMessage = function(element, numConversation)
    // pas d'utilisation de jquery pour des raisons de performance
    var id = element["id"]
    
-   if (this.idDernierMessage == null || id > this.idDernierMessage)
-      this.idDernierMessage = id
+   // Obsolète
+   /*if (this.idDernierMessage == null || id > this.idDernierMessage)
+      this.idDernierMessage = id*/
    
    var message = new Message(
       id,      
@@ -740,23 +757,25 @@ Messages.prototype.flush = function(numConv)
    var thisMessages = this
    
    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)
+         thisMessages.ouvrirConversation(racine)
       }
    )
 }
 
+Messages.prototype.ouvrirConversation = function(racine)
+{
+   if (this.client.ajouterConversation(racine))
+      this.rafraichirMessages(true)
+   else
+      this.util.messageDialogue("Cette conversation est déjà ouverte")
+}
+
 Messages.prototype.viderMessages = function()
 {
-   this.idDernierMessage = null
+   // Obsolète
+   //this.idDernierMessage = null
    
    for (var i = 0; i < this.conversations.length; i++)
       this.conversations[i].viderMessages()
@@ -785,8 +804,11 @@ Messages.prototype.rafraichirMessages = function(vider)
       
    this.stopAttenteCourante()
    
+   /*if (vider)
+      this.idDernierMessage = null*/
    if (vider)
-      this.idDernierMessage = null\r
+      for (var i = 0; i < this.conversations.length; i++)
+         this.conversations[i].idDernierMessageAffiche = 0\r
       
    dumpObj(this.getJSONrafraichirMessages())
    this.attenteCourante = jQuery.ajax({
@@ -802,7 +824,7 @@ Messages.prototype.rafraichirMessages = function(vider)
             if (vider)
                thisMessages.viderMessages()
             
-            // ajoute les messages reçu à leur conversation respective
+            // ajoute les messages reçus à leur conversation respective
             for (var numConv = 0; numConv < data["conversations"].length; numConv++)
             {
                // ya pas de nouveaux message -> on passe à la prochaine conversation