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 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 */ | 393 */ |
394 domainSourceIsLowerCase: false, | 394 domainSourceIsLowerCase: false, |
395 | 395 |
396 /** | 396 /** |
397 * Map containing domains that this filter should match on/not match | 397 * Map containing domains that this filter should match on/not match |
398 * on or null if the filter should match on all domains | 398 * on or null if the filter should match on all domains |
399 * @type {?Map.<string,boolean>} | 399 * @type {?Map.<string,boolean>} |
400 */ | 400 */ |
401 get domains() | 401 get domains() |
402 { | 402 { |
403 let prop = Object.getOwnPropertyDescriptor(this, "_domains"); | |
404 if (prop) | |
405 { | |
406 let {value} = prop; | |
407 return typeof value == "string" ? | |
408 new Map([[value, true], ["", false]]) : value; | |
409 } | |
410 | |
411 let domains = null; | 403 let domains = null; |
412 | 404 |
413 if (this.domainSource) | 405 if (this.domainSource) |
414 { | 406 { |
415 let source = this.domainSource; | 407 let source = this.domainSource; |
416 if (!this.domainSourceIsLowerCase) | 408 if (!this.domainSourceIsLowerCase) |
417 { | 409 { |
418 // RegExpFilter already have lowercase domains | 410 // RegExpFilter already have lowercase domains |
419 source = source.toLowerCase(); | 411 source = source.toLowerCase(); |
420 } | 412 } |
421 let list = source.split(this.domainSeparator); | 413 let list = source.split(this.domainSeparator); |
422 if (list.length == 1 && list[0][0] != "~") | 414 if (list.length == 1 && list[0][0] != "~") |
423 { | 415 { |
424 // Fast track for the common one-domain scenario | 416 // Fast track for the common one-domain scenario |
425 domains = list[0]; | 417 Object.defineProperty(this, "_singleDomain", {value: list[0]}); |
426 } | 418 } |
427 else | 419 else |
428 { | 420 { |
429 let hasIncludes = false; | 421 let hasIncludes = false; |
430 for (let i = 0; i < list.length; i++) | 422 for (let i = 0; i < list.length; i++) |
431 { | 423 { |
432 let domain = list[i]; | 424 let domain = list[i]; |
433 if (domain == "") | 425 if (domain == "") |
434 continue; | 426 continue; |
435 | 427 |
436 let include; | 428 let include; |
437 if (domain[0] == "~") | 429 if (domain[0] == "~") |
438 { | 430 { |
439 include = false; | 431 include = false; |
440 domain = domain.substr(1); | 432 domain = domain.substr(1); |
441 } | 433 } |
442 else | 434 else |
443 { | 435 { |
444 include = true; | 436 include = true; |
445 hasIncludes = true; | 437 hasIncludes = true; |
446 } | 438 } |
447 | 439 |
448 if (!domains) | 440 if (!domains) |
| 441 { |
449 domains = new Map(); | 442 domains = new Map(); |
| 443 Object.defineProperty(this, "domains", {value: domains}); |
| 444 } |
450 | 445 |
451 domains.set(domain, include); | 446 domains.set(domain, include); |
452 } | 447 } |
453 if (domains) | 448 if (domains) |
454 domains.set("", !hasIncludes); | 449 domains.set("", !hasIncludes); |
455 } | 450 } |
456 | 451 |
457 this.domainSource = null; | 452 this.domainSource = null; |
458 } | 453 } |
459 | 454 |
460 Object.defineProperty(this, "_domains", {value: domains}); | 455 let singleDomain = this._singleDomain; |
461 return this.domains; | 456 if (singleDomain) |
| 457 return new Map([[singleDomain, true], ["", false]]); |
| 458 |
| 459 return domains; |
462 }, | 460 }, |
463 | 461 |
464 /** | 462 /** |
465 * Array containing public keys of websites that this filter should apply to | 463 * Array containing public keys of websites that this filter should apply to |
466 * @type {?string[]} | 464 * @type {?string[]} |
467 */ | 465 */ |
468 sitekeys: null, | 466 sitekeys: null, |
469 | 467 |
470 /** | 468 /** |
471 * Checks whether this filter is active on a domain. | 469 * Checks whether this filter is active on a domain. |
(...skipping 636 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1108 */ | 1106 */ |
1109 function ElemHideEmulationFilter(text, domains, selector) | 1107 function ElemHideEmulationFilter(text, domains, selector) |
1110 { | 1108 { |
1111 ElemHideBase.call(this, text, domains, selector); | 1109 ElemHideBase.call(this, text, domains, selector); |
1112 } | 1110 } |
1113 exports.ElemHideEmulationFilter = ElemHideEmulationFilter; | 1111 exports.ElemHideEmulationFilter = ElemHideEmulationFilter; |
1114 | 1112 |
1115 ElemHideEmulationFilter.prototype = extend(ElemHideBase, { | 1113 ElemHideEmulationFilter.prototype = extend(ElemHideBase, { |
1116 type: "elemhideemulation" | 1114 type: "elemhideemulation" |
1117 }); | 1115 }); |
OLD | NEW |