annotate admin.js @ 69:d67a65183100

On ne termine les balises que si un post a été rencontré. Dans les autres cas, les balises d'ouverture correspondantes n'existeront pas dans le document. :-)
author Franck Deroche <webmaster@defr.org>
date Wed, 19 Mar 2008 12:03:32 +0100
parents 0aa843c6571b
children 49b0a2f3a118
rev   line source
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@0 40 else
webmaster@0 41 elt["on" + evt] = func;
webmaster@0 42 }
webmaster@0 43 }
webmaster@0 44
webmaster@0 45 t.evtListener(window, "load", xmlRequest.init, false);
webmaster@0 46 t.evtListener(window, "load", hideForms, false);
webmaster@0 47
webmaster@0 48 var editFilter = {
webmaster@0 49 acceptNode: function(node) {
webmaster@52 50 if(node.nodeName == 'a' && node.firstChild && node.firstChild.nodeValue == 'Editer')
webmaster@52 51 return NodeFilter.FILTER_ACCEPT;
webmaster@0 52 return NodeFilter.FILTER_SKIP;
webmaster@0 53 }
webmaster@0 54 }
webmaster@0 55
webmaster@0 56 var brouillonsFilter = {
webmaster@0 57 acceptNode:function(node) {
webmaster@0 58 if(node.nodeName == 'a' && node.firstChild && (
webmaster@0 59 node.firstChild.nodeValue == 'Editer' ||
webmaster@0 60 node.firstChild.nodeValue == 'Publier' ||
webmaster@0 61 node.firstChild.nodeValue == 'Supprimer'))
webmaster@0 62 return NodeFilter.FILTER_ACCEPT;
webmaster@0 63 return NodeFilter.FILTER_SKIP;
webmaster@0 64 }
webmaster@0 65 }
webmaster@0 66
webmaster@0 67
webmaster@0 68
webmaster@0 69 window.onload=function() {
webmaster@0 70 var ar=document.getElementsByTagName('li');
webmaster@0 71 for(var i=0; i<ar.length; i++) {
webmaster@0 72 if(ar[i].parentNode.id=='Menu') {
webmaster@0 73 arLIMenu[arLIMenu.length]=ar[i];
webmaster@0 74 if(ar[i].firstChild.id=='Brouillons') {
webmaster@0 75 ar[i].className="Actif";
webmaster@0 76 document.getElementById('Gest' + ar[i].firstChild.id).style.display='block';
webmaster@0 77 }
webmaster@0 78 t.evtListener(ar[i], 'click', switchSection, true);
webmaster@0 79 }
webmaster@0 80 if(ar[i].className=='Add')
webmaster@0 81 t.evtListener(ar[i].firstChild, 'click', showAddForm, true);
webmaster@0 82 }
webmaster@0 83
webmaster@0 84 try { dp = new DOMParser();}
webmaster@0 85 catch(e) {dp = new ActiveXObject("Microsoft.XMLDOM");}
webmaster@0 86 t.evtListener(document.getElementById("editPost").Save, "click", saveFormContent, false);
webmaster@0 87 // TreeWalkers in all their glory
webmaster@0 88 try {
webmaster@0 89 wEdit = document.createTreeWalker(document.getElementById("GestPosts"), NodeFilter.SHOW_ALL, editFilter, true);
webmaster@0 90 while(wEdit.nextNode()) {
webmaster@0 91 t.evtListener(wEdit.currentNode, "click", editPubl, false);
webmaster@0 92 }
webmaster@0 93
webmaster@0 94 wBr = document.createTreeWalker(document.getElementById("GestBrouillons"), NodeFilter.SHOW_ALL, brouillonsFilter, true);
webmaster@0 95 while(wBr.nextNode()) {
webmaster@0 96 if(wBr.currentNode.firstChild.nodeValue == 'Editer') t.evtListener(wBr.currentNode,"click", editBrouillon, false);
webmaster@0 97 else if(wBr.currentNode.firstChild.nodeValue == 'Publier') t.evtListener(wBr.currentNode, "click", pubBrouillon, false);
webmaster@0 98 }
webmaster@0 99 } catch(e) {
webmaster@29 100 var tmpLinks = document.getElementById("GestPosts")
webmaster@29 101 .getElementsByTagName("a");
webmaster@29 102 for(var i = 0; i < tmpLinks.length; i++) {
webmaster@29 103 if(editFilter.acceptNode(tmpLinks[i])) {
webmaster@29 104 t.evtListener(tmpLinks[i], "click", editPubl, false)
webmaster@29 105 }
webmaster@29 106 }
webmaster@29 107
webmaster@29 108 tmpLinks = document.getElementById("GestBrouillons")
webmaster@29 109 .getElementsByTagName("a");
webmaster@29 110 for(var i = 0; i < tmpLinks.length; i++) {
webmaster@29 111 if(brouillonsFilter.acceptNode(tmpLinks[i])) {
webmaster@29 112 t.evtListener(tmpLinks[i], "click", editPubl, false)
webmaster@29 113 }
webmaster@29 114 }
webmaster@0 115 }
webmaster@0 116 }
webmaster@0 117
webmaster@0 118 function switchSection(e) {
webmaster@0 119 var targetAc = bpEvt(e, 'li').rTarget;
webmaster@0 120 for(i=0; i<arLIMenu.length; i++) {
webmaster@0 121 tmpObj=document.getElementById('Gest' + arLIMenu[i].firstChild.id);
webmaster@0 122 if(arLIMenu[i]==targetAc) {
webmaster@0 123 arLIMenu[i].className='Actif';
webmaster@0 124 tmpObj.style.display='block';
webmaster@0 125 } else {
webmaster@0 126 arLIMenu[i].className='';
webmaster@0 127 tmpObj.style.display='none';
webmaster@0 128 }
webmaster@0 129 }
webmaster@0 130 }
webmaster@0 131
webmaster@0 132
webmaster@0 133 function pubBrouillon(e) {
webmaster@0 134 var whichVersion = document.getElementById("whichVersion");
webmaster@0 135 var pubComment = document.getElementById("pubComment");
webmaster@0 136 var el = bpEvt(e).rTarget;
webmaster@0 137 if(el != curBPShown) {
webmaster@0 138 if(curBPShown != 0) curBPShown.parentNode.parentNode.className = '';
webmaster@0 139 curBPShown = el;
webmaster@0 140 el.parentNode.parentNode.className = 'Pinned';
webmaster@0 141 var pos = el.href.indexOf("#");
webmaster@0 142 whichVersion.pubButton.disabled = true;
webmaster@0 143 pubComment.textContent = "Vérification en cours de la validité XML du post";
webmaster@0 144 whichVersion.id.value = el.href.substring(pos + 4, el.href.length);
webmaster@0 145 el.parentNode.appendChild(whichVersion);
webmaster@0 146 whichVersion.style.display='block';
webmaster@0 147 el.pubIsShown = true;
webmaster@0 148 var data = xmlRequest.get("admin_xml.php?type=brouillon&id=" + whichVersion.id.value);
webmaster@0 149 var doc = dp.parseFromString("<post>" + data.getElementsByTagName("contenu")[0].firstChild.data + "</post>", "text/xml");
webmaster@0 150 var parserErrors = doc.getElementsByTagName('parsererror');
webmaster@0 151 if(parserErrors.length > 0) {
webmaster@0 152 pubComment.textContent = "";
webmaster@0 153 pubComment.appendChild(doc.firstChild);
webmaster@0 154 }
webmaster@0 155 else {
webmaster@0 156 pubComment.textContent = "Le post est fait de XML valide, bon pour être poster";
webmaster@0 157 whichVersion.pubButton.disabled = false;
webmaster@0 158 }
webmaster@0 159 } else {
webmaster@0 160 curBPShown = 0;
webmaster@0 161 el.parentNode.parentNode.className = '';
webmaster@0 162 hideForms();
webmaster@0 163 el.pubIsShown = false;
webmaster@0 164 }
webmaster@0 165 return false;
webmaster@0 166 }
webmaster@0 167
webmaster@0 168 function editBrouillon(e) {
webmaster@0 169 edit(e, "brouillon");
webmaster@0 170 }
webmaster@0 171
webmaster@0 172 function editPubl(e) {
webmaster@0 173 edit(e, "post");
webmaster@0 174 }
webmaster@0 175
webmaster@0 176 function edit(e, type) {
webmaster@0 177 var editPost = document.getElementById("editPost");
webmaster@0 178 editPost.type = type;
webmaster@0 179 var el = bpEvt(e).rTarget;
webmaster@0 180 if(el.editPostIsShown !=1) {
webmaster@0 181 var id = el.href.substring(el.href.indexOf("#") + 4, el.href.length);
webmaster@0 182 var data = xmlRequest.get("admin_xml.php?type=" + type + "&id=" + id);
webmaster@0 183 el.parentNode.appendChild(editPost);
webmaster@0 184 el.editPostIsShown = 1;
webmaster@52 185 el.parentNode.parentNode.className = 'Pinned';
webmaster@0 186 editPost.style.display = 'block';
webmaster@0 187 editPost.Titre.value = data.getElementsByTagName('titre')[0].textContent;
webmaster@0 188 editPost.Contenu.value = data.getElementsByTagName('contenu')[0].firstChild.data;
webmaster@0 189 if(type == 'post') {
webmaster@0 190 editPost.mood.style.display = '';
webmaster@0 191 editPost.mood.value = data.getElementsByTagName('mood')[0].textContent;
webmaster@0 192 editPost.Tags.style.display = '';
webmaster@0 193 editPost.Tags.value = '';
webmaster@0 194 var tags = data.getElementsByTagName('tag');
webmaster@0 195 for(var i = 0; i < tags.length; i++)
webmaster@0 196 {
webmaster@0 197 if(tags[i].textContent.indexOf(' ') > -1)
webmaster@0 198 {
webmaster@0 199 editPost.Tags.value += '"' + tags[i].textContent + '"';
webmaster@0 200 } else {
webmaster@0 201 editPost.Tags.value += tags[i].textContent;
webmaster@0 202 }
webmaster@0 203 editPost.Tags.value += ' ';
webmaster@0 204 }
webmaster@0 205 } else {
webmaster@0 206 editPost.mood.style.display = 'none';
webmaster@0 207 editPost.Tags.style.display = 'none';
webmaster@0 208 }
webmaster@0 209
webmaster@0 210 } else {
webmaster@52 211 hideForms();
webmaster@52 212 el.parentNode.parentNode.className = '';
webmaster@52 213 el.editPostIsShown = 0;
webmaster@0 214 }
webmaster@0 215 }
webmaster@0 216
webmaster@0 217 function showAddForm(e) {
webmaster@0 218 var targetAc = bpEvt(e, "a").rTarget;
webmaster@0 219 while(targetAc.nodeName.toLowerCase()!='form') targetAc=targetAc.nextSibling; // Permet d'avoir eventuellement des espaces
webmaster@0 220 targetAc.style.display = (targetAc.style.display=='block')?'none':'block';
webmaster@0 221 }
webmaster@0 222
webmaster@0 223 function saveFormContent(e) {
webmaster@0 224 var el = e.target.form; // Should be the form...
webmaster@0 225 var toggleLink = el.parentNode.firstChild;
webmaster@0 226 var id=toggleLink.href.substring(toggleLink.href.indexOf("#") + 4, toggleLink.href.length);
webmaster@0 227 if(xmlRequest.send('admin_xml.php?id=' + id + '&mode=edit&type=' + el.type,
webmaster@0 228 'title=' + postValue(el.Titre.value) +
webmaster@0 229 '&content=' + postValue(el.Contenu.value) +
webmaster@0 230 '&mood=' + postValue(el.mood.value) +
webmaster@0 231 '&tags=' + postValue(el.Tags.value)))
webmaster@0 232 {
webmaster@0 233 toggleLink.editPostIsShown = 0;
webmaster@56 234 toggleLink.parentNode.parentNode.className = '';
webmaster@0 235 hideForms();
webmaster@0 236 } else {
webmaster@0 237 el.submit();
webmaster@0 238 }
webmaster@0 239 return true;
webmaster@0 240 }
webmaster@0 241
webmaster@0 242 function hideForms() {
webmaster@0 243 document.getElementById('whichVersion').style.display='none';
webmaster@0 244 document.getElementById('editPost').style.display='none';
webmaster@0 245 }
webmaster@0 246
webmaster@0 247 /* Bullet-Proofing of the event variable... Needed because of the huge mess out there */
webmaster@0 248 function bpEvt(eIni, tag) {
webmaster@0 249 var e = (eIni)?eIni:window.event;
webmaster@0 250 e.rTarget = (e.target)?e.target:e.srcElement;
webmaster@0 251 if(tag != undefined)
webmaster@0 252 while(e.rTarget.parentNode && e.rTarget.nodeName.toLowerCase() != tag) e.rTarget = e.rTarget.parentNode;
webmaster@0 253 return e;
webmaster@0 254 }
webmaster@0 255
webmaster@0 256 function postValue(str)
webmaster@0 257 {
webmaster@0 258 str = str.replace(/&/g, "%26");
webmaster@0 259 str = str.replace(/\+/g, "%2B");
webmaster@0 260 return str;
webmaster@29 261 }