Index: lib/filterClasses.js |
=================================================================== |
--- a/lib/filterClasses.js |
+++ b/lib/filterClasses.js |
@@ -131,17 +131,17 @@ |
return Filter.fromText(`${match[1]}#?#` + |
`${prefix}:-abp-properties(${expression})${suffix}`); |
} |
filter = ElemHideBase.fromText( |
text, match[1], match[2], match[3] |
); |
} |
- else if (text[0] == "!") |
+ else if (text[0] === "!") |
filter = new CommentFilter(text); |
else |
filter = RegExpFilter.fromText(text); |
Filter.knownFilters.set(filter.text, filter); |
return filter; |
}; |
@@ -152,17 +152,17 @@ |
* @return {Filter} filter or null if the filter couldn't be created |
*/ |
Filter.fromObject = function(obj) |
{ |
let filter = Filter.fromText(obj.text); |
if (filter instanceof ActiveFilter) |
{ |
if ("disabled" in obj) |
- filter._disabled = (obj.disabled == "true"); |
+ filter._disabled = (obj.disabled === "true"); |
if ("hitCount" in obj) |
filter._hitCount = parseInt(obj.hitCount, 10) || 0; |
if ("lastHit" in obj) |
filter._lastHit = parseInt(obj.lastHit, 10) || 0; |
} |
return filter; |
}; |
@@ -207,17 +207,17 @@ |
let beforeOptions = strippedText.substring(0, optionsMatch.index); |
let strippedDollarIndex = -1; |
let dollarIndex = -1; |
do |
{ |
strippedDollarIndex = beforeOptions.indexOf("$", strippedDollarIndex + 1); |
dollarIndex = text.indexOf("$", dollarIndex + 1); |
} |
- while (strippedDollarIndex != -1); |
+ while (strippedDollarIndex !== -1); |
let optionsText = text.substr(dollarIndex + 1); |
// Then we can normalize spaces in the options part safely |
let options = optionsText.split(","); |
for (let i = 0; i < options.length; i++) |
{ |
let option = options[i]; |
let cspMatch = /^ *c *s *p *=/i.exec(option); |
@@ -320,17 +320,17 @@ |
* @type {boolean} |
*/ |
get disabled() |
{ |
return this._disabled; |
}, |
set disabled(value) |
{ |
- if (value != this._disabled) |
+ if (value !== this._disabled) |
{ |
let oldValue = this._disabled; |
this._disabled = value; |
FilterNotifier.triggerListeners("filter.disabled", this, value, oldValue); |
} |
return this._disabled; |
}, |
@@ -339,17 +339,17 @@ |
* @type {number} |
*/ |
get hitCount() |
{ |
return this._hitCount; |
}, |
set hitCount(value) |
{ |
- if (value != this._hitCount) |
+ if (value !== this._hitCount) |
{ |
let oldValue = this._hitCount; |
this._hitCount = value; |
FilterNotifier.triggerListeners("filter.hitCount", this, value, oldValue); |
} |
return this._hitCount; |
}, |
@@ -359,17 +359,17 @@ |
* @type {number} |
*/ |
get lastHit() |
{ |
return this._lastHit; |
}, |
set lastHit(value) |
{ |
- if (value != this._lastHit) |
+ if (value !== this._lastHit) |
{ |
let oldValue = this._lastHit; |
this._lastHit = value; |
FilterNotifier.triggerListeners("filter.lastHit", this, value, oldValue); |
} |
return this._lastHit; |
}, |
@@ -406,32 +406,32 @@ |
{ |
let source = this.domainSource; |
if (!this.domainSourceIsUpperCase) |
{ |
// RegExpFilter already have uppercase domains |
source = source.toUpperCase(); |
} |
let list = source.split(this.domainSeparator); |
- if (list.length == 1 && list[0][0] != "~") |
+ if (list.length === 1 && list[0][0] !== "~") |
{ |
// Fast track for the common one-domain scenario |
domains = new Map([["", false], [list[0], true]]); |
} |
else |
{ |
let hasIncludes = false; |
for (let i = 0; i < list.length; i++) |
{ |
let domain = list[i]; |
- if (domain == "") |
+ if (domain === "") |
continue; |
let include; |
- if (domain[0] == "~") |
+ if (domain[0] === "~") |
{ |
include = false; |
domain = domain.substr(1); |
} |
else |
{ |
include = true; |
hasIncludes = true; |
@@ -485,17 +485,17 @@ |
if (!docDomain) |
return this.domains.get(""); |
docDomain = docDomain.replace(/\.+$/, "").toUpperCase(); |
while (true) |
{ |
let isDomainIncluded = this.domains.get(docDomain); |
- if (typeof isDomainIncluded != "undefined") |
+ if (typeof isDomainIncluded !== "undefined") |
return isDomainIncluded; |
let nextDot = docDomain.indexOf("."); |
if (nextDot < 0) |
break; |
docDomain = docDomain.substr(nextDot + 1); |
} |
return this.domains.get(""); |
@@ -510,17 +510,17 @@ |
{ |
if (!docDomain || !this.domains || this.domains.get("")) |
return false; |
docDomain = docDomain.replace(/\.+$/, "").toUpperCase(); |
for (let [domain, isIncluded] of this.domains) |
{ |
- if (isIncluded && domain != docDomain) |
+ if (isIncluded && domain !== docDomain) |
{ |
if (domain.length <= docDomain.length) |
return false; |
if (!domain.endsWith("." + docDomain)) |
return false; |
} |
} |
@@ -578,28 +578,28 @@ |
* @constructor |
* @augments ActiveFilter |
*/ |
function RegExpFilter(text, regexpSource, contentType, matchCase, domains, |
thirdParty, sitekeys) |
{ |
ActiveFilter.call(this, text, domains, sitekeys); |
- if (contentType != null) |
+ if (contentType !== null) |
this.contentType = contentType; |
if (matchCase) |
this.matchCase = matchCase; |
- if (thirdParty != null) |
+ if (thirdParty !== null) |
this.thirdParty = thirdParty; |
- if (sitekeys != null) |
+ if (sitekeys !== null) |
this.sitekeySource = sitekeys; |
if (regexpSource.length >= 2 && |
- regexpSource[0] == "/" && |
- regexpSource[regexpSource.length - 1] == "/") |
+ 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 |
@@ -698,17 +698,17 @@ |
* @param {boolean} [thirdParty] should be true if the URL is a third-party |
* request |
* @param {string} [sitekey] public key provided by the document |
* @return {boolean} true in case of a match |
*/ |
matches(location, typeMask, docDomain, thirdParty, sitekey) |
{ |
if (this.contentType & typeMask && |
- (this.thirdParty == null || this.thirdParty == thirdParty) && |
+ (this.thirdParty === null || this.thirdParty === thirdParty) && |
this.isActiveOnDomain(docDomain, sitekey) && this.regexp.test(location)) |
{ |
return true; |
} |
return false; |
} |
}); |
@@ -721,17 +721,17 @@ |
* Creates a RegExp filter from its text representation |
* @param {string} text same as in Filter() |
* @return {Filter} |
*/ |
RegExpFilter.fromText = function(text) |
{ |
let blocking = true; |
let origText = text; |
- if (text[0] == "@" && text[1] == "@") |
+ if (text[0] === "@" && text[1] === "@") |
{ |
blocking = false; |
text = text.substr(2); |
} |
let contentType = null; |
let matchCase = null; |
let domains = null; |
@@ -755,53 +755,53 @@ |
value = option.substr(separatorIndex + 1); |
option = option.substr(0, separatorIndex); |
} |
option = option.replace(/-/, "_").toUpperCase(); |
if (option in RegExpFilter.typeMap) |
{ |
contentType |= RegExpFilter.typeMap[option]; |
- if (option == "CSP" && value) |
+ if (option === "CSP" && value) |
csp = value; |
} |
- else if (option[0] == "~" && option.substr(1) in RegExpFilter.typeMap) |
+ else if (option[0] === "~" && option.substr(1) in RegExpFilter.typeMap) |
{ |
- if (contentType == null) |
+ if (contentType === null) |
({contentType} = RegExpFilter.prototype); |
contentType &= ~RegExpFilter.typeMap[option.substr(1)]; |
} |
- else if (option == "MATCH_CASE") |
+ else if (option === "MATCH_CASE") |
matchCase = true; |
- else if (option == "~MATCH_CASE") |
+ else if (option === "~MATCH_CASE") |
matchCase = false; |
- else if (option == "DOMAIN" && value) |
+ else if (option === "DOMAIN" && value) |
domains = value.toUpperCase(); |
- else if (option == "THIRD_PARTY") |
+ else if (option === "THIRD_PARTY") |
thirdParty = true; |
- else if (option == "~THIRD_PARTY") |
+ else if (option === "~THIRD_PARTY") |
thirdParty = false; |
- else if (option == "COLLAPSE") |
+ else if (option === "COLLAPSE") |
collapse = true; |
- else if (option == "~COLLAPSE") |
+ else if (option === "~COLLAPSE") |
collapse = false; |
- else if (option == "SITEKEY" && value) |
+ else if (option === "SITEKEY" && value) |
sitekeys = value.toUpperCase(); |
- else if (option == "REWRITE" && value) |
+ else if (option === "REWRITE" && value) |
rewrite = value; |
else |
return new InvalidFilter(origText, "filter_unknown_option"); |
} |
} |
// For security reasons, never match $rewrite filters |
// against requests that might load any code to be executed. |
- if (rewrite != null) |
+ if (rewrite !== null) |
{ |
- if (contentType == null) |
+ if (contentType === null) |
({contentType} = RegExpFilter.prototype); |
contentType &= ~(RegExpFilter.typeMap.SCRIPT | |
RegExpFilter.typeMap.SUBDOCUMENT | |
RegExpFilter.typeMap.OBJECT | |
RegExpFilter.typeMap.OBJECT_SUBREQUEST); |
} |
try |
@@ -882,23 +882,23 @@ |
* @augments RegExpFilter |
*/ |
function BlockingFilter(text, regexpSource, contentType, matchCase, domains, |
thirdParty, sitekeys, collapse, csp, rewrite) |
{ |
RegExpFilter.call(this, text, regexpSource, contentType, matchCase, domains, |
thirdParty, sitekeys); |
- if (collapse != null) |
+ if (collapse !== null) |
this.collapse = collapse; |
- if (csp != null) |
+ if (csp !== null) |
this.csp = csp; |
- if (rewrite != null) |
+ if (rewrite !== null) |
this.rewrite = rewrite; |
} |
exports.BlockingFilter = BlockingFilter; |
BlockingFilter.prototype = extend(RegExpFilter, { |
type: "blocking", |
/** |
@@ -926,17 +926,17 @@ |
* @param {string} url the URL to rewrite |
* @return {string} the rewritten URL, or the original in case of failure |
*/ |
rewriteUrl(url) |
{ |
try |
{ |
let rewrittenUrl = new URL(url.replace(this.regexp, this.rewrite), url); |
- if (rewrittenUrl.origin == new URL(url).origin) |
+ if (rewrittenUrl.origin === new URL(url).origin) |
return rewrittenUrl.href; |
} |
catch (e) |
{ |
} |
return url; |
} |
@@ -1013,20 +1013,20 @@ |
ElemHideBase.fromText = function(text, domains, type, selector) |
{ |
// We don't allow ElemHide filters which have any empty domains. |
// Note: The ElemHide.prototype.domainSeparator is duplicated here, if that |
// changes this must be changed too. |
if (domains && /(^|,)~?(,|$)/.test(domains)) |
return new InvalidFilter(text, "filter_invalid_domain"); |
- if (type == "@") |
+ if (type === "@") |
return new ElemHideException(text, domains, selector); |
- if (type == "?") |
+ if (type === "?") |
{ |
// Element hiding emulation filters are inefficient so we need to make sure |
// that they're only applied if they specify active domains |
if (!/,[^~][^,.]*\.[^,]/.test("," + domains)) |
return new InvalidFilter(text, "filter_elemhideemulation_nodomain"); |
return new ElemHideEmulationFilter(text, domains, selector); |
} |