[Phpcms-plugins-cvs] admin4phpCMS/tools ul2finder.js,NONE,1.1
Brought to you by:
mjahn
From: Martin J. <mj...@us...> - 2005-05-26 15:56:21
|
Update of /cvsroot/phpcms-plugins/admin4phpCMS/tools In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19290/tools Added Files: ul2finder.js Log Message: beginning of phpcms-content and filemanager --- NEW FILE: ul2finder.js --- /* * ul2finder * written by Christian Heilmann (http://icant.co.uk) * turns the nested list with the ID "finder" into a dynamic list * uses the CSS classes defined in the variables */ function ul2finder() { // Define variables used and classes to be applied/removed var i,uls,als,finder; var parentClass='parent'; var showClass='shown'; var hideClass='hidden'; var openClass='open'; // check if our finder list exists, if not, stop all activities finder=document.getElementById('finder'); if(!finder){return;} // add the class domenabled to the body cssjs('add',document.body,'domenabled') // loop through all lists inside finder, position and hide them // by applying the class hidden uls=document.getElementById('finder').getElementsByTagName('ul'); for(i=0;i<uls.length;i++) { cssjs('add',uls[i],hideClass); } // loop through all links of inside finder lis=document.getElementById('finder').getElementsByTagName('li'); for(i=0;i<lis.length;i++) { // if the li containing the link has no nested list, skip this one if(!lis[i].getElementsByTagName('ul')[0]) { continue; } var newa=document.createElement('a'); newa.href='#'; newa.appendChild(document.createTextNode(lis[i].firstChild.nodeValue)); lis[i].replaceChild(newa,lis[i].firstChild); // otherwise apply the parent class cssjs('add',newa,parentClass); // if the user clicks on the link lis[i].getElementsByTagName('a')[0].onclick=function() { // loop through all lists inside finder for(var i=0;i<uls.length;i++) { // avoid the list connected to this link var found=false; for(j=0;j<uls[i].getElementsByTagName('ul').length;j++) { if(uls[i].getElementsByTagName('ul')[j] == this.parentNode.getElementsByTagName('ul')[0]) { found=true; break; } } // and hide all others if(!found) { cssjs('add',uls[i],hideClass) cssjs('remove',uls[i],showClass) cssjs('remove',uls[i].parentNode.getElementsByTagName('a')[0],openClass) cssjs('add',uls[i].parentNode.getElementsByTagName('a')[0],parentClass) } } // change the current link from parent to open cssjs('swap',this,parentClass,openClass) // show the current nested list cssjs('add',this.parentNode.getElementsByTagName('ul')[0],showClass) // don't follow the real HREF of the link return false; } } /* * cssjs * written by Christian Heilmann (http://icant.co.uk) * eases the dynamic application of CSS classes via DOM * parameters: action a, object o and class names c1 and c2 (c2 optional) * actions: swap exchanges c1 and c2 in object o * add adds class c1 to object o * remove removes class c1 from object o * check tests if class c1 is applied to object o * example: cssjs('swap',document.getElementById('foo'),'bar','baz'); */ function cssjs(a,o,c1,c2) { switch (a){ case 'swap': o.className=!cssjs('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2); break; case 'add': if(!cssjs('check',o,c1)){o.className+=o.className?' '+c1:c1;} break; case 'remove': var rep=o.className.match(' '+c1)?' '+c1:c1; o.className=o.className.replace(rep,''); break; case 'check': return new RegExp('\\b'+c1+'\\b').test(o.className) break; } } } // Check if the browser supports DOM, and start the script if it does. if(document.getElementById && document.createTextNode) { window.onload=ul2finder; } |