webmaster@0
|
1 var arLIMenu = new Array(); |
webmaster@0
|
2 var curBPShown = 0; |
webmaster@0
|
3 var wEdit, wBr, dp; |
webmaster@0
|
4 |
webmaster@0
|
5 var xmlRequest = { |
webmaster@0
|
6 init: function() { |
webmaster@0
|
7 try { |
webmaster@0
|
8 xmlRequest.obj = new XMLHttpRequest(); |
webmaster@0
|
9 } catch(e) { |
webmaster@0
|
10 xmlRequest.obj = new ActiveXObject("Msxml2.XMLHTTP"); |
webmaster@0
|
11 } |
webmaster@0
|
12 }, |
webmaster@0
|
13 |
webmaster@0
|
14 get: function(url) { |
webmaster@0
|
15 xmlRequest.obj.open("GET", url, false); |
webmaster@0
|
16 xmlRequest.obj.send(null); |
webmaster@0
|
17 |
webmaster@0
|
18 return xmlRequest.obj.responseXML; |
webmaster@0
|
19 }, |
webmaster@0
|
20 |
webmaster@0
|
21 send: function(url, data) { |
webmaster@0
|
22 try { |
webmaster@0
|
23 xmlRequest.obj.open("POST", url, false); |
webmaster@0
|
24 xmlRequest.obj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') |
webmaster@0
|
25 xmlRequest.obj.send(data); |
webmaster@0
|
26 return true; |
webmaster@0
|
27 } catch(e) { |
webmaster@0
|
28 return false; |
webmaster@0
|
29 } |
webmaster@0
|
30 } |
webmaster@0
|
31 |
webmaster@0
|
32 }; |
webmaster@0
|
33 |
webmaster@0
|
34 var t = { |
webmaster@0
|
35 evtListener:function(elt, evt, func, useCpt) { |
webmaster@0
|
36 if(elt.addEventListener) |
webmaster@0
|
37 elt.addEventListener(evt, func, useCpt); |
webmaster@0
|
38 else if(elt.attachEvent) |
webmaster@0
|
39 elt.attachEvent("on" + evt, func); |
webmaster@75
|
40 else if(elt["on" + evt]) |
webmaster@75
|
41 elt["on" + evt] = function() {elt["on" + evt](); func();} |
webmaster@0
|
42 else |
webmaster@0
|
43 elt["on" + evt] = func; |
webmaster@75
|
44 }, |
webmaster@75
|
45 getTextContent: function(node) { |
webmaster@75
|
46 if(node.textContent) |
webmaster@75
|
47 return node.textContent; |
webmaster@75
|
48 if(node.innerText) |
webmaster@75
|
49 return node.innerText; |
webmaster@75
|
50 // We tried hard to use something fast, it didn't work, so we'll recurse |
webmaster@75
|
51 if(node.nodeType == 3 || node.nodeType == 4) |
webmaster@75
|
52 return node.data; |
webmaster@75
|
53 var textContent = '', i; |
webmaster@75
|
54 for(i = 0; i < node.childNodes.length; i++) |
webmaster@75
|
55 textContent += t.getTextContent(node.childNodes[i]); |
webmaster@75
|
56 return textContent; |
webmaster@75
|
57 }, |
webmaster@75
|
58 empty: function(node) { |
webmaster@75
|
59 while(node.firstChild) |
webmaster@75
|
60 node.removeChild(node.firstChild); |
webmaster@0
|
61 } |
webmaster@0
|
62 } |
webmaster@0
|
63 |
webmaster@0
|
64 t.evtListener(window, "load", xmlRequest.init, false); |
webmaster@0
|
65 t.evtListener(window, "load", hideForms, false); |
webmaster@75
|
66 t.evtListener(window, "load", init, false); |
webmaster@0
|
67 |
webmaster@0
|
68 var editFilter = { |
webmaster@75
|
69 accept: function(node) { |
webmaster@75
|
70 if(node.nodeName.toLowerCase() == 'a' && |
webmaster@75
|
71 node.firstChild && |
webmaster@75
|
72 node.firstChild.nodeValue == 'Editer') |
webmaster@75
|
73 return true; |
webmaster@75
|
74 return false; |
webmaster@75
|
75 }, |
webmaster@75
|
76 |
webmaster@0
|
77 acceptNode: function(node) { |
webmaster@75
|
78 return this.accept(node) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP; |
webmaster@0
|
79 } |
webmaster@0
|
80 } |
webmaster@0
|
81 |
webmaster@0
|
82 var brouillonsFilter = { |
webmaster@75
|
83 accept: function(node) { |
webmaster@75
|
84 if(node.nodeName.toLowerCase() == 'a' && node.firstChild && ( |
webmaster@0
|
85 node.firstChild.nodeValue == 'Editer' || |
webmaster@0
|
86 node.firstChild.nodeValue == 'Publier' || |
webmaster@0
|
87 node.firstChild.nodeValue == 'Supprimer')) |
webmaster@75
|
88 return true; |
webmaster@75
|
89 return false; |
webmaster@75
|
90 }, |
webmaster@75
|
91 |
webmaster@75
|
92 acceptNode: function(node) { |
webmaster@75
|
93 return this.accept(node) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP; |
webmaster@0
|
94 } |
webmaster@0
|
95 } |
webmaster@0
|
96 |
webmaster@0
|
97 |
webmaster@0
|
98 |
webmaster@75
|
99 function init() { |
webmaster@0
|
100 var ar=document.getElementsByTagName('li'); |
webmaster@0
|
101 for(var i=0; i<ar.length; i++) { |
webmaster@0
|
102 if(ar[i].parentNode.id=='Menu') { |
webmaster@0
|
103 arLIMenu[arLIMenu.length]=ar[i]; |
webmaster@0
|
104 if(ar[i].firstChild.id=='Brouillons') { |
webmaster@0
|
105 ar[i].className="Actif"; |
webmaster@0
|
106 document.getElementById('Gest' + ar[i].firstChild.id).style.display='block'; |
webmaster@0
|
107 } |
webmaster@0
|
108 t.evtListener(ar[i], 'click', switchSection, true); |
webmaster@0
|
109 } |
webmaster@0
|
110 if(ar[i].className=='Add') |
webmaster@0
|
111 t.evtListener(ar[i].firstChild, 'click', showAddForm, true); |
webmaster@0
|
112 } |
webmaster@0
|
113 |
webmaster@0
|
114 try { dp = new DOMParser();} |
webmaster@75
|
115 catch(e) { |
webmaster@75
|
116 dp = { |
webmaster@75
|
117 obj: new ActiveXObject("Microsoft.XMLDOM"), |
webmaster@75
|
118 parseFromString: function(text, type) |
webmaster@75
|
119 { |
webmaster@75
|
120 if(!this.obj.loadXML(text)) |
webmaster@75
|
121 { |
webmaster@75
|
122 var error = this.obj.parseError.reason, errorNode; |
webmaster@75
|
123 this.obj.loadXML('<error />'); |
webmaster@75
|
124 errorNode = this.obj.createElement('parsererror'); |
webmaster@75
|
125 errorNode.appendChild(this.obj.createTextNode(error)); |
webmaster@75
|
126 this.obj.documentElement.appendChild(errorNode); |
webmaster@75
|
127 } |
webmaster@75
|
128 return this.obj; |
webmaster@75
|
129 } |
webmaster@75
|
130 } |
webmaster@75
|
131 } |
webmaster@0
|
132 t.evtListener(document.getElementById("editPost").Save, "click", saveFormContent, false); |
webmaster@0
|
133 // TreeWalkers in all their glory |
webmaster@0
|
134 try { |
webmaster@75
|
135 wEdit = document.createTreeWalker(document.getElementById("GestPosts"), NodeFilter.SHOW_ELEMENT, editFilter, true); |
webmaster@0
|
136 while(wEdit.nextNode()) { |
webmaster@0
|
137 t.evtListener(wEdit.currentNode, "click", editPubl, false); |
webmaster@0
|
138 } |
webmaster@0
|
139 |
webmaster@75
|
140 wBr = document.createTreeWalker(document.getElementById("GestBrouillons"), NodeFilter.SHOW_ELEMENT, brouillonsFilter, true); |
webmaster@0
|
141 while(wBr.nextNode()) { |
webmaster@0
|
142 if(wBr.currentNode.firstChild.nodeValue == 'Editer') t.evtListener(wBr.currentNode,"click", editBrouillon, false); |
webmaster@0
|
143 else if(wBr.currentNode.firstChild.nodeValue == 'Publier') t.evtListener(wBr.currentNode, "click", pubBrouillon, false); |
webmaster@0
|
144 } |
webmaster@0
|
145 } catch(e) { |
webmaster@29
|
146 var tmpLinks = document.getElementById("GestPosts") |
webmaster@29
|
147 .getElementsByTagName("a"); |
webmaster@29
|
148 for(var i = 0; i < tmpLinks.length; i++) { |
webmaster@75
|
149 if(editFilter.accept(tmpLinks[i])) { |
webmaster@29
|
150 t.evtListener(tmpLinks[i], "click", editPubl, false) |
webmaster@29
|
151 } |
webmaster@29
|
152 } |
webmaster@29
|
153 |
webmaster@29
|
154 tmpLinks = document.getElementById("GestBrouillons") |
webmaster@29
|
155 .getElementsByTagName("a"); |
webmaster@29
|
156 for(var i = 0; i < tmpLinks.length; i++) { |
webmaster@75
|
157 if(brouillonsFilter.accept(tmpLinks[i])) { |
webmaster@75
|
158 if(tmpLinks[i].firstChild.nodeValue == 'Editer') |
webmaster@75
|
159 t.evtListener(tmpLinks[i], "click", editBrouillon, false); |
webmaster@75
|
160 else if(tmpLinks[i].firstChild.nodeValue == 'Publier') |
webmaster@75
|
161 t.evtListener(tmpLinks[i], "click", pubBrouillon, false); |
webmaster@29
|
162 } |
webmaster@29
|
163 } |
webmaster@0
|
164 } |
webmaster@0
|
165 } |
webmaster@0
|
166 |
webmaster@0
|
167 function switchSection(e) { |
webmaster@0
|
168 var targetAc = bpEvt(e, 'li').rTarget; |
webmaster@0
|
169 for(i=0; i<arLIMenu.length; i++) { |
webmaster@0
|
170 tmpObj=document.getElementById('Gest' + arLIMenu[i].firstChild.id); |
webmaster@0
|
171 if(arLIMenu[i]==targetAc) { |
webmaster@0
|
172 arLIMenu[i].className='Actif'; |
webmaster@0
|
173 tmpObj.style.display='block'; |
webmaster@0
|
174 } else { |
webmaster@0
|
175 arLIMenu[i].className=''; |
webmaster@0
|
176 tmpObj.style.display='none'; |
webmaster@0
|
177 } |
webmaster@0
|
178 } |
webmaster@0
|
179 } |
webmaster@0
|
180 |
webmaster@0
|
181 |
webmaster@0
|
182 function pubBrouillon(e) { |
webmaster@0
|
183 var whichVersion = document.getElementById("whichVersion"); |
webmaster@0
|
184 var pubComment = document.getElementById("pubComment"); |
webmaster@0
|
185 var el = bpEvt(e).rTarget; |
webmaster@0
|
186 if(el != curBPShown) { |
webmaster@0
|
187 if(curBPShown != 0) curBPShown.parentNode.parentNode.className = ''; |
webmaster@0
|
188 curBPShown = el; |
webmaster@0
|
189 el.parentNode.parentNode.className = 'Pinned'; |
webmaster@0
|
190 var pos = el.href.indexOf("#"); |
webmaster@0
|
191 whichVersion.pubButton.disabled = true; |
webmaster@0
|
192 pubComment.textContent = "Vérification en cours de la validité XML du post"; |
webmaster@0
|
193 whichVersion.id.value = el.href.substring(pos + 4, el.href.length); |
webmaster@0
|
194 el.parentNode.appendChild(whichVersion); |
webmaster@0
|
195 whichVersion.style.display='block'; |
webmaster@0
|
196 el.pubIsShown = true; |
webmaster@0
|
197 var data = xmlRequest.get("admin_xml.php?type=brouillon&id=" + whichVersion.id.value); |
webmaster@75
|
198 var doc = dp.parseFromString("<post>" + t.getTextContent(data.getElementsByTagName("contenu")[0]) + "</post>", "text/xml"); |
webmaster@75
|
199 t.empty(pubComment); |
webmaster@75
|
200 if(doc.getElementsByTagName('parsererror').length > 0) { |
webmaster@75
|
201 var textNode = document.createTextNode(t.getTextContent(doc.documentElement) + "\n"); |
webmaster@75
|
202 pubComment.appendChild(textNode); |
webmaster@0
|
203 } |
webmaster@0
|
204 else { |
webmaster@75
|
205 var textNode = document.createTextNode("Le post est fait de XML valide, bon pour être poster"); |
webmaster@75
|
206 pubComment.appendChild(textNode); |
webmaster@0
|
207 whichVersion.pubButton.disabled = false; |
webmaster@0
|
208 } |
webmaster@0
|
209 } else { |
webmaster@0
|
210 curBPShown = 0; |
webmaster@0
|
211 el.parentNode.parentNode.className = ''; |
webmaster@0
|
212 hideForms(); |
webmaster@0
|
213 el.pubIsShown = false; |
webmaster@0
|
214 } |
webmaster@0
|
215 return false; |
webmaster@0
|
216 } |
webmaster@0
|
217 |
webmaster@0
|
218 function editBrouillon(e) { |
webmaster@0
|
219 edit(e, "brouillon"); |
webmaster@0
|
220 } |
webmaster@0
|
221 |
webmaster@0
|
222 function editPubl(e) { |
webmaster@0
|
223 edit(e, "post"); |
webmaster@0
|
224 } |
webmaster@0
|
225 |
webmaster@0
|
226 function edit(e, type) { |
webmaster@0
|
227 var editPost = document.getElementById("editPost"); |
webmaster@0
|
228 editPost.type = type; |
webmaster@0
|
229 var el = bpEvt(e).rTarget; |
webmaster@0
|
230 if(el.editPostIsShown !=1) { |
webmaster@0
|
231 var id = el.href.substring(el.href.indexOf("#") + 4, el.href.length); |
webmaster@0
|
232 var data = xmlRequest.get("admin_xml.php?type=" + type + "&id=" + id); |
webmaster@0
|
233 el.parentNode.appendChild(editPost); |
webmaster@0
|
234 el.editPostIsShown = 1; |
webmaster@52
|
235 el.parentNode.parentNode.className = 'Pinned'; |
webmaster@0
|
236 editPost.style.display = 'block'; |
webmaster@75
|
237 editPost.Titre.value = t.getTextContent(data.getElementsByTagName('titre')[0]); |
webmaster@75
|
238 editPost.Contenu.value = t.getTextContent(data.getElementsByTagName('contenu')[0]); |
webmaster@0
|
239 if(type == 'post') { |
webmaster@0
|
240 editPost.mood.style.display = ''; |
webmaster@75
|
241 editPost.mood.value = t.getTextContent(data.getElementsByTagName('mood')[0]); |
webmaster@0
|
242 editPost.Tags.style.display = ''; |
webmaster@0
|
243 editPost.Tags.value = ''; |
webmaster@75
|
244 var tags = data.getElementsByTagName('tag'), tag; |
webmaster@0
|
245 for(var i = 0; i < tags.length; i++) |
webmaster@0
|
246 { |
webmaster@75
|
247 tag = t.getTextContent(tags[i]); |
webmaster@75
|
248 if(tag.indexOf(' ') > -1) |
webmaster@0
|
249 { |
webmaster@75
|
250 editPost.Tags.value += '"' + tag + '"'; |
webmaster@0
|
251 } else { |
webmaster@75
|
252 editPost.Tags.value += tag; |
webmaster@0
|
253 } |
webmaster@0
|
254 editPost.Tags.value += ' '; |
webmaster@0
|
255 } |
webmaster@0
|
256 } else { |
webmaster@0
|
257 editPost.mood.style.display = 'none'; |
webmaster@0
|
258 editPost.Tags.style.display = 'none'; |
webmaster@0
|
259 } |
webmaster@0
|
260 |
webmaster@0
|
261 } else { |
webmaster@52
|
262 hideForms(); |
webmaster@52
|
263 el.parentNode.parentNode.className = ''; |
webmaster@52
|
264 el.editPostIsShown = 0; |
webmaster@0
|
265 } |
webmaster@0
|
266 } |
webmaster@0
|
267 |
webmaster@0
|
268 function showAddForm(e) { |
webmaster@0
|
269 var targetAc = bpEvt(e, "a").rTarget; |
webmaster@0
|
270 while(targetAc.nodeName.toLowerCase()!='form') targetAc=targetAc.nextSibling; // Permet d'avoir eventuellement des espaces |
webmaster@0
|
271 targetAc.style.display = (targetAc.style.display=='block')?'none':'block'; |
webmaster@0
|
272 } |
webmaster@0
|
273 |
webmaster@0
|
274 function saveFormContent(e) { |
webmaster@75
|
275 var el = bpEvt(e).rTarget.form; // Should be the form... |
webmaster@0
|
276 var toggleLink = el.parentNode.firstChild; |
webmaster@0
|
277 var id=toggleLink.href.substring(toggleLink.href.indexOf("#") + 4, toggleLink.href.length); |
webmaster@0
|
278 if(xmlRequest.send('admin_xml.php?id=' + id + '&mode=edit&type=' + el.type, |
webmaster@0
|
279 'title=' + postValue(el.Titre.value) + |
webmaster@0
|
280 '&content=' + postValue(el.Contenu.value) + |
webmaster@0
|
281 '&mood=' + postValue(el.mood.value) + |
webmaster@0
|
282 '&tags=' + postValue(el.Tags.value))) |
webmaster@0
|
283 { |
webmaster@0
|
284 toggleLink.editPostIsShown = 0; |
webmaster@56
|
285 toggleLink.parentNode.parentNode.className = ''; |
webmaster@0
|
286 hideForms(); |
webmaster@0
|
287 } else { |
webmaster@0
|
288 el.submit(); |
webmaster@0
|
289 } |
webmaster@0
|
290 return true; |
webmaster@0
|
291 } |
webmaster@0
|
292 |
webmaster@0
|
293 function hideForms() { |
webmaster@0
|
294 document.getElementById('whichVersion').style.display='none'; |
webmaster@0
|
295 document.getElementById('editPost').style.display='none'; |
webmaster@0
|
296 } |
webmaster@0
|
297 |
webmaster@0
|
298 /* Bullet-Proofing of the event variable... Needed because of the huge mess out there */ |
webmaster@0
|
299 function bpEvt(eIni, tag) { |
webmaster@0
|
300 var e = (eIni)?eIni:window.event; |
webmaster@0
|
301 e.rTarget = (e.target)?e.target:e.srcElement; |
webmaster@0
|
302 if(tag != undefined) |
webmaster@0
|
303 while(e.rTarget.parentNode && e.rTarget.nodeName.toLowerCase() != tag) e.rTarget = e.rTarget.parentNode; |
webmaster@0
|
304 return e; |
webmaster@0
|
305 } |
webmaster@0
|
306 |
webmaster@0
|
307 function postValue(str) |
webmaster@0
|
308 { |
webmaster@0
|
309 str = str.replace(/&/g, "%26"); |
webmaster@0
|
310 str = str.replace(/\+/g, "%2B"); |
webmaster@0
|
311 return str; |
webmaster@29
|
312 } |