annotate admin.js @ 31:2d98421d43da

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