Index: lib/elemHide.js |
=================================================================== |
--- a/lib/elemHide.js |
+++ b/lib/elemHide.js |
@@ -25,25 +25,25 @@ let {Utils} = require("utils"); |
let {IO} = require("io"); |
let {Prefs} = require("prefs"); |
let {ElemHideException} = require("filterClasses"); |
let {FilterNotifier} = require("filterNotifier"); |
let {AboutHandler} = require("elemHideHitRegistration"); |
/** |
* Lookup table, filters by their associated key |
- * @type Object |
+ * @type Map |
*/ |
-let filterByKey = Object.create(null); |
+let filterByKey = new Map(); |
/** |
- * Lookup table, keys of the filters by filter text |
- * @type Object |
+ * Lookup table, keys of the filters by filter |
+ * @type WeakMap |
*/ |
-let keyByFilter = Object.create(null); |
+let keyByFilter = new Map(); |
/** |
* Lookup table, keys are known element hiding exceptions |
* @type Object |
*/ |
let knownExceptions = Object.create(null); |
/** |
@@ -96,18 +96,18 @@ let ElemHide = exports.ElemHide = |
styleURL = Services.io.newFileURI(styleFile).QueryInterface(Ci.nsIFileURL); |
}, |
/** |
* Removes all known filters |
*/ |
clear: function() |
{ |
- filterByKey = Object.create(null); |
- keyByFilter = Object.create(null); |
+ filterByKey = new Map(); |
+ keyByFilter = new Map(); |
knownExceptions = Object.create(null); |
exceptions = Object.create(null); |
ElemHide.isDirty = false; |
ElemHide.unapply(); |
}, |
/** |
* Add a new element hiding filter |
@@ -123,26 +123,26 @@ let ElemHide = exports.ElemHide = |
let selector = filter.selector; |
if (!(selector in exceptions)) |
exceptions[selector] = []; |
exceptions[selector].push(filter); |
knownExceptions[filter.text] = true; |
} |
else |
{ |
- if (filter.text in keyByFilter) |
+ if (keyByFilter.has(filter.text)) |
return; |
let key; |
do { |
key = Math.random().toFixed(15).substr(5); |
- } while (key in filterByKey); |
+ } while (filterByKey.has(key)); |
- filterByKey[key] = filter; |
- keyByFilter[filter.text] = key; |
+ filterByKey.set(key, filter); |
+ keyByFilter.set(filter.text, key); |
ElemHide.isDirty = true; |
} |
}, |
/** |
* Removes an element hiding filter |
* @param {ElemHideFilter} filter |
*/ |
@@ -156,22 +156,22 @@ let ElemHide = exports.ElemHide = |
let list = exceptions[filter.selector]; |
let index = list.indexOf(filter); |
if (index >= 0) |
list.splice(index, 1); |
delete knownExceptions[filter.text]; |
} |
else |
{ |
- if (!(filter.text in keyByFilter)) |
+ if (!keyByFilter.has(filter.text)) |
return; |
- let key = keyByFilter[filter.text]; |
- delete filterByKey[key]; |
- delete keyByFilter[filter.text]; |
+ let key = keyByFilter.get(filter.text); |
+ filterByKey.delete(key); |
+ keyByFilter.delete(filter.text); |
ElemHide.isDirty = true; |
} |
}, |
/** |
* Checks whether an exception rule is registered for a filter on a particular |
* domain. |
*/ |
@@ -282,19 +282,18 @@ let ElemHide = exports.ElemHide = |
this._applying = true; |
}, |
_generateCSSContent: function*() |
{ |
// Grouping selectors by domains |
let domains = Object.create(null); |
let hasFilters = false; |
- for (let key in filterByKey) |
+ for (let [key, filter] of filterByKey.entries()) |
{ |
- let filter = filterByKey[key]; |
let domain = filter.selectorDomain || ""; |
let list; |
if (domain in domains) |
list = domains[domain]; |
else |
{ |
list = Object.create(null); |
@@ -363,30 +362,28 @@ let ElemHide = exports.ElemHide = |
return ElemHide.applied ? styleURL.spec : null; |
}, |
/** |
* Retrieves an element hiding filter by the corresponding protocol key |
*/ |
getFilterByKey: function(/**String*/ key) /**Filter*/ |
{ |
- return (key in filterByKey ? filterByKey[key] : null); |
+ return (filterByKey.has(key) ? filterByKey.get(key) : null); |
}, |
/** |
* Returns a list of all selectors active on a particular domain (currently |
* used only in Chrome, Opera and Safari). |
*/ |
getSelectorsForDomain: function(/**String*/ domain, /**Boolean*/ specificOnly) |
{ |
let result = []; |
- let keys = Object.getOwnPropertyNames(filterByKey); |
- for (let key of keys) |
+ for (let filter of filterByKey.values()) |
{ |
- let filter = filterByKey[key]; |
if (specificOnly && (!filter.domains || filter.domains[""])) |
continue; |
if (filter.isActiveOnDomain(domain) && !this.getException(filter, domain)) |
result.push(filter.selector); |
} |
return result; |
} |