Ignore:
Timestamp:
07/15/09 22:03:41 (11 years ago)
Author:
rvelices
Message:

merge rv_menutree r3574 to trunk

  • better compatibility with IE 8
Location:
extensions/rv_menutree/trunk
Files:
3 edited
1 copied

Legend:

Unmodified
Added
Removed
  • extensions/rv_menutree/trunk/main.inc.php

    r3572 r3590  
    22Plugin Name: RV Menu Tree 
    33Version: 2.0.c 
    4 Plugin URI: http://phpwebgallery.net/ext/extension_view.php?eid=238 
     4Plugin URI: http://piwigo.org/ext/extension_view.php?eid=238 
    55Description: Replaces the categories in the menu bar with a nicer one (javascript). 
    66Author: rvelices 
     
    125125                        $menu.= ' rel="up"'; 
    126126                $menu.= ' title="'.$title.'">' 
    127                         //.trigger_event('render_category_name', $category['name'], 'get_html_menu_category') 
    128                         .$category['name'] 
     127                        .trigger_event('render_category_name', $category['name'], 'get_html_menu_category') 
     128                        //.$category['name'] 
    129129                        .'</a>'; 
    130130 
  • extensions/rv_menutree/trunk/rvtree-min.js

    r3572 r3590  
    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"}} 
     1var 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/trunk/rvtree.js

    r3572 r3590  
    22Based on Matt Kruse <matt@mattkruse.com> http://www.mattkruse.com/ */ 
    33var XElement = { 
    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   }, 
     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        }, 
    1313 
    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   }, 
     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        }, 
    2323 
    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   } 
     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        } 
    3636}; 
    3737 
     
    4949        { 
    5050                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                } 
    5156                RVTree._processList(root, true); 
    5257        }, 
     
    5863                for (var i=0; i<ul.childNodes.length; i++) 
    5964                { //Iterate LIs 
    60       var item = ul.childNodes[i]; 
    61       if (item.nodeName != "LI") 
    62         continue; 
     65                        var item = ul.childNodes[i]; 
     66                        if (item.nodeName != "LI") 
     67                                continue; 
    6368 
    64       // Iterate things in this LI 
    65                   var subLists = false; 
    66                   for (var sitemi=0;sitemi<item.childNodes.length;sitemi++) 
    67       { 
    68         var sitem = item.childNodes[sitemi]; 
    69         if (sitem.nodeName=="UL") 
    70         { 
    71           subLists = true; 
    72           RVTree._processList(sitem, false); 
    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                                } 
    7479                        } 
    7580 
     
    7883                        s.className = RVTree.options.nodeLinkClass; 
    7984                        if (subLists) 
    80       { 
     85                        { 
    8186                                // This LI has UL's in it, so it's a +/- node 
    8287                                if ( !XElement.hasClassName(item, RVTree.options.nodeOpenClass) ) 
     
    8590                                // If it's just text, make the text work as the link also 
    8691                                if (item.firstChild.nodeName=="#text") 
    87         { 
     92                                { 
    8893                                        t = t+item.firstChild.nodeValue; 
    8994                                        item.removeChild(item.firstChild); 
    9095                                } 
    9196                                s.onclick = function () 
    92         { 
    93           XElement.toggleClassName( this.parentNode, RVTree.options.nodeOpenClass ); 
    94           XElement.toggleClassName( this.parentNode, RVTree.options.nodeClosedClass ); 
     97                                { 
     98                                        XElement.toggleClassName( this.parentNode, RVTree.options.nodeOpenClass ); 
     99                                        XElement.toggleClassName( this.parentNode, RVTree.options.nodeClosedClass ); 
    95100                                        return false; 
    96101                                } 
    97102                        } 
    98103                        else 
    99       {// No sublists 
    100         if ( XElement.hasClassName(item, RVTree.options.nodeClosedClass) ) 
    101         { 
    102           s.onclick = function() 
    103           { 
    104             var nodes = this.parentNode.getElementsByTagName("A"); 
    105             if (nodes.length) 
    106               document.location = nodes[0].href; 
    107           } 
    108         } 
    109         else 
    110           XElement.addClassName(item, RVTree.options.nodeBulletClass); 
     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); 
    111116                        } 
    112117 
    113118                        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 
    116121                        if (s) 
    117122                        { 
Note: See TracChangeset for help on using the changeset viewer.