From ff1b8889e37bdecb354caa1f330a3ce2cfa82519 Mon Sep 17 00:00:00 2001
From: Greg Burri <greg.burri@gmail.com>
Date: Fri, 18 Jul 2008 07:06:09 +0000
Subject: [PATCH] MOD avancement dans la Grande Restructuration

---
 js/client.js   | 553 +++++++++++++++++++++++--------------------------
 js/euphorik.js |  14 +-
 2 files changed, 271 insertions(+), 296 deletions(-)

diff --git a/js/client.js b/js/client.js
index a09819b..ea96902 100644
--- a/js/client.js
+++ b/js/client.js
@@ -26,12 +26,12 @@ euphorik.Client.statutType = {
    auth_not_registered : 1,
    // mode déconnecté, ne peut pas poster de message
    deconnected : 2
-}
+};
 
 /**
   * Représente l'utilisateur du site.
   */
-function Client(util) {
+euphorik.Client = function(util) {
    this.util = util;
    
    this.cookie = null;
@@ -43,10 +43,10 @@ function Client(util) {
    this.setStatut(euphorik.Client.statutType.deconnected);
    
    // si true alors chaque modification du client est mémorisé sur le serveur
-   this.autoflush = $.browser["opera"];
-}
+   this.autoflush = $.browser.opera;
+};
 
-Client.prototype.resetDonneesPersonnelles = function() {
+euphorik.Client.prototype.resetDonneesPersonnelles = function() {
    this.id = 0;
    this.pseudo = euphorik.conf.pseudoDefaut;
    this.login = "";
@@ -68,10 +68,10 @@ Client.prototype.resetDonneesPersonnelles = function() {
    // - page (entier)
    // - reduit (bool)
    this.conversations = [];
-}
+};
 
-Client.prototype.setCss = function(css) {
-   if (this.css == css || css == "") {
+euphorik.Client.prototype.setCss = function(css) {
+   if (this.css === css || !css) {
       return;
    }
 
@@ -80,30 +80,29 @@ Client.prototype.setCss = function(css) {
    if (this.autoflush) {
       this.flush(true);
    }
-}
+};
 
-Client.prototype.pageSuivante = function(numConv) {
+euphorik.Client.prototype.pageSuivante = function(numConv) {
    if (numConv < 0 && this.pagePrincipale > 1) {
       this.pagePrincipale -= 1;
    } else if (this.conversations[numConv].page > 1) {
       this.conversations[numConv].page -= 1;
    }
-}
+};
 
-Client.prototype.pagePrecedente = function(numConv) {
+euphorik.Client.prototype.pagePrecedente = function(numConv) {
    if (numConv < 0) {
       this.pagePrincipale += 1;
-   }
-   else {
+   } else {
       this.conversations[numConv].page += 1;
    }
-}
+};
 
 /**
   * Définit la première page pour la conversation donnée.
   * @return true si la page a changé sinon false
   */
-Client.prototype.goPremierePage = function(numConv)
+euphorik.Client.prototype.goPremierePage = function(numConv)
 {
    if (numConv < 0) {
       if (this.pagePrincipale == 1) {
@@ -117,7 +116,7 @@ Client.prototype.goPremierePage = function(numConv)
       this.conversations[numConv].page = 1;
    }
    return true;
-}
+};
 
 /**
   * Ajoute une conversation à la vue de l'utilisateur.
@@ -125,74 +124,77 @@ Client.prototype.goPremierePage = function(numConv)
   * @param racines la racine de la conversation (integer)
   * @return true si la conversation a été créée sinon false (par exemple si la conv existe déjà)
   */
-Client.prototype.ajouterConversation = function(racine) {
-   // vérification s'il elle n'existe pas déjà
-   for (var i = 0; i < this.conversations.length; i++)
-      if (this.conversations[i].root == racine)
-         return false
+euphorik.Client.prototype.ajouterConversation = function(racine) {
+   // vérification s'il elle n'existe pas déjà   
+   this.conversations.each(function(i, conv) {
+      if (conv.root === racine) {
+         return false;
+      }
+   });
    
-   this.conversations.push({root : racine, page : 1, reduit : false})
-   if (this.autoflush) this.flush(true)
+   this.conversations.push({root : racine, page : 1, reduit : false});
+   if (this.autoflush) {
+      this.flush(true);
+   }
    
-   return true
-}
+   return true;
+};
 
-Client.prototype.supprimerConversation = function(num)
-{
-   if (num < 0 || num >= this.conversations.length) return
+euphorik.Client.prototype.supprimerConversation = function(num) {
+   if (num < 0 || num >= this.conversations.length) {
+      return;
+   }
    
    // décalage TODO : supprimer le dernier élément 
-   for (var i = num; i < this.conversations.length - 1; i++)
-      this.conversations[i] = this.conversations[i+1]
-   this.conversations.pop()
+   for (var i = num; i < this.conversations.length - 1; i++) {
+      this.conversations[i] = this.conversations[i+1];
+   }
+   this.conversations.pop();
    
-   if (this.autoflush) this.flush(true)
-}
+   if (this.autoflush) {
+      this.flush(true);
+   }
+};
 
-Client.prototype.getJSONLogin = function(login, password)
-{
+euphorik.Client.prototype.getJSONLogin = function(login, password) {
    return {
       "header" : { "action" : "authentification", "version" : euphorik.conf.versionProtocole },
       "login" : login,
       "password" : password
-   }
-}
+   };
+};
 
-Client.prototype.getJSONLoginCookie = function()
-{
+euphorik.Client.prototype.getJSONLoginCookie = function() {
    return {
       "header" : { "action" : "authentification", "version" : euphorik.conf.versionProtocole },
       "cookie" : this.cookie
-   }
-}  
+   };
+}; 
 
 /**
   * le couple (login, password) est facultatif. S'il n'est pas fournit alors il ne sera pas possible
   * de s'autentifier avec (login, password).
   */
-Client.prototype.getJSONEnregistrement = function(login, password)
-{
-   var mess = { "header" : { "action" : "register", "version" : euphorik.conf.versionProtocole }}
+euphorik.Client.prototype.getJSONEnregistrement = function(login, password) {
+   var mess = { "header" : { "action" : "register", "version" : euphorik.conf.versionProtocole } };
    
-   if (login != undefined && password != undefined)
-   {
-      mess["login"] = login
-      mess["password"] = password
+   if (login && password) {
+      mess.login = login;
+      mess.password = password;
    }
    
    return mess;
-}
+};
 
-Client.prototype.getJSONConversations = function()
-{
-   var conversations = new Array()
-   for (var i = 0; i < this.conversations.length; i++)
-      conversations.push({root : this.conversations[i].root, minimized : this.conversations[i].reduit})
-   return conversations
-}
+euphorik.Client.prototype.getJSONConversations = function() {
+   var conversations = [];
+   this.conversations.each(function(i, conv) {
+      conversations.push({ "root" : conv.root, "minimized" : conv.reduit });
+   });
+   return conversations;
+};
 
-Client.prototype.getJSONProfile = function()
-{
+euphorik.Client.prototype.getJSONProfile = function() {
    return {
       "header" : { "action" : "set_profile", "version" : euphorik.conf.versionProtocole },
       "cookie" : this.cookie,
@@ -207,58 +209,60 @@ Client.prototype.getJSONProfile = function()
       "view_tooltips" : this.viewTooltips,
       "conversations" : this.getJSONConversations(),
       "ostentatious_master" : this.ostentatiousMaster
-   }
-}
+   };
+};
 
 /**
-  * Renvoie null si pas définit.
+  * .
   */
-Client.prototype.getCookie = function()
-{
-   var cookie = this.regexCookie.exec(document.cookie)
-   if (cookie == null) this.cookie = null
-   else this.cookie = cookie[1]
-}
+euphorik.Client.prototype.getCookie = function() {
+   var cookie = this.regexCookie.exec(document.cookie);
+   if (cookie) {
+      this.cookie = cookie[1];
+   } else {
+      this.cookie = undefined;
+   }
+};
 
-Client.prototype.delCookie = function()
-{
-   document.cookie = "cookie=; max-age=0"
-}
+euphorik.Client.prototype.delCookie = function() {
+   document.cookie = "cookie=; max-age=0";
+   this.cookie = undefined;
+};
 
-Client.prototype.setCookie = function()
-{
-   if (this.cookie == null || this.cookie == undefined)
-      return
+euphorik.Client.prototype.setCookie = function() {
+   if (!this.cookie) {
+      return;
+   }
       
    // ne fonctionne pas sous IE....
    /*document.cookie = "cookie=" + this.cookie + "; max-age="  + (60 * 60 * 24 * 365) */
    
    document.cookie = 
-      "cookie="+this.cookie+"; expires=" + new Date(new Date().getTime() + 1000 * 60 * 60 * 24 * 365).toUTCString()
-}
+      "cookie="+this.cookie+"; expires=" + new Date(new Date().getTime() + 1000 * 60 * 60 * 24 * 365).toUTCString();
+};
 
-Client.prototype.authentifie = function()
-{
-   return this.statut == euphorik.Client.statutType.auth_registered || this.statut == euphorik.Client.statutType.auth_not_registered
-}
+euphorik.Client.prototype.authentifie = function() {
+   return this.statut === euphorik.Client.statutType.auth_registered || this.statut === euphorik.Client.statutType.auth_not_registered;
+};
 
-Client.prototype.setStatut = function(statut)
+euphorik.Client.prototype.setStatut = function(statut)
 {  
    // conversation en "enum" si en "string"
-   if (typeof(statut) == "string")
-   {
+   if (typeof(statut) === "string") {
       statut =
-         statut == "auth_registered" ?
+         statut === "auth_registered" ?
             euphorik.Client.statutType.auth_registered :
-         (statut == "auth_not_registered" ? euphorik.Client.statutType.auth_not_registered : euphorik.Client.statutType.deconnected)
-   }   
+         (statut === "auth_not_registered" ? euphorik.Client.statutType.auth_not_registered : euphorik.Client.statutType.deconnected);
+   }
    
-   if (statut == this.statut) return
+   if (statut === this.statut) {
+      return;
+   }
    
-   this.statut = statut   
-   this.majMenu()
-   this.majLogo()
-}
+   this.statut = statut;
+   this.majMenu();
+   this.majLogo();
+};
 
 /**
   * Effectue la connexion vers le serveur.
@@ -266,269 +270,234 @@ Client.prototype.setStatut = function(statut)
   * S'il existe un cookie en local on s'authentifie directement avec lui.
   * Si il n'est pas possible de s'authentifier alors on affiche un captcha anti-bot.
   */
-Client.prototype.connexionCookie = function()
-{
-   this.getCookie()
-   if (this.cookie == null) return false;
-   return this.connexion(this.getJSONLoginCookie())
-}
-
-Client.prototype.connexionLogin = function(login, password)
-{
-   return this.connexion(this.getJSONLogin(login, password))
-}
-
-Client.prototype.enregistrement = function(login, password)
-{ 
-   if (this.authentifie())
-   {
-      this.login = login
-      this.password = password
-      if(this.flush())
-      {
-         this.setStatut(euphorik.Client.statutType.auth_registered)
-         return true
-      }
-      return false
+euphorik.Client.prototype.connexionCookie = function() {
+   this.getCookie();
+   if (!this.cookie) {
+      return false;
    }
-   else
-   {
-      return this.connexion(this.getJSONEnregistrement(login, password))
+   return this.connexion(this.getJSONLoginCookie());
+};
+
+euphorik.Client.prototype.connexionLogin = function(login, password) {
+   return this.connexion(this.getJSONLogin(login, password));
+};
+
+euphorik.Client.prototype.enregistrement = function(login, password) { 
+   if (this.authentifie()) {
+      this.login = login;
+      this.password = password;
+      if(this.flush()) {
+         this.setStatut(euphorik.Client.statutType.auth_registered);
+         return true;
+      }
+      return false;
+   } else {
+      return this.connexion(this.getJSONEnregistrement(login, password));
    }
-}
+};
 
 /**
   * Connexion. Réalisé de manière synchrone.
   */
-Client.prototype.connexion = function(messageJson)
-{
-   var thisClient = this
-   jQuery.ajax(
-      {
-         async: false,
-         type: "POST",
-         url: "request",
-         dataType: "json",
-         data: this.util.jsonVersAction(messageJson),
-         success:
-            function(data)
-            {
-               if (data["reply"] == "error")
-               {
-                  thisClient.util.messageDialogue(data["error_message"])
-                  // suppression du cookie actuel, cas où le cookie du client ne permet pas une authentification
-                  thisClient.delCookie()
-               }
-               else
-                  thisClient.chargerDonnees(data)
+euphorik.Client.prototype.connexion = function(messageJson) {
+   var thisClient = this;
+   jQuery.ajax({
+      async: false,
+      type: "POST",
+      url: "request",
+      dataType: "json",
+      data: this.util.jsonVersAction(messageJson),
+      success:
+         function(data){
+            if (data.reply === "error") {
+               thisClient.util.messageDialogue(data.error_message);
+               // suppression du cookie actuel, cas où le cookie du client ne permet pas une authentification
+               thisClient.delCookie();
+            } else {
+               thisClient.chargerDonnees(data);
             }
-      }
-   )
-   return this.authentifie()
-}
+         }
+   });
+   return this.authentifie();
+};
 
-Client.prototype.deconnexion = function()
-{
-   this.flush(true)
-   this.delCookie()
-   this.resetDonneesPersonnelles()
-   this.setStatut(euphorik.Client.statutType.deconnected) // deconnexion
-}
+euphorik.Client.prototype.deconnexion = function() {
+   this.flush(true);
+   this.delCookie();
+   this.resetDonneesPersonnelles();
+   this.setStatut(euphorik.Client.statutType.deconnected); // deconnexion
+};
 
-Client.prototype.chargerDonnees = function(data)
-{
+euphorik.Client.prototype.chargerDonnees = function(data) {
    // la modification du statut qui suit met à jour le menu, le menu dépend (page admin)
    // de l'état ekMaster
-   this.ekMaster = data["ek_master"] != undefined ? data["ek_master"] : false
+   this.ekMaster = data.ek_master ? data.ek_master : false;
    
-   this.setStatut(data["status"]) 
+   this.setStatut(data.status);
    
-   if (this.authentifie())
-   {
-      this.cookie = data["cookie"]
-      this.setCookie()
+   if (this.authentifie()) {
+      this.cookie = data.cookie;
+      this.setCookie();
       
-      this.id = data["id"]
-      this.login = data["login"]
-      this.pseudo = data["nick"]
-      this.email = data["email"]
-      this.setCss(data["css"])
-      this.chatOrder = data["chat_order"]
-      this.nickFormat = data["nick_format"]
-      this.viewTimes = data["view_times"]
-      this.viewTooltips = data["view_tooltips"]
-      this.ostentatiousMaster = data["ostentatious_master"]
+      this.id = data.id;
+      this.login = data.login;
+      this.pseudo = data.nick;
+      this.email = data.email;
+      this.setCss(data.css);
+      this.chatOrder = data.chat_order;
+      this.nickFormat = data.nick_format;
+      this.viewTimes = data.view_times;
+      this.viewTooltips = data.view_tooltips;
+      this.ostentatiousMaster = data.ostentatious_master;
       
       // la page de la conversation principale
-      this.pagePrincipale = 1
+      this.pagePrincipale = 1;
       
       // les conversations
-      this.conversations = data["conversations"]
-      for (var i = 0; i < this.conversations.length; i++)
-         this.conversations[i] = {root : this.conversations[i].root, page : 1, reduit : this.conversations[i].minimized}
+      this.conversations = data.conversations;
+      this.conversations.map(function(conv) {
+         return { root : conv.root, page : 1, reduit : conv.minimized };
+      });
       
-      this.majBulle()
-      this.majCssSelectionee()
-      //this.majLogo()
+      this.majBulle();
+      this.majCssSelectionee();
    }
-}
+};
 
 /**
   * Met à jour les données personne sur serveur.
   * @param async de manière asynchrone ? défaut = true
   * @return false si le flush n'a pas pû se faire sinon true
   */
-Client.prototype.flush = function(async)
-{
-   if (async == undefined)
-      async = false
+euphorik.Client.prototype.flush = function(async) {
+   async = async || false;
       
-   if (!this.authentifie())
-      return false
-
-   var thisClient = this
-   var ok = true
-   jQuery.ajax(
-      {
-         async: async,
-         type: "POST",
-         url: "request",
-         dataType: "json",
-         data: this.util.jsonVersAction(this.getJSONProfile()),
-         success:
-            function(data)
-            {
-               if (data["reply"] == "error")
-               {
-                  thisClient.util.messageDialogue(data["error_message"])
-                  ok = false
-               }
-               else
-               {
-                  thisClient.majBulle()
-               }
+   if (!this.authentifie()) {
+      return false;
+   }
+
+   var thisClient = this;
+   var ok = true;
+   jQuery.ajax({
+      async: async,
+      type: "POST",
+      url: "request",
+      dataType: "json",
+      data: this.util.jsonVersAction(this.getJSONProfile()),
+      success:
+         function(data) {
+            if (data.reply === "error") {
+               thisClient.util.messageDialogue(data.error_message);
+               ok = false;
+            } else {
+               thisClient.majBulle();
             }
-      }
-   )
+         }
+   });
    
-   return ok
-}
+   return ok;
+};
 
-Client.prototype.majMenu = function()
-{
-   var displayType = "block"
+euphorik.Client.prototype.majMenu = function() {
+   var displayType = "block";
 
-   $("#menu .admin").css("display", this.ekMaster ? displayType : "none")
+   $("#menu .admin").css("display", this.ekMaster ? displayType : "none");
 
    // met à jour le menu   
-   if (this.statut == euphorik.Client.statutType.auth_registered)
-   {
-      $("#menu .profile").css("display", displayType).text("profile")
-      $("#menu .logout").css("display", displayType)
-      $("#menu .register").css("display", "none")
-   }
-   else if (this.statut == euphorik.Client.statutType.auth_not_registered)
-   {
-      $("#menu .profile").css("display", "none")
-      $("#menu .logout").css("display", displayType)
-      $("#menu .register").css("display", displayType)
-   }
-   else
-   {
-      $("#menu .profile").css("display", displayType).text("login")
-      $("#menu .logout").css("display", "none")
-      $("#menu .register").css("display", displayType)
+   if (this.statut == euphorik.Client.statutType.auth_registered) {
+      $("#menu .profile").css("display", displayType).text("profile");
+      $("#menu .logout").css("display", displayType);
+      $("#menu .register").css("display", "none");
+   } else if (this.statut == euphorik.Client.statutType.auth_not_registered) {
+      $("#menu .profile").css("display", "none");
+      $("#menu .logout").css("display", displayType);
+      $("#menu .register").css("display", displayType);
+   } else {
+      $("#menu .profile").css("display", displayType).text("login");
+      $("#menu .logout").css("display", "none");
+      $("#menu .register").css("display", displayType);
    }
-}
+};
 
 /**
-  * Met à jour l'affichage des infos bulles en fonction du profile.
+  * Met à jour l'affichage ou non des infos bulles en fonction du profile.
   */
-Client.prototype.majBulle = function()
-{
-   this.util.bulleActive = this.viewTooltips
-}
+euphorik.Client.prototype.majBulle = function() {
+   this.util.bulleActive = this.viewTooltips;
+};
 
 /**
   * Met à jour la css sélectionnée, lors du chargement des données.
   */
-Client.prototype.majCssSelectionee = function()
-{
+euphorik.Client.prototype.majCssSelectionee = function() {
    // extraction du numéro de la css courante
-   var numCssCourante = this.css.match(/^.*?\/(\d)\/.*$/)
-   if (numCssCourante != null && numCssCourante[1] != undefined)
-   {
-      $("#menuCss option").removeAttr("selected")
-      $("#menuCss option[value=" + numCssCourante[1]+ "]").attr("selected", "selected")
+   var numCssCourante = this.css.match(/^.*?\/(\d)\/.*$/);
+   if (numCssCourante && numCssCourante[1]) {
+      $("#menuCss option").removeAttr("selected");
+      $("#menuCss option[value=" + numCssCourante[1]+ "]").attr("selected", "selected");
    }
-}
+};
 
 /**
   * Change la "class" du logo en fonction du statut de ekMaster.
   */
-Client.prototype.majLogo = function()
-{
-   if (this.ekMaster)
-      $("#logo").addClass("ekMaster")
-   else
-      $("#logo").removeClass("ekMaster")   
-}
-
+euphorik.Client.prototype.majLogo = function() {
+   if (this.ekMaster) {
+      $("#logo").addClass("ekMaster");
+   } else {
+      $("#logo").removeClass("ekMaster");
+   }
+};
 
-Client.prototype.slap = function(userId, raison)
-{
-   var thisClient = this
+euphorik.Client.prototype.slap = function(userId, raison) {
+   var thisClient = this;
    
    jQuery.ajax({
       type: "POST",
       url: "request",
       dataType: "json",
-      data: this.util.jsonVersAction(
-         {
-            "header" : { "action" : "slap", "version" : euphorik.conf.versionProtocole },
-            "cookie" : thisClient.cookie,
-            "user_id" : userId,
-            "reason" : raison
-         }),
+      data: this.util.jsonVersAction({
+         "header" : { "action" : "slap", "version" : euphorik.conf.versionProtocole },
+         "cookie" : thisClient.cookie,
+         "user_id" : userId,
+         "reason" : raison
+      }),
       success: 
-         function(data)
-         {
-            if (data["reply"] == "error")
-               thisClient.util.messageDialogue(data["error_message"])
+         function(data) {
+            if (data.reply === "error") {
+               thisClient.util.messageDialogue(data.error_message);
+            }
          }
-   })
-}
+   });
+};
 
-Client.prototype.ban = function(userId, raison, minutes)
+euphorik.Client.prototype.ban = function(userId, raison, minutes)
 {
-   var thisClient = this
+   var thisClient = this;
 
    // par défaut un ban correspond à 3 jours
-   if (typeof(minutes) == "undefined")
-      minutes = euphorik.conf.tempsBan;
+   minutes = minutes || euphorik.conf.tempsBan;
       
    jQuery.ajax({
       type: "POST",
       url: "request",
       dataType: "json",
-      data: this.util.jsonVersAction(
-         {
-            "header" : { "action" : "ban", "version" : euphorik.conf.versionProtocole },
-            "cookie" : thisClient.cookie,
-            "duration" : minutes,
-            "user_id" : userId,
-            "reason" : raison
-         }),
+      data: this.util.jsonVersAction({
+         "header" : { "action" : "ban", "version" : euphorik.conf.versionProtocole },
+         "cookie" : thisClient.cookie,
+         "duration" : minutes,
+         "user_id" : userId,
+         "reason" : raison
+      }),
       success: 
-         function(data)
-         {
-            if (data["reply"] == "error")
-               thisClient.util.messageDialogue(data["error_message"])
+         function(data) {
+            if (data.reply === "error") {
+               thisClient.util.messageDialogue(data.error_message);
+            }
          }
-   })
-}
+   });
+};
 
-Client.prototype.kick = function(userId, raison)
-{
-   this.ban(userId, raison, euphorik.conf.tempsKick)
-}
+euphorik.Client.prototype.kick = function(userId, raison) {
+   this.ban(userId, raison, euphorik.conf.tempsKick);
+};
diff --git a/js/euphorik.js b/js/euphorik.js
index 28cba42..8c13841 100755
--- a/js/euphorik.js
+++ b/js/euphorik.js
@@ -67,16 +67,22 @@ var euphorik = {}
 Object.prototype.each = function(f) {
    for (var k in this) {
       if (this.hasOwnProperty(k)) {
-         f(k, this[k])
+         f(k, this[k]);
       }
    }
-}
+};
 
 Array.prototype.each = function(f) {
    for (var i = 0; i < this.length; i++) {
-      f(i, this[i])
+      f(i, this[i]);
    }
-}
+};
+
+Array.prototype.map = function(f) {
+   for (var i = 0; i < this.length; i++) {
+      this[i] = f(this[i])
+   }
+};
 
 String.prototype.trim = function() {
 	return jQuery.trim(this) // anciennement : this.replace(/^\s+|\s+$/g, "");
-- 
2.49.0