Serves javascript file from a per-version directory, to prevent cross-version caching...
[platal.git] / htdocs / javascript / ajax.js
index 5cff50b..fa2849d 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *  Copyright (C) 2003-2007 Polytechnique.org                              *
+ *  Copyright (C) 2003-2009 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
  *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
  ***************************************************************************/
 
-Ajax = {
-    xml_client: null,
-    init: false,
-
-    prepare_client: function()
-    {
-        if (!Ajax.init) {
-            if (window.XMLHttpRequest) {
-                Ajax.xml_client = new XMLHttpRequest();
-            } else if (window.ActiveXObject) {
-                try {
-                    Ajax.xml_client = new ActiveXObject("Msxml2.XMLHTTP");
-                } catch (e) {
-                    Ajax.xml_client = new ActiveXObject("Microsoft.XMLHTTP");
-                }
-            }
-            if (Ajax.xml_client == null) {
-                alert("Ton client ne supporte pas Ajax, nécessaire pour certaines fonctionalités de cette page");
-            }
-        }
-        Ajax.init = true;
-    },
-
-    update_html: function(obj, src, func)
+function AjaxEngine()
+{
+    this.update_html = function(obj, src, func)
     {
-        Ajax.prepare_client();
-        if (Ajax.xml_client == null) {
-            return true;
-        }
-        Ajax.xml_client.abort();
-        Ajax.xml_client.onreadystatechange = function()
-            {
-                if(Ajax.xml_client.readyState == 4) {
-                    if (Ajax.xml_client.status == 200) {
-                       if (obj != null) {
-                               document.getElementById(obj).innerHTML = Ajax.xml_client.responseText;
-                        }
-                      if (func != null) {
-                               func(Ajax.xml_client.responseText);
-                       }
-                    } else if (Ajax.xml_client.status == 403) {
-                        window.location.reload();
+        $.get(src,
+            function(data, textStatus) {
+                if (textStatus == "success") {
+                    if (obj) {
+                        $('#' + obj).html(data);
+                    }
+                    if (func) {
+                        func(data);
                     }
+                } else if (textStatus == "error") {
+                    alert("Une erreur s'est produite lors du traitement de la requête.\n"
+                         +"Ta session a peut-être expirée.");
                 }
-            };
-        Ajax.xml_client.open ('GET', src, true);
-        Ajax.xml_client.send (null);
+            }, 'text');
+        return false;
+    }
+}
+
+var Ajax = new AjaxEngine();
+
+var currentTempMessage = 0;
+function setOpacity(obj, opacity)
+{
+  opacity = (opacity == 100)?99:opacity;
+  // IE
+  obj.style.filter = "alpha(opacity:"+opacity+")";
+  // Safari < 1.2, Konqueror
+  obj.style.KHTMLOpacity = opacity/100;
+  // Old Mozilla
+  obj.style.MozOpacity = opacity/100;
+  // Safari >= 1.2, Firefox and Mozilla, CSS3
+  obj.style.opacity = opacity/100
+}
+
+function _showTempMessage(id, state, back)
+{
+    var obj = document.getElementById(id);
+    if (currentTempMessage != state) {
+        return;
+    }
+    setOpacity(obj, back * 4);
+    if (back > 0) {
+        setTimeout("_showTempMessage('" + id + "', " + currentTempMessage + "," + (back-1) + ")", 125);
+    } else {
+        obj.innerHTML = "";
+    }
+}
+
+function showTempMessage(id, message, success)
+{
+    var obj = document.getElementById(id);
+    obj.innerHTML = (success ? "<img src='images/icons/wand.gif' alt='' /> "
+                             : "<img src='images/icons/error.gif' alt='' /> ") + message;
+    obj.style.fontWeight = "bold";
+    obj.style.color = (success ? "green" : "red");;
+    currentTempMessage++;
+    setOpacity(obj, 100);
+    setTimeout("_showTempMessage('" + id + "', " + currentTempMessage + ", 25)", 1000);
+}
+
+function previewWiki(idFrom, idTo, withTitle, idShow)
+{
+    var text = document.getElementById(idFrom).value;
+    if (text == "") {
         return false;
     }
+    var url  = "wiki_preview";
+    if (!withTitle) {
+        url += "/notitle";
+    }
+    $.post(url, { text: text },
+        function(data) {
+            $("#" + idTo).html(data);
+        },
+        'text');
+    if (idShow != null) {
+        document.getElementById(idShow).style.display = "";
+    }
+}
+
+function sendTestEmail(token, hruid)
+{
+    Ajax.update_html(null, 'emails/test' + (hruid == null ? '' : '/' + hruid) + '?token=' + token,
+                     function() {
+                        showTempMessage('mail_sent', "Un email a été envoyé avec succès"
+                                        + (hruid == null ? " sur ton adresse." : " sur l'adresse de " + hruid),
+                                        true); });
+    return false;
 }
 
 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: