FIX il manquait le dernier message à l'affichage (problème dans euphorik_minichat_con...
authorGreg Burri <greg.burri@gmail.com>
Sat, 19 Apr 2008 10:33:52 +0000 (10:33 +0000)
committerGreg Burri <greg.burri@gmail.com>
Sat, 19 Apr 2008 10:33:52 +0000 (10:33 +0000)
FIX le nombre de message max n'était pas connu par la classe Conversation dans pageMinichat.js
MOD maj de la css 2

css/1/pageMinichat.css
css/2/euphorik.css
css/2/pageMinichat.css
doc/TODO.txt
doc/protocole3.txt
js/euphorik.js
js/pageMinichat.js
modules/erl/euphorik_minichat_conversation.erl
modules/erl/euphorik_protocole.erl
modules/erl/euphorik_requests.erl

index 3a02bf9..862feee 100755 (executable)
        height: 100%;
        background-color: #0c2003;
 }
-\r
-#page.minichat #smiles img {\r
-       cursor: pointer;\r
-       opacity: 0.5;\r
-}\r
+
+#page.minichat #smiles img {
+       cursor: pointer;
+       opacity: 0.5;
+}
 
 #page.minichat .titreSmiles:hover {
        background-color: #2d8800;
-}\r
-\r
-#page.minichat form {\r
-   text-align: left;\r
-   margin-bottom: 15px;\r
-   padding-left: 10px;\r
-}\r
-\r
-#page.minichat form .pseudo {\r
-   margin-right: 5px;\r
-}\r
-\r
-#page.minichat form .message {\r
-   margin-right: 5px;\r
-}\r
-\r
-#page.minichat form .return {\r
-       height: 15px;\r
-       width: 32px;\r
-       background-image: url(../../img/css1/return.png);\r
-       background-repeat: no-repeat;\r
-       background-position: 5px 2px;\r
-       vertical-align: top;\r
+}
+
+#page.minichat form {
+   text-align: left;
+   margin-bottom: 15px;
+   padding-left: 10px;
+}
+
+#page.minichat form .pseudo {
+   margin-right: 5px;
+}
+
+#page.minichat form .message {
+   margin-right: 5px;
+}
+
+#page.minichat form .return {
+       height: 15px;
+       width: 32px;
+       background-image: url(../../img/css1/return.png);
+       background-repeat: no-repeat;
+       background-position: 5px 2px;
+       vertical-align: top;
 }
 
 /* voir pour l'astuce css "float left" des conversations : http://www.quirksmode.org/css/clearing.html */
        border-color: white;
        float: left;
        width: 100%;
-}\r
+}
 
-#page.minichat #conversations div.message {\r
-       border-left-width: 5px;\r
-       border-left-style: solid;\r
+#page.minichat #conversations div.message {
+       border-left-width: 5px;
+       border-left-style: solid;
        border-color: transparent;
        text-align: left;
        padding-right: 5px;
-       padding-left: 4px;\r
+       padding-left: 4px;
        cursor: pointer;
 }
-\r
-#page.minichat #conversations div.messageImpair {\r
-   background-color: #05002c;\r
-}\r
-\r
-#page.minichat #conversations div.messagePair {\r
-   background-color: #080047;\r
-}
-\r
-/* Il n'y a plus de mise en evidence
-#page.minichat #conversations div.miseEnEvidenceReponse {
-       background-color: #bd7a11;
-}
-#page.minichat #conversations div.miseEnEvidenceCourant {
-       background-color: #bd1129;
-}
-#page.minichat #conversations div.miseEnEvidenceConversation {
-       background-color: #b711bd;
-}*/\r
-       
+
+#page.minichat #conversations div.messageImpair {
+   background-color: #05002c;
+}
+
+#page.minichat #conversations div.messagePair {
+   background-color: #080047;
+}
+
 #page.minichat #conversations div.cache {
-       opacity: 0.3;\r
-       \r
-       /* Hack IE 7 */ \r
-       filter: alpha(opacity = 30);\r
+       opacity: 0.3;
+       
+       /* Hack IE 7 */ 
+       filter: alpha(opacity = 30);
        zoom: 1
 }
