Changeset 122

Show
Ignore:
Timestamp:
12/26/05 13:24:30
Author:
piv
Message:

optimized csshover.htc script

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • qPloneDropDownMenu/trunk/HISTORY.txt

    r121 r122  
     10.1.8  
     2 
     3  * optimized page load time for IE 
     4 
    150.1.7 
    26 
  • qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/csshover.htc.dtml

    r121 r122  
    1717var currentSheet, doc = window.document; 
    1818var csshover_nodes = getElementsByClassName("csshover", doc); 
     19var csshover_rules = []; 
     20var DEBUG = false, styles = "", parseCSSRulecounter=0; 
    1921 
    2022function parseStylesheets() { 
     
    2224    for(var i=0; i<l; i++) 
    2325        parseStylesheet(sheets[i]); 
     26    if(DEBUG) alert(styles) 
    2427} 
    2528 
    2629function parseStylesheet(sheet) { 
     30    if(DEBUG) window.status += '|'; 
    2731//    if(sheet.href && sheet.href.indexOf('/ploneCustom.css') == -1) return; 
    2832    var l, rules, imports; 
     
    3741 
    3842function parseCSSRule(rule) { 
     43    if(DEBUG) if((parseCSSRulecounter++)%10 == 0) window.status += '.'; 
    3944    var select = rule.selectorText, style = rule.style.cssText; 
    4045    if(style.replace(/ /, "") == "") return; 
     
    5055    affected = affected.replace(/^.*([ ]|^)(([^ ]*)\.csshover)/i, '$2'); 
    5156 
    52     // if class-affected pair processed return; 
     57    if(!csshover_rules[className + ',' + affected]) { 
     58        var elements = getElementsBySelect(affected); 
     59        if(DEBUG) window.status += " "+elements.length; 
     60        styles += "" + elements.length + ": " + affected + '\n' 
     61        for(var i=0; i<elements.length; i++) 
     62            HoverElement(elements[i], className); 
     63        csshover_rules[className + ',' + affected] = true; 
     64    } 
    5365 
    54     var elements = getElementsBySelect(affected); 
    55     for(var i=0; i<elements.length; i++) 
    56         HoverElement(elements[i], className); 
    57     //add class-affected pair to processed; 
    5866} 
    5967 
     
    7381    parts = rule.split(' '); 
    7482    for(var i=0; i<parts.length; i++) { 
    75         nodes = getSelectedNodes(parts[i], nodes); 
     83        nodes = getSelectedNodes(parts[i], nodes, i==0); 
    7684    } 
    7785    return nodes; 
    7886} 
    7987 
    80 function arrayHasElement(a, el)
     88function arrayHasElement(a, el)
    8189    var l = a.length; 
    8290    for(var i=0; i<l; i++) if(a[i] == el) return true; 
     
    8492} 
    8593 
    86 function getSelectedNodes(select, elements) { 
    87     var result, node, nodes = []; 
     94function getSelectedNodes(select, elements, includeRoot) { 
     95    var element, result, node, nodes = []; 
    8896    var classname = (/\.([a-z0-9_-]+)/i).exec(select); 
    8997    if(classname) classname_re = new RegExp('\\b' + classname[1] + '\\b'); 
     
    92100        ell = elements.length; 
    93101    for(var i=0; i<ell; i++) { 
    94         result = elements[i].getElementsByTagName(tagName); 
     102        element = elements[i] 
     103        if(includeRoot) 
     104          if((tagName=='*') || (element.nodeName == tagName)) result = [element] 
     105          else result = [] 
     106        else result = element.getElementsByTagName(tagName); 
    95107        rel = result.length; 
    96108        for(var j=0; j<rel; j++) { 
     
    98110            if((identify && node.id != identify[1]) || (classname && !(classname_re.exec(node.className))) || arrayHasElement(nodes, node)) continue; 
    99111            nodes[nodes.length] = node; 
    100         } 
    101         if(classname && (classname_re.exec(elements[i].className)) && !arrayHasElement(nodes, elements[i])) { 
    102             nodes[nodes.length] = elements[i]; 
    103112        } 
    104113    } 
     
    110119        list = (parentElement || doc.body).getElementsByTagName('*'); 
    111120    for(var i = 0; i < list.length; i++) { 
    112         if(list[i].className.match(new RegExp('(^|\\s)' + className + '(\\s|$)'))) { 
    113             result[result.length] = list[i]; 
    114         } 
     121        if(list[i].className.match(new RegExp('(^|\\s)' + className + '(\\s|$)'))) result[result.length] = list[i]; 
    115122    } 
    116123    return result 
  • qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/drop_down.css.dtml

    r121 r122  
    3737 
    3838#portal-globalnav li ul li { 
    39        width: 100%; 
    40        display: block; 
    41        float: left; 
    42        position: static; 
     39        width: 100%; 
     40        display: block; 
     41        float: left; 
     42        position: static; 
    4343} 
    4444 
  • qPloneDropDownMenu/trunk/version.txt

    r121 r122  
    1 0.1.7 
     10.1.8