MOD Avancement sur les conversations (pas fini)
authorGreg Burri <greg.burri@gmail.com>
Sat, 15 Mar 2008 17:24:05 +0000 (17:24 +0000)
committerGreg Burri <greg.burri@gmail.com>
Sat, 15 Mar 2008 17:24:05 +0000 (17:24 +0000)
doc/protocole2.txt
doc/technique.txt [new file with mode: 0644]
js/pageMinichat.js
modules/erl/euphorik_minichat.erl
sessions/erl.session

index 52453c6..c8ae1a6 100644 (file)
@@ -109,7 +109,7 @@ c -> s
  
 s -> c
    <reponse name="refreshMessages">
-      <conversation> <!-- num : le numéro de la conversation 0 = conversation principale -->
+      <conversation> <!-- les conversations sont ordrées, la première est la conversation principale -->
          <autresPages>true</autresPages> <!-- possède une ou plusieurs autres pages ? "true" ou "false" -->
          <message id="1F5">
             <date>Hier 17:26:54</date> <!-- date du message (format non formel) -->
diff --git a/doc/technique.txt b/doc/technique.txt
new file mode 100644 (file)
index 0000000..81e781e
--- /dev/null
@@ -0,0 +1,8 @@
+Euphorik - doc technique
+
+== Page message ==
+Classes :
+   * Messages
+      
+   * Conversation
+   * Message
\ No newline at end of file
index 60c3a64..223f6c9 100755 (executable)
@@ -323,7 +323,85 @@ Conversation.prototype.ajouterMessage = function(message)
    this.messages.push(message)
    this.messagesParId[message.id] = message
    if (this.messages.length > this.nbMessageMax)
-      delete this.messagesParId[this.messages.shift().id]   
+      delete this.messagesParId[this.messages.shift().id]
+}
+
+Conversation.prototype.viderMessages = function()
+{
+   this.messages = new Array()
+   jQuery("#messages").empty()
+}
+
+/**
+  * Après l'ajout d'un ou plusieurs message cette méthode est appelée afin
+  * d'afficher les messages non-affichés.
+  */
+Conversation.prototype.flush = function()
+{
+   var thisMessages = this
+
+   var idDernierMessageAffiche = jQuery("#messages div:first").attr("id")
+   if (idDernierMessageAffiche == undefined) idDernierMessageAffiche = "0"
+      
+   var XHTML = ""
+   for (var i = this.messages.length - 1; i >= 0; i--)
+      if (parseInt(this.messages[i].id, 36) > parseInt(idDernierMessageAffiche, 36))
+      {
+         var message = this.messages[i]
+         var XHTMLrepondA = ""
+         for (var id in message.repondA)
+            XHTMLrepondA += this.formateur.traitementComplet(message.repondA[id].pseudo) + "> "
+         XHTMLrepondA = "<div class=\"repondA\">" + XHTMLrepondA + "</div>"
+         
+         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" : "") +
+            "\" >" +
+               "[<div class=\"date\">" + message.date + "</div>]" +
+               "<div class=\"pseudo\">" + this.formateur.traitementComplet(message.pseudo) + "</div>:" +
+               XHTMLrepondA +
+               "<div class=\"contenu\">" + (message.systeme ? this.formateur.remplacerBalisesHTML(message.contenu) : this.formateur.traitementComplet(message.contenu, message.pseudo))+ "</div>" +
+            "</div>"
+      }
+   jQuery("#messages").prepend(XHTML)
+   
+   if (myLightbox != null)
+      myLightbox.updateImageList()
+   
+   var nbMessagesAffiche = jQuery("#messages .message").size()
+   if (nbMessagesAffiche > this.nbMessageMax)
+      jQuery("#messages .message").slice(this.nbMessageMax, nbMessagesAffiche).empty();
+
+   jQuery("#messages .message").filter(function(){return parseInt(jQuery(this).attr("id"), 36) > parseInt(idDernierMessageAffiche, 36)}).each(
+      function()
+      {
+         jQuery(this).click(
+            function(event)
+            {
+               if (jQuery(event.target).is("a")) return
+            
+               var valCourant = jQuery("input.message").val()
+               if (valCourant == undefined) valCourant = ""
+               var tag = jQuery(".pseudo", this).text()  + "{" + jQuery(this).attr("id") + "}" + ">"
+               if (valCourant.indexOf(tag, 0) == -1)
+                  jQuery("input.message").val(tag + " " + valCourant)
+               thisMessages.util.setCaretToEnd(jQuery("form input.message")[0])
+            }
+         )
+         // Q : pourquoi pas un .hover ?
+         // R : simplement pour éviter que lorsqu'un message arrive cela n'affecte la conversation actuellement mise en évidence
+         .mousemove(
+            function(e)
+            {
+               if (this !== thisMessages.messageOver)
+               {
+                  thisMessages.afficherConversation(this)
+                  thisMessages.messageOver = this
+               }
+            }
+         )
+      }
+   )
 }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -401,15 +479,11 @@ Messages.prototype.getXMLrafraichirMessages = function()
 /**
   * Création d'un nouveau message.
   * Les message sont données dans l'ordre de leur id.
-  * Met directement à jour l'affichage.
   * @param element un element xml représentant le message
   * @param numConversation le numéro de la conversation, 0 = principale
-  * @param autoFlush si oui alors le message est directement ajouté à la vue
   */
