| OLD | NEW | 
|    1 "use strict"; |    1 "use strict"; | 
|    2  |    2  | 
|    3 let readline = require("readline"); |    3 let readline = require("readline"); | 
|    4 let punycode = require("punycode"); |    4 let punycode = require("punycode"); | 
|    5 let tldjs = require("tldjs"); |    5 let tldjs = require("tldjs"); | 
|    6 let filterClasses = require("./adblockplus.js"); |    6 let filterClasses = require("./adblockplus.js"); | 
|    7  |    7  | 
|    8 let typeMap = filterClasses.RegExpFilter.typeMap; |    8 let typeMap = filterClasses.RegExpFilter.typeMap; | 
|    9  |    9  | 
 |   10 const selectorLimit = 5000; | 
 |   11  | 
|   10 let requestFilters = []; |   12 let requestFilters = []; | 
|   11 let requestExceptions = []; |   13 let requestExceptions = []; | 
|   12 let elemhideFilters = []; |   14 let elemhideFilters = []; | 
|   13 let elemhideExceptions = []; |   15 let elemhideExceptions = []; | 
|   14 let elemhideSelectorExceptions = new Map(); |   16 let elemhideSelectorExceptions = new Map(); | 
|   15  |   17  | 
|   16 function recordException(filter) |   18 function recordException(filter) | 
|   17 { |   19 { | 
|   18   if (filter.contentType & (typeMap.IMAGE |   20   if (filter.contentType & (typeMap.IMAGE | 
|   19                             | typeMap.STYLESHEET |   21                             | typeMap.STYLESHEET | 
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   93  |   95  | 
|   94 function convertElemHideFilter(filter) |   96 function convertElemHideFilter(filter) | 
|   95 { |   97 { | 
|   96   let included = []; |   98   let included = []; | 
|   97   let excluded = []; |   99   let excluded = []; | 
|   98   let rules = []; |  100   let rules = []; | 
|   99  |  101  | 
|  100   parseDomains(filter.domains, included, excluded); |  102   parseDomains(filter.domains, included, excluded); | 
|  101  |  103  | 
|  102   if (excluded.length == 0 && !(filter.selector in elemhideSelectorExceptions)) |  104   if (excluded.length == 0 && !(filter.selector in elemhideSelectorExceptions)) | 
|  103   { |  105     return {matchDomains: included.map(matchDomain), selector: filter.selector}; | 
|  104     let action = { |  | 
|  105       type: "css-display-none", |  | 
|  106       selector: filter.selector |  | 
|  107     }; |  | 
|  108  |  | 
|  109     for (let domain of included) |  | 
|  110       rules.push({ |  | 
|  111           trigger: {"url-filter": matchDomain(domain)}, |  | 
|  112           action: action |  | 
|  113       }); |  | 
|  114  |  | 
|  115     if (included.length == 0) |  | 
|  116       rules.push({ |  | 
|  117           trigger: {"url-filter": "^https?://"}, |  | 
|  118           action: action |  | 
|  119       }); |  | 
|  120   } |  | 
|  121  |  | 
|  122   return rules; |  | 
|  123 } |  106 } | 
|  124  |  107  | 
|  125 function toRegExp(text) |  108 function toRegExp(text) | 
|  126 { |  109 { | 
|  127   let result = ""; |  110   let result = ""; | 
|  128   let lastIndex = text.length - 1; |  111   let lastIndex = text.length - 1; | 
|  129  |  112  | 
|  130   for (let i = 0; i < text.length; i++) |  113   for (let i = 0; i < text.length; i++) | 
|  131   { |  114   { | 
|  132     let c = text[i]; |  115     let c = text[i]; | 
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  274 function logRules() |  257 function logRules() | 
|  275 { |  258 { | 
|  276   let rules = []; |  259   let rules = []; | 
|  277  |  260  | 
|  278   function addRule(rule) |  261   function addRule(rule) | 
|  279   { |  262   { | 
|  280     if (!hasNonASCI(rule)) |  263     if (!hasNonASCI(rule)) | 
|  281       rules.push(rule); |  264       rules.push(rule); | 
|  282   } |  265   } | 
|  283  |  266  | 
|  284   // HACK: We ignore element hiding filter for now to get the list of |  267   let groupedElemhideFilters = new Map(); | 
|  285   // rules down below 50K. This limit is enforced by iOS and Safari. |  268   for (let filter of elemhideFilters) | 
|  286   // To be undone with https://issues.adblockplus.org/ticket/3585 |  269   { | 
 |  270     let result = convertElemHideFilter(filter); | 
 |  271     if (!result) | 
 |  272       continue; | 
|  287  |  273  | 
|  288   //for (let filter of elemhideFilters) |  274     if (result.matchDomains.length == 0) | 
|  289   //  convertElemHideFilter(filter).forEach(addRule); |  275       result.matchDomains = ["^https?://"]; | 
|  290   //for (let filter of elemhideExceptions) |  276  | 
|  291   //  addRule(convertFilter(filter, "ignore-previous-rules", false)); |  277     for (let matchDomain of result.matchDomains) | 
 |  278     { | 
 |  279       let group = groupedElemhideFilters.get(matchDomain) || []; | 
 |  280       group.push(result.selector); | 
 |  281       groupedElemhideFilters.set(matchDomain, group); | 
 |  282     } | 
 |  283   } | 
 |  284  | 
 |  285   groupedElemhideFilters.forEach((selectors, matchDomain) => | 
 |  286   { | 
 |  287     while (selectors.length) | 
 |  288     { | 
 |  289       addRule({ | 
 |  290         trigger: {"url-filter": matchDomain}, | 
 |  291         action: {type: "css-display-none", | 
 |  292                  selector: selectors.splice(0, selectorLimit).join(", ")} | 
 |  293       }); | 
 |  294     } | 
 |  295   }); | 
 |  296  | 
 |  297   for (let filter of elemhideExceptions) | 
 |  298     addRule(convertFilter(filter, "ignore-previous-rules", false)); | 
|  292  |  299  | 
|  293   for (let filter of requestFilters) |  300   for (let filter of requestFilters) | 
|  294     addRule(convertFilter(filter, "block", true)); |  301     addRule(convertFilter(filter, "block", true)); | 
|  295   for (let filter of requestExceptions) |  302   for (let filter of requestExceptions) | 
|  296     addRule(convertFilter(filter, "ignore-previous-rules", true)); |  303     addRule(convertFilter(filter, "ignore-previous-rules", true)); | 
|  297  |  304  | 
|  298   console.log(JSON.stringify(rules, null, "\t")); |  305   console.log(JSON.stringify(rules, null, "\t")); | 
|  299 } |  306 } | 
|  300  |  307  | 
|  301 let rl = readline.createInterface({input: process.stdin, terminal: false}); |  308 let rl = readline.createInterface({input: process.stdin, terminal: false}); | 
|  302 rl.on("line", parseFilter); |  309 rl.on("line", parseFilter); | 
|  303 rl.on("close", logRules); |  310 rl.on("close", logRules); | 
| OLD | NEW |