annotate admin.js @ 0:629389204276

Import initial
author Franck Deroche <webmaster@defr.org>
date Sat, 20 Oct 2007 14:15:10 +0200
parents
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 }