Changeset 3574


Ignore:
Timestamp:
Jul 13, 2009, 8:45:36 AM (12 years ago)
Author:
rvelices
Message:

rv menutree better compatibility with IE 8

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  
    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
  • 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"}}
     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/branches/2.0-radu/rvtree.js

    r3572 r3574  
    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.