fix: update ui when shortcut changed

This commit is contained in:
Gabe Yuan
2024-01-22 13:11:02 +08:00
parent 30efb6ee7a
commit 63b5f707e2
8 changed files with 66 additions and 18 deletions

View File

@@ -6,15 +6,15 @@
"message": "A simple bilingual translation extension & Greasemonkey script" "message": "A simple bilingual translation extension & Greasemonkey script"
}, },
"toggle_translate": { "toggle_translate": {
"message": "Toggle Translate (Alt+Q)" "message": "Toggle Translate"
}, },
"toggle_style": { "toggle_style": {
"message": "Toggle Style (Alt+C)" "message": "Toggle Style"
}, },
"open_options": { "open_options": {
"message": "Open Options (Alt+O)" "message": "Open Options"
}, },
"open_tranbox": { "open_tranbox": {
"message": "Translate Popup/Selected (Alt+S)" "message": "Translate Popup/Selected"
} }
} }

View File

@@ -6,15 +6,15 @@
"message": "一个简约的双语对照翻译扩展 & 油猴脚本" "message": "一个简约的双语对照翻译扩展 & 油猴脚本"
}, },
"toggle_translate": { "toggle_translate": {
"message": "开启翻译 (Alt+Q)" "message": "开启翻译"
}, },
"toggle_style": { "toggle_style": {
"message": "切换样式 (Alt+C)" "message": "切换样式"
}, },
"open_options": { "open_options": {
"message": "打开设置 (Alt+O)" "message": "打开设置"
}, },
"open_tranbox": { "open_tranbox": {
"message": "翻译弹窗/选中文字 (Alt+S)" "message": "翻译弹窗/选中文字"
} }
} }

View File

@@ -9,6 +9,7 @@ import {
MSG_TRANS_TOGGLE_STYLE, MSG_TRANS_TOGGLE_STYLE,
MSG_OPEN_TRANBOX, MSG_OPEN_TRANBOX,
MSG_CONTEXT_MENUS, MSG_CONTEXT_MENUS,
MSG_COMMAND_SHORTCUTS,
CMD_TOGGLE_TRANSLATE, CMD_TOGGLE_TRANSLATE,
CMD_TOGGLE_STYLE, CMD_TOGGLE_STYLE,
CMD_OPEN_OPTIONS, CMD_OPEN_OPTIONS,
@@ -138,6 +139,16 @@ browser.runtime.onMessage.addListener(
removeContextMenus(); removeContextMenus();
} }
break; break;
case MSG_COMMAND_SHORTCUTS:
browser.commands
.getAll()
.then((commands) => {
sendResponse({ data: commands });
})
.catch((error) => {
sendResponse({ error: error.message });
});
break;
default: default:
sendResponse({ error: `message action is unavailable: ${action}` }); sendResponse({ error: `message action is unavailable: ${action}` });
} }

View File

