re-nav/source/background-scripts/context-menus.ts

57 lines
1.4 KiB
TypeScript
Raw Normal View History

import browser from 'webextension-polyfill';
import {updateBadge} from '../utilities/badge.js';
type ContextMenu = browser.Menus.CreateCreatePropertiesType;
export function getContextMenus(): ContextMenu[] {
const actionContext =
import.meta.env.VITE_BROWSER === 'chromium' ? 'action' : 'browser_action';
const contextMenus: ContextMenu[] = [
{
id: 're-nav-toggle-redirects',
title: 'Toggle all redirects',
contexts: [actionContext],
},
];
return contextMenus;
}
export async function initializeContextMenus(): Promise<void> {
const contextMenus = getContextMenus();
await browser.contextMenus.removeAll();
for (const contextMenu of contextMenus) {
browser.contextMenus.create(contextMenu, contextCreated);
}
}
function contextCreated(): void {
const error = browser.runtime.lastError;
if (error !== null && error !== undefined) {
console.error('Re-Nav', error.message);
}
}
export async function contextClicked(
contextMenuIds: Set<string>,
info: browser.Menus.OnClickData,
tab?: browser.Tabs.Tab,
): Promise<void> {
const id = info.menuItemId.toString();
if (!contextMenuIds.has(id)) {
return;
}
if (id === 're-nav-toggle-redirects') {
const state = await browser.storage.local.get({redirectsEnabled: true});
const redirectsEnabled = !(state.redirectsEnabled as boolean);
await browser.storage.local.set({redirectsEnabled});
await updateBadge(redirectsEnabled);
}
}