Wiki preview uses 'post' instead of 'get' (Closes #918)
[platal.git] / htdocs / javascript / ajax.js
1 /***************************************************************************
2 * Copyright (C) 2003-2008 Polytechnique.org *
3 * http://opensource.polytechnique.org/ *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the Free Software *
17 * Foundation, Inc., *
18 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
19 ***************************************************************************/
20
21 function AjaxEngine()
22 {
23 this.xml_client = null;
24 this.init = false;
25 this.obj = null;
26 this.func = null;
27
28 this.prepare_client = function()
29 {
30 if (!this.init) {
31 if (window.XMLHttpRequest) {
32 this.xml_client = new XMLHttpRequest();
33 } else if (window.ActiveXObject) {
34 try {
35 this.xml_client = new ActiveXObject("Msxml2.XMLHTTP");
36 } catch (e) {
37 this.xml_client = new ActiveXObject("Microsoft.XMLHTTP");
38 }
39 }
40 if (this.xml_client == null) {
41 alert("Ton client ne supporte pas Ajax, nécessaire pour certaines fonctionalités de cette page");
42 }
43 }
44 this.init = true;
45 }
46
47 this.update_html = function(obj, src, func)
48 {
49 this.prepare_client();
50 if (this.xml_client == null) {
51 return true;
52 }
53 if (src.match(/^http/i) == null) {
54 src = platal_baseurl + src;
55 }
56 this.obj = obj;
57 this.func = func;
58 this.xml_client.abort();
59 this.xml_client.onreadystatechange = this.apply_update_html(this);
60 this.xml_client.open ('GET', src, true);
61 this.xml_client.send (null);
62 return false;
63 }
64
65 this.apply_update_html = function(ajax)
66 {
67 return function()
68 {
69 if(ajax.xml_client.readyState == 4) {
70 if (ajax.xml_client.status == 200) {
71 if (ajax.obj != null) {
72 document.getElementById(ajax.obj).innerHTML = ajax.xml_client.responseText;
73 }
74 if (ajax.func != null) {
75 ajax.func(ajax.xml_client.responseText);
76 }
77 } else if (ajax.xml_client.status == 403) {
78 window.location.reload();
79 } else if (ajax.xml_client.status >= 500) {
80 alert("Une erreur s'est produite lors du traitement de la requête");
81 }
82 }
83 };
84 }
85 }
86
87 var Ajax = new AjaxEngine();
88
89 var currentTempMessage = 0;
90 function setOpacity(obj, opacity)
91 {
92 opacity = (opacity == 100)?99:opacity;
93 // IE
94 obj.style.filter = "alpha(opacity:"+opacity+")";
95 // Safari < 1.2, Konqueror
96 obj.style.KHTMLOpacity = opacity/100;
97 // Old Mozilla
98 obj.style.MozOpacity = opacity/100;
99 // Safari >= 1.2, Firefox and Mozilla, CSS3
100 obj.style.opacity = opacity/100
101 }
102
103 function _showTempMessage(id, state, back)
104 {
105 var obj = document.getElementById(id);
106 if (currentTempMessage != state) {
107 return;
108 }
109 setOpacity(obj, back * 4);
110 if (back > 0) {
111 setTimeout("_showTempMessage('" + id + "', " + currentTempMessage + "," + (back-1) + ")", 125);
112 } else {
113 obj.innerHTML = "";
114 }
115 }
116
117 function showTempMessage(id, message, success)
118 {
119 var obj = document.getElementById(id);
120 obj.innerHTML = (success ? "<img src='images/icons/wand.gif' alt='' /> "
121 : "<img src='images/icons/error.gif' alt='' /> ") + message;
122 obj.style.fontWeight = "bold";
123 obj.style.color = (success ? "green" : "red");;
124 currentTempMessage++;
125 setOpacity(obj, 100);
126 setTimeout("_showTempMessage('" + id + "', " + currentTempMessage + ", 25)", 1000);
127 }
128
129 function previewWiki(idFrom, idTo, withTitle, idShow)
130 {
131 var text = document.getElementById(idFrom).value;
132 if (text == "") {
133 return false;
134 }
135 var url = "wiki_preview";
136 if (!withTitle) {
137 url += "/notitle";
138 }
139 $.post(url, { text: text },
140 function(data) {
141 $("#" + idTo).html(data);
142 },
143 'text');
144 if (idShow != null) {
145 document.getElementById(idShow).style.display = "";
146 }
147 }
148
149 function sendTestEmail(token, hruid)
150 {
151 Ajax.update_html(null, 'emails/test' + (hruid == null ? '' : '/' + hruid) + '?token=' + token,
152 function() {
153 showTempMessage('mail_sent', "Un email a été envoyé avec succès"
154 + (hruid == null ? " sur ton adresse." : " sur l'adresse de " + hruid),
155 true); });
156 return false;
157 }
158
159 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: