annotate admin.js @ 52:829d6b0d3d0b

Lorsqu'on édite un billet ou un brouillon, on éplingle la zone. Cela permet de ne pas voir la zone de texte disparaitre si le curseur ne survole plus le li correspondant. A noter que le parentNode.parentNode n'est pas des plus esthétiques, et qu'il y reste quelques problèmes relatifs à la non suppression de l'état épinglé.
author Franck Deroche <webmaster@defr.org>
date Tue, 29 Jan 2008 11:33:33 +0100
parents 750613da68ec
children 0aa843c6571b
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@0 234 hideForms();
webmaster@0 235 } else {
webmaster@0 236 el.submit();
webmaster@0 237 }
webmaster@0 238 return true;
webmaster@0 239 }
webmaster@0 240
webmaster@0 241 function hideForms() {
webmaster@0 242 document.getElementById('whichVersion').style.display='none';
webmaster@0 243 document.getElementById('editPost').style.display='none';
webmaster@0 244 }
webmaster@0 245
webmaster@0 246 /* Bullet-Proofing of the event variable... Needed because of the huge mess out there */
webmaster@0 247 function bpEvt(eIni, tag) {
webmaster@0 248 var e = (eIni)?eIni:window.event;
webmaster@0 249 e.rTarget = (e.target)?e.target:e.srcElement;
webmaster@0 250 if(tag != undefined)
webmaster@0 251 while(e.rTarget.parentNode && e.rTarget.nodeName.toLowerCase() != tag) e.rTarget = e.rTarget.parentNode;
webmaster@0 252 return e;
webmaster@0 253 }
webmaster@0 254
webmaster@0 255 function postValue(str)
webmaster@0 256 {
webmaster@0 257 str = str.replace(/&/g, "%26");
webmaster@0 258 str = str.replace(/\+/g, "%2B");
webmaster@0 259 return str;
webmaster@29 260 }