| 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 |