Mercurial > defr > DualBlog
view admin.js @ 28:bdf116822fc6
Ajout d'un moyen d'obtenir un singleton sur l'objet Requete.
Cela permet d'éviter d'avoir à charger plusieurs fois les données
provenant de $_GET, $_COOKIE et $_POST, entre autres.
author | Franck Deroche <webmaster@defr.org> |
---|---|
date | Thu, 01 Nov 2007 17:43:31 +0100 |
parents | 629389204276 |
children | 750613da68ec |
line wrap: on
line source
var arLIMenu = new Array(); var curBPShown = 0; var wEdit, wBr, dp; var xmlRequest = { init: function() { try { xmlRequest.obj = new XMLHttpRequest(); } catch(e) { xmlRequest.obj = new ActiveXObject("Msxml2.XMLHTTP"); } }, get: function(url) { xmlRequest.obj.open("GET", url, false); xmlRequest.obj.send(null); return xmlRequest.obj.responseXML; }, send: function(url, data) { try { xmlRequest.obj.open("POST", url, false); xmlRequest.obj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') xmlRequest.obj.send(data); return true; } catch(e) { return false; } } }; var t = { evtListener:function(elt, evt, func, useCpt) { if(elt.addEventListener) elt.addEventListener(evt, func, useCpt); else if(elt.attachEvent) elt.attachEvent("on" + evt, func); else elt["on" + evt] = func; } } t.evtListener(window, "load", xmlRequest.init, false); t.evtListener(window, "load", hideForms, false); var editFilter = { acceptNode: function(node) { if(node.nodeName == 'a' && node.firstChild && node.firstChild.nodeValue == 'Editer') return NodeFilter.FILTER_ACCEPT; return NodeFilter.FILTER_SKIP; } } var brouillonsFilter = { acceptNode:function(node) { if(node.nodeName == 'a' && node.firstChild && ( node.firstChild.nodeValue == 'Editer' || node.firstChild.nodeValue == 'Publier' || node.firstChild.nodeValue == 'Supprimer')) return NodeFilter.FILTER_ACCEPT; return NodeFilter.FILTER_SKIP; } } window.onload=function() { var ar=document.getElementsByTagName('li'); for(var i=0; i<ar.length; i++) { if(ar[i].parentNode.id=='Menu') { arLIMenu[arLIMenu.length]=ar[i]; if(ar[i].firstChild.id=='Brouillons') { ar[i].className="Actif"; document.getElementById('Gest' + ar[i].firstChild.id).style.display='block'; } t.evtListener(ar[i], 'click', switchSection, true); } if(ar[i].className=='Add') t.evtListener(ar[i].firstChild, 'click', showAddForm, true); } try { dp = new DOMParser();} catch(e) {dp = new ActiveXObject("Microsoft.XMLDOM");} t.evtListener(document.getElementById("editPost").Save, "click", saveFormContent, false); // TreeWalkers in all their glory try { wEdit = document.createTreeWalker(document.getElementById("GestPosts"), NodeFilter.SHOW_ALL, editFilter, true); while(wEdit.nextNode()) { t.evtListener(wEdit.currentNode, "click", editPubl, false); } wBr = document.createTreeWalker(document.getElementById("GestBrouillons"), NodeFilter.SHOW_ALL, brouillonsFilter, true); while(wBr.nextNode()) { if(wBr.currentNode.firstChild.nodeValue == 'Editer') t.evtListener(wBr.currentNode,"click", editBrouillon, false); else if(wBr.currentNode.firstChild.nodeValue == 'Publier') t.evtListener(wBr.currentNode, "click", pubBrouillon, false); } } catch(e) { //Well, right now, we're sort of screwed... } } function switchSection(e) { var targetAc = bpEvt(e, 'li').rTarget; for(i=0; i<arLIMenu.length; i++) { tmpObj=document.getElementById('Gest' + arLIMenu[i].firstChild.id); if(arLIMenu[i]==targetAc) { arLIMenu[i].className='Actif'; tmpObj.style.display='block'; } else { arLIMenu[i].className=''; tmpObj.style.display='none'; } } } function pubBrouillon(e) { var whichVersion = document.getElementById("whichVersion"); var pubComment = document.getElementById("pubComment"); var el = bpEvt(e).rTarget; if(el != curBPShown) { if(curBPShown != 0) curBPShown.parentNode.parentNode.className = ''; curBPShown = el; el.parentNode.parentNode.className = 'Pinned'; var pos = el.href.indexOf("#"); whichVersion.pubButton.disabled = true; pubComment.textContent = "Vérification en cours de la validité XML du post"; whichVersion.id.value = el.href.substring(pos + 4, el.href.length); el.parentNode.appendChild(whichVersion); whichVersion.style.display='block'; el.pubIsShown = true; var data = xmlRequest.get("admin_xml.php?type=brouillon&id=" + whichVersion.id.value); var doc = dp.parseFromString("<post>" + data.getElementsByTagName("contenu")[0].firstChild.data + "</post>", "text/xml"); var parserErrors = doc.getElementsByTagName('parsererror'); if(parserErrors.length > 0) { pubComment.textContent = ""; pubComment.appendChild(doc.firstChild); } else { pubComment.textContent = "Le post est fait de XML valide, bon pour être poster"; whichVersion.pubButton.disabled = false; } } else { curBPShown = 0; el.parentNode.parentNode.className = ''; hideForms(); el.pubIsShown = false; } return false; } function editBrouillon(e) { edit(e, "brouillon"); } function editPubl(e) { edit(e, "post"); } function edit(e, type) { var editPost = document.getElementById("editPost"); editPost.type = type; var el = bpEvt(e).rTarget; if(el.editPostIsShown !=1) { var id = el.href.substring(el.href.indexOf("#") + 4, el.href.length); var data = xmlRequest.get("admin_xml.php?type=" + type + "&id=" + id); el.parentNode.appendChild(editPost); el.editPostIsShown = 1; editPost.style.display = 'block'; editPost.Titre.value = data.getElementsByTagName('titre')[0].textContent; editPost.Contenu.value = data.getElementsByTagName('contenu')[0].firstChild.data; if(type == 'post') { editPost.mood.style.display = ''; editPost.mood.value = data.getElementsByTagName('mood')[0].textContent; editPost.Tags.style.display = ''; editPost.Tags.value = ''; var tags = data.getElementsByTagName('tag'); for(var i = 0; i < tags.length; i++) { if(tags[i].textContent.indexOf(' ') > -1) { editPost.Tags.value += '"' + tags[i].textContent + '"'; } else { editPost.Tags.value += tags[i].textContent; } editPost.Tags.value += ' '; } } else { editPost.mood.style.display = 'none'; editPost.Tags.style.display = 'none'; } } else { hideForms(); el.editPostIsShown = 0; } } function showAddForm(e) { var targetAc = bpEvt(e, "a").rTarget; while(targetAc.nodeName.toLowerCase()!='form') targetAc=targetAc.nextSibling; // Permet d'avoir eventuellement des espaces targetAc.style.display = (targetAc.style.display=='block')?'none':'block'; } function saveFormContent(e) { var el = e.target.form; // Should be the form... var toggleLink = el.parentNode.firstChild; var id=toggleLink.href.substring(toggleLink.href.indexOf("#") + 4, toggleLink.href.length); if(xmlRequest.send('admin_xml.php?id=' + id + '&mode=edit&type=' + el.type, 'title=' + postValue(el.Titre.value) + '&content=' + postValue(el.Contenu.value) + '&mood=' + postValue(el.mood.value) + '&tags=' + postValue(el.Tags.value))) { toggleLink.editPostIsShown = 0; hideForms(); } else { el.submit(); } return true; } function hideForms() { document.getElementById('whichVersion').style.display='none'; document.getElementById('editPost').style.display='none'; } /* Bullet-Proofing of the event variable... Needed because of the huge mess out there */ function bpEvt(eIni, tag) { var e = (eIni)?eIni:window.event; e.rTarget = (e.target)?e.target:e.srcElement; if(tag != undefined) while(e.rTarget.parentNode && e.rTarget.nodeName.toLowerCase() != tag) e.rTarget = e.rTarget.parentNode; return e; } function postValue(str) { str = str.replace(/&/g, "%26"); str = str.replace(/\+/g, "%2B"); return str; }