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 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 () {
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();
// Global "Cast..." menu item
@@ -70,9 +70,10 @@ export async function initMenus () {
type: "separator"
, parentId: menuIdWhitelist
});
}
browser.menus.onClicked.addListener(async (info, tab) => {
browser.menus.onClicked.addListener(async (info, tab) => {
if (info.parentMenuItemId === menuIdWhitelist) {
const pattern = whitelistChildMenuPatterns.get(info.menuItemId);
if (!pattern) {
@@ -168,10 +169,10 @@ export async function initMenus () {
break;
}
}
});
});
// Hide cast item on extension pages
browser.menus.onShown.addListener(info => {
// Hide cast item on extension pages
browser.menus.onShown.addListener(info => {
if (info.pageUrl?.startsWith(browser.runtime.getURL(""))) {
browser.menus.update(menuIdCast, {
visible: false
@@ -179,14 +180,14 @@ export async function initMenus () {
browser.menus.refresh();
}
});
browser.menus.onHidden.addListener(() => {
});
browser.menus.onHidden.addListener(() => {
browser.menus.update(menuIdCast, {
visible: true
});
});
});
browser.menus.onShown.addListener(async info => {
browser.menus.onShown.addListener(async info => {
// Only rebuild menus if whitelist menu present
// WebExt typings are broken again here, so ugly casting
const menuIds = info.menuIds as unknown as number[];
@@ -343,10 +344,10 @@ export async function initMenus () {
await browser.menus.refresh();
});
});
options.addEventListener("changed", async ev => {
options.addEventListener("changed", async ev => {
const alteredOpts = ev.detail;
const newOpts = await options.getAll();
@@ -363,5 +364,4 @@ export async function initMenus () {
: URL_PATTERNS_REMOTE
});
}
});
}
});