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