-\r
-#page.minichat #conversations div.reponse {\r
-       border-color: #bd7a11\r
-}\r
-#page.minichat #conversations div.repondu {\r
-       border-color: #b711bd   \r
-}\r
-#page.minichat #conversations div.proprietaire {\r
-       border-color: #bd1129\r
+
+#page.minichat #conversations div.reponse {
+       border-color: #bd7a11
+}
+#page.minichat #conversations div.repondu {
+       border-color: #b711bd   
+}
+#page.minichat #conversations div.proprietaire {
+       border-color: #bd1129
 }
 #page.minichat #conversations div.systeme {
        background-color: #555555
-}\r
-\r
-#page.minichat div.message a {\r
-       font-weight: bold;\r
+}
+
+#page.minichat div.message a {
+       font-weight: bold;
 }
 
 #page.minichat div.message .lienConv {
 
 #page.minichat div.message .lienConv:hover {
        color: #f1c060
-}\r
-\r
-#page.minichat .date {\r
-   color: #fd913b;\r
-   margin-right: 3px;\r
-   margin-left: 3px;\r
-}\r
-\r
-#page.minichat div.message .pseudo,\r
-#page.minichat form .pseudo {\r
-   margin-left: 4px;\r
-   margin-right: 2px;\r
-   font-weight: bold;\r
-   color: #76ff33;\r
+}
+
+#page.minichat .date {
+   color: #fd913b;
+   margin-right: 3px;
+   margin-left: 3px;
+}
+
+#page.minichat div.message .pseudo,
+#page.minichat form .pseudo {
+   margin-left: 4px;
+   margin-right: 2px;
+   font-weight: bold;
+   color: #76ff33;
 }
 
 #page.minichat div.systeme .pseudo {
        color: #CCCCCC
-}\r
-\r
-/* Ca marche pas :(\r
-#page.minichat div.message .pseudo {\r
-       min-width: 50px;\r
-       height:100px;\r
-}*/\r
+}
+
+/* Ca marche pas :(
+#page.minichat div.message .pseudo {
+       min-width: 50px;
+       height:100px;
+}*/
 
 #page.minichat #conversations .repondA {
    margin-left: 4px;
    color: #bd7a11
 }
-\r
-/*#page.minichat #conversations .contenu {\r
-   display: inline;\r
+
+/*#page.minichat #conversations .contenu {
+   display: inline;
 }*/
 
 #page.minichat #conversations .extraire {
        padding-left: 5px;
        background-color: #c90000;
        cursor: pointer;
-}\r
+}
 
 #page.minichat #conversations .titre .fermer:hover {
        background-color: #c95656
 #page.minichat #conversations .titre .numPage:hover {
        background-color: #7c6e2e
 }
-\r
-#page.minichat #pages {\r
-       margin-top: 10px;\r
-}\r
-\r
-#page.minichat #pages span {\r
-       padding-right : 4px;\r
-       padding-left: 4px;\r
-       color: #7664ff;\r
-       cursor:pointer;\r
-}\r
-\r
-#page.minichat #pages span.pageCourante {\r
-       font-weight: bold;\r
-       font-size: 150%;\r
-}\r
-\r
-#page.minichat #pages span:hover {\r
-       font-size: 150%;\r
-       color: #ffad0f;\r
-}\r
-\r
+
+#page.minichat #pages {
+       margin-top: 10px;
+}
+
+#page.minichat #pages span {
+       padding-right : 4px;
+       padding-left: 4px;
+       color: #7664ff;
+       cursor:pointer;
+}
+
+#page.minichat #pages span.pageCourante {
+       font-weight: bold;
+       font-size: 150%;
+}
+
+#page.minichat #pages span:hover {
+       font-size: 150%;
+       color: #ffad0f;
+}
+
index a0d3743..3213b74 100755 (executable)
@@ -19,11 +19,10 @@ body {
 \r
 #container {
    position: relative;\r
-   width: 700px;\r
    height: auto;\r
-   margin-left: auto;\r
-   margin-right: auto;\r
-   margin-top: 20px;\r
+   margin-left: 10px;\r
+   margin-right: 10px;\r
+   margin-top: 40px;\r
 }
 
 #menu {
index 2bbfbeb..d9ae80a 100755 (executable)
        height: 100%;
        background-color: #FFFFFF;
 }
