REPORT de la branche 1.0
[euphorik.git] / js / pageAdmin.js
index 9091d6d..97c0243 100644 (file)
@@ -1,4 +1,20 @@
-// coding: utf-8
+// coding: utf-8\r
+// Copyright 2008 Grégory Burri\r
+//\r
+// This file is part of Euphorik.\r
+//\r
+// Euphorik is free software: you can redistribute it and/or modify\r
+// it under the terms of the GNU General Public License as published by\r
+// the Free Software Foundation, either version 3 of the License, or\r
+// (at your option) any later version.\r
+//\r
+// Euphorik is distributed in the hope that it will be useful,\r
+// but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+// GNU General Public License for more details.\r
+//\r
+// You should have received a copy of the GNU General Public License\r
+// along with Euphorik.  If not, see <http://www.gnu.org/licenses/>.
 
 function PageAdmin(client, formateur, util)
 {
@@ -8,14 +24,16 @@ function PageAdmin(client, formateur, util)
    this.formateur = formateur
    this.util = util
    
+   this.pageEvent = new PageEvent("admin", this.util)
+   
    this.timeoutIDmajIPs = null
 }
 
 PageAdmin.prototype.contenu = function()
 {
    return '<h1>Trolls</h1>\
-   <p>Un troll est un sujet à débat, en général une question.</p>\
-   <p>Chaque semaine un troll est choisit au hasard parmis les trolls proposés et devient le troll de la semaine.</p>\
+   <p>Un troll est un sujet à débat, en général une question, affiché sur la page principale.</p>\
+   <p>Chaque semaine un troll est choisi au hasard parmis les trolls proposés et devient le troll de la semaine.</p>\
    <form action="" id="nouveauTroll">\
       <p>\
          <input class="troll" name="troll" type="text" maxlength="500" value=""></input>\
@@ -34,7 +52,7 @@ PageAdmin.prototype.charger = function()
    var thisPage = this
    
    this.trolls = new Trolls(this.client, this.util, this.formateur)
-   this.trolls.rafraichirTrolls()
+   this.waitEvent()
    
    this.majIPs()
    
@@ -50,7 +68,7 @@ PageAdmin.prototype.charger = function()
 
 PageAdmin.prototype.decharger = function()
 {
-   this.trolls.pageEvent.stopAttenteCourante()
+   this.pageEvent.stopAttenteCourante()
 }
 
 PageAdmin.prototype.posterTroll = function()
@@ -73,7 +91,7 @@ PageAdmin.prototype.posterTroll = function()
          "content" : content
       }
 
