ADD un objet permettant l'attente des événements. Utilisé pour la page 'chat' et...
[euphorik.git] / js / pageMinichat.js
index 792caf9..ed0321c 100755 (executable)
@@ -44,7 +44,12 @@ PageMinichat.prototype.charger = function()
    if (this.client.ekMaster)
    {    
       $("body").append(
-         "<div id=\"outilsBan\"><img id=\"ban\" alt=\"Ban de 3 jours\" src=\"img/ban.gif\" /><img id=\"kick\" alt=\"Ban de 15min\" src=\"img/kick.gif\" /><img id=\"slap\" alt=\"Avertissement\" src=\"img/slap.gif\" /></div>"
+         '<div id="outilsBan">' +
+         '<form><p><input id="raison" name="raison" type="text" size="10" maxlength="200"></input></p></form>' +
+         '<img id="ban" src="img/ban.gif" alt="Ban de 3 jours" />' +
+         '<img id="kick" src="img/kick.gif" alt="Ban de 15min" />' +
+         '<img id="slap" src="img/slap.gif" alt="Avertissement" />' +
+         '</div>'
       )
       $("#outilsBan").hover(
          function(){},
@@ -145,8 +150,7 @@ PageMinichat.prototype.charger = function()
 
 PageMinichat.prototype.decharger = function()
 {
-   //alert(this.attenteCourante)
-   this.messages.stopAttenteCourante()
+   this.messages.pageEvent.stopAttenteCourante()
    
    $("body #smiles").remove()
    $("body #outilsBan").remove()
@@ -535,7 +539,7 @@ Conversation.prototype.flush = function(funClickOuvrirConv)
             }
          )
          
-         $("a[@rel*=lightbox]").lightBox()
+         $("a[@rel*=lightbox]", this).lightBox()
          
          // les outils de bannissement (uniquement pour les ekMaster)
          if (thisConversation.client.ekMaster)
@@ -546,18 +550,27 @@ Conversation.prototype.flush = function(funClickOuvrirConv)
                   var element = $(e.target)
                   var h = element.height()
                   var offset = element.offset()
-                  var outils = $("#outilsBan").css("top", offset.top - 2).css("left", offset.left - 2).height(h < 16 ? 16 : h).width(element.width() + 16 * 3 + 4).show()
+                  var outils = $("#outilsBan").css("top", offset.top - 2).css("left", offset.left - 2).height(h < 16 ? 16 : h).width(element.width() + 16 * 3 + 4 + 64).show()
                   $("img", outils).unbind()
+                  $("#slap", outils).click(
+                     function(e)
+                     {
+                        thisConversation.client.slap(userId, $("#outilsBan input").val())
+                        $("#outilsBan input").val("")
+                     }
+                  )
                   $("#kick", outils).click(
                      function(e)
                      {
-                        thisConversation.client.kick(userId)
+                        thisConversation.client.kick(userId, $("#outilsBan input").val())
+                        $("#outilsBan input").val("")
                      }
                   )
                   $("#ban", outils).click(
                      function(e)
                      {
-                        thisConversation.client.ban(userId)
+                        thisConversation.client.ban(userId, $("#outilsBan input").val())
+                        $("#outilsBan input").val("")
                      }
                   )
                },
@@ -658,8 +671,7 @@ function Messages(client, formateur, util)
    this.conversations = new Array() // les conversations, la première représente la conversation principale
    this.nouvelleConversation(0)
    
-   // l'objet JSONHttpRequest représentant la connexion d'attente
-   this.attenteCourante = null
+   this.pageEvent = new PageEvent("chat", this.util)
 }
 
 /**
@@ -668,8 +680,6 @@ function Messages(client, formateur, util)
 Messages.prototype.getJSONrafraichirMessages = function()
 {
    var mess =  {
-      "action" : "wait_event",
-      "page" : "chat",
       "message_count" : conf.nbMessageAffiche,
       "main_page" : this.client.pagePrincipale,
       "conversations" : this.getJSONConversations()
@@ -678,9 +688,6 @@ Messages.prototype.getJSONrafraichirMessages = function()
    if (this.client.cookie != null) mess["cookie"] = this.client.cookie;
    mess["last_message_id"] = this.conversations[0].idDernierMessageAffiche
    
-   // obsolète
-   //if (this.idDernierMessage != null) mess["last_message_id"] = this.idDernierMessage
-   
    return mess
 }
 
@@ -863,22 +870,10 @@ Messages.prototype.ouvrirConversation = function(racine)
 
 Messages.prototype.viderMessages = function()
 {
-   // Obsolète
-   //this.idDernierMessage = null
-   
    for (var i = 0; i < this.conversations.length; i++)
       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)
@@ -886,51 +881,34 @@ Messages.prototype.stopAttenteCourante = function()
   */
 Messages.prototype.rafraichirMessages = function(vider)
 {
-   var thisMessages = this // caisupair javacrypte
+   var thisMessages = this
    
    if (vider == undefined)
       vider = false
-      
-   this.stopAttenteCourante()
    
    if (vider)
       for (var i = 0; i < this.conversations.length; i++)
-         this.conversations[i].idDernierMessageAffiche = 0\r
-      
-   dumpObj(this.getJSONrafraichirMessages())
-   this.attenteCourante = jQuery.ajax({
-      type: "POST",
-      url: "request",
-      dataType: "json",
-      data: this.util.jsonVersAction(this.getJSONrafraichirMessages()),
-      success:
-         function(data)
-         {            \r
-            ;;; dumpObj(data)\r
+         this.conversations[i].idDernierMessageAffiche = 0
          
+   this.pageEvent.waitEvent(
+      function() { return thisMessages.getJSONrafraichirMessages() },
+      function(data)
+      {
             if (vider)
+            {
                thisMessages.viderMessages()
+               vider = false
+            }
             
             // 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 FIXME : marche pas
-               //if (data["conversations"][numConv]["messages"].length == 0) continue
-               
                if (! thisMessages.ajouterMessages(data["conversations"][numConv], numConv))
                {
                   thisMessages.util.messageDialogue("La conversation {" + thisMessages.client.conversations[numConv -1].root.toString(36) + "} n'existe pas")
                   thisMessages.client.supprimerConversation(numConv - 1) 
                }
             }
-            
-            // rappel de la fonction dans 100 ms
-            setTimeout(function(){ thisMessages.rafraichirMessages() }, 100);
-         },
-      error:
-         function(XMLHttpRequest, textStatus, errorThrown)
-         {
-            setTimeout(function(){ thisMessages.rafraichirMessages() }, 1000);
-         }
-   })
+      }
+   )
 }