-\r
-#page.minichat #smiles img {\r
-       cursor: pointer;\r
+
+#page.minichat #smiles img {
+       cursor: pointer;
        opacity: 0.5;
-       margin-right:1px;\r
-}\r
+       margin-right:1px;
+}
 
 #page.minichat .titreSmiles:hover {
        background-color: #2d8800;
-}\r
-\r
-#page.minichat form {\r
-   text-align: left;\r
-   margin-bottom: 15px;\r
-   padding-left: 10px;\r
-}\r
-\r
-#page.minichat form .pseudo {\r
-   margin-right: 5px;\r
-}\r
-\r
-#page.minichat form .message {\r
-   margin-right: 5px;\r
-}\r
-\r
-#page.minichat form .return {\r
-       height: 15px;\r
+}
+
+#page.minichat form {
+   text-align: left;
+   margin-bottom: 15px;
+   padding-left: 10px;
+}
+
+#page.minichat form .pseudo {
+   margin-right: 5px;
+}
+
+#page.minichat form .message {
+   margin-right: 5px;
+}
+
+#page.minichat form .return {
+       height: 15px;
        width: 32px;
-       background-color: #BBBBBB;\r
-       background-image: url(../../img/css1/return.png);\r
-       background-repeat: no-repeat;\r
-       background-position: 5px 2px;\r
-       vertical-align: top;\r
-}\r
-
-#page.minichat #messages div.message { \r
-       border-left-width: 5px;\r
-       border-left-style: solid;\r
+       background-color: #BBBBBB;
+       background-image: url(../../img/css1/return.png);
+       background-repeat: no-repeat;
+       background-position: 5px 2px;
+       vertical-align: top;
+}
+
+/* voir pour l'astuce css "float left" des conversations : http://www.quirksmode.org/css/clearing.html */
+#page.minichat #conversations {        
+       overflow: hidden;
+       width: 100%
+}
+
+#page.minichat #conversations .conversation {
+       border-width: 0px;
+       border-style: solid;
+       border-color: white;
+       float: left;
+       width: 100%;
+}
+
+#page.minichat #conversations div.message {
+       border-left-width: 5px;
+       border-left-style: solid;
        border-color: transparent;
        text-align: left;
-       padding-right: 8px;
-       padding-left: 4px;\r
+       padding-right: 5px;
+       padding-left: 4px;
        cursor: pointer;
 }
-\r
-#page.minichat #messages div.messageImpair {\r
-   background-color: #e4e1ff;\r
-}\r
-\r
-#page.minichat #messages div.messagePair {\r
-   background-color: #eceaf7;\r
-}
-\r
-/* Il n'y a plus de mise en evidence
-#page.minichat #messages div.miseEnEvidenceReponse {
-       background-color: #bd7a11;
-}
-#page.minichat #messages div.miseEnEvidenceCourant {
-       background-color: #bd1129;
-}
-#page.minichat #messages div.miseEnEvidenceConversation {
-       background-color: #b711bd;
-}*/\r
+
+#page.minichat #conversations div.messageImpair {
+   background-color: #e4e1ff;
+}
+
+#page.minichat #conversations div.messagePair {
+   background-color: #eceaf7;
+}
+
+#page.minichat #conversations div.cache {
+       opacity: 0.3;
        
-#page.minichat #messages div.cache {
-       opacity: 0.3;\r
-       \r
-       /* Hack IE 7 */ \r
-       filter: alpha(opacity = 30);\r
+       /* Hack IE 7 */ 
+       filter: alpha(opacity = 30);
        zoom: 1
 }
-\r
-#page.minichat #messages div.reponse {\r
-       border-color: #d2ad73\r
-}\r
-#page.minichat #messages div.repondu {\r
-       border-color: #d066d4   \r
-}\r
-#page.minichat #messages div.proprietaire {\r
-       border-color: #d74a5e\r
-}
-#page.minichat #messages div.systeme {
+
+#page.minichat #conversations div.reponse {
+       border-color: #d2ad73
+}
+#page.minichat #conversations div.repondu {
+       border-color: #d066d4   
+}
+#page.minichat #conversations div.proprietaire {
+       border-color: #d74a5e
+}
+#page.minichat #conversations div.systeme {
        background-color: #b1b1b1
