perf: merge Translate Popup/Selected shortcut

This commit is contained in:
Gabe Yuan
2023-11-28 13:36:40 +08:00
parent 52ca4306fd
commit 7d3972d3a8
8 changed files with 21 additions and 106 deletions

View File

@@ -15,9 +15,6 @@
"message": "Open Options (Alt+O)" "message": "Open Options (Alt+O)"
}, },
"open_tranbox": { "open_tranbox": {
"message": "Open Translate Popup (Alt+B)" "message": "Translate Popup/Selected (Alt+S)"
},
"translate_selected": {
"message": "Translate Selected Text (Alt+S)"
} }
} }

View File

@@ -15,9 +15,6 @@
"message": "打开设置 (Alt+O)" "message": "打开设置 (Alt+O)"
}, },
"open_tranbox": { "open_tranbox": {
"message": "打开翻译弹窗 (Alt+B)" "message": "翻译弹窗/选中文字 (Alt+S)"
},
"translate_selected": {
"message": "翻译选中文字 (Alt+S)"
} }
} }

View File

@@ -7,13 +7,11 @@ import {
MSG_OPEN_OPTIONS, MSG_OPEN_OPTIONS,
MSG_SAVE_RULE, MSG_SAVE_RULE,
MSG_TRANS_TOGGLE_STYLE, MSG_TRANS_TOGGLE_STYLE,
MSG_TRANSLATE_SELECTED,
MSG_OPEN_TRANBOX, MSG_OPEN_TRANBOX,
CMD_TOGGLE_TRANSLATE, CMD_TOGGLE_TRANSLATE,
CMD_TOGGLE_STYLE, CMD_TOGGLE_STYLE,
CMD_OPEN_OPTIONS, CMD_OPEN_OPTIONS,
CMD_OPEN_TRANBOX, CMD_OPEN_TRANBOX,
CMD_TRANSLATE_SELECTED,
} from "./config"; } from "./config";
import { getSettingWithDefault, tryInitDefaultData } from "./libs/storage"; import { getSettingWithDefault, tryInitDefaultData } from "./libs/storage";
import { trySyncSettingAndRules } from "./libs/sync"; import { trySyncSettingAndRules } from "./libs/sync";
@@ -32,16 +30,6 @@ browser.runtime.onInstalled.addListener(() => {
tryInitDefaultData(); tryInitDefaultData();
// 右键菜单 // 右键菜单
browser.contextMenus.create({
id: CMD_TRANSLATE_SELECTED,
title: browser.i18n.getMessage("translate_selected"),
contexts: ["selection"],
});
browser.contextMenus.create({
id: "selection_separator",
type: "separator",
contexts: ["selection"],
});
browser.contextMenus.create({ browser.contextMenus.create({
id: CMD_TOGGLE_TRANSLATE, id: CMD_TOGGLE_TRANSLATE,
title: browser.i18n.getMessage("toggle_translate"), title: browser.i18n.getMessage("toggle_translate"),
@@ -53,13 +41,13 @@ browser.runtime.onInstalled.addListener(() => {
contexts: ["all"], contexts: ["all"],
}); });
browser.contextMenus.create({ browser.contextMenus.create({
id: "options_separator", id: CMD_OPEN_TRANBOX,
type: "separator", title: browser.i18n.getMessage("open_tranbox"),
contexts: ["all"], contexts: ["all"],
}); });
browser.contextMenus.create({ browser.contextMenus.create({
id: CMD_OPEN_TRANBOX, id: "options_separator",
title: browser.i18n.getMessage("open_tranbox"), type: "separator",
contexts: ["all"], contexts: ["all"],
}); });
browser.contextMenus.create({ browser.contextMenus.create({
@@ -151,9 +139,6 @@ browser.contextMenus.onClicked.addListener(({ menuItemId }) => {
case CMD_TOGGLE_STYLE: case CMD_TOGGLE_STYLE:
sendTabMsg(MSG_TRANS_TOGGLE_STYLE); sendTabMsg(MSG_TRANS_TOGGLE_STYLE);
break; break;
case CMD_TRANSLATE_SELECTED:
sendTabMsg(MSG_TRANSLATE_SELECTED);
break;
case CMD_OPEN_TRANBOX: case CMD_OPEN_TRANBOX:
sendTabMsg(MSG_OPEN_TRANBOX); sendTabMsg(MSG_OPEN_TRANBOX);
break; break;

View File

@@ -8,7 +8,6 @@ import {
MSG_TRANS_TOGGLE_STYLE, MSG_TRANS_TOGGLE_STYLE,
MSG_TRANS_GETRULE, MSG_TRANS_GETRULE,
MSG_TRANS_PUTRULE, MSG_TRANS_PUTRULE,
MSG_TRANSLATE_SELECTED,
MSG_OPEN_TRANBOX, MSG_OPEN_TRANBOX,
APP_LCNAME, APP_LCNAME,
DEFAULT_TRANBOX_SETTING, DEFAULT_TRANBOX_SETTING,
@@ -67,9 +66,6 @@ function runtimeListener(translator) {
translator.updateRule(args); translator.updateRule(args);
sendIframeMsg(MSG_TRANS_PUTRULE, args); sendIframeMsg(MSG_TRANS_PUTRULE, args);
break; break;
case MSG_TRANSLATE_SELECTED:
window.dispatchEvent(new CustomEvent(MSG_TRANSLATE_SELECTED));
break;
case MSG_OPEN_TRANBOX: case MSG_OPEN_TRANBOX:
window.dispatchEvent(new CustomEvent(MSG_OPEN_TRANBOX)); window.dispatchEvent(new CustomEvent(MSG_OPEN_TRANBOX));
break; break;

View File

@@ -636,12 +636,8 @@ export const I18N = {
en: `Use Selection Translate`, en: `Use Selection Translate`,
}, },
trigger_tranbox_shortcut: { trigger_tranbox_shortcut: {
zh: `显示翻译框快捷键`, zh: `显示翻译框/翻译选中文字快捷键`,
en: `Toggle Translate Box Shortcut`, en: `Open Translate Popup/Translate Selected Shortcut`,
},
trigger_transel_shortcut: {
zh: `翻译选中文字快捷键`,
en: `Translate Selected Shortcut`,
}, },
tranbtn_offset_x: { tranbtn_offset_x: {
zh: `翻译按钮偏移X0-100`, zh: `翻译按钮偏移X0-100`,

View File

@@ -34,7 +34,6 @@ export const CMD_TOGGLE_TRANSLATE = "toggleTranslate";
export const CMD_TOGGLE_STYLE = "toggleStyle"; export const CMD_TOGGLE_STYLE = "toggleStyle";
export const CMD_OPEN_OPTIONS = "openOptions"; export const CMD_OPEN_OPTIONS = "openOptions";
export const CMD_OPEN_TRANBOX = "openTranbox"; export const CMD_OPEN_TRANBOX = "openTranbox";
export const CMD_TRANSLATE_SELECTED = "translateSelected";
export const CLIENT_WEB = "web"; export const CLIENT_WEB = "web";
export const CLIENT_CHROME = "chrome"; export const CLIENT_CHROME = "chrome";
@@ -60,7 +59,6 @@ export const MSG_OPEN_OPTIONS = "open_options";
export const MSG_SAVE_RULE = "save_rule"; export const MSG_SAVE_RULE = "save_rule";
export const MSG_TRANS_TOGGLE = "trans_toggle"; export const MSG_TRANS_TOGGLE = "trans_toggle";
export const MSG_TRANS_TOGGLE_STYLE = "trans_toggle_style"; export const MSG_TRANS_TOGGLE_STYLE = "trans_toggle_style";
export const MSG_TRANSLATE_SELECTED = "translate_selected";
export const MSG_OPEN_TRANBOX = "open_tranbox"; export const MSG_OPEN_TRANBOX = "open_tranbox";
export const MSG_TRANS_GETRULE = "trans_getrule"; export const MSG_TRANS_GETRULE = "trans_getrule";
export const MSG_TRANS_PUTRULE = "trans_putrule"; export const MSG_TRANS_PUTRULE = "trans_putrule";
@@ -340,15 +338,13 @@ export const DEFAULT_INPUT_RULE = {
}; };
// 划词翻译 // 划词翻译
export const DEFAULT_TRANBOX_SHORTCUT = ["AltLeft", "KeyB"]; export const DEFAULT_TRANBOX_SHORTCUT = ["AltLeft", "KeyS"];
export const DEFAULT_TRANSEL_SHORTCUT = ["AltLeft", "KeyS"];
export const DEFAULT_TRANBOX_SETTING = { export const DEFAULT_TRANBOX_SETTING = {
transOpen: true, transOpen: true,
translator: OPT_TRANS_MICROSOFT, translator: OPT_TRANS_MICROSOFT,
fromLang: "auto", fromLang: "auto",
toLang: "zh-CN", toLang: "zh-CN",
tranboxShortcut: DEFAULT_TRANBOX_SHORTCUT, tranboxShortcut: DEFAULT_TRANBOX_SHORTCUT,
transelShortcut: DEFAULT_TRANSEL_SHORTCUT,
btnOffsetX: 10, btnOffsetX: 10,
btnOffsetY: 10, btnOffsetY: 10,
hideTranBtn: false, hideTranBtn: false,

View File

@@ -3,12 +3,7 @@ import Stack from "@mui/material/Stack";
import TextField from "@mui/material/TextField"; import TextField from "@mui/material/TextField";
import MenuItem from "@mui/material/MenuItem"; import MenuItem from "@mui/material/MenuItem";
import { useI18n } from "../../hooks/I18n"; import { useI18n } from "../../hooks/I18n";
import { import { OPT_TRANS_ALL, OPT_LANGS_FROM, OPT_LANGS_TO } from "../../config";
OPT_TRANS_ALL,
OPT_LANGS_FROM,
OPT_LANGS_TO,
DEFAULT_TRANSEL_SHORTCUT,
} from "../../config";
import ShortcutInput from "./ShortcutInput"; import ShortcutInput from "./ShortcutInput";
import FormControlLabel from "@mui/material/FormControlLabel"; import FormControlLabel from "@mui/material/FormControlLabel";
import Switch from "@mui/material/Switch"; import Switch from "@mui/material/Switch";
@@ -44,20 +39,12 @@ export default function Tranbox() {
[updateTranbox] [updateTranbox]
); );
const handleShortcutTransel = useCallback(
(val) => {
updateTranbox({ transelShortcut: val });
},
[updateTranbox]
);
const { const {
transOpen, transOpen,
translator, translator,
fromLang, fromLang,
toLang, toLang,
tranboxShortcut, tranboxShortcut,
transelShortcut = DEFAULT_TRANSEL_SHORTCUT,
btnOffsetX, btnOffsetX,
btnOffsetY, btnOffsetY,
hideTranBtn = false, hideTranBtn = false,
@@ -160,12 +147,6 @@ export default function Tranbox() {
onChange={handleShortcutInput} onChange={handleShortcutInput}
label={i18n("trigger_tranbox_shortcut")} label={i18n("trigger_tranbox_shortcut")}
/> />
<ShortcutInput
value={transelShortcut}
onChange={handleShortcutTransel}
label={i18n("trigger_transel_shortcut")}
/>
</Stack> </Stack>
</Box> </Box>
); );

View File

@@ -4,11 +4,7 @@ import TranBox from "./TranBox";
import { shortcutRegister } from "../../libs/shortcut"; import { shortcutRegister } from "../../libs/shortcut";
import { sleep } from "../../libs/utils"; import { sleep } from "../../libs/utils";
import { isGm } from "../../libs/client"; import { isGm } from "../../libs/client";
import { import { MSG_OPEN_TRANBOX, DEFAULT_TRANBOX_SHORTCUT } from "../../config";
MSG_TRANSLATE_SELECTED,
MSG_OPEN_TRANBOX,
DEFAULT_TRANSEL_SHORTCUT,
} from "../../config";
export default function Slection({ tranboxSetting, transApis }) { export default function Slection({ tranboxSetting, transApis }) {
const [showBox, setShowBox] = useState(false); const [showBox, setShowBox] = useState(false);
@@ -30,11 +26,12 @@ export default function Slection({ tranboxSetting, transApis }) {
setShowBox(true); setShowBox(true);
}; };
const handleTranSelected = useCallback(() => { const handleTranbox = useCallback(() => {
setShowBtn(false); setShowBtn(false);
const selectedText = window.getSelection()?.toString()?.trim() || ""; const selectedText = window.getSelection()?.toString()?.trim() || "";
if (!selectedText) { if (!selectedText) {
setShowBox((pre) => !pre);
return; return;
} }
@@ -66,44 +63,21 @@ export default function Slection({ tranboxSetting, transApis }) {
useEffect(() => { useEffect(() => {
const clearShortcut = shortcutRegister( const clearShortcut = shortcutRegister(
tranboxSetting.tranboxShortcut, tranboxSetting.tranboxShortcut || DEFAULT_TRANBOX_SHORTCUT,
() => { handleTranbox
setShowBox((pre) => !pre);
}
); );
return () => { return () => {
clearShortcut(); clearShortcut();
}; };
}, [tranboxSetting.tranboxShortcut]); }, [tranboxSetting.tranboxShortcut, handleTranbox]);
useEffect(() => { useEffect(() => {
const clearShortcut = shortcutRegister( window.addEventListener(MSG_OPEN_TRANBOX, handleTranbox);
tranboxSetting.transelShortcut || DEFAULT_TRANSEL_SHORTCUT,
handleTranSelected
);
return () => { return () => {
clearShortcut(); window.removeEventListener(MSG_OPEN_TRANBOX, handleTranbox);
}; };
}, [tranboxSetting.transelShortcut, handleTranSelected]); }, [handleTranbox]);
useEffect(() => {
window.addEventListener(MSG_TRANSLATE_SELECTED, handleTranSelected);
return () => {
window.removeEventListener(MSG_TRANSLATE_SELECTED, handleTranSelected);
};
}, [handleTranSelected]);
useEffect(() => {
const handleOpenTranbox = () => {
setShowBox((pre) => !pre);
};
window.addEventListener(MSG_OPEN_TRANBOX, handleOpenTranbox);
return () => {
window.removeEventListener(MSG_OPEN_TRANBOX, handleOpenTranbox);
};
}, []);
useEffect(() => { useEffect(() => {
if (!isGm) { if (!isGm) {
@@ -117,16 +91,9 @@ export default function Slection({ tranboxSetting, transApis }) {
GM.registerMenuCommand( GM.registerMenuCommand(
"Translate Selected Text (Alt+S)", "Translate Selected Text (Alt+S)",
(event) => { (event) => {
handleTranSelected(); handleTranbox();
}, },
"S" "S"
),
GM.registerMenuCommand(
"Open Translate Popup (Alt+B)",
(event) => {
setShowBox((pre) => !pre);
},
"B"
) )
); );
@@ -138,7 +105,7 @@ export default function Slection({ tranboxSetting, transApis }) {
} catch (err) { } catch (err) {
console.log("[registerMenuCommand]", err); console.log("[registerMenuCommand]", err);
} }
}, [handleTranSelected]); }, [handleTranbox]);
return ( return (
<> <>