| OLD | NEW |
| 1 var propertySelectorRegExp = /\[\-abp\-properties=(["'])([^"']+)\1\]/; |
| 2 |
| 1 function splitSelector(selector) | 3 function splitSelector(selector) |
| 2 { | 4 { |
| 3 if (selector.indexOf(",") == -1) | 5 if (selector.indexOf(",") == -1) |
| 4 return [selector]; | 6 return [selector]; |
| 5 | 7 |
| 6 var selectors = []; | 8 var selectors = []; |
| 7 var start = 0; | 9 var start = 0; |
| 8 var level = 0; | 10 var level = 0; |
| 9 var sep = ""; | 11 var sep = ""; |
| 10 | 12 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 selectors.push(selector.substring(start, i)); | 31 selectors.push(selector.substring(start, i)); |
| 30 start = i + 1; | 32 start = i + 1; |
| 31 } | 33 } |
| 32 } | 34 } |
| 33 } | 35 } |
| 34 | 36 |
| 35 selectors.push(selector.substring(start)); | 37 selectors.push(selector.substring(start)); |
| 36 return selectors; | 38 return selectors; |
| 37 } | 39 } |
| 38 | 40 |
| 39 function CSSPropertyFilters(window, getFiltersFunc, addSelectorsFunc) | 41 function ElemHideEmulation(window, getFiltersFunc, addSelectorsFunc) |
| 40 { | 42 { |
| 41 this.window = window; | 43 this.window = window; |
| 42 this.getFiltersFunc = getFiltersFunc; | 44 this.getFiltersFunc = getFiltersFunc; |
| 43 this.addSelectorsFunc = addSelectorsFunc; | 45 this.addSelectorsFunc = addSelectorsFunc; |
| 44 } | 46 } |
| 45 | 47 |
| 46 CSSPropertyFilters.prototype = { | 48 ElemHideEmulation.prototype = { |
| 47 stringifyStyle: function(style) | 49 stringifyStyle: function(style) |
| 48 { | 50 { |
| 49 var styles = []; | 51 var styles = []; |
| 50 for (var i = 0; i < style.length; i++) | 52 for (var i = 0; i < style.length; i++) |
| 51 { | 53 { |
| 52 var property = style.item(i); | 54 var property = style.item(i); |
| 53 var value = style.getPropertyValue(property); | 55 var value = style.getPropertyValue(property); |
| 54 var priority = style.getPropertyPriority(property); | 56 var priority = style.getPropertyPriority(property); |
| 55 styles.push(property + ": " + value + (priority ? " !" + priority : "") +
";"); | 57 styles.push(property + ": " + value + (priority ? " !" + priority : "") +
";"); |
| 56 } | 58 } |
| (...skipping 28 matching lines...) Expand all Loading... |
| 85 for (var i = 0; i < rules.length; i++) | 87 for (var i = 0; i < rules.length; i++) |
| 86 { | 88 { |
| 87 var rule = rules[i]; | 89 var rule = rules[i]; |
| 88 if (rule.type != rule.STYLE_RULE) | 90 if (rule.type != rule.STYLE_RULE) |
| 89 continue; | 91 continue; |
| 90 | 92 |
| 91 var style = this.stringifyStyle(rule.style); | 93 var style = this.stringifyStyle(rule.style); |
| 92 for (var j = 0; j < this.patterns.length; j++) | 94 for (var j = 0; j < this.patterns.length; j++) |
| 93 { | 95 { |
| 94 var pattern = this.patterns[j]; | 96 var pattern = this.patterns[j]; |
| 95 var regexp = pattern.regexp; | 97 if (pattern.regexp.test(style)) |
| 96 | |
| 97 if (typeof regexp == "string") | |
| 98 regexp = pattern.regexp = new RegExp(regexp, "i"); | |
| 99 | |
| 100 if (regexp.test(style)) | |
| 101 { | 98 { |
| 102 var subSelectors = splitSelector(rule.selectorText); | 99 var subSelectors = splitSelector(rule.selectorText); |
| 103 for (var k = 0; k < subSelectors.length; k++) | 100 for (var k = 0; k < subSelectors.length; k++) |
| 104 selectors.push(pattern.prefix + subSelectors[k] + pattern.suffix); | 101 selectors.push(pattern.prefix + subSelectors[k] + pattern.suffix); |
| 105 filters[pattern.text] = true; | 102 filters[pattern.text] = true; |
| 106 } | 103 } |
| 107 } | 104 } |
| 108 } | 105 } |
| 109 }, | 106 }, |
| 110 | 107 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 121 { | 118 { |
| 122 var stylesheet = event.target.sheet; | 119 var stylesheet = event.target.sheet; |
| 123 if (stylesheet) | 120 if (stylesheet) |
| 124 this.addSelectors([stylesheet]); | 121 this.addSelectors([stylesheet]); |
| 125 }, | 122 }, |
| 126 | 123 |
| 127 load: function(callback) | 124 load: function(callback) |
| 128 { | 125 { |
| 129 this.getFiltersFunc(function(patterns) | 126 this.getFiltersFunc(function(patterns) |
| 130 { | 127 { |
| 131 this.patterns = patterns; | 128 this.patterns = []; |
| 129 for (var i = 0; i < patterns.length; i++) |
| 130 { |
| 131 var pattern = patterns[i]; |
| 132 var match = propertySelectorRegExp.exec(pattern.selector); |
| 133 if (!match) |
| 134 continue; |
| 135 |
| 136 var propertyExpression = match[2]; |
| 137 var regexpString; |
| 138 if (propertyExpression.length >= 2 && propertyExpression[0] == "/" && |
| 139 propertyExpression[propertyExpression.length - 1] == "/") |
| 140 regexpString = propertyExpression.slice(1, -1); |
| 141 else |
| 142 regexpString = filterToRegExp(propertyExpression); |
| 143 |
| 144 this.patterns.push({ |
| 145 text: pattern.text, |
| 146 regexp: new RegExp(regexpString, "i"), |
| 147 prefix: pattern.selector.substr(0, match.index), |
| 148 suffix: pattern.selector.substr(match.index + match[0].length) |
| 149 }); |
| 150 } |
| 151 |
| 132 callback(); | 152 callback(); |
| 133 }.bind(this)); | 153 }.bind(this)); |
| 134 }, | 154 }, |
| 135 | 155 |
| 136 apply: function() | 156 apply: function() |
| 137 { | 157 { |
| 138 if (this.patterns.length > 0) | 158 if (this.patterns.length > 0) |
| 139 { | 159 { |
| 140 var document = this.window.document; | 160 var document = this.window.document; |
| 141 this.addSelectors(document.styleSheets); | 161 this.addSelectors(document.styleSheets); |
| 142 document.addEventListener("load", this.onLoad.bind(this), true); | 162 document.addEventListener("load", this.onLoad.bind(this), true); |
| 143 } | 163 } |
| 144 } | 164 } |
| 145 }; | 165 }; |
| OLD | NEW |