MOD prepa en vue de la mise ne preproduction
[euphorik.git] / js / pageMinichat / pageMinichat.js
index 7aeb158..64914b1 100755 (executable)
 //
 // You should have received a copy of the GNU General Public License
 // along with Euphorik.  If not, see <http://www.gnu.org/licenses/>.
\r
-/*jslint laxbreak:true */\r
+/*jslint laxbreak:true */
 
-euphorik.PageMinichat = function(client, formateur, util) {
+euphorik.PageMinichat = function(client, formateur, util, communication) {
    this.nom = "minichat";
    
    this.client = client;
    this.formateur = formateur;
-   this.util = util;\r
+   this.util = util;
+   this.communication = communication;
    this.commandes = new euphorik.Commandes(this.client);
    
    // permet d'éviter d'envoyer plusieurs messages simultanément en pressant
@@ -35,8 +36,8 @@ euphorik.PageMinichat = function(client, formateur, util) {
 };
 
 euphorik.PageMinichat.prototype.contenu = function() {
-   // le fait que tout soit collé est fait exprès, permet d'éviter d'avoir des espaces supplémentaires entre les spans'
-   var formulaireXHTML = '' +\r
+   // le fait que tout soit collé est fait exprès, permet d'éviter d'avoir des espaces supplémentaires entre les spans
+   var formulaireXHTML = '' +
       '<form method="post" action="" id ="posterMessage">' +
       ' <p>' +
       '  <input class="captcha" name="captcha" type="text" size="8" maxlength="8"></input>' +
@@ -46,7 +47,7 @@ euphorik.PageMinichat.prototype.contenu = function() {
       '  <button class="smiles"></button>' +
       '  <button class="return"></button>' +
       ' </p>' +
-      '</form>';\r
+      '</form>';
       
    var trollXHTML = '<div id="trollCourant">Troll de la semaine : <span class="troll"></span></div>';
    var conversationXHTML = '<table id="conversations"><tr></tr></table>';
@@ -54,7 +55,7 @@ euphorik.PageMinichat.prototype.contenu = function() {
    if (this.client.chatOrder === "reverse") {
       return trollXHTML + formulaireXHTML + conversationXHTML;
    } else {
-      return trollXHTML + conversationXHTML + formulaireXHTML;\r
+      return trollXHTML + conversationXHTML + formulaireXHTML;
    }
 };
 
@@ -64,18 +65,21 @@ euphorik.PageMinichat.prototype.classes = function() {
 
 euphorik.PageMinichat.prototype.charger = function() {   
    thisPage = this;
-
+   
    $("#posterMessage input.pseudo").val(this.client.pseudo);
    
    // cet appel ne doit pas être fait avant l'appel à 'charger'
-   this.conversations = new Conversations(this.client, this.formateur, this.util);
+   this.conversations = new euphorik.Conversations(this.client, this.formateur, this.util, this.fragment);   
    
-   this.conversations.rafraichirMessages(true);
+   this.chargerConversationsFragment();
    
+   this.conversations.rafraichirMessages(true);   
+    
    this.util.setCaretToEnd($("form#posterMessage input.message")[0]);
 
    // les outils de bannissement (uniquement pour les ekMaster)
    if (this.client.ekMaster) {    
+      // TODO : augmentation un peu space, à revoir
       this.util.outilsBan = $(
          '<span id="outilsBan">' +
          ' <span class="spacer"></span>' +
@@ -92,16 +96,29 @@ euphorik.PageMinichat.prototype.charger = function() {
       this.util.infoBulle("La raison", $("input", this.util.outilsBan));
    }
    
+   // la barre d'outils liée à chaque message
+   this.util.outilsMessage = $('<div class="outilsMess"><div class="extraire"></div><div class="extraireCompletement"></div></div>').prependTo("#page.minichat")
+   this.util.outilsMessage.largeur = this.util.outilsMessage.width(); // TODO : gros cheat pas beau :O
+   this.util.infoBulle("Extraction de la conversation à partir de ce message", $(".extraire", this.util.outilsMessage));
+   this.util.infoBulle("Extraction de la conversation complète", $(".extraireCompletement", this.util.outilsMessage));
+   
    this.util.infoBulle("Ouvrir la conversation liée au troll de la semaine", $("#trollCourant .troll"));
    
    this.util.infoBulle("Cliquer sur les messages pour les enlevers de la liste",
       $("form#posterMessage #repondA").hover(
-         function() { thisPage.util.afficherBoite($(".messages", this), $(this), positionTypeX.centre, positionTypeY.bas); },
+         function() {
+            thisPage.util.afficherBoite(
+               $(".messages", this),
+               $(this),
+               euphorik.Util.positionTypeX.centre,
+               thisPage.client.chatOrder === "reverse" ? euphorik.Util.positionTypeY.bas : euphorik.Util.positionTypeY.haut
+            );
+         },
          function() { $(".messages", this).hide(); }
       ).click(
          function(e) {
             if ($(e.target).is(".nb")) {
-               thisPage.conversations.enleverMessagesRepond();\r
+               thisPage.conversations.enleverMessagesRepond();
             }
          }     
       ),
@@ -126,7 +143,7 @@ euphorik.PageMinichat.prototype.charger = function() {
    );
    $("form#posterMessage button.smiles").hover(
       // affichage de la boite présentant les smiles
-      function(e){ thisPage.util.afficherBoite($("#smiles"), $(e.target), positionTypeX.centre, positionTypeY.basRecouvrement); },
+      function(e){ thisPage.util.afficherBoite($("#smiles"), $(e.target), euphorik.Util.positionTypeX.centre, euphorik.Util.positionTypeY.basRecouvrement); },
       function(){}
    );
    $("#smiles").hover(
@@ -136,29 +153,29 @@ euphorik.PageMinichat.prototype.charger = function() {
       }
    );
    // </smiles>
-   
+      
    // événements
    var nouveauMessage = 
       function() {  
          // captcha anti bot
-         if ($("form#posterMessage input.captcha").val() !== "") {\r
-            return;\r
-         }\r
-         \r
-         var message = $("form#posterMessage input.message").val();\r
-         \r
-         // traitement des commandes..\r
-         var retCommandes = thisPage.commandes.exec(message);         \r
-         switch (retCommandes[0]) {\r
+         if ($("form#posterMessage input.captcha").val() !== "") {
+            return;
+         }
+         
+         var message = $("form#posterMessage input.message").val();
+         
+         // traitement des commandes..
+         var retCommandes = thisPage.commandes.exec(message);         
+         switch (retCommandes[0]) {
             case euphorik.Commandes.statut.pas_une_commande :
-               thisPage.envoyerMessage(message, $("form#posterMessage input.message").val());\r
-               break;\r
-            case euphorik.Commandes.statut.erreur_commande :\r
-               thisPage.util.messageDialogue(retCommandes[1], euphorik.Util.messageType.erreur);\r
-               break;\r
-            case euphorik.Commandes.statut.ok :\r
-               $("form#posterMessage input.message").val("");\r
-               break;\r
+               thisPage.envoyerMessage($("form#posterMessage input.pseudo").val(), message);
+               break;
+            case euphorik.Commandes.statut.erreur_commande :
+               thisPage.util.messageDialogue(retCommandes[1], euphorik.Util.messageType.erreur);
+               break;
+            case euphorik.Commandes.statut.ok :
+               $("form#posterMessage input.message").val("");
+               break;
          }         
             
          $("form#posterMessage input.message").focus();
@@ -167,7 +184,7 @@ euphorik.PageMinichat.prototype.charger = function() {
    $("form#posterMessage").keypress(
       function(e) {
          if (e.which === 13) { // return
-            nouveauMessage();\r
+            nouveauMessage();
          }
       }
    );
@@ -181,31 +198,34 @@ euphorik.PageMinichat.prototype.charger = function() {
       function() {
          var input = $("input.pseudo")[0];
          if (input.value === euphorik.conf.pseudoDefaut) {
-            input.value = "";\r
+            input.value = "";
          }
       }
    );
 };
 
+euphorik.PageMinichat.prototype.chargerConversationsFragment = function() {
+   var thisPageMinichat = this; 
+   
+   // attention : "conv" doit être un tableau d'entier
+   try {
+      var conv = this.fragment.getVal("conv");
+      if (conv) {
+         conv.each(function(i, racine) {
+            thisPageMinichat.client.ajouterConversation(racine)
+         });
+      }
+   } catch(e) {
+      ;; console.log(e)
+   }
+}
+  
 euphorik.PageMinichat.prototype.decharger = function() {
    this.conversations.comet.stopAttenteCourante();
    
    $("body #smiles").remove();
-};
-
-euphorik.PageMinichat.prototype.getJSONMessage = function(pseudo, message) {
-   var repondA = [];\r
-   objectEach(this.conversations.messagesRepond, function(id) {
-      repondA.push(parseInt(id, 10));\r
-   });
-      
-   return {
-      "header" : { "action" : "put_message", "version" : euphorik.conf.versionProtocole },
-      "cookie" : this.client.cookie,
-      "nick" : pseudo,
-      "content" : message,
-      "answer_to" : repondA
-   };
+   
+    this.fragment.delVal("conv")
 };
 
 euphorik.PageMinichat.prototype.envoyerMessage = function(pseudo, message) {   
@@ -218,7 +238,7 @@ euphorik.PageMinichat.prototype.envoyerMessage = function(pseudo, message) {
       this.util.messageDialogue("Le pseudo ne peut pas être " + euphorik.conf.nickDefaut);
       return;
    }
-   \r
+   
    message = message.trim();
    if (!message) {
       this.util.messageDialogue("Le message est vide");
@@ -229,7 +249,7 @@ euphorik.PageMinichat.prototype.envoyerMessage = function(pseudo, message) {
       if (!this.client.enregistrement()) {
          this.util.messageDialogue("login impossible");
          return;
-      }\r
+      }
    }
       
    this.client.pseudo = pseudo;
@@ -241,38 +261,48 @@ euphorik.PageMinichat.prototype.envoyerMessage = function(pseudo, message) {
    }
    this.envoieMessageEnCours = true;
    
-   jQuery.ajax({
-      url : "request", 
-      type: "POST",
-      data : this.util.jsonVersAction(this.getJSONMessage(pseudo, message)),
-      dataType : "json",
-      beforeSend : function(xmlHttpRequest) {
-         // TODO : ça marche ça ??
-         xmlHttpRequest.setRequestHeader("X-Requested-With", "");
-      },
-      success : function(data, textStatus) {         
-         if(data.reply === "ok") {           
-            // met à jour la classe des messages auquel repond celui ci (c'est un peu de la triche) TODO : ya mieux ?\r
-            objectEach(thisPageMinichat.conversations.messagesRepond, function(messId) {\r
-               thisPageMinichat.conversations.conversations.each(function(i, conv) {
-                  var mess = conv.messagesParId[messId];
-                  if (!mess) {
-                     mess.clientARepondu = true;\r
-                  }
-               });
-               // TODO : ca sert à qque chose ?
-               //$("#conversations div#" + thisPageMinichat.conversations.messagesRepond[messId].getId()).addClass("repondu")
+   this.communication.requete(
+      "put_message",
+      this.getJSONMessage(pseudo, message),
+      function() {
+         // TODO : revoir cette partie
+         // met à jour la classe des messages auquel repond celui ci (c'est un peu de la triche) TODO : ya mieux ?
+         objectEach(thisPageMinichat.conversations.messagesRepond, function(messId) {
+            thisPageMinichat.conversations.conversations.each(function(i, conv) {
+               var mess = conv.messagesParId[messId];
+               if (mess) {
+                  mess.clientARepondu = true;
+                  $("#conversations #" + mess.getId(conv.getId())).addClass("repondu")
+               }
             });
-            
-            $("form#posterMessage input.message").val("");
-            thisPageMinichat.conversations.enleverMessagesRepond();
-         } else if (data.reply === "error") {
-            thisPageMinichat.util.messageDialogue(data.error_message);
-         }
+         });
+         $("form#posterMessage input.message").val("");
+         thisPageMinichat.conversations.enleverMessagesRepond(); 
          thisPageMinichat.envoieMessageEnCours = false;
       },
-      error : function() {
+      function(data) {
+         thisPageMinichat.util.messageDialogue(data.error_message);
          thisPageMinichat.envoieMessageEnCours = false;
+      },
+      true,
+      {
+         error : function() {
+            thisPageMinichat.envoieMessageEnCours = false;
+         }
       }
+   );
+};
+
+euphorik.PageMinichat.prototype.getJSONMessage = function(pseudo, message) {
+   var repondA = [];
+   objectEach(this.conversations.messagesRepond, function(id) {
+      repondA.push(parseInt(id, 10));
    });
-};\r
+      
+   return {
+      "cookie" : this.client.cookie,
+      "nick" : pseudo,
+      "content" : message,
+      "answer_to" : repondA
+   };
+};