| Index: abp2blocklist.js |
| diff --git a/abp2blocklist.js b/abp2blocklist.js |
| index ff781e695b4e9480f54bf004ddb5a35f2885f114..07199e1eb57783e73cb5f083154e9a8923fe406f 100644 |
| --- a/abp2blocklist.js |
| +++ b/abp2blocklist.js |
| @@ -7,6 +7,8 @@ let filterClasses = require("./adblockplus.js"); |
| let typeMap = filterClasses.RegExpFilter.typeMap; |
| +const selectorLimit = 5000; |
| + |
| let requestFilters = []; |
| let requestExceptions = []; |
| let elemhideFilters = []; |
| @@ -100,26 +102,7 @@ function convertElemHideFilter(filter) |
| parseDomains(filter.domains, included, excluded); |
| if (excluded.length == 0 && !(filter.selector in elemhideSelectorExceptions)) |
| - { |
| - let action = { |
| - type: "css-display-none", |
| - selector: filter.selector |
| - }; |
| - |
| - for (let domain of included) |
| - rules.push({ |
| - trigger: {"url-filter": matchDomain(domain)}, |
| - action: action |
| - }); |
| - |
| - if (included.length == 0) |
| - rules.push({ |
| - trigger: {"url-filter": "^https?://"}, |
| - action: action |
| - }); |
| - } |
| - |
| - return rules; |
| + return [included.map(matchDomain), filter.selector]; |
|
Sebastian Noack
2016/02/15 19:48:48
How about returning an object here? That would mak
kzar
2016/02/16 15:05:08
Done.
|
| } |
| function toRegExp(text) |
| @@ -281,14 +264,40 @@ function logRules() |
| rules.push(rule); |
| } |
| - // HACK: We ignore element hiding filter for now to get the list of |
| - // rules down below 50K. This limit is enforced by iOS and Safari. |
| - // To be undone with https://issues.adblockplus.org/ticket/3585 |
| + let groupedElemhideFilters = new Map(); |
| + for (let filter of elemhideFilters) |
| + { |
| + let result = convertElemHideFilter(filter); |
| + if (!result) |
| + continue; |
| + let targetDomains = result[0]; |
| + let selector = result[1]; |
| + |
| + if (targetDomains.length == 0) |
| + targetDomains = ["^https?://"]; |
| + |
| + for (let domain of targetDomains) |
| + { |
| + if (!groupedElemhideFilters.has(domain)) |
|
Sebastian Noack
2016/02/15 19:48:48
The additional lookup is redundant. IMO, better:
kzar
2016/02/16 15:05:08
Done, kind of.
We're either going to have to perf
|
| + groupedElemhideFilters.set(domain, []); |
| + groupedElemhideFilters.get(domain).push(selector); |
| + } |
| + } |
| + |
| + groupedElemhideFilters.forEach((selectors, domain) => |
| + { |
| + while (selectors.length) |
| + { |
| + addRule({ |
| + trigger: {"url-filter": domain}, |
|
Sebastian Noack
2016/02/15 19:48:47
The variable name isn't accurate. It's not a domai
kzar
2016/02/16 15:05:08
Acknowledged.
|
| + action: {type: "css-display-none"}, |
| + selector: selectors.splice(0, selectorLimit).join(", ") |
| + }); |
| + } |
| + }); |
| - //for (let filter of elemhideFilters) |
| - // convertElemHideFilter(filter).forEach(addRule); |
| - //for (let filter of elemhideExceptions) |
| - // addRule(convertFilter(filter, "ignore-previous-rules", false)); |
| + for (let filter of elemhideExceptions) |
| + addRule(convertFilter(filter, "ignore-previous-rules", false)); |
| for (let filter of requestFilters) |
| addRule(convertFilter(filter, "block", true)); |