diff options
Diffstat (limited to 'data/extensions/html5-video-everywhere@lejenome.me/resources/html5-video-everywhere/lib/main.js')
-rw-r--r-- | data/extensions/html5-video-everywhere@lejenome.me/resources/html5-video-everywhere/lib/main.js | 48 |
1 files changed, 33 insertions, 15 deletions
diff --git a/data/extensions/html5-video-everywhere@lejenome.me/resources/html5-video-everywhere/lib/main.js b/data/extensions/html5-video-everywhere@lejenome.me/resources/html5-video-everywhere/lib/main.js index bcf9685..d416289 100644 --- a/data/extensions/html5-video-everywhere@lejenome.me/resources/html5-video-everywhere/lib/main.js +++ b/data/extensions/html5-video-everywhere@lejenome.me/resources/html5-video-everywhere/lib/main.js @@ -6,7 +6,7 @@ const { const { add, remove } = require("sdk/util/array"); -const data = require("sdk/self").data; +const _self = require("sdk/self"); const pageMod = require("sdk/page-mod"); const events = require("sdk/system/events"); const staticArgs = require("sdk/system").staticArgs; @@ -24,11 +24,17 @@ const allDrivers = { "metacafe": require("./metacafe"), "youtube": require("./youtube") }; -var disabledDrivers = prefs.disable.split(",").map(i => i.trim()); const drivers = (Array.isArray(staticArgs.drivers) ? staticArgs.drivers : - Object.keys(allDrivers)).filter(i => - disabledDrivers.indexOf(i) === -1 + Object.keys(allDrivers)).filter(drvName => + prefs["disable" + drvName] === false +); + +//ensure preferences match the state of disabled drivers +Object.keys(allDrivers).filter(drvName => + drivers.indexOf(drvName) === -1 +).forEach(drvName => + prefs["disable" + drvName] = true ); @@ -40,16 +46,16 @@ const onWorkerAttach = (drvName, listen) => (worker) => { _prefs[pref] = prefs[pref]; _prefs.driver = drvName; _prefs.production = staticArgs.production; + _prefs.addon = { + id: _self.id, + version: _self.version + }; worker.port.emit("preferences", _prefs); add(workers, worker); worker.port.on("prefChang", (pref) => prefs[pref.name] = pref.val); - worker.port.on("disable", () => { - disabledDrivers.push(drvName); - prefs.disable = disabledDrivers.join(","); - remove(drivers, drvName); - pageMods[drvName].destroy(); - }); + worker.port.on("disable", () => + prefs["disable" + drvName] = true); for (let evt in listen) { logify("Add listener:", evt); worker.port.on(evt, (obj) => { @@ -61,15 +67,18 @@ const onWorkerAttach = (drvName, listen) => (worker) => { }); }; -for (let drvName of drivers) { + +drivers.forEach(setupDriver); + +function setupDriver(drvName) { var driver = allDrivers[drvName]; if (driver.match === void(0)) - continue; + return; var scripts, styles; scripts = common.inject.concat(driver.inject) - .map(i => data.url(i)); + .map(i => _self.data.url(i)); styles = common.style.concat(driver.style || []) - .map(i => data.url(i)); + .map(i => _self.data.url(i)); pageMods[drvName] = pageMod.PageMod({ include: driver.match, contentScriptFile: scripts, @@ -110,7 +119,16 @@ require("sdk/simple-prefs").on("", function prefChangeHandler(pref) { prefs.volume = 100; else if (pref === "volume" && prefs.volume < 0) prefs.volume = 0; - else + else if (pref.startsWith("disable")) { + let drvName = /^disable(.+)/.exec(pref)[1]; + if (prefs[pref] === false) { + add(drivers, drvName); + setupDriver(drvName); + } else { + remove(drivers, drvName); + pageMods[drvName].destroy(); + } + } else workersPrefHandler(pref); }); |