Mercurial > defr > DualBlog
comparison admin.js @ 0:629389204276
Import initial
author | Franck Deroche <webmaster@defr.org> |
---|---|
date | Sat, 20 Oct 2007 14:15:10 +0200 |
parents | |
children | 750613da68ec |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:629389204276 |
---|---|
1 var arLIMenu = new Array(); | |
2 var curBPShown = 0; | |
3 var wEdit, wBr, dp; | |
4 | |
5 var xmlRequest = { | |
6 init: function() { | |
7 try { | |
8 xmlRequest.obj = new XMLHttpRequest(); | |
9 } catch(e) { | |
10 xmlRequest.obj = new ActiveXObject("Msxml2.XMLHTTP"); | |
11 } | |
12 }, | |
13 | |
14 get: function(url) { | |
15 xmlRequest.obj.open("GET", url, false); | |
16 xmlRequest.obj.send(null); | |
17 | |
18 return xmlRequest.obj.responseXML; | |
19 }, | |
20 | |
21 send: function(url, data) { | |
22 try { | |
23 xmlRequest.obj.open("POST", url, false); | |
24 xmlRequest.obj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') | |
25 xmlRequest.obj.send(data); | |
26 return true; | |
27 } catch(e) { | |
28 return false; | |
29 } | |
30 } | |
31 | |
32 }; | |
33 | |
34 var t = { | |
35 evtListener:function(elt, evt, func, useCpt) { | |
36 if(elt.addEventListener) | |
37 elt.addEventListener(evt, func, useCpt); | |
38 else if(elt.attachEvent) | |
39 elt.attachEvent("on" + evt, func); | |
40 else | |
41 elt["on" + evt] = func; | |
42 } | |
43 } | |
44 | |
45 t.evtListener(window, "load", xmlRequest.init, false); | |
46 t.evtListener(window, "load", hideForms, false); | |
47 | |
48 var editFilter = { | |
49 acceptNode: function(node) { | |
50 if(node.nodeName == 'a' && node.firstChild && node.firstChild.nodeValue == 'Editer') return NodeFilter.FILTER_ACCEPT; | |
51 return NodeFilter.FILTER_SKIP; | |
52 } | |
53 } | |
54 | |
55 var brouillonsFilter = { | |
56 acceptNode:function(node) { | |
57 if(node.nodeName == 'a' && node.firstChild && ( | |
58 node.firstChild.nodeValue == 'Editer' || | |
59 node.firstChild.nodeValue == 'Publier' || | |
60 node.firstChild.nodeValue == 'Supprimer')) | |
61 return NodeFilter.FILTER_ACCEPT; | |
62 return NodeFilter.FILTER_SKIP; | |
63 } | |
64 } | |
65 | |
66 | |
67 | |
68 window.onload=function() { | |
69 var ar=document.getElementsByTagName('li'); | |
70 for(var i=0; i<ar.length; i++) { | |
71 if(ar[i].parentNode.id=='Menu') { | |
72 arLIMenu[arLIMenu.length]=ar[i]; | |
73 if(ar[i].firstChild.id=='Brouillons') { | |
74 ar[i].className="Actif"; | |
75 document.getElementById('Gest' + ar[i].firstChild.id).style.display='block'; | |
76 } | |
77 t.evtListener(ar[i], 'click', switchSection, true); | |
78 } | |
79 if(ar[i].className=='Add') | |
80 t.evtListener(ar[i].firstChild, 'click', showAddForm, true); | |
81 } | |
82 | |
83 try { dp = new DOMParser();} | |
84 catch(e) {dp = new ActiveXObject("Microsoft.XMLDOM");} | |
85 t.evtListener(document.getElementById("editPost").Save, "click", saveFormContent, false); | |
86 // TreeWalkers in all their glory | |
87 try { | |
88 wEdit = document.createTreeWalker(document.getElementById("GestPosts"), NodeFilter.SHOW_ALL, editFilter, true); | |
89 while(wEdit.nextNode()) { | |
90 t.evtListener(wEdit.currentNode, "click", editPubl, false); | |
91 } | |
92 | |
93 wBr = document.createTreeWalker(document.getElementById("GestBrouillons"), NodeFilter.SHOW_ALL, brouillonsFilter, true); | |
94 while(wBr.nextNode()) { | |
95 if(wBr.currentNode.firstChild.nodeValue == 'Editer') t.evtListener(wBr.currentNode,"click", editBrouillon, false); | |
96 else if(wBr.currentNode.firstChild.nodeValue == 'Publier') t.evtListener(wBr.currentNode, "click", pubBrouillon, false); | |
97 } | |
98 } catch(e) { | |
99 //Well, right now, we're sort of screwed... | |
100 } | |
101 } | |
102 | |
103 function switchSection(e) { | |
104 var targetAc = bpEvt(e, 'li').rTarget; | |
105 for(i=0; i<arLIMenu.length; i++) { | |
106 tmpObj=document.getElementById('Gest' + arLIMenu[i].firstChild.id); | |
107 if(arLIMenu[i]==targetAc) { | |
108 arLIMenu[i].className='Actif'; | |
109 tmpObj.style.display='block'; | |
110 } else { | |
111 arLIMenu[i].className=''; | |
112 tmpObj.style.display='none'; | |
113 } | |
114 } | |
115 } | |
116 | |
117 | |
118 function pubBrouillon(e) { | |
119 var whichVersion = document.getElementById("whichVersion"); | |
120 var pubComment = document.getElementById("pubComment"); | |
121 var el = bpEvt(e).rTarget; | |
122 if(el != curBPShown) { | |
123 if(curBPShown != 0) curBPShown.parentNode.parentNode.className = ''; | |
124 curBPShown = el; | |
125 el.parentNode.parentNode.className = 'Pinned'; | |
126 var pos = el.href.indexOf("#"); | |
127 whichVersion.pubButton.disabled = true; | |
128 pubComment.textContent = "Vérification en cours de la validité XML du post"; | |
129 whichVersion.id.value = el.href.substring(pos + 4, el.href.length); | |
130 el.parentNode.appendChild(whichVersion); | |
131 whichVersion.style.display='block'; | |
132 el.pubIsShown = true; | |
133 var data = xmlRequest.get("admin_xml.php?type=brouillon&id=" + whichVersion.id.value); | |
134 var doc = dp.parseFromString("<post>" + data.getElementsByTagName("contenu")[0].firstChild.data + "</post>", "text/xml"); | |
135 var parserErrors = doc.getElementsByTagName('parsererror'); | |
136 if(parserErrors.length > 0) { | |
137 pubComment.textContent = ""; | |
138 pubComment.appendChild(doc.firstChild); | |
139 } | |
140 else { | |
141 pubComment.textContent = "Le post est fait de XML valide, bon pour être poster"; | |
142 whichVersion.pubButton.disabled = false; | |
143 } | |
144 } else { | |
145 curBPShown = 0; | |
146 el.parentNode.parentNode.className = ''; | |
147 hideForms(); | |
148 el.pubIsShown = false; | |
149 } | |
150 return false; | |
151 } | |
152 | |
153 function editBrouillon(e) { | |
154 edit(e, "brouillon"); | |
155 } | |
156 | |
157 function editPubl(e) { | |
158 edit(e, "post"); | |
159 } | |
160 | |
161 function edit(e, type) { | |
162 var editPost = document.getElementById("editPost"); | |
163 editPost.type = type; | |
164 var el = bpEvt(e).rTarget; | |
165 if(el.editPostIsShown !=1) { | |
166 var id = el.href.substring(el.href.indexOf("#") + 4, el.href.length); | |
167 var data = xmlRequest.get("admin_xml.php?type=" + type + "&id=" + id); | |
168 el.parentNode.appendChild(editPost); | |
169 el.editPostIsShown = 1; | |
170 editPost.style.display = 'block'; | |
171 editPost.Titre.value = data.getElementsByTagName('titre')[0].textContent; | |
172 editPost.Contenu.value = data.getElementsByTagName('contenu')[0].firstChild.data; | |
173 if(type == 'post') { | |
174 editPost.mood.style.display = ''; | |
175 editPost.mood.value = data.getElementsByTagName('mood')[0].textContent; | |
176 editPost.Tags.style.display = ''; | |
177 editPost.Tags.value = ''; | |
178 var tags = data.getElementsByTagName('tag'); | |
179 for(var i = 0; i < tags.length; i++) | |
180 { | |
181 if(tags[i].textContent.indexOf(' ') > -1) | |
182 { | |
183 editPost.Tags.value += '"' + tags[i].textContent + '"'; | |
184 } else { | |
185 editPost.Tags.value += tags[i].textContent; | |
186 } | |
187 editPost.Tags.value += ' '; | |
188 } | |
189 } else { | |
190 editPost.mood.style.display = 'none'; | |
191 editPost.Tags.style.display = 'none'; | |
192 } | |
193 | |
194 } else { | |
195 hideForms(); | |
196 el.editPostIsShown = 0; | |
197 } | |
198 } | |
199 | |
200 function showAddForm(e) { | |
201 var targetAc = bpEvt(e, "a").rTarget; | |
202 while(targetAc.nodeName.toLowerCase()!='form') targetAc=targetAc.nextSibling; // Permet d'avoir eventuellement des espaces | |
203 targetAc.style.display = (targetAc.style.display=='block')?'none':'block'; | |
204 } | |
205 | |
206 function saveFormContent(e) { | |
207 var el = e.target.form; // Should be the form... | |
208 var toggleLink = el.parentNode.firstChild; | |
209 var id=toggleLink.href.substring(toggleLink.href.indexOf("#") + 4, toggleLink.href.length); | |
210 if(xmlRequest.send('admin_xml.php?id=' + id + '&mode=edit&type=' + el.type, | |
211 'title=' + postValue(el.Titre.value) + | |
212 '&content=' + postValue(el.Contenu.value) + | |
213 '&mood=' + postValue(el.mood.value) + | |
214 '&tags=' + postValue(el.Tags.value))) | |
215 { | |
216 toggleLink.editPostIsShown = 0; | |
217 hideForms(); | |
218 } else { | |
219 el.submit(); | |
220 } | |
221 return true; | |
222 } | |
223 | |
224 function hideForms() { | |
225 document.getElementById('whichVersion').style.display='none'; | |
226 document.getElementById('editPost').style.display='none'; | |
227 } | |
228 | |
229 /* Bullet-Proofing of the event variable... Needed because of the huge mess out there */ | |
230 function bpEvt(eIni, tag) { | |
231 var e = (eIni)?eIni:window.event; | |
232 e.rTarget = (e.target)?e.target:e.srcElement; | |
233 if(tag != undefined) | |
234 while(e.rTarget.parentNode && e.rTarget.nodeName.toLowerCase() != tag) e.rTarget = e.rTarget.parentNode; | |
235 return e; | |
236 } | |
237 | |
238 function postValue(str) | |
239 { | |
240 str = str.replace(/&/g, "%26"); | |
241 str = str.replace(/\+/g, "%2B"); | |
242 return str; | |
243 } |