Use the new json2 module (from yaws)
[euphorik.git] / js / communication.js
index 417e833..3f44227 100644 (file)
 // Voir : http://dev.euphorik.ch/wiki/euk/Protocole\r
 \r
 /**\r
-  * @param funError un fonction executé lors d'un réponse 'error' de la part du serveur, peut être redéfinit pour une requête.\r
+  * Les fonctions debutReq et finReq servent, par exemple, à afficher à l'utilisateur\r
+  * qu'une communication est en cours.\r
+  * @param funError un fonction executée lors d'un réponse 'error' de la part du serveur, peut être redéfinit pour une requête.\r
+  * @param funDebutReq fonction appelée au début d'une requête (facultatif)\r
+  * @param funFinReq fonction appelée à la fin d'une requête (facultatif)\r
   */\r
-euphorik.Communication = function(funError) {\r
+euphorik.Communication = function(funError, funDebutReq, funFinReq) {\r
    this.funError = funError;\r
+   this.funDebutReq = funDebutReq;\r
+   this.funFinReq = funFinReq;\r
 };\r
 \r
+/**\r
+  * Charge un fichier depuis une url et retourne son contenu.\r
+  */\r
+euphorik.Communication.prototype.load = function(url) {\r
+   if (this.funDebutReq) {\r
+      this.funDebutReq();\r
+   }\r
+   var contenu = "";\r
+   $.ajax({async: false, url: url, success : function(page) { contenu += page; }});\r
+   if (this.funFinReq) {\r
+      this.funFinReq();\r
+   }\r
+   return contenu;\r
+};\r
+\r
+/**\r
+  * Effectue une requête JSON auprès du serveur.\r
+  * @param action une chaine spécifiant l'action, par exemple "put_message"\r
+  * @param json les données à envoyer associé à l'action, par exemple {"cookie" : "LKJDLAKSJBFLKASN", "nick" : "Paul", "content" : "Bonjour", "answer_to" : [] }\r
+  * @param funOk la fonction exécuté après réception des données du serveur\r
+  * @param funError la fonction exécuté si une erreur arrive (facultatif)\r
+  * @param asynchrone true pour une communication asychrone (facultatif, truepar défaut)\r
+  * @param paramsSupp un objet contenant des paramètres supplémentaire pour la fonction ajax de jQuery (facultatif)\r
+  */\r
 euphorik.Communication.prototype.requete = function(action, json, funOk, funError, asynchrone, paramsSupp) {\r
    var thisCommunication = this;\r
    if (asynchrone === undefined) {\r
@@ -36,7 +66,11 @@ euphorik.Communication.prototype.requete = function(action, json, funOk, funErro
    objectEach(json, function(nom, val) {\r
       mess[nom] = val;\r
    });\r
-      \r
+\r
+   if (this.funDebutReq) {\r
+      this.funDebutReq();\r
+   }\r
+\r
    paramsAjax = {\r
       async: asynchrone,\r
       type: "POST",\r
@@ -45,6 +79,9 @@ euphorik.Communication.prototype.requete = function(action, json, funOk, funErro
       data: { action : JSON.stringify(mess) },\r
       success:\r
          function(data) {\r
+            if (thisCommunication.funFinReq) {\r
+               thisCommunication.funFinReq();\r
+            }\r
             if (data.reply === "error") {\r
                if (funError) {\r
                   funError(data);\r
@@ -54,15 +91,21 @@ euphorik.Communication.prototype.requete = function(action, json, funOk, funErro
             } else if (funOk) {\r
                funOk(data);\r
             }\r
+         },\r
+      error:\r
+         function(data) {\r
+            if (thisCommunication.funFinReq) {\r
+               thisCommunication.funFinReq();\r
+            }\r
          }\r
    };\r
-       \r
+\r
    if (paramsSupp) {\r
       objectEach(paramsSupp, function(nom, val) {\r
          paramsAjax[nom] = val;\r
       });\r
    }\r
-   \r
+\r
    jQuery.ajax(paramsAjax);\r
 };\r
 \r
@@ -70,4 +113,4 @@ euphorik.Communication.prototype.getBase = function(action) {
    return {\r
       "header" : { "action" : action, "version" : euphorik.conf.versionProtocole }\r
    };\r
-};
\ No newline at end of file
+};\r