-}\r
-\r
-#page.minichat div.message a {\r
-       font-weight: bold;\r
-}\r
-\r
-#page.minichat .date {\r
-   display: inline;\r
-   color: #cf6f21;\r
-   margin-right: 3px;\r
-   margin-left: 3px;\r
-}\r
-\r
-#page.minichat div.message .pseudo,\r
-#page.minichat form .pseudo {\r
-   display: inline;\r
-   margin-left: 4px;\r
-   margin-right: 2px;\r
-   font-weight: bold;\r
-   color: #2b5715;\r
+}
+
+#page.minichat div.message a {
+       font-weight: bold;
+}
+
+#page.minichat div.message .lienConv {
+       color: #db960f;
+       font-weight: bold;
+       cursor: pointer
+}
+
+#page.minichat div.message .lienConv:hover {
+       color: #f1c060
+}
+
+#page.minichat .date {
+   color: #cf6f21;
+   margin-right: 3px;
+   margin-left: 3px;
+}
+
+#page.minichat div.message .pseudo,
+#page.minichat form .pseudo {
+   margin-left: 4px;
+   margin-right: 2px;
+   font-weight: bold;
+   color: #2b5715;
 }
 
 #page.minichat div.systeme .pseudo {
        color: #CCCCCC
-}\r
-\r
-/* Ca marche pas :(\r
-#page.minichat div.message .pseudo {\r
-       min-width: 50px;\r
-       height:100px;\r
-}*/\r
-
-#page.minichat #messages .repondA {
-   display: inline;
+}
+
+/* Ca marche pas :(
+#page.minichat div.message .pseudo {
+       min-width: 50px;
+       height:100px;
+}*/
+
+#page.minichat #conversations .repondA {
    margin-left: 4px;
    color: #95600d
 }
-\r
-#page.minichat #messages .contenu {\r
-   display: inline;\r
-}\r
-\r
-#page.minichat #pages {\r
-       margin-top: 10px;\r
-}\r
-\r
-#page.minichat #pages span {\r
-       padding-right : 5px;\r
-       padding-left: 5px;\r
-       color: #7169ae;\r
-       cursor:pointer;\r
-}\r
-\r
-#page.minichat #pages span.pageCourante {\r
-       font-weight: bold;\r
-       font-size: 150%;\r
-}\r
-\r
-#page.minichat #pages span:hover {\r
-       font-size: 150%;\r
-       color: #ada9cf;\r
-}\r
-\r
+
+/*#page.minichat #conversations .contenu {
+   display: inline;
+}*/
+
+#page.minichat #conversations .extraire {
+       float: right;
+       padding-right: 2px;
+       padding-left: 2px;
+       background-color: #cac5f8;
+}
+
+#page.minichat #conversations .extraire:hover {
+       background-color: #dfdcfd;
+       color: #a2a2a2
+}
+
+#page.minichat #conversations .titre {
+       padding-right: 8px;
+       background-color: #dedde8
+}
+
+#page.minichat #conversations .titre .fermer {
+       float: right;
+       padding-right: 5px;
+       padding-left: 5px;
+       background-color: #cac5f8;
+       color: #ff0000;
+       cursor: pointer;
+}
+
+#page.minichat #conversations .titre .fermer:hover {
+       background-color: #dddaf8;
+       color: #ffAAAA;
+}      
+
+#page.minichat #conversations .titre .next,
+#page.minichat #conversations .titre .prev {
+       display: none;
+}
+
+#page.minichat #conversations .titre .lien {
+       float: right
+}
+
+#page.minichat #conversations .titre .lien,
+#page.minichat #conversations .titre .next,
+#page.minichat #conversations .titre .prev,
+#page.minichat #conversations .titre .numPage {
+       background-color: #cac5f8;
+       cursor: pointer;
+       padding-right: 5px;
+       padding-left: 5px;
+}
+
+#page.minichat #conversations .titre .lien:hover,
+#page.minichat #conversations .titre .next:hover,
+#page.minichat #conversations .titre .prev:hover,
+#page.minichat #conversations .titre .numPage:hover {
+       background-color: #dddaf8;
+       color: #a2a2a2;
+}
+
+#page.minichat #pages {
+       margin-top: 10px;
+}
+
+#page.minichat #pages span {
+       padding-right : 4px;
+       padding-left: 4px;
+       color: #7169ae;
+       cursor:pointer;
+}
+
+#page.minichat #pages span.pageCourante {
+       font-weight: bold;
+       font-size: 150%;
+}
+
+#page.minichat #pages span:hover {
+       font-size: 150%;
+       color: #ada9cf;
+}
+
index 05a9702..2c7a753 100755 (executable)
@@ -6,7 +6,11 @@
    [ok] Supprimer l'envoie de la description des conversations lors du refresh ainsi que modifié la manière de créer les conversations (maj des diagrammes de séquence)\r
    [ok] Navigation vers les pages précédentes\r
    [ok] Lien vers une conversation dans les messages sous cette forme {5F}. Le clic dessus ouvre la conversation. Egalement un bouton sur chaque conversation pour insérer son lien dans le message en cours de rédaction\r
