Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: lib/filterClasses.js

Issue 29803559: Issue 6741 - Use ES2015 classes in lib/filterClasses.js (Closed) Base URL: https://hg.adblockplus.org/adblockpluscore/
Patch Set: Created June 9, 2018, 12:51 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/filterClasses.js
===================================================================
--- a/lib/filterClasses.js
+++ b/lib/filterClasses.js
@@ -17,70 +17,67 @@
"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
*/
-function Filter(text)
-{
- this.text = text;
- this.subscriptions = [];
-}
-exports.Filter = Filter;
-
-Filter.prototype =
+class Filter
{
/**
- * String representation of the filter
- * @type {string}
+ * @param {string} text string representation of the filter
*/
- text: null,
+ constructor(text)
+ {
+ /**
Manish Jethani 2018/06/09 13:03:32 For instance properties that are always assigned i
+ * String representation of the filter
+ * @type {string}
+ */
+ this.text = text;
- /**
- * Filter subscriptions the filter belongs to
- * @type {Subscription[]}
- */
- subscriptions: null,
+ /**
+ * Filter subscriptions the filter belongs to
+ * @type {Subscription[]}
+ */
+ this.subscriptions = [];
+ }
/**
* Filter type as a string, e.g. "blocking".
* @type {string}
*/
get type()
{
throw new Error("Please define filter type in the subclass");
- },
+ }
/**
* Serializes the filter to an array of strings for writing out on the disk.
* @param {string[]} buffer buffer to push the serialization results into
*/
serialize(buffer)
{
buffer.push("[Filter]");
buffer.push("text=" + this.text);
- },
+ }
toString()
{
return this.text;
}
-};
+}
+
+exports.Filter = Filter;
/**
* Cache for known filters, maps string representation to filter objects.
* @type {Map.<string,Filter>}
*/
Filter.knownFilters = new Map();
/**
@@ -235,168 +232,152 @@
/**
* @see filterToRegExp
*/
Filter.toRegExp = filterToRegExp;
/**
* Class for invalid filters
- * @param {string} text see Filter()
- * @param {string} reason Reason why this filter is invalid
- * @constructor
- * @augments Filter
*/
-function InvalidFilter(text, reason)
+class InvalidFilter extends Filter
{
- Filter.call(this, text);
+ /**
+ * @param {string} text see Filter()
+ * @param {string} reason Reason why this filter is invalid
+ */
+ constructor(text, reason)
+ {
+ super(text);
- this.reason = reason;
-}
-exports.InvalidFilter = InvalidFilter;
+ /**
+ * Reason why this filter is invalid
+ * @type {string}
+ */
+ this.reason = reason;
+ }
-InvalidFilter.prototype = extend(Filter, {
- type: "invalid",
-
- /**
- * Reason why this filter is invalid
- * @type {string}
- */
- reason: null,
+ get type()
Manish Jethani 2018/06/09 13:03:32 This needs to be a getter now.
+ {
+ return "invalid";
+ }
/**
* See Filter.serialize()
* @inheritdoc
*/
serialize(buffer) {}
-});
+}
+
+exports.InvalidFilter = InvalidFilter;
/**
* Class for comments
- * @param {string} text see Filter()
- * @constructor
- * @augments Filter
*/
-function CommentFilter(text)
+class CommentFilter extends Filter
{
- Filter.call(this, text);
-}
-exports.CommentFilter = CommentFilter;
+ /**
+ * @param {string} text see Filter()
+ */
+ constructor(text)
+ {
+ super(text);
+ }
-CommentFilter.prototype = extend(Filter, {
- type: "comment",
+ get type()
+ {
+ return "comment";
+ }
/**
* See Filter.serialize()
* @inheritdoc
*/
serialize(buffer) {}
-});
+}
+
+exports.CommentFilter = CommentFilter;
/**
* 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"
- * @constructor
- * @augments Filter
*/
-function ActiveFilter(text, domains)
+class ActiveFilter extends Filter
{
- Filter.call(this, text);
+ /**
+ * @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"
+ */
+ constructor(text, domains)
+ {
+ super(text);
- if (domains)
- this.domainSource = domains;
-}
-exports.ActiveFilter = ActiveFilter;
-
-ActiveFilter.prototype = extend(Filter, {
- _disabled: false,
- _hitCount: 0,
- _lastHit: 0,
+ if (domains)
+ this.domainSource = domains;
+ }
/**
* Defines whether the filter is disabled
* @type {boolean}
*/
get disabled()
{
return this._disabled;
- },
+ }
set disabled(value)
{
if (value != this._disabled)
{
let oldValue = this._disabled;
this._disabled = value;
FilterNotifier.triggerListeners("filter.disabled", this, value, oldValue);
}
return this._disabled;
- },
+ }
/**
* Number of hits on the filter since the last reset
* @type {number}
*/
get hitCount()
{
return this._hitCount;
- },
+ }
set hitCount(value)
{
if (value != this._hitCount)
{
let oldValue = this._hitCount;
this._hitCount = value;
FilterNotifier.triggerListeners("filter.hitCount", this, value, oldValue);
}
return this._hitCount;
- },
+ }
/**
* Last time the filter had a hit (in milliseconds since the beginning of the
* epoch)
* @type {number}
*/
get lastHit()
{
return this._lastHit;
- },
+ }
set lastHit(value)
{
if (value != this._lastHit)
{
let oldValue = this._lastHit;
this._lastHit = value;
FilterNotifier.triggerListeners("filter.lastHit", this, value, oldValue);
}
return this._lastHit;
- },
-
- /**
- * String that the domains property should be generated from
- * @type {?string}
- */
- domainSource: null,
-
- /**
- * Separator character used in domainSource property, must be
- * overridden by subclasses
- * @type {string}
- */
- domainSeparator: null,
-
- /**
- * Determines whether domainSource is already upper-case,
- * can be overridden by subclasses.
- * @type {boolean}
- */
- domainSourceIsUpperCase: false,
+ }
/**
* Map containing domains that this filter should match on/not match
* on or null if the filter should match on all domains
* @type {?Map.<string,boolean>}
*/
get domains()
{
@@ -446,23 +427,17 @@
domains.set("", !hasIncludes);
}
this.domainSource = null;
}
Object.defineProperty(this, "domains", {value: domains, enumerable: true});
return this.domains;
- },
-
- /**
- * Array containing public keys of websites that this filter should apply to
- * @type {?string[]}
- */
- sitekeys: null,
+ }
/**
* Checks whether this filter is active on a domain.
* @param {string} [docDomain] domain name of the document that loads the URL
* @param {string} [sitekey] public key provided by the document
* @return {boolean} true in case of the filter being active
*/
isActiveOnDomain(docDomain, sitekey)
@@ -494,17 +469,17 @@
return isDomainIncluded;
let nextDot = docDomain.indexOf(".");
if (nextDot < 0)
break;
docDomain = docDomain.substr(nextDot + 1);
}
return this.domains.get("");
- },
+ }
/**
* Checks whether this filter is active only on a domain and its subdomains.
* @param {string} docDomain
* @return {boolean}
*/
isActiveOnlyOnDomain(docDomain)
{
@@ -521,27 +496,27 @@
return false;
if (!domain.endsWith("." + docDomain))
return false;
}
}
return true;
- },
+ }
/**
* Checks whether this filter is generic or specific
* @return {boolean}
*/
isGeneric()
{
return !(this.sitekeys && this.sitekeys.length) &&
(!this.domains || this.domains.get(""));
- },
+ }
/**
* See Filter.serialize()
* @inheritdoc
*/
serialize(buffer)
{
if (this._disabled || this._hitCount || this._lastHit)
@@ -550,150 +525,135 @@
if (this._disabled)
buffer.push("disabled=true");
if (this._hitCount)
buffer.push("hitCount=" + this._hitCount);
if (this._lastHit)
buffer.push("lastHit=" + this._lastHit);
}
}
+}
+
+exports.ActiveFilter = ActiveFilter;
+
+Object.assign(ActiveFilter.prototype, {
+ _disabled: false,
+ _hitCount: 0,
+ _lastHit: 0
});
/**
+ * String that the domains property should be generated from
+ * @type {?string}
+ */
+ActiveFilter.prototype.domainSource = null;
Manish Jethani 2018/06/09 13:03:32 Where the instance property is not always assigned
+
+/**
+ * Separator character used in domainSource property, must be
+ * overridden by subclasses
+ * @type {string}
+ */
+ActiveFilter.prototype.domainSeparator = null;
+
+/**
+ * Determines whether domainSource is already upper-case,
+ * can be overridden by subclasses.
+ * @type {boolean}
+ */
+ActiveFilter.prototype.domainSourceIsUpperCase = false;
+
+/**
+ * Array containing public keys of websites that this filter should apply to
+ * @type {?string[]}
+ */
+ActiveFilter.prototype.sitekeys = null;
+
+/**
* 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
- * RegExpFilter.typeMap
- * @param {boolean} [matchCase]
- * Defines whether the filter should distinguish between lower and upper case
- * letters
- * @param {string} [domains]
- * Domains that the filter is restricted to, e.g. "foo.com|bar.com|~baz.com"
- * @param {boolean} [thirdParty]
- * Defines whether the filter should apply to third-party or first-party
- * content only
- * @param {string} [sitekeys]
- * Public keys of websites that this filter should apply to
- * @constructor
- * @augments ActiveFilter
*/
-function RegExpFilter(text, regexpSource, contentType, matchCase, domains,
- thirdParty, sitekeys)
+class RegExpFilter extends ActiveFilter
{
- ActiveFilter.call(this, text, domains, sitekeys);
-
- if (contentType != null)
- this.contentType = contentType;
- if (matchCase)
- this.matchCase = matchCase;
- if (thirdParty != null)
- this.thirdParty = thirdParty;
- if (sitekeys != null)
- this.sitekeySource = sitekeys;
-
- if (regexpSource.length >= 2 &&
- regexpSource[0] == "/" &&
- regexpSource[regexpSource.length - 1] == "/")
+ /**
+ * @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
+ * RegExpFilter.typeMap
+ * @param {boolean} [matchCase]
+ * Defines whether the filter should distinguish between lower and upper
+ * case letters
+ * @param {string} [domains]
+ * Domains that the filter is restricted to, e.g. "foo.com|bar.com|~baz.com"
+ * @param {boolean} [thirdParty]
+ * Defines whether the filter should apply to third-party or first-party
+ * content only
+ * @param {string} [sitekeys]
+ * Public keys of websites that this filter should apply to
+ */
+ constructor(text, regexpSource, contentType, matchCase, domains, thirdParty,
+ sitekeys)
{
- // The filter is a regular expression - convert it immediately to
- // catch syntax errors
- let regexp = new RegExp(regexpSource.substr(1, regexpSource.length - 2),
- this.matchCase ? "" : "i");
- Object.defineProperty(this, "regexp", {value: regexp});
- }
- else
- {
- // No need to convert this filter to regular expression yet, do it on demand
- this.regexpSource = regexpSource;
- }
-}
-exports.RegExpFilter = RegExpFilter;
+ super(text, domains, sitekeys);
+
+ if (contentType != null)
+ this.contentType = contentType;
+ if (matchCase)
+ this.matchCase = matchCase;
+ if (thirdParty != null)
+ this.thirdParty = thirdParty;
+ if (sitekeys != null)
+ this.sitekeySource = sitekeys;
-RegExpFilter.prototype = extend(ActiveFilter, {
- /**
- * @see ActiveFilter.domainSourceIsUpperCase
- */
- domainSourceIsUpperCase: true,
+ if (regexpSource.length >= 2 &&
+ regexpSource[0] == "/" &&
+ regexpSource[regexpSource.length - 1] == "/")
+ {
+ // The filter is a regular expression - convert it immediately to
+ // catch syntax errors
+ let regexp = new RegExp(regexpSource.substr(1, regexpSource.length - 2),
+ this.matchCase ? "" : "i");
+ Object.defineProperty(this, "regexp", {value: regexp});
+ }
+ else
+ {
+ // No need to convert this filter to regular expression yet, do it on
+ // demand
+ this.regexpSource = regexpSource;
+ }
+ }
/**
- * Number of filters contained, will always be 1 (required to
- * optimize Matcher).
- * @type {number}
- */
- length: 1,
-
- /**
- * @see ActiveFilter.domainSeparator
- */
- domainSeparator: "|",
-
- /**
- * Expression from which a regular expression should be generated -
- * for delayed creation of the regexp property
- * @type {string}
- */
- regexpSource: null,
- /**
* Regular expression to be used when testing against this filter
* @type {RegExp}
*/
get regexp()
{
let source = Filter.toRegExp(this.regexpSource);
let regexp = new RegExp(source, this.matchCase ? "" : "i");
Object.defineProperty(this, "regexp", {value: regexp});
this.regexpSource = null;
return regexp;
- },
- /**
- * Content types the filter applies to, combination of values from
- * RegExpFilter.typeMap
- * @type {number}
- */
- contentType: 0x7FFFFFFF,
- /**
- * Defines whether the filter should distinguish between lower and
- * upper case letters
- * @type {boolean}
- */
- matchCase: false,
- /**
- * Defines whether the filter should apply to third-party or
- * first-party content only. Can be null (apply to all content).
- * @type {?boolean}
- */
- thirdParty: null,
+ }
- /**
- * String that the sitekey property should be generated from
- * @type {?string}
- */
- sitekeySource: null,
-
- /**
- * @see ActiveFilter.sitekeys
- */
get sitekeys()
{
let sitekeys = null;
if (this.sitekeySource)
{
sitekeys = this.sitekeySource.split("|");
this.sitekeySource = null;
}
Object.defineProperty(
this, "sitekeys", {value: sitekeys, enumerable: true}
);
return this.sitekeys;
- },
+ }
/**
* Tests whether the URL matches this filter
* @param {string} location URL to be tested
* @param {number} typeMask bitmask of content / request types to match
* @param {string} [docDomain] domain name of the document that loads the URL
* @param {boolean} [thirdParty] should be true if the URL is a third-party
* request
@@ -705,17 +665,70 @@
if (this.contentType & typeMask &&
(this.thirdParty == null || this.thirdParty == thirdParty) &&
this.isActiveOnDomain(docDomain, sitekey) && this.regexp.test(location))
{
return true;
}
return false;
}
-});
+}
+
+exports.RegExpFilter = RegExpFilter;
+
+/**
+ * @see ActiveFilter.domainSourceIsUpperCase
+ */
+RegExpFilter.prototype.domainSourceIsUpperCase = true;
+
+/**
+ * Number of filters contained, will always be 1 (required to
+ * optimize Matcher).
+ * @type {number}
+ */
+RegExpFilter.prototype.length = 1;
+
+/**
+ * @see ActiveFilter.domainSeparator
+ */
+RegExpFilter.prototype.domainSeparator = "|";
+
+/**
+ * Expression from which a regular expression should be generated -
+ * for delayed creation of the regexp property
+ * @type {string}
+ */
+RegExpFilter.prototype.regexpSource = null;
+
+/**
+ * Content types the filter applies to, combination of values from
+ * RegExpFilter.typeMap
+ * @type {number}
+ */
+RegExpFilter.prototype.contentType = 0x7FFFFFFF;
+
+/**
+ * Defines whether the filter should distinguish between lower and
+ * upper case letters
+ * @type {boolean}
+ */
+RegExpFilter.prototype.matchCase = false;
+
+/**
+ * Defines whether the filter should apply to third-party or
+ * first-party content only. Can be null (apply to all content).
+ * @type {?boolean}
+ */
+RegExpFilter.prototype.thirdParty = null;
+
+/**
+ * String that the sitekey property should be generated from
+ * @type {?string}
+ */
+RegExpFilter.prototype.sitekeySource = null;
// 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
@@ -859,72 +872,55 @@
RegExpFilter.typeMap.DOCUMENT |
RegExpFilter.typeMap.ELEMHIDE |
RegExpFilter.typeMap.POPUP |
RegExpFilter.typeMap.GENERICHIDE |
RegExpFilter.typeMap.GENERICBLOCK);
/**
* Class for blocking 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()
- * @param {boolean} [thirdParty] see RegExpFilter()
- * @param {string} [sitekeys] see RegExpFilter()
- * @param {boolean} [collapse]
- * defines whether the filter should collapse blocked content, can be null
- * @param {string} [csp]
- * Content Security Policy to inject when the filter matches
- * @param {?string} [rewrite]
- * The (optional) rule specifying how to rewrite the URL. See
- * BlockingFilter.prototype.rewrite.
- * @constructor
- * @augments RegExpFilter
*/
-function BlockingFilter(text, regexpSource, contentType, matchCase, domains,
- thirdParty, sitekeys, collapse, csp, rewrite)
+class BlockingFilter extends RegExpFilter
{
- RegExpFilter.call(this, text, regexpSource, contentType, matchCase, domains,
- thirdParty, sitekeys);
-
- if (collapse != null)
- this.collapse = collapse;
+ /**
+ * @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()
+ * @param {boolean} [thirdParty] see RegExpFilter()
+ * @param {string} [sitekeys] see RegExpFilter()
+ * @param {boolean} [collapse]
+ * defines whether the filter should collapse blocked content, can be null
+ * @param {string} [csp]
+ * Content Security Policy to inject when the filter matches
+ * @param {?string} [rewrite]
+ * The (optional) rule specifying how to rewrite the URL. See
+ * BlockingFilter.prototype.rewrite.
+ */
+ constructor(text, regexpSource, contentType, matchCase, domains, thirdParty,
+ sitekeys, collapse, csp, rewrite)
+ {
+ super(text, regexpSource, contentType, matchCase, domains, thirdParty,
+ sitekeys);
- if (csp != null)
- this.csp = csp;
+ if (collapse != null)
+ this.collapse = collapse;
- if (rewrite != null)
- this.rewrite = rewrite;
-}
-exports.BlockingFilter = BlockingFilter;
-
-BlockingFilter.prototype = extend(RegExpFilter, {
- type: "blocking",
+ if (csp != null)
+ this.csp = csp;
- /**
- * Defines whether the filter should collapse blocked content.
- * Can be null (use the global preference).
- * @type {?boolean}
- */
- collapse: null,
+ if (rewrite != null)
+ this.rewrite = rewrite;
+ }
- /**
- * Content Security Policy to inject for matching requests.
- * @type {?string}
- */
- csp: null,
-
- /**
- * The rule specifying how to rewrite the URL.
- * The syntax is similar to the one of String.prototype.replace().
- * @type {?string}
- */
- rewrite: null,
+ get type()
+ {
+ return "blocking";
+ }
/**
* Rewrites an URL.
* @param {string} url the URL to rewrite
* @return {string} the rewritten URL, or the original in case of failure
*/
rewriteUrl(url)
{
@@ -935,73 +931,100 @@
return rewrittenUrl.href;
}
catch (e)
{
}
return url;
}
-});
+}
+
+exports.BlockingFilter = BlockingFilter;
+
+/**
+ * Defines whether the filter should collapse blocked content.
+ * Can be null (use the global preference).
+ * @type {?boolean}
+ */
+BlockingFilter.prototype.collapse = null;
+
+/**
+ * Content Security Policy to inject for matching requests.
+ * @type {?string}
+ */
+BlockingFilter.prototype.csp = null;
+
+/**
+ * The rule specifying how to rewrite the URL.
+ * The syntax is similar to the one of String.prototype.replace().
+ * @type {?string}
+ */
+BlockingFilter.prototype.rewrite = 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()
- * @param {boolean} [thirdParty] see RegExpFilter()
- * @param {string} [sitekeys] see RegExpFilter()
- * @constructor
- * @augments RegExpFilter
*/
-function WhitelistFilter(text, regexpSource, contentType, matchCase, domains,
- thirdParty, sitekeys)
+class WhitelistFilter extends RegExpFilter
{
- RegExpFilter.call(this, text, regexpSource, contentType, matchCase, domains,
- thirdParty, sitekeys);
+ /**
+ * @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()
+ * @param {boolean} [thirdParty] see RegExpFilter()
+ * @param {string} [sitekeys] see RegExpFilter()
+ */
+ constructor(text, regexpSource, contentType, matchCase, domains, thirdParty,
+ sitekeys)
+ {
+ super(text, regexpSource, contentType, matchCase, domains, thirdParty,
+ sitekeys);
+ }
+
+ get type()
+ {
+ return "whitelist";
+ }
}
+
exports.WhitelistFilter = WhitelistFilter;
-WhitelistFilter.prototype = extend(RegExpFilter, {
- 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
- * @constructor
- * @augments ActiveFilter
*/
-function ElemHideBase(text, domains, selector)
+class ElemHideBase extends ActiveFilter
{
- ActiveFilter.call(this, text, domains || null);
+ /**
+ * @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
+ */
+ constructor(text, domains, selector)
+ {
+ super(text, domains || null);
- // Braces are being escaped to prevent CSS rule injection.
- this.selector = selector.replace("{", "\\7B ").replace("}", "\\7D ");
+ /**
+ * CSS selector for the HTML elements that should be hidden
+ * @type {string}
+ */
+ // Braces are being escaped to prevent CSS rule injection.
+ this.selector = selector.replace("{", "\\7B ").replace("}", "\\7D ");
+ }
}
+
exports.ElemHideBase = ElemHideBase;
-ElemHideBase.prototype = extend(ActiveFilter, {
- /**
- * @see ActiveFilter.domainSeparator
- */
- domainSeparator: ",",
-
- /**
- * CSS selector for the HTML elements that should be hidden
- * @type {string}
- */
- selector: null
-});
+/**
+ * @see ActiveFilter.domainSeparator
+ */
+ElemHideBase.prototype.domainSeparator = ",";
/**
* Creates an element hiding filter from a pre-parsed text representation
*
* @param {string} text same as in Filter()
* @param {string} [domains]
* domains part of the text representation
* @param {string} [type]
@@ -1031,59 +1054,74 @@
return new ElemHideEmulationFilter(text, domains, selector);
}
return new ElemHideFilter(text, domains, selector);
};
/**
* Class for element hiding filters
- * @param {string} text see Filter()
- * @param {string} [domains] see ElemHideBase()
- * @param {string} selector see ElemHideBase()
- * @constructor
- * @augments ElemHideBase
*/
-function ElemHideFilter(text, domains, selector)
+class ElemHideFilter extends ElemHideBase
{
- ElemHideBase.call(this, text, domains, selector);
-}
-exports.ElemHideFilter = ElemHideFilter;
+ /**
+ * @param {string} text see Filter()
+ * @param {string} [domains] see ElemHideBase()
+ * @param {string} selector see ElemHideBase()
+ */
+ constructor(text, domains, selector)
+ {
+ super(text, domains, selector);
+ }
-ElemHideFilter.prototype = extend(ElemHideBase, {
- type: "elemhide"
-});
+ get type()
+ {
+ return "elemhide";
+ }
+}
+
+exports.ElemHideFilter = ElemHideFilter;
/**
* 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)
+class ElemHideException extends ElemHideBase
{
- ElemHideBase.call(this, text, domains, selector);
-}
-exports.ElemHideException = ElemHideException;
+ /**
+ * @param {string} text see Filter()
+ * @param {string} [domains] see ElemHideBase()
+ * @param {string} selector see ElemHideBase()
+ */
+ constructor(text, domains, selector)
+ {
+ super(text, domains, selector);
+ }
-ElemHideException.prototype = extend(ElemHideBase, {
- type: "elemhideexception"
-});
+ get type()
+ {
+ return "elemhideexception";
+ }
+}
+
+exports.ElemHideException = 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)
+class ElemHideEmulationFilter extends ElemHideBase
{
- ElemHideBase.call(this, text, domains, selector);
-}
-exports.ElemHideEmulationFilter = ElemHideEmulationFilter;
+ /**
+ * @param {string} text see Filter()
+ * @param {string} domains see ElemHideBase()
+ * @param {string} selector see ElemHideBase()
+ */
+ constructor(text, domains, selector)
+ {
+ super(text, domains, selector);
+ }
-ElemHideEmulationFilter.prototype = extend(ElemHideBase, {
- type: "elemhideemulation"
-});
+ get type()
+ {
+ return "elemhideemulation";
+ }
+}
+
+exports.ElemHideEmulationFilter = ElemHideEmulationFilter;
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld