MOD maj TODO
[euphorik.git] / js / euphorik.js
index 3a9b0d7..f330209 100755 (executable)
@@ -1,4 +1,4 @@
-// coding: utf-8\r
+// coding: utf-8\r
 // Copyright 2008 Grégory Burri\r
 //\r
 // This file is part of Euphorik.\r
@@ -252,19 +252,16 @@ Util.prototype.replaceSelection = function(input, replaceString) {
          this.setCaretToPos(input, selectionStart + replaceString.length)\r
    }\r
    else if (document.selection)
-   {\r
-      var range = document.selection.createRange();\r
+   {
+      input.focus()\r
+      var range = document.selection.createRange()\r
       if (range.parentElement() == input)
       {\r
          var isCollapsed = range.text == ''\r
          range.text = replaceString\r
          if (!isCollapsed)
-         {
-            // there has been a selection\r
-            // it appears range.select() should select the newly \r
-            // inserted text but that fails with IE\r
+         {\r
             range.moveStart('character', -replaceString.length);\r
-            range.select();\r
          }\r
       }\r
    }\r
@@ -718,14 +715,16 @@ Client.prototype.delCookie = function()
    document.cookie = "cookie=; max-age=0"\r
 }
 
-Client.prototype.setCookie = function(cookie)
+Client.prototype.setCookie = function()
 {
-   if (this.cookie == null)
+   if (this.cookie == null || this.cookie == undefined)
       return
       
-   document.cookie =
-      "cookie="+this.cookie+
-      "; max-age="  + (60 * 60 * 24 * 365)
+   // 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()
 }
 
 Client.prototype.authentifie = function()
@@ -995,6 +994,16 @@ Client.prototype.kick = function(userId, raison)
 
 /**
    * classe permettant de gérer les événements (push serveur).
+   * l'information envoyé est sous la forme :
+   *  {
+   *     "action" : "wait_event"
+   *     "page" : <page>
+   *     [..]
+   *  }
+   * l'information reçu est sous la forme :
+   *  {
+   *     "reply" : <reply>
+   *  }
    * @page la page
    */
 function PageEvent(page, util)
@@ -1025,9 +1034,11 @@ PageEvent.prototype.stopAttenteCourante = function()
 /**
   * Attend un événement lié à la page. 
   * @funSend une fonction renvoyant les données json à envoyer
-  * @funReceive une fonction qui accepte un paramètre correspondant au données reçues
+  * @funsReceive est un objet comprenant les fonctions à appeler en fonction du "reply"
+  * les fonctions acceptent un paramètre correspondant au données reçues.
+  * exemple : {"new_message" : function(data){ ... }}
   */
-PageEvent.prototype.waitEvent = function(funSend, funReceive)
+PageEvent.prototype.waitEvent = function(funSend, funsReceive)
 {
    this.stopAttenteCourante()
    
@@ -1051,22 +1062,24 @@ PageEvent.prototype.waitEvent = function(funSend, funReceive)
    this.attenteCourante = jQuery.ajax({
       type: "POST",
       url: "request",
-      dataType: "json",
+      dataType: "json",\r
+      timeout: 300000, // timeout de 5min. Gros HACK pas beau. FIXME problème décrit ici : http://groups.google.com/group/jquery-en/browse_thread/thread/8724e64af3333a76
       data: this.util.jsonVersAction(dataToSend),
       success:
          function(data)
          {            
             ;; dumpObj(data)
             
-            funReceive(data)
+            funsReceive[data["reply"]](data)
             
             // rappel de la fonction dans 100 ms
-            setTimeout(function(){ thisPageEvent.waitEvent2(funSend, funReceive) }, 100)
+            setTimeout(function(){ thisPageEvent.waitEvent2(funSend, funsReceive) }, 100)
          },
       error:
          function(XMLHttpRequest, textStatus, errorThrown)
          {
-            setTimeout(function(){ thisPageEvent.waitEvent2(funSend, funReceive) }, 1000)
+            ;; console.log("Connexion perdue dans waitEvent")
+            setTimeout(function(){ thisPageEvent.waitEvent2(funSend, funsReceive) }, 1000)
          }
    })
 }
@@ -1074,11 +1087,11 @@ PageEvent.prototype.waitEvent = function(funSend, funReceive)
 /**
   * Si un stopAttenteCourante survient un peu n'importe quand il faut imédiatement arreter de boucler.
   */
-PageEvent.prototype.waitEvent2 = function(funSend, funReceive)
+PageEvent.prototype.waitEvent2 = function(funSend, funsReceive)
 {
    if (this.stop)
       return
-   this.waitEvent(funSend, funReceive)
+   this.waitEvent(funSend, funsReceive)
 }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////