diff admin.js @ 0:629389204276

Import initial
author Franck Deroche <webmaster@defr.org>
date Sat, 20 Oct 2007 14:15:10 +0200
parents
children 750613da68ec
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/admin.js	Sat Oct 20 14:15:10 2007 +0200
@@ -0,0 +1,243 @@
+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;
+}
\ No newline at end of file