OLD | NEW |
| (Empty) |
1 function CSSPropertyFilters(window, addSelectorsFunc) { | |
2 this.window = window; | |
3 this.addSelectorsFunc = addSelectorsFunc; | |
4 } | |
5 | |
6 CSSPropertyFilters.prototype = { | |
7 stringifyStyle: function(style) | |
8 { | |
9 var styles = []; | |
10 for (var i = 0; i < style.length; i++) | |
11 { | |
12 var property = style.item(i); | |
13 var value = style.getPropertyValue(property); | |
14 var priority = style.getPropertyPriority(property); | |
15 styles.push(property + ": " + value + (priority ? " !" + priority : "") +
";"); | |
16 } | |
17 styles.sort(); | |
18 return styles.join(" "); | |
19 }, | |
20 | |
21 findSelectors: function(stylesheet, selectors) | |
22 { | |
23 var rules = stylesheet.cssRules; | |
24 if (!rules) | |
25 return; | |
26 | |
27 for (var i = 0; i < rules.length; i++) | |
28 { | |
29 var rule = rules[i]; | |
30 if (rule.type != this.window.CSSRule.STYLE_RULE) | |
31 continue; | |
32 | |
33 var style = this.stringifyStyle(rule.style); | |
34 for (var j = 0; j < this.patterns.length; j++) | |
35 { | |
36 var pattern = this.patterns[j]; | |
37 var regexp = pattern.regexp; | |
38 | |
39 if (typeof regexp == "string") | |
40 regexp = pattern.regexp = new RegExp(regexp); | |
41 | |
42 if (regexp.test(style)) | |
43 selectors.push(pattern.prefix + rule.selectorText + pattern.suffix); | |
44 } | |
45 } | |
46 }, | |
47 | |
48 addSelectors: function(stylesheets) | |
49 { | |
50 var selectors = []; | |
51 for (var i = 0; i < stylesheets.length; i++) | |
52 this.findSelectors(stylesheets[i], selectors); | |
53 this.addSelectorsFunc(selectors); | |
54 }, | |
55 | |
56 onLoad: function(event) | |
57 { | |
58 var stylesheet = event.target.sheet; | |
59 if (stylesheet) | |
60 this.addSelectors([stylesheet]); | |
61 }, | |
62 | |
63 load: function(callback) | |
64 { | |
65 ext.backgroundPage.sendMessage( | |
66 { | |
67 type: "filters.get", | |
68 what: "cssproperties" | |
69 }, | |
70 function(patterns) | |
71 { | |
72 this.patterns = patterns; | |
73 callback(); | |
74 }.bind(this) | |
75 ); | |
76 }, | |
77 | |
78 apply: function() | |
79 { | |
80 if (this.patterns.length > 0) | |
81 { | |
82 var document = this.window.document; | |
83 this.addSelectors(document.styleSheets); | |
84 document.addEventListener("load", this.onLoad.bind(this), true); | |
85 } | |
86 } | |
87 }; | |
OLD | NEW |