annotate admin.js @ 74:d9490757a111

Aide pour IE: Classes explicites et pas de syntaxe XHTML. Le selecteur [id^='Gest'], bien que pratique, n'est pas supporter par IE6. En conséquence, j'ai ajouté une classe Gestion sur l'ensemble des div concernés et j'ai remplacé cela par un très classique div.Gestion. D'autre part, visiblement, le <label /> faisait plus que troubler IE, qui ne comprenait par conséquent pas bien ou ce dernier ce finissait. Le problème a été réglé en décompactant la balise.
author Franck Deroche <webmaster@defr.org>
date Mon, 31 Mar 2008 14:53:49 +0200
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 }