-   * Mettre à jour la CSS de chaque skin   \r
+   * Mettre à jour la CSS de chaque skin 
+* Flush le profil lors du déchargement de la page
+* Envoyer les infos des conversations avec l'attente d'events
+* Problème de rafraichissement des couleurs des messages auquels on répond
+* Changer les noms des css : Light -> Cold, Old -> Classic\r
 * Remplacer l'XML par du JSON. gain en simplicité et en temps d'execution.\r
    * Tester sur un prototype : l'authentification\r
    * Si concluant passage complet à JSON\r
@@ -34,7 +38,8 @@
    * http://forum-images.hardware.fr/icones/ohwell.gif\r
 * Un statut "EK" avec plein de privilège à la con. (avoir une petite étoile à coté de son nick ou le nick d'une certaine couleur)\r
 * Finir le script de mise en production\r
-   * Compatage des js lors de la mise en production (afin d'optimiser la bande passante lors de l'accès au site), regarder comment fait jQuery.\r
+   * Compatage des js lors de la mise en production (afin d'optimiser la bande passante lors de l'accès au site), regarder comment fait jQuery.
+   * modifier le script pour virer les lignes matchant /^\W*;;;.*$/\r
 * Traiter les tags TODO et FIXME dans le code\r
 * Cleaner le code (erl, js, xhtml, css) et eventuellement profiler un peu (le refresh est lent sous opera)\r
 * Restructurer le code Erlang : déplacer certaines fonctions d'un module à l'autre (ev. créer des modules)\r
 [2] Après un register le pseudo est effacé - le pseudo n'est pas mémorisé dans le profil lors d'un envoie de mess en l'ayant changé\r
 [2] cliquer sur les smiles ne marche pas sous IE\r
 [2] le return ne marche pas sous IE
+[3] Traiter le cas ou le cookie n'existe pas coté serveur (et plus généralement traiter tous les cas d'inputs exeptionnels)
 [3] "Return" ne marche pas sous safari\r
 [3] Amélioration des requêtes MNESIA, voir : http://mail.google.com/mail/#label/Erlang+mailing-list/117f688280569a58
 [3] la page est completement rechargé après avoir submité le profile dans opera
index 4cf6255..6126502 100644 (file)
@@ -2,16 +2,14 @@ Euphorik - Protocole v3
 -----------------------
 
 A. Introduction
----------------\r
-
+---------------
 Ce document a pour but de décrire la communication client-serveur du site euphorik.\r
 Les messages échangés sont basés sur le format JSON.
 Ce document remplace 'protocole2.txt'.
 \r
 
-B. Principe
------------
-
+B. Principes
+------------
 Enregistrement:\r
  * Permet de créer un compte, un cookie est donné en retour. Ce cookie doit être stocké par le client pour pouvoir s'authentifier par la suite.
 
@@ -22,14 +20,14 @@ Authentification:
 Rafraichissement:
  * Le client envoie une demande au serveur avec l'id du dernier message (via XMLHttpRequest ou un function de JQuery)
  * Le serveur maintient la connexion bloquée si le client est à jour.
- * Dès qu'un nouveau message arrive, le serveur débloque la connexion est envoie le ou les messages manquants.
+ * Dès qu'un nouveau message arrive, le serveur débloque la connexion et envoie le ou les messages manquants.
  
 
 C. Protocole
 ------------
 c : client
 s : server
