annotate admin.js @ 11:ff57b45eda37

Changement profond de l'index. Utilisation des templates. Dual Blog utilise maintenant intimement la libraire de templates que l'on peut trouver sur http://hg.defr.org/defr/templates, ce qui permet d'eviter de mixer du code PHP avec du HTML. Accessoirement, on est aussi assurer d'avoir du XML valide, puisque c'est l'API DOM qui est utilisée pour générer la sortie.
author Franck Deroche <webmaster@defr.org>
date Wed, 24 Oct 2007 20:06:00 +0200
parents 629389204276
children 750613da68ec
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@0 99 //Well, right now, we're sort of screwed...
webmaster@0 100 }
webmaster@0 101 }
webmaster@0 102
webmaster@0 103 function switchSection(e) {
webmaster@0 104 var targetAc = bpEvt(e, 'li').rTarget;
webmaster@0 105 for(i=0; i<arLIMenu.length; i++) {
webmaster@0 106 tmpObj=document.getElementById('Gest' + arLIMenu[i].firstChild.id);
webmaster@0 107 if(arLIMenu[i]==targetAc) {
webmaster@0 108 arLIMenu[i].className='Actif';
webmaster@0 109 tmpObj.style.display='block';
webmaster@0 110 } else {
webmaster@0 111 arLIMenu[i].className='';
webmaster@0 112 tmpObj.style.display='none';
webmaster@0 113 }
webmaster@0 114 }
webmaster@0 115 }
webmaster@0 116
webmaster@0 117
webmaster@0 118 function pubBrouillon(e) {
webmaster@0 119 var whichVersion = document.getElementById("whichVersion");
webmaster@0 120 var pubComment = document.getElementById("pubComment");
webmaster@0 121 var el = bpEvt(e).rTarget;
webmaster@0 122 if(el != curBPShown) {
webmaster@0 123 if(curBPShown != 0) curBPShown.parentNode.parentNode.className = '';
webmaster@0 124 curBPShown = el;
webmaster@0 125 el.parentNode.parentNode.className = 'Pinned';
webmaster@0 126 var pos = el.href.indexOf("#");
webmaster@0 127 whichVersion.pubButton.disabled = true;
webmaster@0 128 pubComment.textContent = "Vérification en cours de la validité XML du post";
webmaster@0 129 whichVersion.id.value = el.href.substring(pos + 4, el.href.length);
webmaster@0 130 el.parentNode.appendChild(whichVersion);
webmaster@0 131 whichVersion.style.display='block';
webmaster@0 132 el.pubIsShown = true;
webmaster@0 133 var data = xmlRequest.get("admin_xml.php?type=brouillon&id=" + whichVersion.id.value);
webmaster@0 134 var doc = dp.parseFromString("<post>" + data.getElementsByTagName("contenu")[0].firstChild.data + "</post>", "text/xml");
webmaster@0 135 var parserErrors = doc.getElementsByTagName('parsererror');
webmaster@0 136 if(parserErrors.length > 0) {
webmaster@0 137 pubComment.textContent = "";
webmaster@0 138 pubComment.appendChild(doc.firstChild);
webmaster@0 139 }
webmaster@0 140 else {
webmaster@0 141 pubComment.textContent = "Le post est fait de XML valide, bon pour être poster";
webmaster@0 142 whichVersion.pubButton.disabled = false;
webmaster@0 143 }
webmaster@0 144 } else {
webmaster@0 145 curBPShown = 0;
webmaster@0 146 el.parentNode.parentNode.className = '';
webmaster@0 147 hideForms();
webmaster@0 148 el.pubIsShown = false;
webmaster@0 149 }
webmaster@0 150 return false;
webmaster@0 151 }
webmaster@0 152
webmaster@0 153 function editBrouillon(e) {
webmaster@0 154 edit(e, "brouillon");
webmaster@0 155 }
webmaster@0 156
webmaster@0 157 function editPubl(e) {
webmaster@0 158 edit(e, "post");
webmaster@0 159 }
webmaster@0 160
webmaster@0 161 function edit(e, type) {
webmaster@0 162 var editPost = document.getElementById("editPost");
webmaster@0 163 editPost.type = type;
webmaster@0 164 var el = bpEvt(e).rTarget;
webmaster@0 165 if(el.editPostIsShown !=1) {
webmaster@0 166 var id = el.href.substring(el.href.indexOf("#") + 4, el.href.length);
webmaster@0 167 var data = xmlRequest.get("admin_xml.php?type=" + type + "&id=" + id);
webmaster@0 168 el.parentNode.appendChild(editPost);
webmaster@0 169 el.editPostIsShown = 1;
webmaster@0 170 editPost.style.display = 'block';
webmaster@0 171 editPost.Titre.value = data.getElementsByTagName('titre')[0].textContent;
webmaster@0 172 editPost.Contenu.value = data.getElementsByTagName('contenu')[0].firstChild.data;
webmaster@0 173 if(type == 'post') {
webmaster@0 174 editPost.mood.style.display = '';
webmaster@0 175 editPost.mood.value = data.getElementsByTagName('mood')[0].textContent;
webmaster@0 176 editPost.Tags.style.display = '';
webmaster@0 177 editPost.Tags.value = '';
webmaster@0 178 var tags = data.getElementsByTagName('tag');
webmaster@0 179 for(var i = 0; i < tags.length; i++)
webmaster@0 180 {
webmaster@0 181 if(tags[i].textContent.indexOf(' ') > -1)
webmaster@0 182 {
webmaster@0 183 editPost.Tags.value += '"' + tags[i].textContent + '"';
webmaster@0 184 } else {
webmaster@0 185 editPost.Tags.value += tags[i].textContent;
webmaster@0 186 }
webmaster@0 187 editPost.Tags.value += ' ';
webmaster@0 188 }
webmaster@0 189 } else {
webmaster@0 190 editPost.mood.style.display = 'none';
webmaster@0 191 editPost.Tags.style.display = 'none';
webmaster@0 192 }
webmaster@0 193
webmaster@0 194 } else {
webmaster@0 195 hideForms();
webmaster@0 196 el.editPostIsShown = 0;
webmaster@0 197 }
webmaster@0 198 }
webmaster@0 199
webmaster@0 200 function showAddForm(e) {
webmaster@0 201 var targetAc = bpEvt(e, "a").rTarget;
webmaster@0 202 while(targetAc.nodeName.toLowerCase()!='form') targetAc=targetAc.nextSibling; // Permet d'avoir eventuellement des espaces
webmaster@0 203 targetAc.style.display = (targetAc.style.display=='block')?'none':'block';
webmaster@0 204 }
webmaster@0 205
webmaster@0 206 function saveFormContent(e) {
webmaster@0 207 var el = e.target.form; // Should be the form...
webmaster@0 208 var toggleLink = el.parentNode.firstChild;
webmaster@0 209 var id=toggleLink.href.substring(toggleLink.href.indexOf("#") + 4, toggleLink.href.length);
webmaster@0 210 if(xmlRequest.send('admin_xml.php?id=' + id + '&mode=edit&type=' + el.type,
webmaster@0 211 'title=' + postValue(el.Titre.value) +
webmaster@0 212 '&content=' + postValue(el.Contenu.value) +
webmaster@0 213 '&mood=' + postValue(el.mood.value) +
webmaster@0 214 '&tags=' + postValue(el.Tags.value)))
webmaster@0 215 {
webmaster@0 216 toggleLink.editPostIsShown = 0;
webmaster@0 217 hideForms();
webmaster@0 218 } else {
webmaster@0 219 el.submit();
webmaster@0 220 }
webmaster@0 221 return true;
webmaster@0 222 }
webmaster@0 223
webmaster@0 224 function hideForms() {
webmaster@0 225 document.getElementById('whichVersion').style.display='none';
webmaster@0 226 document.getElementById('editPost').style.display='none';
webmaster@0 227 }
webmaster@0 228
webmaster@0 229 /* Bullet-Proofing of the event variable... Needed because of the huge mess out there */
webmaster@0 230 function bpEvt(eIni, tag) {
webmaster@0 231 var e = (eIni)?eIni:window.event;
webmaster@0 232 e.rTarget = (e.target)?e.target:e.srcElement;
webmaster@0 233 if(tag != undefined)
webmaster@0 234 while(e.rTarget.parentNode && e.rTarget.nodeName.toLowerCase() != tag) e.rTarget = e.rTarget.parentNode;
webmaster@0 235 return e;
webmaster@0 236 }
webmaster@0 237
webmaster@0 238 function postValue(str)
webmaster@0 239 {
webmaster@0 240 str = str.replace(/&/g, "%26");
webmaster@0 241 str = str.replace(/\+/g, "%2B");
webmaster@0 242 return str;
webmaster@0 243 }