mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-14 11:29:58 +00:00
Refactor extension menus module
This commit is contained in:
@@ -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
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user