OLD | NEW |
1 /* | 1 /* |
2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
3 * Copyright (C) 2006-present eyeo GmbH | 3 * Copyright (C) 2006-present eyeo GmbH |
4 * | 4 * |
5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
8 * | 8 * |
9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 let index = domain.indexOf("."); | 104 let index = domain.indexOf("."); |
105 domain = index == -1 ? "" : domain.substring(index + 1); | 105 domain = index == -1 ? "" : domain.substring(index + 1); |
106 } | 106 } |
107 | 107 |
108 return domain; | 108 return domain; |
109 } | 109 } |
110 | 110 |
111 /** | 111 /** |
112 * Adds a filter to the lookup table of filters by domain. | 112 * Adds a filter to the lookup table of filters by domain. |
113 * @param {Filter} filter | 113 * @param {Filter} filter |
| 114 * @param {?Map.<string,boolean>} [domains] |
114 */ | 115 */ |
115 function addToFiltersByDomain(filter) | 116 function addToFiltersByDomain(filter, domains = filter.domains) |
116 { | 117 { |
117 let domains = filter.domains || defaultDomains; | 118 for (let [domain, isIncluded] of domains || defaultDomains) |
118 for (let [domain, isIncluded] of domains) | |
119 { | 119 { |
120 // There's no need to note that a filter is generically disabled. | 120 // There's no need to note that a filter is generically disabled. |
121 if (!isIncluded && domain == "") | 121 if (!isIncluded && domain == "") |
122 continue; | 122 continue; |
123 | 123 |
124 let filters = filtersByDomain.get(domain); | 124 let filters = filtersByDomain.get(domain); |
125 if (!filters) | 125 if (!filters) |
126 filtersByDomain.set(domain, filters = new Map()); | 126 filtersByDomain.set(domain, filters = new Map()); |
127 filters.set(filter, isIncluded); | 127 filters.set(filter, isIncluded); |
128 } | 128 } |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 * Add a new element hiding filter | 278 * Add a new element hiding filter |
279 * @param {ElemHideFilter} filter | 279 * @param {ElemHideFilter} filter |
280 */ | 280 */ |
281 add(filter) | 281 add(filter) |
282 { | 282 { |
283 if (knownFilters.has(filter)) | 283 if (knownFilters.has(filter)) |
284 return; | 284 return; |
285 | 285 |
286 commonStyleSheet = null; | 286 commonStyleSheet = null; |
287 | 287 |
288 let {selector} = filter; | 288 let {domains, selector} = filter; |
289 | 289 |
290 if (!(filter.domains || ElemHideExceptions.hasExceptions(selector))) | 290 if (!(domains || ElemHideExceptions.hasExceptions(selector))) |
291 { | 291 { |
292 // The new filter's selector is unconditionally applied to all domains | 292 // The new filter's selector is unconditionally applied to all domains |
293 filterBySelector.set(selector, filter); | 293 filterBySelector.set(selector, filter); |
294 unconditionalSelectors = null; | 294 unconditionalSelectors = null; |
295 defaultStyleSheet = null; | 295 defaultStyleSheet = null; |
296 } | 296 } |
297 else | 297 else |
298 { | 298 { |
299 // The new filter's selector only applies to some domains | 299 // The new filter's selector only applies to some domains |
300 addToFiltersByDomain(filter); | 300 addToFiltersByDomain(filter, domains); |
301 } | 301 } |
302 | 302 |
303 knownFilters.add(filter); | 303 knownFilters.add(filter); |
304 filterNotifier.emit("elemhideupdate"); | 304 filterNotifier.emit("elemhideupdate"); |
305 }, | 305 }, |
306 | 306 |
307 /** | 307 /** |
308 * Removes an element hiding filter | 308 * Removes an element hiding filter |
309 * @param {ElemHideFilter} filter | 309 * @param {ElemHideFilter} filter |
310 */ | 310 */ |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
479 { | 479 { |
480 let styleSheet = ""; | 480 let styleSheet = ""; |
481 | 481 |
482 for (let selectorGroup of splitSelectors(selectors)) | 482 for (let selectorGroup of splitSelectors(selectors)) |
483 styleSheet += createRule(selectorGroup); | 483 styleSheet += createRule(selectorGroup); |
484 | 484 |
485 return styleSheet; | 485 return styleSheet; |
486 } | 486 } |
487 | 487 |
488 exports.createStyleSheet = createStyleSheet; | 488 exports.createStyleSheet = createStyleSheet; |
OLD | NEW |