-Messages.prototype.ajouterMessage = function(element, numConversation, autoFlush)
+Messages.prototype.ajouterMessage = function(element, numConversation)
 {
-   if (autoFlush == undefined) autoFlush = true // valeur par défaut
-
    // pas d'utilisation de jquery pour des raisons de performance
    this.idDernierMesssage = element.getAttribute("id")
    
@@ -428,83 +502,16 @@ Messages.prototype.ajouterMessage = function(element, numConversation, autoFlush
    
    if (this.conversations[numConversation] == null)
       this.conversations[numConversation] = new Conversation()
-      
    this.conversations[numConversation].ajouterMessage(message)
-
-   if (autoFlush)
-      this.flush()   
 }
 
-
-// <<< TODO <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-
-
+/**
+  * Demande à toutes les conversations de se flusher (afficher les messages non-affichés).
+  */
 Messages.prototype.flush = function()
 {
-   var thisMessages = this
-
-   var idDernierMessageAffiche = jQuery("#messages div:first").attr("id")
-   if (idDernierMessageAffiche == undefined) idDernierMessageAffiche = "0"
-      
-   var XHTML = ""
-   for (var i = this.messages.length - 1; i >= 0; i--)
-      if (parseInt(this.messages[i].id, 36) > parseInt(idDernierMessageAffiche, 36))
-      {
-         var message = this.messages[i]
-         var XHTMLrepondA = ""
-         for (var id in message.repondA)
-            XHTMLrepondA += this.formateur.traitementComplet(message.repondA[id].pseudo) + "> "
-         XHTMLrepondA = "<div class=\"repondA\">" + XHTMLrepondA + "</div>"
-         
-         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" : "") +
-            "\" >" +
-               "[<div class=\"date\">" + message.date + "</div>]" +
-               "<div class=\"pseudo\">" + this.formateur.traitementComplet(message.pseudo) + "</div>:" +
-               XHTMLrepondA +
-               "<div class=\"contenu\">" + (message.systeme ? this.formateur.remplacerBalisesHTML(message.contenu) : this.formateur.traitementComplet(message.contenu, message.pseudo))+ "</div>" +
-            "</div>"
-      }
-   jQuery("#messages").prepend(XHTML)\r
-   \r
-   if (myLightbox != null)
-      myLightbox.updateImageList()
-   
-   var nbMessagesAffiche = jQuery("#messages .message").size()
-   if (nbMessagesAffiche > this.nbMessageMax)
-      jQuery("#messages .message").slice(this.nbMessageMax, nbMessagesAffiche).empty();
-
-   jQuery("#messages .message").filter(function(){return parseInt(jQuery(this).attr("id"), 36) > parseInt(idDernierMessageAffiche, 36)}).each(
-      function()
-      {
-         jQuery(this).click(
-            function(event)
-            {\r
-               if (jQuery(event.target).is("a")) return\r
-            
-               var valCourant = jQuery("input.message").val()
-               if (valCourant == undefined) valCourant = ""
-               var tag = jQuery(".pseudo", this).text()  + "{" + jQuery(this).attr("id") + "}" + ">"
-               if (valCourant.indexOf(tag, 0) == -1)
-                  jQuery("input.message").val(tag + " " + valCourant)
-               thisMessages.util.setCaretToEnd(jQuery("form input.message")[0])
-            }
-         )
-         // Q : pourquoi pas un .hover ?
-         // R : simplement pour éviter que lorsqu'un message arrive cela n'affecte la conversation actuellement mise en évidence
-         .mousemove(
-            function(e)
-            {
-               if (this !== thisMessages.messageOver)
-               {
-                  thisMessages.afficherConversation(this)
-                  thisMessages.messageOver = this
-               }
-            }
-         )
-      }
-   )
+   for (var i = 0; i < this.conversations.length; i++)
+      this.conversations[i].flush().
 }
 
 /**
@@ -537,8 +544,9 @@ Messages.prototype.afficherConversation = function(element)
 Messages.prototype.viderMessages = function()
 {
    this.idDernierMesssage = null
-   this.messages = new Array()
-   jQuery("#messages").empty()
+   
+   for (var i = 0; i < this.conversations.length; i++)
+      this.conversations[i].viderMessages()
 }
 
 /**
@@ -577,15 +585,25 @@ Messages.prototype.rafraichirMessages = function(vider)
                if (vider)
                   thisMessages.viderMessages()
                
-               thisMessages.MAJPages(parseInt(jQuery("nbPage", data.documentElement).text()))
+               //thisMessages.MAJPages(parseInt(jQuery("nbPage", data.documentElement).text()))
                
-               reponse = jQuery("message", data.documentElement).each(
+               // ajoute chaque message reçu à sa conversation respective
+               jQuery("conversation", data.documentElement).each(
                   function(i)
                   {
-                     thisMessages.ajouterMessage(this, false) 
+                     jQuery("message", this).each(
+                        function(j)
+                        {
+                           thisMessages.ajouterMessage(this, numConv) 
+                        }
+                     )
                   }
                )
-               thisMessages.flush()               
+               
+               // demande à toutes les conversations d'afficher les messages non-affichés
+               thisMessages.flush()
+               
+               // rappel de la fonction dans 100 ms
                setTimeout(function(){ thisMessages.rafraichirMessages() }, 100);
             },
          error:
@@ -597,6 +615,7 @@ Messages.prototype.rafraichirMessages = function(vider)
    )
 }
 
+/* Osbolète
 Messages.prototype.MAJPages = function(nbPage)
 {
    //alert(nbPage)
@@ -619,8 +638,9 @@ Messages.prototype.MAJPages = function(nbPage)
          }
       )
    }
-}
+}*/
 
+/* Obsolète
 Messages.prototype.allerSurLaPage = function(page)
 {            
    if (page == this.page)
@@ -641,5 +661,5 @@ Messages.prototype.allerSurLaPage = function(page)
    )
 
    this.rafraichirMessages(true)
-}
+}*/
 
index 68c1ed5..0ef8ef5 100755 (executable)
@@ -53,7 +53,7 @@
 % Connexion à la base de données de yaws sur overnux
 connect() ->
    mnesia:start(),
-   mnesia:change_config(extra_db_nodes, [yaws@Plop]).
+   mnesia:change_config(extra_db_nodes, [yaws@flynux]).
 
 
 % Efface tous les users, minichat_reponse et minichat.\r
index b8fe724..c1a5360 100755 (executable)
@@ -19,8 +19,3 @@ buffer.6.position=1
 
 buffer.7.path=../modules/erl/euphorik_requests.erl
 buffer.7.position=1
-
-
-
-
-