Changeset 96
- Timestamp:
- 12/21/05 12:25:05
- Files:
-
- qPloneDropDownMenu/trunk/HISTORY.txt (modified) (1 diff)
- qPloneDropDownMenu/trunk/TODO.txt (modified) (1 diff)
- qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/csshover.htc.dtml (modified) (1 diff)
- qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/drop_down.css.dtml (modified) (11 diffs)
- qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/global_sections.pt (modified) (1 diff)
- qPloneDropDownMenu/trunk/version.txt (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
qPloneDropDownMenu/trunk/HISTORY.txt
r95 r96 1 0.1.7 2 3 * corrected and optimized csshover.htc script 4 1 5 0.1.6 2 6 qPloneDropDownMenu/trunk/TODO.txt
r95 r96 1 2 * next optimization of csshover.htc script qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/csshover.htc.dtml
r95 r96 3 3 <script language="JScript"> 4 4 /** 5 * HOVER - V1.11.040203 - whatever:hover in IE6 * ---------------------------------------------7 * Peterned - http://www.xs4all.nl/~peterned/8 * (c) 2004 - Peter Nederlof5 * HOVER - V1.11.040203 - whatever:hover in IE 6 * --------------------------------------------- 7 * Peterned - http://www.xs4all.nl/~peterned/ 8 * (c) 2004 - Peter Nederlof 9 9 * 10 * Credits - Arnoud Berendsen11 * for finding some really -sick- bugs10 * Credits - Arnoud Berendsen 11 * for finding some really -sick- bugs 12 12 * 13 * howto: body { behavior:url("csshover.htc"); }14 * ---------------------------------------------13 * howto: body { behavior:url("csshover.htc"); } 14 * --------------------------------------------- 15 15 */ 16 16 17 17 var currentSheet, doc = window.document; 18 // keeps the dropdown menu IDs 19 var ddMenuIDs = new Array(); 18 var csshover_nodes = getElementsByClassName("csshover", doc); 20 19 21 function findDdMenus() { 22 var aTmp = getElementsByClassName("csshover", element.document, "div", function(oM) { 23 ddMenuAdd(oM.id); 24 } ); 20 function parseStylesheets() { 21 var sheets = doc.styleSheets, l = sheets.length; 22 for(var i=0; i<l; i++) 23 parseStylesheet(sheets[i]); 24 } 25 26 function parseStylesheet(sheet) { 27 // if(sheet.href && sheet.href.indexOf('/ploneCustom.css') == -1) return; 28 var l, rules, imports; 29 if(sheet.imports) { 30 imports = sheet.imports, l = imports.length; 31 for(var i=0; i<l; i++) 32 parseStylesheet(sheet.imports[i]); 33 } 34 rules = (currentSheet = sheet).rules, l = rules.length; 35 for(var j=0; j<l; j++){ parseCSSRule(rules[j]);}; 36 } 37 38 function parseCSSRule(rule) { 39 var select = rule.selectorText, style = rule.style.cssText; 40 if(style.replace(/ /, "") == "") return; 41 if(!(/\.csshover/i).test(select)) return; 42 if(!(/(^|\s)(([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):hover/i).test(select)) return; 43 44 var newSelect = select.replace(/(\.([a-z0-9_-]+):hover)|(:hover)/g, '.$2onHover'); 45 currentSheet.addRule(newSelect, style); 46 47 var hasClass = (/(\.([a-z0-9_-]+):hover)/g).exec(select); 48 var className = (hasClass? hasClass[2]:'') + 'onHover'; 49 var affected = select.replace(/:hover.*$/g, ''); 50 affected = affected.replace(/^.*([ ]|^)(([^ ]*)\.csshover)/i, '$2'); 51 52 // if class-affected pair processed return; 53 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; 58 } 59 60 function HoverElement(node, className) { 61 if(!node.hovers) node.hovers = {}; 62 if(node.hovers[className]) return; 63 node.hovers[className] = true; 64 node.attachEvent('onmouseover', 65 function() { node.className += ' ' + className; }); 66 node.attachEvent('onmouseout', 67 function() { node.className = 68 node.className.replace((new RegExp('\\s+'+className)),''); }); 69 } 70 71 function getElementsBySelect(rule) { 72 var parts, nodes = csshover_nodes; 73 parts = rule.split(' '); 74 for(var i=0; i<parts.length; i++) { 75 nodes = getSelectedNodes(parts[i], nodes); 76 } 77 return nodes; 78 } 79 80 function arrayHasElement(a, el){ 81 var l = a.length; 82 for(var i=0; i<l; i++) if(a[i] == el) return true; 83 return false; 84 } 85 86 function getSelectedNodes(select, elements) { 87 var result, node, nodes = []; 88 var classname = (/\.([a-z0-9_-]+)/i).exec(select); 89 if(classname) classname_re = new RegExp('\\b' + classname[1] + '\\b'); 90 var identify = (/\#([a-z0-9_-]+)/i).exec(select); 91 var tagName = (/^[a-z0-9]+/i).exec(select.toUpperCase()) || '*', 92 ell = elements.length; 93 for(var i=0; i<ell; i++) { 94 result = elements[i].getElementsByTagName(tagName); 95 rel = result.length; 96 for(var j=0; j<rel; j++) { 97 node = result[j]; 98 if((identify && node.id != identify[1]) || (classname && !(classname_re.exec(node.className))) || arrayHasElement(nodes, node)) continue; 99 nodes[nodes.length] = node; 100 } 101 if(classname && (classname_re.exec(elements[i].className)) && !arrayHasElement(nodes, elements[i])) { 102 nodes[nodes.length] = elements[i]; 103 } 104 } 105 return nodes; 106 } 107 108 function getElementsByClassName(className, parentElement) { 109 var result = new Array(), 110 list = (parentElement || doc.body).getElementsByTagName('*'); 111 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 } 115 } 116 return result 25 117 }; 26 118 27 function ddMenuAdd(ddMenuID) {28 if ( typeof(ddMenuID) == "undefined") return;29 ddMenuIDs[ddMenuIDs.length] = ddMenuID.replace(/List/, "");30 };31 32 function parseStylesheets() {33 findDdMenus();34 var sheets = doc.styleSheets, l = sheets.length;35 for(var i=0; i<l; i++)36 parseStylesheet(sheets[i]);37 }38 function parseStylesheet(sheet) {39 var l, rules, imports;40 if(sheet.imports) {41 imports = sheet.imports, l = imports.length;42 for(var i=0; i<l; i++)43 parseStylesheet(sheet.imports[i]);44 }45 46 rules = (currentSheet = sheet).rules, l = rules.length;47 for(var j=0; j<l; j++) parseCSSRule(rules[j]);48 }49 50 function parseCSSRule(rule) {51 var select = rule.selectorText, style = rule.style.cssText;52 53 if ( style.replace(/ /, "") == "" ) return;54 55 var ddMenuID, Found = 0;56 for (var t=0; t<ddMenuIDs.length; t++) {57 if (select.indexOf(ddMenuIDs[t]) != -1) {58 Found = 1;59 ddMenuID = ddMenuIDs[t];60 break;61 }62 }63 if (!Found) return;64 65 if(!(/(^|\s)(([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):hover/i).test(select)) return;66 67 var newSelect = select.replace(/(\.([a-z0-9_-]+):hover)|(:hover)/g, '.$2onHover');68 var hasClass = (/(\.([a-z0-9_-]+):hover)/g).exec(select);69 var className = (hasClass? hasClass[2]:'') + 'onHover';70 71 var affected = select.replace(/:hover.*$/g, '');72 eval('affected = affected.replace(/#' + ddMenuID + '([ ]+)/i, "")');73 74 var elements = getElementsBySelect(affected, ddMenuID);75 76 currentSheet.addRule(newSelect, style);77 for(var i=0; i<elements.length; i++)78 new HoverElement(elements[i], className);79 }80 81 function HoverElement(node, className) {82 if(!node.hovers) node.hovers = {};83 if(node.hovers[className]) return;84 node.hovers[className] = true;85 node.attachEvent('onmouseover',86 function() { node.className += ' ' + className; });87 node.attachEvent('onmouseout',88 function() { node.className =89 node.className.replace((new RegExp('\\s+'+className)),''); });90 }91 92 function getElementsBySelect(rule, ddMenuID) {93 var parts, nodes = [doc.getElementById(ddMenuID)];94 parts = rule.split(' ');95 for(var i=0; i<parts.length; i++) {96 nodes = getSelectedNodes(parts[i], nodes);97 } return nodes;98 }99 function getSelectedNodes(select, elements) {100 var result, node, nodes = [];101 var classname = (/\.([a-z0-9_-]+)/i).exec(select);102 var identify = (/\#([a-z0-9_-]+)/i).exec(select);103 var tagName = (/^[a-z0-9]+/i).exec(select.toUpperCase()) || '*';104 for(var i=0; i<elements.length; i++) {105 result = elements[i].getElementsByTagName(tagName);106 for(var j=0; j<result.length; j++) {107 node = result[j];108 if((identify && node.id != identify[1]) || (classname && !(new RegExp('\\b' +109 classname[1] + '\\b').exec(node.className)))) continue;110 nodes[nodes.length] = node;111 }112 } return nodes;113 }114 115 function getElementsByClassName(clsName, parentEle, tagName, fn) {116 var found = new Array();117 var re = new RegExp('\\b'+clsName+'\\b', 'i');118 var list = parentEle.getElementsByTagName(tagName);119 for (var i = 0; i < list.length; ++i) {120 if (list[i].className.search(re) != -1) {121 found[found.length] = list[i];122 if (fn) fn(list[i]);123 }124 }125 return found;126 }127 128 119 </script> qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/drop_down.css.dtml
r95 r96 7 7 8 8 9 /* ------ Basic style ------*/9 /* ------ Basic style ------ */ 10 10 #portal-globalnav ul { 11 margin: 0;12 padding: 0;13 border: 0;14 list-style-type: none;11 margin: 0; 12 padding: 0; 13 border: 0; 14 list-style-type: none; 15 15 } 16 16 17 17 #portal-globalnav li { 18 margin: 0;19 padding: 0;20 border: 0;21 display: inline;22 float: left;23 z-index: 10000;24 position: relative;18 margin: 0; 19 padding: 0; 20 border: 0; 21 display: inline; 22 float: left; 23 z-index: 10000; 24 position: relative; 25 25 } 26 26 27 27 #portal-globalnav a { 28 float: left;/* \*/float: none;/* */29 display: block;28 float: left;/* \*/float: none;/* */ 29 display: block; 30 30 } 31 31 32 32 #portal-globalnav li ul { 33 visibility: hidden;34 position: absolute;35 width: 20em;33 visibility: hidden; 34 position: absolute; 35 width: 20em; 36 36 } 37 37 … … 48 48 49 49 html>body #portal-globalnav li ul li { 50 float: none;51 position: relative;50 float: none; 51 position: relative; 52 52 } 53 53 54 #portal-globalnav li ul li:hover {55 position: relative;54 #portal-globalnav .csshover li ul li:hover { 55 position: relative; 56 56 } 57 57 … … 59 59 /* fix the position */ 60 60 #portal-globalnav li ul li ul { 61 top: 0;62 left: 100%;61 top: 0; 62 left: 100%; 63 63 } 64 64 … … 66 66 67 67 /* simulate child selector for IE */ 68 div#portal-globalnav li:hover ul, #portal-globalnav li:hover li:hover ul, #portal-globalnav li:hover li:hover li:hover ul, #portal-globalnavli:hover li:hover li:hover li:hover ul {69 visibility: visible;68 div#portal-globalnav .csshover li:hover ul, #portal-globalnav .csshover li:hover li:hover ul, #portal-globalnav .csshover li:hover li:hover li:hover ul, #portal-globalnav .csshover li:hover li:hover li:hover li:hover ul { 69 visibility: visible; 70 70 } 71 #portal-globalnav li:hover li ul, #portal-globalnav li:hover li:hover li ul, #portal-globalnav li:hover li:hover li:hover li ul, #portal-globalnavli:hover li:hover li:hover li:hover li ul {72 visibility: hidden;71 #portal-globalnav .csshover li:hover li ul, #portal-globalnav .csshover li:hover li:hover li ul, #portal-globalnav .csshover li:hover li:hover li:hover li ul, #portal-globalnav .csshover li:hover li:hover li:hover li:hover li ul { 72 visibility: hidden; 73 73 } 74 74 75 75 /* do the normal show, with increased specificity */ 76 #portal-globalnav ul#portal-globalnavList li:hover > ul {77 visibility: visible;76 #portal-globalnav ul#portal-globalnavList .csshover li:hover > ul { 77 visibility: visible; 78 78 } 79 79 80 80 /* ------ Make-up -------- */ 81 82 /*.outer {83 padding-bottom: 4px;84 padding-top: 1em;85 }*/86 81 87 82 #portal-globalnav li.invisibleHeightKeeper { … … 94 89 }*/ 95 90 96 #portal-globalnav ul li:hover a {91 #portal-globalnav .csshover ul li:hover a { 97 92 background-color: &dtml-globalBackgroundColor;; 98 93 } 99 94 100 #portal-globalnav ul li:hover ul a {101 background-color: &dtml-backgroundColor;95 #portal-globalnav .csshover ul li:hover ul a { 96 background-color: &dtml-backgroundColor; 102 97 } 103 98 104 99 105 #portal-globalnav ul li ul li a:hover,106 #portal-globalnav ul li ul li:hover a {107 color: &dtml-globalFontColor;;108 background-color: &dtml-globalBackgroundColor;;100 #portal-globalnav .csshover ul li ul li a:hover, 101 #portal-globalnav .csshover ul li ul li:hover a { 102 color: &dtml-globalFontColor;; 103 background-color: &dtml-globalBackgroundColor;; 109 104 } 110 105 111 106 112 #portal-globalnav ul li:hover ul li a:hover,113 #portal-globalnav ul li:hover ul li.selected a,114 #portal-globalnav ul li:hover ul li:hover a {107 #portal-globalnav .csshover ul li:hover ul li a:hover, 108 #portal-globalnav .csshover ul li:hover ul li.selected a, 109 #portal-globalnav .csshover ul li:hover ul li:hover a { 115 110 background-color: &dtml-globalBackgroundColor;; 116 111 } … … 123 118 #portal-globalnav ul li ul { 124 119 border: &dtml-borderWidth; &dtml-borderStyle; &dtml-globalBorderColor;; 125 padding-bottom: 1px;126 overflow: hidden;120 padding-bottom: 1px; 121 overflow: hidden; 127 122 background-color: &dtml-globalBackgroundColor;; 128 123 } 129 124 130 #portal-globalnav ul li:hover ul li:hover ul a {125 #portal-globalnav .csshover ul li:hover ul li:hover ul a { 131 126 background-color: &dtml-backgroundColor;; 132 color: &dtml-globalFontColor;;127 color: &dtml-globalFontColor;; 133 128 } 134 135 136 /* latest changes */137 129 138 130 … … 140 132 141 133 134 /* latest changes */ 142 135 143 136 #portal-globalnav ul { … … 151 144 margin:0; 152 145 line-height:normal; 153 } 146 } 154 147 155 148 #portal-globalnav ul li.selected a, 156 #portal-globalnav ul li a:hover {149 #portal-globalnav .csshover ul li a:hover { 157 150 158 151 color:&dtml-globalFontColor;; … … 160 153 161 154 162 #portal-globalnav ul li:hover a {155 #portal-globalnav .csshover ul li:hover a { 163 156 background-color:&dtml-globalBackgroundColor;; 164 157 } 165 158 166 159 167 #portal-globalnav ul li:hover ul {160 #portal-globalnav .csshover ul li:hover ul { 168 161 margin:0; 169 border: &dtml-borderWidth; &dtml-borderStyle; &dtml-globalBorderColor;; ;162 border: &dtml-borderWidth; &dtml-borderStyle; &dtml-globalBorderColor;; 170 163 background-color: &dtml-backgroundColor;; 171 164 overflow:visible; 172 165 } 173 166 174 #portal-globalnav ul li:hover ul li {167 #portal-globalnav .csshover ul li:hover ul li { 175 168 background-color: &dtml-backgroundColor; !important; 176 169 padding:0; … … 178 171 } 179 172 180 #portal-globalnav ul li:hover ul li a {173 #portal-globalnav .csshover ul li:hover ul li a { 181 174 color: &dtml-globalFontColor !important; 182 175 background-color: &dtml-backgroundColor; !important; … … 186 179 } 187 180 188 #portal-globalnav ul li ul li a:hover {181 #portal-globalnav .csshover ul li ul li a:hover { 189 182 background-color: &dtml-globalBackgroundColor; !important; 190 183 background-image:none; qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/global_sections.pt
r95 r96 9 9 tal:omit-tag=""> 10 10 <h5 class="hiddenStructure" i18n:translate="heading_sections">Sections</h5> 11 12 <div id="portal-globalnav"class="csshover">13 <ul>14 <span tal:replace="structure portal/portal_properties/dropdownmenu_properties/menu | string:qPloneDropDownMenu broken" />15 <li class="invisibleHeightKeeper"> </li>16 </ul>17 </div>18 11 <div id="portal-globalnav"> 12 <div class="csshover"> 13 <ul> 14 <span tal:replace="structure portal/portal_properties/dropdownmenu_properties/menu | string:qPloneDropDownMenu broken" /> 15 <li class="invisibleHeightKeeper"> </li> 16 </ul> 17 </div> 18 </div> 19 19 </div> 20 20 </body> qPloneDropDownMenu/trunk/version.txt
r95 r96 1 0.1. 61 0.1.7