@@ -112,8 +112,8 @@ export const I18N = {
en: customApiHelpEN, en: customApiHelpEN,
}, },
translate_alt: { translate_alt: {
zh: `翻译 (Alt+Q)`, zh: `翻译`,
en: `Translate (Alt+Q)`, en: `Translate`,
}, },
basic_setting: { basic_setting: {
zh: `基本设置`, zh: `基本设置`,
@@ -232,8 +232,8 @@ export const I18N = {
en: `Text Style`, en: `Text Style`,
}, },
text_style_alt: { text_style_alt: {
zh: `文字样式 (Alt+C)`, zh: `文字样式`,
en: `Text Style (Alt+C)`, en: `Text Style`,
}, },
bg_color: { bg_color: {
zh: `样式颜色`, zh: `样式颜色`,

View File

@@ -65,6 +65,7 @@ export const MSG_TRANS_GETRULE = "trans_getrule";
export const MSG_TRANS_PUTRULE = "trans_putrule"; export const MSG_TRANS_PUTRULE = "trans_putrule";
export const MSG_TRANS_CURRULE = "trans_currule"; export const MSG_TRANS_CURRULE = "trans_currule";
export const MSG_CONTEXT_MENUS = "context_menus"; export const MSG_CONTEXT_MENUS = "context_menus";
export const MSG_COMMAND_SHORTCUTS = "command_shortcuts";
export const THEME_LIGHT = "light"; export const THEME_LIGHT = "light";
export const THEME_DARK = "dark"; export const THEME_DARK = "dark";

View File

@@ -99,7 +99,7 @@ export default function Action({ translator, fab }) {
contextMenus && contextMenus &&
menuCommandIds.push( menuCommandIds.push(
GM.registerMenuCommand( GM.registerMenuCommand(
"Toggle Translate (Alt+Q)", "Toggle Translate",
(event) => { (event) => {
translator.toggle(); translator.toggle();
sendIframeMsg(MSG_TRANS_TOGGLE); sendIframeMsg(MSG_TRANS_TOGGLE);
@@ -108,7 +108,7 @@ export default function Action({ translator, fab }) {
"Q" "Q"
), ),
GM.registerMenuCommand( GM.registerMenuCommand(
"Toggle Style (Alt+C)", "Toggle Style",
(event) => { (event) => {
translator.toggleStyle(); translator.toggleStyle();
sendIframeMsg(MSG_TRANS_TOGGLE_STYLE); sendIframeMsg(MSG_TRANS_TOGGLE_STYLE);
@@ -117,7 +117,7 @@ export default function Action({ translator, fab }) {
"C" "C"
), ),
GM.registerMenuCommand( GM.registerMenuCommand(
"Open Menu (Alt+K)", "Open Menu",
(event) => { (event) => {
setShowPopup((pre) => !pre); setShowPopup((pre) => !pre);
}, },

View File

@@ -18,6 +18,7 @@ import {
MSG_TRANS_PUTRULE, MSG_TRANS_PUTRULE,
MSG_OPEN_OPTIONS, MSG_OPEN_OPTIONS,
MSG_SAVE_RULE, MSG_SAVE_RULE,
MSG_COMMAND_SHORTCUTS,
OPT_TRANS_ALL, OPT_TRANS_ALL,
OPT_LANGS_FROM, OPT_LANGS_FROM,
OPT_LANGS_TO, OPT_LANGS_TO,
@@ -30,6 +31,7 @@ import { tryClearCaches } from "../../libs";
export default function Popup({ setShowPopup, translator: tran }) { export default function Popup({ setShowPopup, translator: tran }) {
const i18n = useI18n(); const i18n = useI18n();
const [rule, setRule] = useState(tran?.rule); const [rule, setRule] = useState(tran?.rule);
const [commands, setCommands] = useState({});
const handleOpenSetting = () => { const handleOpenSetting = () => {
if (!tran) { if (!tran) {
@@ -111,6 +113,32 @@ export default function Popup({ setShowPopup, translator: tran }) {
})(); })();
}, [tran]); }, [tran]);
useEffect(() => {
(async () => {
try {
const commands = {};
if (isExt) {
const res = await sendBgMsg(MSG_COMMAND_SHORTCUTS);
if (!res.error) {
res.data.forEach(({ name, shortcut }) => {
commands[name] = shortcut;
});
}
} else {
const shortcuts = tran.setting.shortcuts;
if (shortcuts) {
Object.entries(shortcuts).forEach(([key, val]) => {
commands[key] = val.join("+");
});
}
}
setCommands(commands);
} catch (err) {
console.log("[query cmds]", err);
}
})();
}, [tran]);
if (!rule) { if (!rule) {
return ( return (
<Box minWidth={300}> <Box minWidth={300}>
@@ -153,7 +181,11 @@ export default function Popup({ setShowPopup, translator: tran }) {
onChange={handleTransToggle} onChange={handleTransToggle}
/> />
} }
label={i18n("translate_alt")} label={
commands["toggleTranslate"]
? `${i18n("translate_alt")}(${commands["toggleTranslate"]})`
: i18n("translate_alt")
}
/> />
</Stack> </Stack>
@@ -211,7 +243,11 @@ export default function Popup({ setShowPopup, translator: tran }) {
size="small" size="small"
value={textStyle} value={textStyle}
name="textStyle" name="textStyle"
label={i18n("text_style_alt")} label={
commands["toggleStyle"]
? `${i18n("text_style_alt")}(${commands["toggleStyle"]})`
: i18n("text_style_alt")
}
onChange={handleChange} onChange={handleChange}
> >
{OPT_STYLE_ALL.map((item) => ( {OPT_STYLE_ALL.map((item) => (

View File

@@ -109,7 +109,7 @@ export default function Slection({ contextMenus, tranboxSetting, transApis }) {
contextMenus && contextMenus &&
menuCommandIds.push( menuCommandIds.push(
GM.registerMenuCommand( GM.registerMenuCommand(
"Translate Selected Text (Alt+S)", "Translate Selected Text",
(event) => { (event) => {
handleTranbox(); handleTranbox();
}, },