Changeset 6608
- Timestamp:
- Jun 26, 2010, 8:54:20 PM (14 years ago)
- Location:
- extensions/rv_menutree/trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
extensions/rv_menutree/trunk/changelog.txt
r6413 r6608 1 2.1.c 2 - improved javascript (faster, async loading in browser, better compressed zith google closure compiler) 3 4 2.1.b 5 - themes can define their own rv_menutree_categories.tpl 6 7 2.1.a 8 - compatibility with piwigo 2.1 9 1 10 2.0.c 2 11 - optimizations by calling make_index_url less frequently 3 12 - compatible with IE8 4 13 5 2.1.a6 - compatibility with piwigo 2.17 8 2.1.b9 - themes can define their own rv_menutree_categories.tpl -
extensions/rv_menutree/trunk/js/rvtree-min.js
r6413 r6608 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"}} 1 var XElement={hasClass:function(b,e){if(!b)return false;var f=b.className;return f.length>0&&(f==e||(new RegExp("(^|\\s)"+e+"(\\s|$)")).test(f))},addClass:function(b,e){if(b){XElement.hasClass(b,e)||(b.className+=(b.className?" ":"")+e);return b}},toggleClasses:function(b,e,f){if(b){for(var a=b.className.split(/\s+/),g=-1,c=-1,d=0;d<a.length;d++){if(a[d]==e)g=d;if(a[d]==f)c=d}if(g>=0){a.splice(g,1);c>=g&&c--}else a.push(e);c>=0?a.splice(c,1):a.push(f);b.className=a.join(" ");return b}}},RVTree={options:{nodeClosedClass:"liClosed", 2 nodeOpenClass:"liOpen",nodeBulletClass:"liBullet",nodeLinkClass:"bullet"},convertTree:function(b){if(document.createElement){if(window.attachEvent&&!window.opera)if(/MSIE ([0-9]{1,}[.0-9]{0,})/.exec(navigator.userAgent)!=null)RVTree.options.IEVersion=parseFloat(RegExp.$1);RVTree._processList(b,true)}},_processList:function(b,e){if(!(!b.childNodes||b.childNodes.length==0)){for(var f=0;f<b.childNodes.length;f++){var a=b.childNodes[f];if(a.nodeName=="LI"){for(var g=false,c=0;c<a.childNodes.length;c++){var d= 3 a.childNodes[c];if(d.nodeName=="UL"){g=true;RVTree._processList(d,false)}}c=document.createElement("SPAN");d="\u00a0";c.className=RVTree.options.nodeLinkClass;if(g){XElement.hasClass(a,RVTree.options.nodeOpenClass)||XElement.addClass(a,RVTree.options.nodeClosedClass);if(a.firstChild.nodeName=="#text"){d+=a.firstChild.nodeValue;a.removeChild(a.firstChild)}c.onclick=function(){XElement.toggleClasses(this.parentNode,RVTree.options.nodeOpenClass,RVTree.options.nodeClosedClass);return false}}else if(XElement.hasClass(a, 4 RVTree.options.nodeClosedClass))c.onclick=function(){var h=this.parentNode.getElementsByTagName("A");if(h.length)document.location=h[0].href};else XElement.addClass(a,RVTree.options.nodeBulletClass);a.style.listStyleType="none";if(e&&RVTree.options.IEVersion&&RVTree.options.IEVersion<8)a.style.marginLeft="-16px";if(c){c.appendChild(document.createTextNode(d));a.insertBefore(c,a.firstChild)}}}b.style.marginLeft=0;b.style.paddingLeft=e?0:"8px"}}};typeof rvTreeAutoConvert!="undefined"&&RVTree.convertTree(rvTreeAutoConvert); -
extensions/rv_menutree/trunk/js/rvtree.js
r6413 r6608 1 /* this is not directly used - compress it as rvtree-min.js on http:// www.compressjavascript.com/ or somewhere else1 /* this is not directly used - compress it as rvtree-min.js on http://javascriptcompressor.com/ or http://closure-compiler.appspot.com 2 2 Based on Matt Kruse <matt@mattkruse.com> http://www.mattkruse.com/ */ 3 3 var XElement = { 4 hasClass Name: function(element, className) {4 hasClass: function(element, className) { 5 5 if (!element) return false; 6 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; 7 return ( elementClassName.length > 0 && (elementClassName == className || 8 new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)) ); 12 9 }, 13 10 14 addClass Name: function(element, className) {11 addClass: function(element, className) { 15 12 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(' '); 13 if (!XElement.hasClass(element, className)) 14 element.className += (element.className ? ' ' : '') + className; 21 15 return element; 22 16 }, 23 17 24 toggleClass Name: function(element, className) {18 toggleClasses: function(element, class1, class2) { 25 19 if (!element) return; 26 20 var classNames = element.className.split(/\s+/); 21 var i1=-1, i2=-1; 27 22 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); 23 { 24 if (classNames[i]==class1) i1=i; 25 if (classNames[i]==class2) i2=i; 26 } 27 if (i1>=0) 28 { 29 classNames.splice(i1,1); 30 if (i2>=i1) 31 i2--; 32 } 31 33 else 32 classNames.splice(i, 1); 34 classNames.push(class1); 35 36 if (i2>=0) 37 classNames.splice(i2,1); 38 else 39 classNames.push(class2); 33 40 element.className = classNames.join(' '); 34 41 return element; … … 48 55 convertTree: function (root) 49 56 { 50 if (!document.createElement) return; // Without createElement, we can't do anything 57 if (!document.createElement) 58 return; // Without createElement, we can't do anything 51 59 if (window.attachEvent && !window.opera) 52 60 { … … 59 67 _processList: function(ul, isRoot) 60 68 { 61 if (!ul.childNodes || ul.childNodes.length==0) return; 69 if (!ul.childNodes || ul.childNodes.length==0) 70 return; 62 71 63 72 for (var i=0; i<ul.childNodes.length; i++) … … 85 94 { 86 95 // This LI has UL's in it, so it's a +/- node 87 if ( !XElement.hasClass Name(item, RVTree.options.nodeOpenClass) )88 XElement.addClass Name(item, RVTree.options.nodeClosedClass);96 if ( !XElement.hasClass(item, RVTree.options.nodeOpenClass) ) 97 XElement.addClass(item, RVTree.options.nodeClosedClass); 89 98 90 99 // If it's just text, make the text work as the link also … … 96 105 s.onclick = function () 97 106 { 98 XElement.toggleClassName( this.parentNode, RVTree.options.nodeOpenClass ); 99 XElement.toggleClassName( this.parentNode, RVTree.options.nodeClosedClass ); 107 XElement.toggleClasses(this.parentNode, RVTree.options.nodeOpenClass, RVTree.options.nodeClosedClass ); 100 108 return false; 101 109 } … … 103 111 else 104 112 {// No sublists 105 if ( XElement.hasClass Name(item, RVTree.options.nodeClosedClass) )113 if ( XElement.hasClass(item, RVTree.options.nodeClosedClass) ) 106 114 { 107 115 s.onclick = function() … … 113 121 } 114 122 else 115 XElement.addClass Name(item, RVTree.options.nodeBulletClass);123 XElement.addClass(item, RVTree.options.nodeBulletClass); 116 124 } 117 125 … … 129 137 } 130 138 } 139 140 if ( typeof rvTreeAutoConvert != 'undefined') 141 { 142 RVTree.convertTree( rvTreeAutoConvert ); 143 } -
extensions/rv_menutree/trunk/template/rv_menutree_categories.tpl
r6413 r6608 1 {known_script id="rvtree" src=$RVMT_PATH|@cat:"js/rvtree-min.js" }2 1 {html_head} 3 2 <style type="text/css"> 4 ul.rvTree li .bullet {ldelim}padding-left:14px;margin-left:0;background:url({$RVMT_PATH}img/bpm.gif) no-repeat scroll;}5 ul.rvTree li.liOpen .bullet {ldelim}cursor:pointer;background-position:-38px center;}6 ul.rvTree li.liClosed .bullet {ldelim}cursor:pointer;background-position:-19px center;}7 ul.rvTree li.liBullet .bullet {ldelim}cursor:default;background-position:0 center;}8 ul.rvTree li.liClosed ul {ldelim}display:none;}3 .rvTree li .bullet {ldelim}padding-left:14px;margin-left:0;background:url({$RVMT_PATH}img/bpm.gif) no-repeat scroll;} 4 .rvTree li.liOpen .bullet {ldelim}cursor:pointer;background-position:-38px center;} 5 .rvTree li.liClosed .bullet {ldelim}cursor:pointer;background-position:-19px center;} 6 .rvTree li.liBullet .bullet {ldelim}cursor:default;background-position:0 center;} 7 .rvTree li.liClosed ul {ldelim}display:none;} 9 8 </style> 10 9 {/html_head} … … 55 54 {'</li></ul>'|@str_repeat:$ref_level} 56 55 <script type="text/javascript"> 57 RVTree.convertTree( document.getElementById("theCategoryMenu") ); 56 rvTreeAutoConvert = document.getElementById("theCategoryMenu"); 57 (function () {ldelim} 58 var s = document.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = '{$RVMT_PATH|@cat:"js/rvtree-min.js"}'; 59 var s0 = document.getElementsByTagName('script')[0]; s0.parentNode.insertBefore(s, s0); 60 })(); 61 //RVTree.convertTree( document.getElementById("theCategoryMenu") ); 58 62 </script> 59 63 {if isset($block->data.U_UPLOAD)}
Note: See TracChangeset
for help on using the changeset viewer.