diff options
| author | Akshay Nair <phenax5@gmail.com> | 2024-08-25 17:16:40 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2024-08-25 17:16:40 +0530 |
| commit | 86d3b43cbc880da156b81c9f5f30396d1f7de308 (patch) | |
| tree | b90b297297df998f776a820c87a4433b5fae17d9 /modules/firefox.home/chrome/extensionsManager.uc.js | |
| parent | 0d0e62aedf8bfd8393f5ad17e369a95ddc12137f (diff) | |
| download | nixos-config-86d3b43cbc880da156b81c9f5f30396d1f7de308.tar.gz nixos-config-86d3b43cbc880da156b81c9f5f30396d1f7de308.zip | |
firefox: Add broken extension manager uc
Diffstat (limited to '')
| -rw-r--r-- | modules/firefox.home/chrome/extensionsManager.uc.js | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/modules/firefox.home/chrome/extensionsManager.uc.js b/modules/firefox.home/chrome/extensionsManager.uc.js new file mode 100644 index 0000000..f5f3ed2 --- /dev/null +++ b/modules/firefox.home/chrome/extensionsManager.uc.js @@ -0,0 +1,73 @@ +// ==UserScript== +// @name Custom New Tab +// @version 1.0 +// @description Load a custom link or local file, instead of the default new tab page +// @startup UC.extensionsManager.init(win) +// @shutdown UC.extensionsManager.destroy(); +// ==/UserScript== + +(() => { + const ENABLE = false; + + // Managed in about:config + const EXTENSION_SETTINGS_PREF = 'extensions.uc.userExtensionSettings' + + const getSettings = () => { + try { + return JSON.parse(xPref.get(EXTENSION_SETTINGS_PREF) || 'null') ?? {}; + } catch (e) { + return {}; + } + } + + const saveSettings = (settings) => + xPref.set(EXTENSION_SETTINGS_PREF, JSON.stringify(settings)); + + const updateExtensionSetting = (id, update) => { + const settings = getSettings(); + settings.extensions[id] ??= {}; + settings.extensions[id] = update(settings.extensions[id] ?? {}) ?? {}; + saveSettings(settings); + } + + const getCurrentTabHost = () => gBrowser.selectedTab.linkedBrowser.currentURI.host.trim() || null; + + const module = { + disableForHost(id, host = getCurrentTabHost()) { + updateExtensionSetting(id, s => { + const urls = new Set(s.disabledHosts || []); + urls.add(host); + s.disabledHosts = [...urls]; + return s; + }); + }, + + async onTabChange() { + const currentHost = getCurrentTabHost(); + if (!currentHost) return; + + const settings = getSettings(); + const addons = await AddonManager.getAllAddons(); + addons.forEach(addon => { + const disabledHosts = settings?.extensions[addon.id].disabledHosts ?? []; + const shouldDisable = disabledHosts.includes(currentHost) + + if (addon.isActive && shouldDisable) + return addon.disable(); + if (!addon.isActive && !shouldDisable) + return addon.enable(); + }) + }, + + init(_win) { + if (!ENABLE) return; + + Services.obs.addObserver(module.onTabChange, 'TabSelect'); + }, + destroy() { + Services.obs.removeObserver(module.onTabChange, 'TabSelect'); + }, + }; + + UC.extensionsManager = module; +})(); |
