Changeset 3574 for extensions/rv_menutree
- Timestamp:
- Jul 13, 2009, 8:45:36 AM (15 years ago)
- Location:
- extensions/rv_menutree/branches/2.0-radu
- Files:
-
- 1 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
extensions/rv_menutree/branches/2.0-radu/main.inc.php
r3572 r3574 2 2 Plugin Name: RV Menu Tree 3 3 Version: 2.0.c 4 Plugin URI: http://p hpwebgallery.net/ext/extension_view.php?eid=2384 Plugin URI: http://piwigo.org/ext/extension_view.php?eid=238 5 5 Description: Replaces the categories in the menu bar with a nicer one (javascript). 6 6 Author: rvelices -
extensions/rv_menutree/branches/2.0-radu/rvtree-min.js
r3572 r3574 1 var XElement={hasClassName:function(element,className){if(!element)return false;var elementClassName=element.className;if(elementClassName.length==0)return false;if(elementClassName==className||elementClassName.match(new RegExp("(^|\\s)"+className+"(\\s|$)")))return true;return false},addClassName:function(element,className){if(!element)return;var classNames=element.className.split(/\s+/);for(var i=0;i<classNames.length;i++)if(className==classNames[i])return;classNames.splice(0,0,className);element.className=classNames.join(' ');return element},toggleClassName:function(element,className){if(!element)return;var classNames=element.className.split(/\s+/);for(var i=0;i<classNames.length;i++)if(classNames[i]==className)break;if(i==classNames.length)classNames.splice(0,0,className);else classNames.splice(i,1);element.className=classNames.join(' ');return element}};var RVTree={options:{nodeClosedClass:"liClosed",nodeOpenClass:"liOpen",nodeBulletClass:"liBullet",nodeLinkClass:"bullet"},convertTree:function(root){if(!document.createElement)return; RVTree._processList(root,true)},_processList:function(ul,isRoot){if(!ul.childNodes||ul.childNodes.length==0)return;for(var i=0;i<ul.childNodes.length;i++){var item=ul.childNodes[i];if(item.nodeName!="LI")continue;var subLists=false;for(var sitemi=0;sitemi<item.childNodes.length;sitemi++){var sitem=item.childNodes[sitemi];if(sitem.nodeName=="UL"){subLists=true;RVTree._processList(sitem,false)}}var s=document.createElement("SPAN");var t='\u00A0';s.className=RVTree.options.nodeLinkClass;if(subLists){if(!XElement.hasClassName(item,RVTree.options.nodeOpenClass))XElement.addClassName(item,RVTree.options.nodeClosedClass);if(item.firstChild.nodeName=="#text"){t=t+item.firstChild.nodeValue;item.removeChild(item.firstChild)}s.onclick=function(){XElement.toggleClassName(this.parentNode,RVTree.options.nodeOpenClass);XElement.toggleClassName(this.parentNode,RVTree.options.nodeClosedClass);return false}}else{if(XElement.hasClassName(item,RVTree.options.nodeClosedClass)){s.onclick=function(){var nodes=this.parentNode.getElementsByTagName("A");if(nodes.length)document.location=nodes[0].href}}else XElement.addClassName(item,RVTree.options.nodeBulletClass)}item.style.listStyleType='none';if(isRoot&&(window.attachEvent&&!window.opera))item.style.marginLeft="-16px";if(s){s.appendChild(document.createTextNode(t));item.insertBefore(s,item.firstChild)}}ul.style.marginLeft=0;ul.style.paddingLeft=isRoot?0:"8px"}}1 var XElement={hasClassName:function(element,className){if(!element)return false;var elementClassName=element.className;if(elementClassName.length==0)return false;if(elementClassName==className||elementClassName.match(new RegExp("(^|\\s)"+className+"(\\s|$)")))return true;return false},addClassName:function(element,className){if(!element)return;var classNames=element.className.split(/\s+/);for(var i=0;i<classNames.length;i++)if(className==classNames[i])return;classNames.splice(0,0,className);element.className=classNames.join(' ');return element},toggleClassName:function(element,className){if(!element)return;var classNames=element.className.split(/\s+/);for(var i=0;i<classNames.length;i++)if(classNames[i]==className)break;if(i==classNames.length)classNames.splice(0,0,className);else classNames.splice(i,1);element.className=classNames.join(' ');return element}};var RVTree={options:{nodeClosedClass:"liClosed",nodeOpenClass:"liOpen",nodeBulletClass:"liBullet",nodeLinkClass:"bullet"},convertTree:function(root){if(!document.createElement)return;if(window.attachEvent&&!window.opera){if(new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent)!=null)RVTree.options.IEVersion=parseFloat(RegExp.$1)}RVTree._processList(root,true)},_processList:function(ul,isRoot){if(!ul.childNodes||ul.childNodes.length==0)return;for(var i=0;i<ul.childNodes.length;i++){var item=ul.childNodes[i];if(item.nodeName!="LI")continue;var subLists=false;for(var sitemi=0;sitemi<item.childNodes.length;sitemi++){var sitem=item.childNodes[sitemi];if(sitem.nodeName=="UL"){subLists=true;RVTree._processList(sitem,false)}}var s=document.createElement("SPAN");var t='\u00A0';s.className=RVTree.options.nodeLinkClass;if(subLists){if(!XElement.hasClassName(item,RVTree.options.nodeOpenClass))XElement.addClassName(item,RVTree.options.nodeClosedClass);if(item.firstChild.nodeName=="#text"){t=t+item.firstChild.nodeValue;item.removeChild(item.firstChild)}s.onclick=function(){XElement.toggleClassName(this.parentNode,RVTree.options.nodeOpenClass);XElement.toggleClassName(this.parentNode,RVTree.options.nodeClosedClass);return false}}else{if(XElement.hasClassName(item,RVTree.options.nodeClosedClass)){s.onclick=function(){var nodes=this.parentNode.getElementsByTagName("A");if(nodes.length)document.location=nodes[0].href}}else XElement.addClassName(item,RVTree.options.nodeBulletClass)}item.style.listStyleType='none';if(isRoot&&RVTree.options.IEVersion&&RVTree.options.IEVersion<8)item.style.marginLeft="-16px";if(s){s.appendChild(document.createTextNode(t));item.insertBefore(s,item.firstChild)}}ul.style.marginLeft=0;ul.style.paddingLeft=isRoot?0:"8px"}} -
extensions/rv_menutree/branches/2.0-radu/rvtree.js
r3572 r3574 2 2 Based on Matt Kruse <matt@mattkruse.com> http://www.mattkruse.com/ */ 3 3 var XElement = { 4 5 6 7 8 9 10 11 12 4 hasClassName: function(element, className) { 5 if (!element) return false; 6 var elementClassName = element.className; 7 if (elementClassName.length == 0) return false; 8 if (elementClassName == className || 9 elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)"))) 10 return true; 11 return false; 12 }, 13 13 14 15 16 17 18 19 20 21 22 14 addClassName: function(element, className) { 15 if (!element) return; 16 var classNames = element.className.split(/\s+/); 17 for (var i=0; i<classNames.length; i++) 18 if (className==classNames[i]) return; 19 classNames.splice(0,0,className); 20 element.className = classNames.join(' '); 21 return element; 22 }, 23 23 24 25 26 27 28 29 30 31 32 33 34 35 24 toggleClassName: function(element, className) { 25 if (!element) return; 26 var classNames = element.className.split(/\s+/); 27 for (var i=0; i<classNames.length; i++) 28 if (classNames[i]==className) break; 29 if (i==classNames.length) 30 classNames.splice(0,0,className); 31 else 32 classNames.splice(i, 1); 33 element.className = classNames.join(' '); 34 return element; 35 } 36 36 }; 37 37 … … 49 49 { 50 50 if (!document.createElement) return; // Without createElement, we can't do anything 51 if (window.attachEvent && !window.opera) 52 { 53 if ( new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec( navigator.userAgent ) != null ) 54 RVTree.options.IEVersion = parseFloat( RegExp.$1 ); 55 } 51 56 RVTree._processList(root, true); 52 57 }, … … 58 63 for (var i=0; i<ul.childNodes.length; i++) 59 64 { //Iterate LIs 60 61 62 65 var item = ul.childNodes[i]; 66 if (item.nodeName != "LI") 67 continue; 63 68 64 65 66 67 68 69 70 71 72 73 69 // Iterate things in this LI 70 var subLists = false; 71 for (var sitemi=0;sitemi<item.childNodes.length;sitemi++) 72 { 73 var sitem = item.childNodes[sitemi]; 74 if (sitem.nodeName=="UL") 75 { 76 subLists = true; 77 RVTree._processList(sitem, false); 78 } 74 79 } 75 80 … … 78 83 s.className = RVTree.options.nodeLinkClass; 79 84 if (subLists) 80 85 { 81 86 // This LI has UL's in it, so it's a +/- node 82 87 if ( !XElement.hasClassName(item, RVTree.options.nodeOpenClass) ) … … 85 90 // If it's just text, make the text work as the link also 86 91 if (item.firstChild.nodeName=="#text") 87 92 { 88 93 t = t+item.firstChild.nodeValue; 89 94 item.removeChild(item.firstChild); 90 95 } 91 96 s.onclick = function () 92 93 94 97 { 98 XElement.toggleClassName( this.parentNode, RVTree.options.nodeOpenClass ); 99 XElement.toggleClassName( this.parentNode, RVTree.options.nodeClosedClass ); 95 100 return false; 96 101 } 97 102 } 98 103 else 99 100 101 102 103 104 105 106 107 108 109 110 104 {// No sublists 105 if ( XElement.hasClassName(item, RVTree.options.nodeClosedClass) ) 106 { 107 s.onclick = function() 108 { 109 var nodes = this.parentNode.getElementsByTagName("A"); 110 if (nodes.length) 111 document.location = nodes[0].href; 112 } 113 } 114 else 115 XElement.addClassName(item, RVTree.options.nodeBulletClass); 111 116 } 112 117 113 118 item.style.listStyleType='none'; 114 if (isRoot && /*IE*/ (window.attachEvent && !window.opera))115 item.style.marginLeft="-16px"; // thats IE6 what about IE7 ? 119 if (isRoot && RVTree.options.IEVersion && RVTree.options.IEVersion < 8) 120 item.style.marginLeft="-16px"; // thats IE6,IE7 ; IE8 seems more compliant 116 121 if (s) 117 122 {
Note: See TracChangeset
for help on using the changeset viewer.