/* Called when the item has been created, or when creation failed due to an error. We'll just log success/failure here. */ function onCreated() { if (browser.runtime.lastError) { console.log(`Error: ${browser.runtime.lastError}`); } else { console.log("Item created successfully"); } } /* Called when the item has been removed. We'll just log success here. */ function onRemoved() { console.log("Item removed successfully"); } /* Called when there was an error. We'll just log the error here. */ function onError(error) { console.log(`Error: ${error}`); } /* Create all the context menu items. */ browser.menus.create({ id: "log-selection", title: browser.i18n.getMessage("menuItemSelectionLogger"), contexts: ["selection"] }, onCreated); browser.menus.create({ id: "remove-me", title: browser.i18n.getMessage("menuItemRemoveMe"), contexts: ["all"] }, onCreated); browser.menus.create({ id: "separator-1", type: "separator", contexts: ["all"] }, onCreated); browser.menus.create({ id: "greenify", type: "radio", title: browser.i18n.getMessage("menuItemGreenify"), contexts: ["all"], checked: true, icons: { "16": "icons/paint-green-16.png", "32": "icons/paint-green-32.png" } }, onCreated); browser.menus.create({ id: "bluify", type: "radio", title: browser.i18n.getMessage("menuItemBluify"), contexts: ["all"], checked: false, icons: { "16": "icons/paint-blue-16.png", "32": "icons/paint-blue-32.png" } }, onCreated); browser.menus.create({ id: "separator-2", type: "separator", contexts: ["all"] }, onCreated); browser.menus.create({ id: "check-uncheck", type: "checkbox", title: browser.i18n.getMessage("menuItemUncheckMe"), contexts: ["all"], checked: true, }, onCreated); browser.menus.create({ id: "open-sidebar", title: browser.i18n.getMessage("menuItemOpenSidebar"), contexts: ["all"], command: "_execute_sidebar_action" }, onCreated); browser.menus.create({ id: "tools-menu", title: browser.i18n.getMessage("menuItemToolsMenu"), contexts: ["tools_menu"], }, onCreated); /* Set a colored border on the document in the given tab. Note that this only work on normal web pages, not special pages like about:debugging. */ let blue = 'document.body.style.border = "5px solid blue"'; let green = 'document.body.style.border = "5px solid green"'; function borderify(tabId, color) { browser.tabs.executeScript(tabId, { code: color }); } /* Update the menu item's title according to current "checked" value. */ function updateCheckUncheck(checkedState) { if (checkedState) { browser.menus.update("check-uncheck", { title: browser.i18n.getMessage("menuItemUncheckMe"), }); } else { browser.menus.update("check-uncheck", { title: browser.i18n.getMessage("menuItemCheckMe"), }); } } /* The click event listener, where we perform the appropriate action given the ID of the menu item that was clicked. */ browser.menus.onClicked.addListener((info, tab) => { switch (info.menuItemId) { case "log-selection": console.log(info.selectionText); break; case "remove-me": let removing = browser.menus.remove(info.menuItemId); removing.then(onRemoved, onError); break; case "bluify": borderify(tab.id, blue); break; case "greenify": borderify(tab.id, green); break; case "check-uncheck": updateCheckUncheck(info.checked); break; case "open-sidebar": console.log("Opening my sidebar"); break; case "tools-menu": console.log("Clicked the tools menu item"); break; } });