-   ;;; dumpObj(dataToSend)
+   ;; dumpObj(dataToSend)
    jQuery.ajax(
       {
          type: "POST",
@@ -83,7 +101,7 @@ PageAdmin.prototype.posterTroll = function()
          success:
             function(data)
             {
-               ;;; dumpObj(data)
+               ;; dumpObj(data)
                
                if (data["reply"] == "ok")
                {
@@ -98,7 +116,6 @@ PageAdmin.prototype.posterTroll = function()
    )
 }
 
-
 /**
   * Met à jour la liste des IP bannies.
   */
@@ -115,7 +132,7 @@ PageAdmin.prototype.majIPs = function()
          "cookie" : this.client.cookie
       }
 
-   ;;; dumpObj(dataToSend)
+   ;; dumpObj(dataToSend)
    jQuery.ajax(
       {
          type: "POST",
@@ -125,7 +142,7 @@ PageAdmin.prototype.majIPs = function()
          success:
             function(data)
             {
-               ;;; dumpObj(data)
+               ;; dumpObj(data)
                
                if (data["reply"] == "list_banned_ips")
                {
@@ -155,11 +172,11 @@ PageAdmin.prototype.majIPs = function()
                   $(".ban").each(
                      function()
                      {
-                        var ip = $(".ip").html()
+                        var ip = $(".ip", this).html()
                         $(".deban", this).click(
                            function()
                            {
-                              thisPageAdmin.util.messageDialogue("Êtes-vous sur de vouloir débannir l'IP " + ip + " ?", messageType.question,
+                              thisPageAdmin.util.messageDialogue("Êtes-vous sur de vouloir débannir l'IP ''" + ip + "'' ?", messageType.question,
                                  {"Oui" : function()
                                     {
                                        thisPageAdmin.deban(ip)
@@ -196,7 +213,7 @@ PageAdmin.prototype.deban = function(ip)
          "ip" : ip
       }
 
-   ;;; dumpObj(dataToSend)
+   ;; dumpObj(dataToSend)
    jQuery.ajax(
       {
          type: "POST",
@@ -206,14 +223,15 @@ PageAdmin.prototype.deban = function(ip)
          success:
             function(data)
             {
-               ;;; dumpObj(data)
+               ;; dumpObj(data)
                switch(data["reply"])
                {
                   case "error" :
                      thisPageAdmin.util.messageDialogue(data["error_message"])
                      break
                   case "ok" :
-                     thisPageAdmin.majIPs()
+                     // obsolète : plus besoin
+                     /* thisPageAdmin.majIPs() */ 
                      break 
                }
             }
@@ -221,6 +239,36 @@ PageAdmin.prototype.deban = function(ip)
    )
 }
 
+PageAdmin.prototype.waitEvent = function()
+{
+   var thisPageAdmin = this
+         
+   this.pageEvent.waitEvent(
+      function() { return { "last_troll" : thisPageAdmin.trolls.dernierTroll }},
+      function(data)
+      {
+         switch (data["reply"])
+         {
+            case "troll_added" :
+               thisPageAdmin.trolls.ajouterTrollEvent(data)
+               break
+            case "troll_modified" :
+               thisPageAdmin.trolls.modifierTrollEvent(data)
+               break
+            case "troll_deleted" :
+               thisPageAdmin.trolls.supprimerTrollEvent(data)
+               break
+            case "banned_ips_refresh" :
+               thisPageAdmin.majIPs()
+               break
+            case "error" :
+               thisTrolls.util.messageDialogue(data["error_message"])
+               break
+         }
+      }
+   )
+}
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 
@@ -240,11 +288,107 @@ function Trolls(client, util, formateur)
    this.util = util
    this.formateur = formateur
    this.dernierTroll = 0
-   this.pageEvent = new PageEvent("admin", this.util)
    
    this.trolls = {}
 }
 
+Trolls.prototype.ajouterTrollEvent = function(data)
+{
+   var thisTrolls = this
+
+   var XHTML = ""
+   for (var i = 0; i < data["trolls"].length; i++)
+   {
+      var troll = new Troll(data["trolls"][i]["content"], data["trolls"][i]["author"])
+      var trollId = data["trolls"][i]["troll_id"]
+      thisTrolls.trolls[trollId] = troll
+   
+      XHTML +=
+         '<div id="troll' + trollId + '" class="troll">' +
+         '<span class="content">' + thisTrolls.formateur.traitementComplet(troll.content, troll.author) + '</span>' +
+         '<span class="author"> - ' + thisTrolls.formateur.traitementComplet(troll.author) + '</span>' +
+         (data["trolls"][i]["author_id"] == thisTrolls.client.id ? '<span class="editTroll">éditer</span><span class="delTroll">Supprimer</span>' : '') +
+         '</div>'
+   }
+   $("#trolls").append(XHTML)
+   $("#trolls .troll").filter(function(){return parseInt($(this).attr("id").substr(5)) > thisTrolls.dernierTroll}).each(
+      function()
+      {
+         var troll = this
+         var id = parseInt($(this).attr("id").substr(5))
+         
+         $("a[@rel*=lightbox]", this).lightBox()
+         
+         $(this).keypress(
+            function(e)
+            {
+               if (e.which == 13) // return
+                  $(".modifier", this).click()
+            }
+         )
+         $(".delTroll", this).click(
+            function()
+            {
+               thisTrolls.util.messageDialogue(
+                  "Êtes-vous sur de vouloir supprimer le troll \"" + thisTrolls.trolls[id].content + "\" ?",
+                  messageType.question,
+                  {
+                     "oui" : function()
+                        {
+                           thisTrolls.supprimer(id)
+                        },
+                     "non" : function(){}
+                  }
+               )
+            }
+         )
+         $(".editTroll", this).click(
+            function()
+            {
+               $("span", troll).css("display", "none")
+               $(troll).append(
+                  '<form><p><input class="content" type="text" size="50" maxlength="500" value="' +
+                  thisTrolls.trolls[id].content +
+                  '"></input><span class="modifier">modifier</span><span class="annuler">annuler</span></p></form>'
+               )
+               $("form input.content").focus()
+               
+               var virerLeFormulaire = function()
+               {
+                  $('form', troll).remove()
+                  $('span', troll).css("display", "inline")
+               }
+               $("span.modifier", troll).click(
+                  function()
+                  {
+                     var content = $("form input.content", troll).val()
+                     virerLeFormulaire()
+                     thisTrolls.modifier(id, content)
+                  }
+               )
+               $("span.annuler", troll).click( virerLeFormulaire )
+               $("form", troll).submit(function(){ return false})
+            }  
+         )
+      }
+   )
+   
+   if (data["trolls"].length > 0)
+      thisTrolls.dernierTroll = data["trolls"][data["trolls"].length - 1]["troll_id"]
+}
+
+Trolls.prototype.modifierTrollEvent = function(data)
+{
+   var thisTrolls = this
+   $("#trolls #troll" + data["troll_id"] + " .content").html(thisTrolls.formateur.traitementComplet(data["content"], thisTrolls.trolls[data["troll_id"]].author))
+   $("#trolls #troll" + data["troll_id"] + " a[@rel*=lightbox]").lightBox()
+   thisTrolls.trolls[data["troll_id"]].content = data["content"]
+}
+
+Trolls.prototype.supprimerTrollEvent = function(data)
+{
+   $("#trolls #troll"+data["troll_id"]).remove()
+}
 
 Trolls.prototype.modifier = function(id, content)
 {
@@ -258,7 +402,7 @@ Trolls.prototype.modifier = function(id, content)
          "content" : content
       }
 
-   ;;; dumpObj(dataToSend)
+   ;; dumpObj(dataToSend)
    jQuery.ajax(
       {
          type: "POST",
@@ -268,7 +412,7 @@ Trolls.prototype.modifier = function(id, content)
          success:
             function(data)
             {
-               ;;; dumpObj(data)
+               ;; dumpObj(data)
                if (data["reply"] == "error")
                {
                   thisTrolls.util.messageDialogue(data["error_message"])
@@ -292,7 +436,7 @@ Trolls.prototype.supprimer = function(id)
          "troll_id" : id
       }
 
-   ;;; dumpObj(dataToSend)
+   ;; dumpObj(dataToSend)
    jQuery.ajax(
       {
          type: "POST",
@@ -302,7 +446,7 @@ Trolls.prototype.supprimer = function(id)
          success:
             function(data)
             {
-               ;;; dumpObj(data)
+               ;; dumpObj(data)
                if (data["reply"] == "error")
                {
                   thisTrolls.util.messageDialogue(data["error_message"])
@@ -311,114 +455,3 @@ Trolls.prototype.supprimer = function(id)
       }
    )
 }
-
-Trolls.prototype.rafraichirTrolls = function()
-{
-   var thisTrolls = this
-         
-   this.pageEvent.waitEvent(
-      function() { return { "last_troll" : thisTrolls.dernierTroll }},
-      function(data)
-      {
-         switch (data["reply"])
-         {
-            case "troll_added" :
-               var XHTML = ""
-               for (var i = 0; i < data["trolls"].length; i++)
-               {
-                  var troll = new Troll(data["trolls"][i]["content"], data["trolls"][i]["author"])
-                  var trollId = data["trolls"][i]["troll_id"]
-                  thisTrolls.trolls[trollId] = troll
-               
-                  XHTML +=
-                     '<div id="troll' + trollId + '" class="troll">' +
-                     '<span class="content">' + thisTrolls.formateur.traitementComplet(troll.content, troll.author) + '</span>' +
-                     '<span class="author"> - ' + thisTrolls.formateur.traitementComplet(troll.author) + '</span>' +
-                     (data["trolls"][i]["author_id"] == thisTrolls.client.id ? '<span class="editTroll">éditer</span><span class="delTroll">Supprimer</span>' : '') +
-                     '</div>'
-               }
-               $("#trolls").append(XHTML)
-               $("#trolls .troll").filter(function(){return parseInt($(this).attr("id").substr(5)) > thisTrolls.dernierTroll}).each(
-                  function()
-                  {
-                     var troll = this
-                     var id = parseInt($(this).attr("id").substr(5))
-                     
-                     $("a[@rel*=lightbox]", this).lightBox()
-                     
-                     $(this).keypress(
-                        function(e)
-                        {
-                           if (e.which == 13) // return
-                              $(".modifier", this).click()
-                        }
-                     )
-                     $(".delTroll", this).click(
-                        function()
-                        {
-                           thisTrolls.util.messageDialogue(
-                              "Êtes-vous sur de vouloir supprimer le troll \"" + $("#trolls .troll .content").html() + "\" ?",
-                              messageType.question,
-                              {
-                                 "oui" : function()
-                                    {
-                                       thisTrolls.supprimer(id)
-                                    },
-                                 "non" : function(){}
-                              }
-                           )
-                        }
-                     )
-                     $(".editTroll", this).click(
-                        function()
-                        {
-                           $("span", troll).css("display", "none")
-                           $(troll).append(
-                              '<form><p><input class="content" type="text" size="50" maxlength="500" value="' +
-                              thisTrolls.trolls[id].content +
-                              '"></input><span class="modifier">modifier</span><span class="annuler">annuler</span></p></form>'
-                           )
-                           $("form input.content").focus()
-         
-                           var virerLeFormulaire = function()
-                           {
-                              $("form", troll).remove()
-                              $('span', troll).css("display", "inline")
-                           }
-                           $("span.modifier", troll).click(
-                              function()
-                              {
-                                 var content = $("form input.content", troll).val()
-                                 virerLeFormulaire()
-                                 thisTrolls.modifier(id, content)
-                              }
-                           )
-                           $("span.annuler", troll).click( virerLeFormulaire )
-                           $("form", troll).submit(function(){ return false})
-                        }  
-                     )
-                  }
-               )
-               
-               if (data["trolls"].length > 0)
-                  thisTrolls.dernierTroll = data["trolls"][data["trolls"].length - 1]["troll_id"]
-               break
-            case "troll_modified" :
-               $("#trolls #troll" + data["troll_id"] + " .content").html(thisTrolls.formateur.traitementComplet(data["content"], thisTrolls.trolls[data["troll_id"]].author))
-               $("#trolls #troll" + data["troll_id"] + " a[@rel*=lightbox]").lightBox()
-               thisTrolls.trolls[data["troll_id"]].content = data["content"]
-               break
-            case "troll_deleted" :
-               $("#trolls #troll"+data["troll_id"]).remove()
-               break
-            case "majIPs" :
-               // TODO : mettre l'attente au niveau de la page et pas au niveau des trolls
-               // thisPageAdmin.majIPs()
-               break
-            case "error" :
-               thisTrolls.util.messageDialogue(data["error_message"])
-               break
-         }
-      }
-   )
-}
\ No newline at end of file