-Les messages client vers serveur sont envoyé par HTTP-POST
+Les messages client vers serveur sont envoyés par HTTP-POST.
 
 
 C.1. Login
@@ -67,7 +65,7 @@ s -> c
       "main_page" : 1,\r
       "conversations" : [\r
          {\r
-            "racine" : 123,\r
+            "root" : 123,\r
             "page" : 1\r
          }\r
       ],\r
@@ -97,14 +95,14 @@ c -> s
       "pseudo" : "Paul",\r
       "email" : "paul@pierre.com",\r
       "css" : "css/3/euphorik.css",\r
-      "mainPage" : "1",\r
+      "mainPage" : 1,\r
       "conversations" : [\r
          {\r
-            "racine" : "4F",\r
+            "root" : 123,\r
             "page" : 1\r
          }\r
-      ],\r
-   }      \r
+      ]\r
+   }\r
       
 s -> c\r
    {\r
@@ -123,7 +121,14 @@ c -> s
       "action" : "wait_event",\r
       "cookie" : "LKJDLAKSJBFLKASN",\r
       "message_count" : 10,\r
-      "last_message_id" : 163\r
+      "last_message_id" : 163,
+      "mainPage" : 1,
+      "conversations" : [
+         {
+            "root" : 123,
+            "page" : 1
+         }
+      ]\r
    }
  
 s -> c\r
index 5ce9357..c880e8f 100755 (executable)
@@ -704,7 +704,7 @@ Client.prototype.enregistrement = function(login, password)
 
 Client.prototype.connexion = function(action)
 {
-   //action.action.dump()
+   action.action.dump("Connexion client")
    thisClient = this
    jQuery.ajax(
       {
@@ -716,7 +716,7 @@ Client.prototype.connexion = function(action)
          success:
             function(data)
             {
-               //thisClient.util.serializer.serializeToString(data).dump("Charger client")
+               thisClient.util.serializer.serializeToString(data).dump("Charger client")
                thisClient.chargerDonnees(data)
             }
       }
@@ -779,7 +779,7 @@ Client.prototype.flush = function(async)
       async = true
 
    thisClient = this
-   //this.util.xmlVersAction(this.getXMLProfile()).action.dump("Flush client")      
+   this.util.xmlVersAction(this.getXMLProfile()).action.dump("Flush client")      
    jQuery.ajax(
       {
          async: async,
index 454b357..f6b73c0 100755 (executable)
@@ -103,8 +103,8 @@ PageMinichat.prototype.charger = function()
 
 PageMinichat.prototype.decharger = function()
 {
-   if (this.attenteCourante != null)
-      this.attenteCourante.abort()
+   //alert(this.attenteCourante)
+   this.messages.stopAttenteCourante()
 }
 
 PageMinichat.prototype.getXMLMessage = function(pseudo, message, repondA)
@@ -140,7 +140,9 @@ PageMinichat.prototype.getXMLMessage = function(pseudo, message, repondA)
 }
 
 PageMinichat.prototype.envoyerMessage = function(pseudo, message)
-{\r
+{
+   var thisPageMinichat = this
+\r
    // (un pseudo vide est autorisé)
    pseudo = this.formateur.filtrerInputPseudo(pseudo)
 
@@ -152,15 +154,6 @@ PageMinichat.prototype.envoyerMessage = function(pseudo, message)
       for(var i = 0; i < tags.length; i++)
          repondA.push(/\{(.*?)\}>/.exec(tags[i])[1])
       message = message.replace(this.regexMessageTagReplace, "")
-            
-      // met à jour la classe des messages auquel repond celui ci (c'est un peu de la triche)
-      for (var i = 0; i < repondA.length; i++)
-      {
-         jQuery("#conversation div#" + repondA[i]).addClass("repondu")
-         for (var c = 0; c < this.messages.conversations.length; c++)
-            for (var m = 0; m < this.messages.conversations[c].messages.length; m++)
-               this.messages.conversations[c].messages[m].clientARepondu = true
-      }
    }\r
    \r
    message = message.trim()\r
@@ -185,8 +178,21 @@ PageMinichat.prototype.envoyerMessage = function(pseudo, message)
          dataType : "xml",\r
          success : function(data, textStatus)\r
          {
-            if(jQuery("statut", data.documentElement).text() == "ok")\r
-               jQuery("form input.message").val("")\r
+            if(jQuery("statut", data.documentElement).text() == "ok")
+            {\r
+               jQuery("form input.message").val("")
+                        
+               // met à jour la classe des messages auquel repond celui ci (c'est un peu de la triche)
+               for (var i = 0; i < repondA.length; i++)
+               {
+                  jQuery("#conversations div#" + repondA[i]).addClass("repondu")
+                  /* Ca sert à rien, TODO : tester/virer
+                  for (var c = 0; c < thisPageMinichat.messages.conversations.length; c++)
+                     for (var m = 0; m < thisPageMinichat.messages.conversations[c].messages.length; m++)
+                        thisPageMinichat.messages.conversations[c].messages[m].clientARepondu = true
+                  */
+               }
+            }\r
          }\r
       }\r
    )
@@ -302,6 +308,8 @@ function Conversation(num, util, formateur)
    this.formateur = formateur
    this.messages = new Array()
    this.messagesParId = new Object()
+   
+   this.nbMessageMax = conf.nbMessageAffiche // Le nombre de message affiché par page
 
    jQuery("#conversations").append(
       '<div id="' + this.getId() + '" class="conversation">\
@@ -450,8 +458,9 @@ Conversation.prototype.flush = function(funClickExtract, funClickLienConv)
    
    // 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();
+      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) > parseInt(idDernierMessageAffiche, 36)}).each(
@@ -753,6 +762,15 @@ Messages.prototype.viderMessages = function()
       this.conversations[i].viderMessages()
 }
 
