From 05da8c52e2a9ae62b0208cc497111e36ca91fc53 Mon Sep 17 00:00:00 2001 From: Evan Niessen-Derry Date: Wed, 29 Jun 2016 22:14:25 -0500 Subject: [PATCH 1/2] Fixed Array comprehensions in noscript.js The array comprehension syntax changed in FF 46. Where before you would do, `[X for (Y in Z)]` now you do `[for (Y of Z) Y]`. I've also changed the destructuring assignment on line 314, as they aren't supported, and stop the variables from being bound. See [here] for more information on that. Now we bind to a single variable, and pull out the first and second items as needed. [here] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Array_comprehensions#SpiderMonkey-specific_implementation_notes --- plugins/noscript.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/plugins/noscript.js b/plugins/noscript.js index eae208de..eab95e97 100755 --- a/plugins/noscript.js +++ b/plugins/noscript.js @@ -243,7 +243,7 @@ prefs.complete = group => context => { context.keys = { text: "text", description: "description" }; context.completions = values(prefs[group]); }; -prefs.get = function (group) { return [p.text for (p of values(this[group])) if (getPref(p.pref))]; }; +prefs.get = function (group) { return [for (p of values(this[group])) if (getPref(p.pref)) p.text]; }; prefs.set = function (group, val) { for (let p of values(this[group])) setPref(p.pref, val.indexOf(p.text) >= 0); @@ -292,27 +292,27 @@ group.options.add(["script"], has: (val) => hasOwnProperty(services.noscript.jsPolicySites.sitesMap, val) && !hasOwnProperty(services.noscript.tempSites.sitesMap, val), get set() { - return new RealSet(k for (k in services.noscript.jsPolicySites.sitesMap)) - .difference(new RealSet(k for (k in services.noscript.tempSites.sitesMap))) + return new RealSet((for (k of services.noscript.jsPolicySites.sitesMap) k)) + .difference(new RealSet((for (k of services.noscript.tempSites.sitesMap) k))) } }, { names: ["noscript-tempsites", "nst"], description: "The list of sites temporarily allowed to execute scripts", action: (add, sites) => sites.length && noscriptOverlay.safeAllow(sites, add, true, -1), completer: (context) => completion.noscriptSites(context), - get set() { return new RealSet(k for (k in services.noscript.tempSites.sitesMap)) }, + get set() { return new RealSet((for (k of iter(services.noscript.tempSites.sitesMap)) k)) }, }, { names: ["noscript-untrusted", "nsu"], description: "The list of untrusted sites", action: (add, sites) => sites.length && services.noscript.setUntrusted(sites, add), completer: (context) => completion.noscriptSites(context), - get set() { return new RealSet(k for (k in services.noscript.untrustedSites.sitesMap)) }, + get set() { return new RealSet((for (k of iter(services.noscript.untrustedSites.sitesMap)) k)) }, }, { names: ["noscript-objects", "nso"], description: "The list of allowed objects", get set() { return new RealSet(array.flatten( - [Array.concat(v).map(function (v) { return v + "@" + this; }, k) - for ([k, v] of iter(services.noscript.objectWhitelist))])) }, + [for (wListObj of iter(services.noscript.objectWhitelist)) + Array.concat(wListObj[1]).map(function (v) { return v + "@" + this; }, wListObj[0])])) }, action: function (add, patterns) { for (let pattern of values(patterns)) { let [mime, site] = util.split(pattern, /@/, 2); From 3cc3914a5c157cc2c710b3fbb3a9539961fd6e6a Mon Sep 17 00:00:00 2001 From: Evan Niessen-Derry Date: Wed, 29 Jun 2016 22:18:04 -0500 Subject: [PATCH 2/2] Fixed the completion display issues Fat-arrow function syntax has a lexical `this`, which causes `this.groups` to be undefined, throwing an error upon sourcing. I believe this is because it's pulling the `this` variable from the object syntax constructor immediately surrounding it, instead of from the completion.noscriptSites function, but I'm not positive. --- plugins/noscript.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/noscript.js b/plugins/noscript.js index eab95e97..0a475ec6 100755 --- a/plugins/noscript.js +++ b/plugins/noscript.js @@ -188,8 +188,10 @@ completion.noscriptSites = function (context) { context.generate = getSites; context.keys = { text: util.identity, - description: site => groupDesc[this.highlight] + - (this.groups.untrusted && this.highlight != "NoScriptUntrusted" ? " (untrusted)" : ""), + description: function (site) { + return groupDesc[this.highlight] + + (this.groups.untrusted && this.highlight != "NoScriptUntrusted" ? " (untrusted)" : "") + }, highlight: function (site) { return this.groups.temp ? "NoScriptTemp" :