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

rv menutree better compatibility with IE 8

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.