Index: lib/filterClasses.js |
=================================================================== |
--- a/lib/filterClasses.js |
+++ b/lib/filterClasses.js |
@@ -17,17 +17,16 @@ |
"use strict"; |
/** |
* @fileOverview Definition of Filter class and its subclasses. |
*/ |
const {FilterNotifier} = require("./filterNotifier"); |
-const {extend} = require("./coreUtils"); |
const {filterToRegExp} = require("./common"); |
/** |
* Abstract base class for filters |
* |
* @param {string} text string representation of the filter |
* @constructor |
*/ |
@@ -248,53 +247,57 @@ |
function InvalidFilter(text, reason) |
{ |
Filter.call(this, text); |
this.reason = reason; |
} |
exports.InvalidFilter = InvalidFilter; |
-InvalidFilter.prototype = extend(Filter, { |
+InvalidFilter.prototype = { |
+ __proto__: Filter.prototype, |
+ |
type: "invalid", |
/** |
* Reason why this filter is invalid |
* @type {string} |
*/ |
reason: null, |
/** |
* See Filter.serialize() |
* @inheritdoc |
*/ |
serialize(buffer) {} |
-}); |
+}; |
/** |
* Class for comments |
* @param {string} text see Filter() |
* @constructor |
* @augments Filter |
*/ |
function CommentFilter(text) |
{ |
Filter.call(this, text); |
} |
exports.CommentFilter = CommentFilter; |
-CommentFilter.prototype = extend(Filter, { |
+CommentFilter.prototype = { |
+ __proto__: Filter.prototype, |
+ |
type: "comment", |
/** |
* See Filter.serialize() |
* @inheritdoc |
*/ |
serialize(buffer) {} |
-}); |
+}; |
/** |
* Abstract base class for filters that can get hits |
* @param {string} text |
* see Filter() |
* @param {string} [domains] |
* Domains that the filter is restricted to separated by domainSeparator |
* e.g. "foo.com|bar.com|~baz.com" |
@@ -304,17 +307,19 @@ |
function ActiveFilter(text, domains) |
{ |
Filter.call(this, text); |
this.domainSource = domains; |
} |
exports.ActiveFilter = ActiveFilter; |
-ActiveFilter.prototype = extend(Filter, { |
+ActiveFilter.prototype = { |
+ __proto__: Filter.prototype, |
+ |
_disabled: false, |
_hitCount: 0, |
_lastHit: 0, |
/** |
* Defines whether the filter is disabled |
* @type {boolean} |
*/ |
@@ -570,17 +575,17 @@ |
if (this._disabled) |
buffer.push("disabled=true"); |
if (this._hitCount) |
buffer.push("hitCount=" + this._hitCount); |
if (this._lastHit) |
buffer.push("lastHit=" + this._lastHit); |
} |
} |
-}); |
+}; |
/** |
* Abstract base class for RegExp-based filters |
* @param {string} text see Filter() |
* @param {string} regexpSource |
* filter part that the regular expression should be build from |
* @param {number} [contentType] |
* Content types the filter applies to, combination of values from |
@@ -625,17 +630,19 @@ |
else |
{ |
// No need to convert this filter to regular expression yet, do it on demand |
this.regexpSource = regexpSource; |
} |
} |
exports.RegExpFilter = RegExpFilter; |
-RegExpFilter.prototype = extend(ActiveFilter, { |
+RegExpFilter.prototype = { |
+ __proto__: ActiveFilter.prototype, |
+ |
/** |
* @see ActiveFilter.domainSourceIsUpperCase |
*/ |
domainSourceIsUpperCase: true, |
/** |
* Number of filters contained, will always be 1 (required to |
* optimize Matcher). |
@@ -737,17 +744,17 @@ |
if (this.contentType & typeMask && |
(this.thirdParty == null || this.thirdParty == thirdParty) && |
this.isActiveOnDomain(docDomain, sitekey) && this.regexp.test(location)) |
{ |
return true; |
} |
return false; |
} |
-}); |
+}; |
// Required to optimize Matcher, see also RegExpFilter.prototype.length |
Object.defineProperty(RegExpFilter.prototype, "0", { |
get() { return this; } |
}); |
/** |
* Creates a RegExp filter from its text representation |
@@ -903,32 +910,34 @@ |
RegExpFilter.call(this, text, regexpSource, contentType, matchCase, domains, |
thirdParty, sitekeys); |
this.collapse = collapse; |
this.csp = csp; |
} |
exports.BlockingFilter = BlockingFilter; |
-BlockingFilter.prototype = extend(RegExpFilter, { |
+BlockingFilter.prototype = { |
+ __proto__: RegExpFilter.prototype, |
+ |
type: "blocking", |
/** |
* Defines whether the filter should collapse blocked content. |
* Can be null (use the global preference). |
* @type {boolean} |
*/ |
collapse: null, |
/** |
* Content Security Policy to inject for matching requests. |
* @type {string} |
*/ |
csp: null |
-}); |
+}; |
/** |
* Class for whitelist filters |
* @param {string} text see Filter() |
* @param {string} regexpSource see RegExpFilter() |
* @param {number} contentType see RegExpFilter() |
* @param {boolean} matchCase see RegExpFilter() |
* @param {string} domains see RegExpFilter() |
@@ -940,19 +949,20 @@ |
function WhitelistFilter(text, regexpSource, contentType, matchCase, domains, |
thirdParty, sitekeys) |
{ |
RegExpFilter.call(this, text, regexpSource, contentType, matchCase, domains, |
thirdParty, sitekeys); |
} |
exports.WhitelistFilter = WhitelistFilter; |
-WhitelistFilter.prototype = extend(RegExpFilter, { |
+WhitelistFilter.prototype = { |
+ __proto__: RegExpFilter.prototype, |
type: "whitelist" |
-}); |
+}; |
/** |
* Base class for element hiding filters |
* @param {string} text see Filter() |
* @param {string} [domains] Host names or domains the filter should be |
* restricted to |
* @param {string} selector CSS selector for the HTML elements that should be |
* hidden |
@@ -969,17 +979,19 @@ |
.replace(/^~[^,]+,?/, "").toLowerCase(); |
} |
// Braces are being escaped to prevent CSS rule injection. |
this.selector = selector.replace("{", "\\7B ").replace("}", "\\7D "); |
} |
exports.ElemHideBase = ElemHideBase; |
-ElemHideBase.prototype = extend(ActiveFilter, { |
+ElemHideBase.prototype = { |
+ __proto__: ActiveFilter.prototype, |
+ |
/** |
* @see ActiveFilter.domainSeparator |
*/ |
domainSeparator: ",", |
/** |
* @see ActiveFilter.ignoreTrailingDot |
*/ |
@@ -991,17 +1003,17 @@ |
* @type {string} |
*/ |
selectorDomain: null, |
/** |
* CSS selector for the HTML elements that should be hidden |
* @type {string} |
*/ |
selector: null |
-}); |
+}; |
/** |
* Creates an element hiding filter from a pre-parsed text representation |
* |
* @param {string} text same as in Filter() |
* @param {string?} domain |
* domain part of the text representation |
* @param {string?} type |
@@ -1043,47 +1055,50 @@ |
* @augments ElemHideBase |
*/ |
function ElemHideFilter(text, domains, selector) |
{ |
ElemHideBase.call(this, text, domains, selector); |
} |
exports.ElemHideFilter = ElemHideFilter; |
-ElemHideFilter.prototype = extend(ElemHideBase, { |
+ElemHideFilter.prototype = { |
+ __proto__: ElemHideBase.prototype, |
type: "elemhide" |
-}); |
+}; |
/** |
* Class for element hiding exceptions |
* @param {string} text see Filter() |
* @param {string} domains see ElemHideBase() |
* @param {string} selector see ElemHideBase() |
* @constructor |
* @augments ElemHideBase |
*/ |
function ElemHideException(text, domains, selector) |
{ |
ElemHideBase.call(this, text, domains, selector); |
} |
exports.ElemHideException = ElemHideException; |
-ElemHideException.prototype = extend(ElemHideBase, { |
+ElemHideException.prototype = { |
+ __proto__: ElemHideBase.prototype, |
type: "elemhideexception" |
-}); |
+}; |
/** |
* Class for element hiding emulation filters |
* @param {string} text see Filter() |
* @param {string} domains see ElemHideBase() |
* @param {string} selector see ElemHideBase() |
* @constructor |
* @augments ElemHideBase |
*/ |
function ElemHideEmulationFilter(text, domains, selector) |
{ |
ElemHideBase.call(this, text, domains, selector); |
} |
exports.ElemHideEmulationFilter = ElemHideEmulationFilter; |
-ElemHideEmulationFilter.prototype = extend(ElemHideBase, { |
+ElemHideEmulationFilter.prototype = { |
+ __proto__: ElemHideBase.prototype, |
type: "elemhideemulation" |
-}); |
+}; |