+/**
+  * Arrete l'attente courante s'il y en a une.
+  */
+Messages.prototype.stopAttenteCourante = function()
+{
+   if (this.attenteCourante != null)
+      this.attenteCourante.abort()   
+}
+
 /**
   * Met à jour les messages de manière continue.
   * (AJAX-Comet-style proof)
@@ -762,16 +780,15 @@ Messages.prototype.rafraichirMessages = function(vider)
 {
    var thisMessages = this // caisupair javacrypte
    
-   if (this.attenteCourante != null)
-      this.attenteCourante.abort()
-   
    if (vider == undefined)
       vider = false
+      
+   this.stopAttenteCourante()
    
    if (vider)
       this.idDernierMessage = null\r
       
-   this.util.xmlVersAction(this.getXMLrafraichirMessages()).action.dump("Client")
+   ;;; this.util.xmlVersAction(this.getXMLrafraichirMessages()).action.dump("Client")
    this.attenteCourante = jQuery.ajax({
          type: "POST",
          url: "request",
@@ -780,7 +797,7 @@ Messages.prototype.rafraichirMessages = function(vider)
          success:
             function(data)
             {            \r
-               thisMessages.util.serializer.serializeToString(data).dump("Serveur")\r
+               ;;; thisMessages.util.serializer.serializeToString(data).dump("Serveur")\r
             
                if (vider)
                   thisMessages.viderMessages()
index d455d94..982c4a3 100755 (executable)
@@ -113,7 +113,7 @@ mise_en_forme_conversations([{Principale, Plus_principale} | Conversations]) ->
 % Ajoute les parents de chaque message.
 % @spec mise_en_forme_conversation([integer()]) -> [{integer(), [integer()]}]
 mise_en_forme_conversation(Messages) ->
-   lists:foldl(
+   lists:foldr(
       fun(Id, Acc) ->
          case euphorik_minichat:message_by_id(Id) of
             {ok, Message} ->
@@ -137,7 +137,7 @@ conversations_detailees(Racines, N, D, P) ->
       Curseur = qlc:cursor(q([E#minichat.id || E <- qlc:sort(table(minichat), [{order, descending}])])),
       {CP, Plus} = conversation_principale(Curseur, Conversations, N, P),
       qlc:delete_cursor(Curseur),
-      {reverse([M || M <- CP, M > D]), Plus} % filtre en fonction de D
+      {[M || M <- CP, M > D], Plus} % filtre en fonction de D
    end)),
    [Conversation_principale | Conversations].
    
@@ -146,11 +146,12 @@ conversations_detailees(Racines, N, D, P) ->
 % et la liste de conversations.
 % N est le nombre de messages que l'on souhaite.
 % P est le numéro de la page (1, 2, 3...)
-% Renvoie {[Id], Plus}
-% @spec conversation_principale(qlc:QueryCursor(), [Conversation_detailee()], integer(), integer())
+% @spec conversation_principale(qlc:QueryCursor(), [Conversation_detailee()], integer(), integer()) -> {[Id], Plus}
 conversation_principale(C, Conversations, N, P) ->
-   CP = conversation_principale2(C, lists:flatten(map(fun({C2, _, X, _}) -> C2 -- X end, Conversations)), N + 1, (P - 1) * N),
+   % on prend en message de plus pour savoir s'il y en a plus que ce que l'on désire
+   CP = reverse(conversation_principale2(C, lists:flatten(map(fun({C2, _, X, _}) -> C2 -- X end, Conversations)), N + 1, (P - 1) * N)),
    Plus = length(CP) =:= N + 1,
+   io:format("~p~n", [CP]),
    {
       if Plus ->
          [_| Suivants] = CP,
index dba48e2..c0090a5 100755 (executable)
@@ -83,7 +83,7 @@ profile(Action) ->
             Email = case xmerl_xpath:string("email", Action) of [#xmlElement{content = [#xmlText{value = E}]}] -> E; _ -> undefined end,
             Css = case xmerl_xpath:string("css", Action) of [#xmlElement{content = [#xmlText{value = C}]}] -> C; _ -> undefined end,
             Page_principale = case xmerl_xpath:string("pagePrincipale", Action) of [#xmlElement{content = [#xmlText{value = P3}]}] -> list_to_integer(P3); _ -> undefined end,
-            Conversations = lists:foldl(
+            Conversations = lists:foldr(
                fun(Conv, Acc) ->
                   [#xmlElement{content = [#xmlText{value = Id_racine_str}]}] = xmerl_xpath:string("racine", Conv),
                   [#xmlElement{content = [#xmlText{value = Page_conv_str}]}] = xmerl_xpath:string("page", Conv), 
@@ -130,17 +130,7 @@ refreshMessage(Action) ->
                      _ -> inconnu
                   end;
                _ -> inconnu
-            end,
-            % extraction des conversations en [{id, page}, ..]
-            % Obsolète : obtenu depuis la table 'user'
-            %~ Conversations = lists:map(
-               %~ fun(Conv) ->
-                  %~ [#xmlElement{content = [#xmlText{value = Id_racine_str}]}] = xmerl_xpath:string("racine", Conv),
-                  %~ [#xmlElement{content = [#xmlText{value = Page_conv_str}]}] = xmerl_xpath:string("page", Conv), 
-                  %~ {erlang:list_to_integer(Id_racine_str, 36), erlang:list_to_integer(Page_conv_str)}
-               %~ end,
-               %~ xmerl_xpath:string("conversation", Action)
-            %~ ),\r
+            end,\r
             % accrochez-vous ca va siouxer ;)
             [{reponse, [{name, "refreshMessages"}],\r
                lists:map(\r
@@ -178,7 +168,12 @@ refreshMessage(Action) ->
                         ]
                      }\r
                   end,
-                  euphorik_minichat_conversation:conversations(User#user.conversations, Nb_message, Dernier_id, User#user.page_principale)\r
+                  euphorik_minichat_conversation:conversations(
+                     if User =/= inconnu -> User#user.conversations; true -> [] end,
+                     Nb_message,
+                     Dernier_id,
+                     if User =/= inconnu -> User#user.page_principale; true -> 1 end
+                  )\r
                )
             }];
          _ ->
index d6d7294..0e4b046 100755 (executable)
@@ -23,10 +23,8 @@ tester() ->
    %~ io:format("Login : ~p~n", [euphorik_protocole:login(XML2)]).
    \r
    XML =\r
-      "<action name=\"refreshMessages\">"\r
-      "<nombreMessage>2</nombreMessage>"\r
-      "<page>1</page>"
-      "<conversation><racine>3</racine><page>1</page></conversation>"\r
+      "<action name=\"refreshMessages\"><cookie>3FSDCH0FD4ML8WEPN2B5T</cookie>"
+      "<nombreMessage>10</nombreMessage>"
       "</action>",\r
    io:format("Messages de la premières page : ~p~n", [traiter_xml(XML)]).
    \r