summaryrefslogtreecommitdiff
path: root/more/css_0
diff options
context:
space:
mode:
authorRene Rivera <grafikrobot@gmail.com>2005-07-17 16:46:52 +0000
committerRene Rivera <grafikrobot@gmail.com>2005-07-17 16:46:52 +0000
commitf2b164dc018c525074ad6fcc1f1445b00c7ca796 (patch)
tree7aa895d753347cafc3eb9d91f7731c0ed5663318 /more/css_0
parent62c46dcd7ce11c0c80e1494d7cf47c566a9a3715 (diff)
downloadboost-f2b164dc018c525074ad6fcc1f1445b00c7ca796.tar.gz
Add workaround to support "hover" selection of CSS elements in IE browsers. Solution uses "csshover.htc" from Peter Nederlof (http://www.xs4all.nl/~peterned/).
[SVN r30143]
Diffstat (limited to 'more/css_0')
-rw-r--r--more/css_0/csshover.htc91
1 files changed, 91 insertions, 0 deletions
diff --git a/more/css_0/csshover.htc b/more/css_0/csshover.htc
new file mode 100644
index 0000000000..bab62c367a
--- /dev/null
+++ b/more/css_0/csshover.htc
@@ -0,0 +1,91 @@
+<attach event="ondocumentready" handler="parseStylesheets" />
+<script language="JScript">
+/**
+ * Pseudos - V1.30.050121 - hover & active
+ * ---------------------------------------------
+ * Peterned - http://www.xs4all.nl/~peterned/
+ * (c) 2005 - Peter Nederlof
+ *
+ * Credits - Arnoud Berendsen
+ * - Martin Reurings
+ * - Robert Hanson
+ *
+ * howto: body { behavior:url("csshover.htc"); }
+ * ---------------------------------------------
+ */
+
+var currentSheet, doc = window.document, activators = {
+ onhover:{on:'onmouseover', off:'onmouseout'},
+ onactive:{on:'onmousedown', off:'onmouseup'}
+}
+
+function parseStylesheets() {
+ var sheets = doc.styleSheets, l = sheets.length;
+ for(var i=0; i<l; i++)
+ parseStylesheet(sheets[i]);
+}
+ function parseStylesheet(sheet) {
+ if(sheet.imports) {
+ try {
+ var imports = sheet.imports, l = imports.length;
+ for(var i=0; i<l; i++) parseStylesheet(sheet.imports[i]);
+ } catch(securityException){}
+ }
+
+ try {
+ var rules = (currentSheet = sheet).rules, l = rules.length;
+ for(var j=0; j<l; j++) parseCSSRule(rules[j]);
+ } catch(securityException){}
+ }
+
+ function parseCSSRule(rule) {
+ var select = rule.selectorText, style = rule.style.cssText;
+ if(!(/(^|\s)(([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):(hover|active)/i).test(select) || !style) return;
+
+ var pseudo = select.replace(/[^:]+:([a-z-]+).*/i, 'on$1');
+ var newSelect = select.replace(/(\.([a-z0-9_-]+):[a-z]+)|(:[a-z]+)/gi, '.$2' + pseudo);
+ var className = (/\.([a-z0-9_-]*on(hover|active))/i).exec(newSelect)[1];
+ var affected = select.replace(/:hover.*$/, '');
+ var elements = getElementsBySelect(affected);
+
+ currentSheet.addRule(newSelect, style);
+ for(var i=0; i<elements.length; i++)
+ new HoverElement(elements[i], className, activators[pseudo]);
+ }
+
+function HoverElement(node, className, events) {
+ if(!node.hovers) node.hovers = {};
+ if(node.hovers[className]) return;
+ node.hovers[className] = true;
+ node.attachEvent(events.on,
+ function() { node.className += ' ' + className; });
+ node.attachEvent(events.off,
+ function() { node.className =
+ node.className.replace(new RegExp('\\s+'+className, 'g'),''); });
+}
+
+function getElementsBySelect(rule) {
+ var parts, nodes = [doc];
+ parts = rule.split(' ');
+ for(var i=0; i<parts.length; i++) {
+ nodes = getSelectedNodes(parts[i], nodes);
+ }
+ return nodes;
+}
+ function getSelectedNodes(select, elements) {
+ var result, node, nodes = [];
+ var classname = (/\.([a-z0-9_-]+)/i).exec(select);
+ var identify = (/\#([a-z0-9_-]+)/i).exec(select);
+ var tagName = select.replace(/(\.|\#|\:)[a-z0-9_-]+/i, '');
+ for(var i=0; i<elements.length; i++) {
+ result = tagName? elements[i].all.tags(tagName):elements[i].all;
+ for(var j=0; j<result.length; j++) {
+ node = result[j];
+ if((identify && node.id != identify[1]) || (classname && !(new RegExp('\\b' +
+ classname[1] + '\\b').exec(node.className)))) continue;
+ nodes[nodes.length] = node;
+ }
+ }
+ return nodes;
+ }
+</script> \ No newline at end of file