MOD prepa en vue de la mise ne preproduction
[euphorik.git] / js / pageMinichat / pageMinichat.js
index 2f53eb0..64914b1 100755 (executable)
  
 /*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;
+   this.communication = communication;
    this.commandes = new euphorik.Commandes(this.client);
    
    // permet d'éviter d'envoyer plusieurs messages simultanément en pressant
@@ -35,7 +36,7 @@ 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'
+   // 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>' +
@@ -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 euphorik.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,6 +96,12 @@ 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",
@@ -143,7 +153,7 @@ euphorik.PageMinichat.prototype.charger = function() {
       }
    );
    // </smiles>
-   
+      
    // événements
    var nouveauMessage = 
       function() {  
@@ -194,25 +204,28 @@ euphorik.PageMinichat.prototype.charger = function() {
    );
 };
 
+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 = [];
-   objectEach(this.conversations.messagesRepond, function(id) {
-      repondA.push(parseInt(id, 10));
-   });
-      
-   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) {   
@@ -248,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") {           
-            // 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")
-                  }
-               });
+   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));
    });
+      
+   return {
+      "cookie" : this.client.cookie,
+      "nick" : pseudo,
+      "content" : message,
+      "answer_to" : repondA
+   };
 };