ADD support des conversations (pas fini)
[euphorik.git] / js / euphorik.js
index 9dd3357..fafa854 100755 (executable)
@@ -128,7 +128,11 @@ Util.prototype.creerDocumentXMLAction = function()
 {\r
    if (document.implementation && document.implementation.createDocument)\r
    {\r
-      return document.implementation.createDocument("", "action", null)\r
+      // var doc = document.implementation.createDocument("", "action", null)
+      var parser = new DOMParser();
+      var doc =  parser.parseFromString("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<action/>", "text/xml")
+      //alert(this.serializeXML(doc))
+      return doc\r
    }\r
    else if (window.ActiveXObject)\r
    {\r
@@ -143,32 +147,9 @@ Util.prototype.creerDocumentXMLAction = function()
 
 Util.prototype.xmlVersAction = function(xml)
 {
-   return {action: this.to_utf8(this.serializeXML(xml /*, "UTF-8"*/))}
+   //return {action: this.to_utf8(this.serializeXML(xml /*, "UTF-8"*/))}
+   return {action: this.serializeXML(xml)}
 }
-
-// voir : http://homepage3.nifty.com/aokura/jscript/utf8.html
-// et : http://www1.tip.nl/~t876506/utf8tbl.html
-Util.prototype.to_utf8 = function(s)
-{\r
-   if (!s) return ""\r
-
-   var c, d = ""
-   for (var i = 0; i < s.length; i++)
-   {
-      c = s.charCodeAt(i);
-      if (c <= 0x7f) {
-         d += s.charAt(i);
-      } else if (c >= 0x80 && c <= 0x7ff) {
-         d += String.fromCharCode(((c >> 6) & 0x1f) | 0xc0);
-         d += String.fromCharCode((c & 0x3f) | 0x80);
-      } else {
-         d += String.fromCharCode((c >> 12) | 0xe0);
-         d += String.fromCharCode(((c >> 6) & 0x3f) | 0x80);
-         d += String.fromCharCode((c & 0x3f) | 0x80);
-      }
-   }
-   return d;
-}\r
 \r
 Util.prototype.md5 = function(chaine)\r
 {\r
@@ -430,7 +411,12 @@ Client.prototype.resetDonneesPersonnelles = function()
    this.login = ""\r
    this.password = ""\r
    this.email = ""\r
-   this.css = jQuery("link#cssPrincipale").attr("href")\r
+   this.css = jQuery("link#cssPrincipale").attr("href")
+   
+   // les conversations, une conversation est un objet possédant les attributs suivants :
+   // - racine (entier)
+   // - page (entier)
+   this.conversations = new Array()\r
 }
 
 Client.prototype.setCss = function(css)
@@ -441,14 +427,20 @@ Client.prototype.setCss = function(css)
    this.css = css
    jQuery("link#cssPrincipale").attr("href", this.css)
    this.majMenu()
-   
-   /* enregistement automatique..
-   if (!this.identifie())
-      if (!this.enregistrement())
-         return
-   */
+
    if (this.identifie())
       this.flush()   
+}
+
+/**
+  * Ajoute une conversation à la vue de l'utilisateur.
+  * Le profile de l'utilisateur est directement sauvegardé sur le serveur.
+  * @param racines la racine de la conversation
+  */
+Client.prototype.ajouterConversation = function(racine)
+{
+   this.conversations.push({racine : racine, page : 1})
+   this.flush()
 }\r
 
 Client.prototype.getXMLlogin = function(login, password)
@@ -550,6 +542,26 @@ Client.prototype.getXMLProfile = function()
    nodeCSS.appendChild(XMLDocument.createTextNode(this.css))
    XMLDocument.documentElement.appendChild(nodeCSS)
    
+   // mémorise les conversations affichées
+   if (this.conversations.length > 0)
+   {
+      var nodeConversations = XMLDocument.createElement("conversations")
+      XMLDocument.documentElement.appendChild(nodeConversations)
+      for (var i = 0; i < this.conversations.length; i++)
+      {
+         var nodeConv = XMLDocument.createElement("conversation")
+         nodeConversations.appendChild(nodeConv)
+         
+         var nodeRacine = XMLDocument.createElement("racine")
+         nodeRacine.appendChild(XMLDocument.createTextNode(this.conversations[i].racine))
+         nodeConv.appendChild(nodeRacine)
+         
+         var nodePage = XMLDocument.createElement("page")
+         nodePage.appendChild(XMLDocument.createTextNode(this.conversations[i].page))
+         nodeConv.appendChild(nodePage)
+      }
+   }
+   
    return XMLDocument    
 }
 
@@ -722,7 +734,7 @@ Client.prototype.chargerDonnees = function(data)
 Client.prototype.flush = function()
 {
    thisClient = this
-   //thisClient.util.log(this.util.xmlVersAction(this.getXMLProfile()).action)         
+   //thisClient.util.log(this.util.xmlVersAction(this.getXMLProfile()).action)      
    jQuery.ajax(
       {
          async: true,
@@ -775,6 +787,12 @@ jQuery.noConflict()
 jQuery(document).ready(
    function()
    {  
+      /* FIXME : ce code pose problème sur konqueror, voir : http://www.kde-forum.org/thread.php?threadid=17993
+      var p = new DOMParser();
+      var doc =  p.parseFromString("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<action/>", "text/xml")
+      var s = new XMLSerializer()
+      alert(s.serializeToString(doc)) */
+   
       var util = new Util()
       var client = new Client(util)
       var pages = new Pages()