Refactor extension menus module

This commit is contained in:
hensm
2021-04-24 08:05:07 +01:00
parent 378ed90b21
commit e182b45523

View File

@@ -15,27 +15,27 @@ import ReceiverSelectorManager
const _ = browser.i18n.getMessage; const _ = browser.i18n.getMessage;
const URL_PATTERN_HTTP = "http://*/*";
const URL_PATTERN_HTTPS = "https://*/*";
const URL_PATTERN_FILE = "file://*/*";
const URL_PATTERNS_REMOTE = [ URL_PATTERN_HTTP, URL_PATTERN_HTTPS ];
const URL_PATTERNS_ALL = [ ...URL_PATTERNS_REMOTE, URL_PATTERN_FILE ];
type MenuId = string | number;
let menuIdCast: MenuId;
let menuIdMediaCast: MenuId;
let menuIdWhitelist: MenuId;
let menuIdWhitelistRecommended: MenuId;
const whitelistChildMenuPatterns = new Map<MenuId, string>();
export async function initMenus () { export async function initMenus () {
logger.info("init (menus)"); logger.info("init (menus)");
const URL_PATTERN_HTTP = "http://*/*";
const URL_PATTERN_HTTPS = "https://*/*";
const URL_PATTERN_FILE = "file://*/*";
const URL_PATTERNS_REMOTE = [ URL_PATTERN_HTTP, URL_PATTERN_HTTPS ];
const URL_PATTERNS_ALL = [ ...URL_PATTERNS_REMOTE, URL_PATTERN_FILE ];
type MenuId = string | number;
let menuIdCast: MenuId;
let menuIdMediaCast: MenuId;
let menuIdWhitelist: MenuId;
let menuIdWhitelistRecommended: MenuId;
const whitelistChildMenuPatterns = new Map<MenuId, string>();
const opts = await options.getAll(); const opts = await options.getAll();
// Global "Cast..." menu item // Global "Cast..." menu item
@@ -70,9 +70,10 @@ export async function initMenus () {
type: "separator" type: "separator"
, parentId: menuIdWhitelist , parentId: menuIdWhitelist
}); });
}
browser.menus.onClicked.addListener(async (info, tab) => { browser.menus.onClicked.addListener(async (info, tab) => {
if (info.parentMenuItemId === menuIdWhitelist) { if (info.parentMenuItemId === menuIdWhitelist) {
const pattern = whitelistChildMenuPatterns.get(info.menuItemId); const pattern = whitelistChildMenuPatterns.get(info.menuItemId);
if (!pattern) { if (!pattern) {
@@ -168,10 +169,10 @@ export async function initMenus () {
break; break;
} }
} }
}); });
// Hide cast item on extension pages // Hide cast item on extension pages
browser.menus.onShown.addListener(info => { browser.menus.onShown.addListener(info => {
if (info.pageUrl?.startsWith(browser.runtime.getURL(""))) { if (info.pageUrl?.startsWith(browser.runtime.getURL(""))) {
browser.menus.update(menuIdCast, { browser.menus.update(menuIdCast, {
visible: false visible: false
@@ -179,14 +180,14 @@ export async function initMenus () {
browser.menus.refresh(); browser.menus.refresh();
} }
}); });
browser.menus.onHidden.addListener(() => { browser.menus.onHidden.addListener(() => {
browser.menus.update(menuIdCast, { browser.menus.update(menuIdCast, {
visible: true visible: true
}); });
}); });
browser.menus.onShown.addListener(async info => { browser.menus.onShown.addListener(async info => {
// Only rebuild menus if whitelist menu present // Only rebuild menus if whitelist menu present
// WebExt typings are broken again here, so ugly casting // WebExt typings are broken again here, so ugly casting
const menuIds = info.menuIds as unknown as number[]; const menuIds = info.menuIds as unknown as number[];
@@ -343,10 +344,10 @@ export async function initMenus () {
await browser.menus.refresh(); await browser.menus.refresh();
}); });
options.addEventListener("changed", async ev => { options.addEventListener("changed", async ev => {
const alteredOpts = ev.detail; const alteredOpts = ev.detail;
const newOpts = await options.getAll(); const newOpts = await options.getAll();
@@ -363,5 +364,4 @@ export async function initMenus () {
: URL_PATTERNS_REMOTE : URL_PATTERNS_REMOTE
}); });
} }
}); });
}