/[drupal]/contributions/sandbox/goba/admin/scripts/csshover.htc
ViewVC logotype

Contents of /contributions/sandbox/goba/admin/scripts/csshover.htc

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (show annotations) (download)
Wed Aug 16 14:30:02 2006 UTC (3 years, 3 months ago) by goba
Branch: MAIN
CVS Tags: HEAD
an admin theme extracted from the civicspace theme, which 'kinda' works with Drupal HEAD (there are some CSS problems)
1 <attach event="ondocumentready" handler="parseStylesheets" />
2 <script language="JScript">
3 /* $Id: csshover.htc,v 1.2 2005/08/29 21:52:13 robinmonks Exp $ */
4
5 /**
6 * Pseudos - V1.30.050121 - hover & active
7 * ---------------------------------------------
8 * Peterned - http://www.xs4all.nl/~peterned/
9 * (c) 2005 - Peter Nederlof
10 *
11 * Credits - Arnoud Berendsen
12 * - Martin Reurings
13 * - Robert Hanson
14 *
15 * howto: body { behavior:url("csshover.htc"); }
16 * ---------------------------------------------
17 */
18
19 var currentSheet, doc = window.document, activators = {
20 onhover:{on:'onmouseover', off:'onmouseout'},
21 onactive:{on:'onmousedown', off:'onmouseup'}
22 }
23
24 function parseStylesheets() {
25 var sheets = doc.styleSheets, l = sheets.length;
26 for(var i=0; i<l; i++)
27 parseStylesheet(sheets[i]);
28 }
29 function parseStylesheet(sheet) {
30 if(sheet.imports) {
31 try {
32 var imports = sheet.imports, l = imports.length;
33 for(var i=0; i<l; i++) parseStylesheet(sheet.imports[i]);
34 } catch(securityException){}
35 }
36
37 try {
38 var rules = (currentSheet = sheet).rules, l = rules.length;
39 for(var j=0; j<l; j++) parseCSSRule(rules[j]);
40 } catch(securityException){}
41 }
42
43 function parseCSSRule(rule) {
44 var select = rule.selectorText, style = rule.style.cssText;
45 if(!(/(^|\s)(([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):(hover|active)/i).test(select) || !style) return;
46
47 var pseudo = select.replace(/[^:]+:([a-z-]+).*/i, 'on$1');
48 var newSelect = select.replace(/(\.([a-z0-9_-]+):[a-z]+)|(:[a-z]+)/gi, '.$2' + pseudo);
49 var className = (/\.([a-z0-9_-]*on(hover|active))/i).exec(newSelect)[1];
50 var affected = select.replace(/:hover.*$/, '');
51 var elements = getElementsBySelect(affected);
52
53 currentSheet.addRule(newSelect, style);
54 for(var i=0; i<elements.length; i++)
55 new HoverElement(elements[i], className, activators[pseudo]);
56 }
57
58 function HoverElement(node, className, events) {
59 if(!node.hovers) node.hovers = {};
60 if(node.hovers[className]) return;
61 node.hovers[className] = true;
62 node.attachEvent(events.on,
63 function() { node.className += ' ' + className; });
64 node.attachEvent(events.off,
65 function() { node.className =
66 node.className.replace(new RegExp('\\s+'+className, 'g'),''); });
67 }
68
69 function getElementsBySelect(rule) {
70 var parts, nodes = [doc];
71 parts = rule.split(' ');
72 for(var i=0; i<parts.length; i++) {
73 nodes = getSelectedNodes(parts[i], nodes);
74 } return nodes;
75 }
76 function getSelectedNodes(select, elements) {
77 var result, node, nodes = [];
78 var classname = (/\.([a-z0-9_-]+)/i).exec(select);
79 var identify = (/\#([a-z0-9_-]+)/i).exec(select);
80 var tagName = select.replace(/(\.|\#|\:)[a-z0-9_-]+/i, '');
81 for(var i=0; i<elements.length; i++) {
82 result = tagName? elements[i].all.tags(tagName):elements[i].all;
83 for(var j=0; j<result.length; j++) {
84 node = result[j];
85 if((identify && node.id != identify[1]) || (classname && !(new RegExp('\\b' +
86 classname[1] + '\\b').exec(node.className)))) continue;
87 nodes[nodes.length] = node;
88 }
89 } return nodes;
90 }
91 </script>

  ViewVC Help
Powered by ViewVC 1.1.2