diff --git a/src/background.js b/src/background.js index 5f8f848..816961e 100644 --- a/src/background.js +++ b/src/background.js @@ -28,7 +28,7 @@ globalThis.ContextType = "BACKGROUND"; /** * 添加右键菜单 */ -async function addContextMenus() { +async function addContextMenus(contextMenuType = 1) { // 添加前先删除,避免重复ID的错误 try { await browser.contextMenus.removeAll(); @@ -36,38 +36,43 @@ async function addContextMenus() { // } - browser.contextMenus.create({ - id: CMD_TOGGLE_TRANSLATE, - title: browser.i18n.getMessage("toggle_translate"), - contexts: ["page", "selection"], - }); - browser.contextMenus.create({ - id: CMD_TOGGLE_STYLE, - title: browser.i18n.getMessage("toggle_style"), - contexts: ["page", "selection"], - }); - browser.contextMenus.create({ - id: CMD_OPEN_TRANBOX, - title: browser.i18n.getMessage("open_tranbox"), - contexts: ["page", "selection"], - }); - browser.contextMenus.create({ - id: "options_separator", - type: "separator", - contexts: ["page", "selection"], - }); - browser.contextMenus.create({ - id: CMD_OPEN_OPTIONS, - title: browser.i18n.getMessage("open_options"), - contexts: ["page", "selection"], - }); -} - -/** - * 清除右键菜单 - */ -function removeContextMenus() { - browser.contextMenus.removeAll(); + switch (contextMenuType) { + case 1: + browser.contextMenus.create({ + id: CMD_TOGGLE_TRANSLATE, + title: browser.i18n.getMessage("toggle_translate"), + contexts: ["page", "selection"], + }); + break; + case 2: + browser.contextMenus.create({ + id: CMD_TOGGLE_TRANSLATE, + title: browser.i18n.getMessage("toggle_translate"), + contexts: ["page", "selection"], + }); + browser.contextMenus.create({ + id: CMD_TOGGLE_STYLE, + title: browser.i18n.getMessage("toggle_style"), + contexts: ["page", "selection"], + }); + browser.contextMenus.create({ + id: CMD_OPEN_TRANBOX, + title: browser.i18n.getMessage("open_tranbox"), + contexts: ["page", "selection"], + }); + browser.contextMenus.create({ + id: "options_separator", + type: "separator", + contexts: ["page", "selection"], + }); + browser.contextMenus.create({ + id: CMD_OPEN_OPTIONS, + title: browser.i18n.getMessage("open_options"), + contexts: ["page", "selection"], + }); + break; + default: + } } /** @@ -87,11 +92,8 @@ browser.runtime.onStartup.addListener(async () => { // 同步数据 await trySyncSettingAndRules(); - const { - clearCache, - contextMenus = true, - subrulesList, - } = await getSettingWithDefault(); + const { clearCache, contextMenuType, subrulesList } = + await getSettingWithDefault(); // 清除缓存 if (clearCache) { @@ -99,12 +101,8 @@ browser.runtime.onStartup.addListener(async () => { } // 右键菜单 - if (contextMenus) { - // firefox重启后菜单会消失,故重复添加 - addContextMenus(); - } else { - removeContextMenus(); - } + // firefox重启后菜单会消失,故重复添加 + addContextMenus(contextMenuType); // 同步订阅规则 trySyncAllSubRules({ subrulesList }); @@ -142,12 +140,8 @@ browser.runtime.onMessage.addListener( saveRule(args); break; case MSG_CONTEXT_MENUS: - const { contextMenus } = args; - if (contextMenus) { - addContextMenus(); - } else { - removeContextMenus(); - } + const { contextMenuType } = args; + addContextMenus(contextMenuType); break; case MSG_COMMAND_SHORTCUTS: browser.commands diff --git a/src/common.js b/src/common.js index 8a49c93..57f8d37 100644 --- a/src/common.js +++ b/src/common.js @@ -140,7 +140,7 @@ async function showFab(translator) { * @returns */ function showTransbox({ - contextMenus = true, + contextMenuType, tranboxSetting = DEFAULT_TRANBOX_SETTING, transApis, }) { @@ -165,7 +165,7 @@ function showTransbox({ diff --git a/src/config/i18n.js b/src/config/i18n.js index 9a8808c..fa35c17 100644 --- a/src/config/i18n.js +++ b/src/config/i18n.js @@ -723,9 +723,21 @@ export const I18N = { zh: `此功能依赖准确的语言检测,建议启用远程语言检测。`, en: `This feature relies on accurate language detection. It is recommended to enable remote language detection.`, }, - add_context_menus: { - zh: `添加右键菜单`, - en: `Add Context Menus`, + context_menus: { + zh: `右键菜单`, + en: `Context Menus`, + }, + hide_context_menus: { + zh: `隐藏右键菜单`, + en: `Hide Context Menus`, + }, + simple_context_menus: { + zh: `简单右键菜单`, + en: `Simple_context_menus Context Menus`, + }, + secondary_context_menus: { + zh: `二级右键菜单`, + en: `Secondary Context Menus`, }, mulkeys_help: { zh: `支持用换行或英文逗号“,”分隔多个KEY轮询调用。`, diff --git a/src/config/index.js b/src/config/index.js index 2c6e6af..fb91288 100644 --- a/src/config/index.js +++ b/src/config/index.js @@ -452,7 +452,8 @@ export const DEFAULT_SETTING = { injectRules: true, // 是否注入订阅规则 injectWebfix: true, // 是否注入修复补丁 detectRemote: false, // 是否使用远程语言检测 - contextMenus: true, // 是否添加右键菜单 + contextMenus: true, // 是否添加右键菜单(作废) + contextMenuType: 1, // 右键菜单类型(0不显示,1简单菜单,2多级菜单) transTitle: false, // 是否同时翻译页面标题 subrulesList: DEFAULT_SUBRULES_LIST, // 订阅列表 owSubrule: DEFAULT_OW_RULE, // 覆写订阅规则 diff --git a/src/views/Action/index.js b/src/views/Action/index.js index c92fb15..cb8b74a 100644 --- a/src/views/Action/index.js +++ b/src/views/Action/index.js @@ -95,8 +95,8 @@ export default function Action({ translator, fab }) { // 注册菜单 try { const menuCommandIds = []; - const { contextMenus = true } = translator.setting; - contextMenus && + const { contextMenuType } = translator.setting; + contextMenuType !== 0 && menuCommandIds.push( GM.registerMenuCommand( "Toggle Translate", diff --git a/src/views/Options/Setting.js b/src/views/Options/Setting.js index 5636ebb..1a146d7 100644 --- a/src/views/Options/Setting.js +++ b/src/views/Options/Setting.js @@ -67,8 +67,8 @@ export default function Settings() { case "touchTranslate": value = limitNumber(value, 0, 4); break; - case "contextMenus": - isExt && sendBgMsg(MSG_CONTEXT_MENUS, { contextMenus: value }); + case "contextMenuType": + isExt && sendBgMsg(MSG_CONTEXT_MENUS, { contextMenuType: value }); break; default: } @@ -96,7 +96,7 @@ export default function Settings() { newlineLength = TRANS_NEWLINE_LENGTH, mouseKey = OPT_MOUSEKEY_DISABLE, detectRemote = false, - contextMenus = true, + contextMenuType = 1, transTitle = false, touchTranslate = 2, blacklist = DEFAULT_BLACKLIST.join(",\n"), @@ -229,15 +229,16 @@ export default function Settings() { - {i18n("add_context_menus")} + {i18n("context_menus")} diff --git a/src/views/Selection/index.js b/src/views/Selection/index.js index d01d549..b328f3d 100644 --- a/src/views/Selection/index.js +++ b/src/views/Selection/index.js @@ -7,7 +7,11 @@ import { isGm, isExt } from "../../libs/client"; import { MSG_OPEN_TRANBOX, DEFAULT_TRANBOX_SHORTCUT } from "../../config"; import { isMobile } from "../../libs/mobile"; -export default function Slection({ contextMenus, tranboxSetting, transApis }) { +export default function Slection({ + contextMenuType, + tranboxSetting, + transApis, +}) { const boxWidth = limitNumber(window.innerWidth, 300, 600); const boxHeight = limitNumber(window.innerHeight, 200, 400); @@ -106,7 +110,7 @@ export default function Slection({ contextMenus, tranboxSetting, transApis }) { // 注册菜单 try { const menuCommandIds = []; - contextMenus && + contextMenuType !== 0 && menuCommandIds.push( GM.registerMenuCommand( "Translate Selected Text", @@ -125,7 +129,7 @@ export default function Slection({ contextMenus, tranboxSetting, transApis }) { } catch (err) { console.log("[registerMenuCommand]", err); } - }, [handleTranbox, contextMenus]); + }, [handleTranbox, contextMenuType]); return ( <>