Implement keyboard shortcuts

This commit is contained in:
sienori 2019-02-22 02:00:25 +09:00
parent 9d7bc76ffd
commit 6e560f4046
6 changed files with 109 additions and 3 deletions

View file

@ -207,6 +207,12 @@
"invalidShortcutMessage": { "invalidShortcutMessage": {
"message": "The shortcut can not be used" "message": "The shortcut can not be used"
}, },
"clear": {
"message": "Clear"
},
"reset": {
"message": "Reset"
},
"informationLabel": { "informationLabel": {
"message": "Information" "message": "Information"
@ -251,5 +257,9 @@
}, },
"translateLinkMenu": { "translateLinkMenu": {
"message": "Translate selected link" "message": "Translate selected link"
},
"openPopupDescription": {
"message": "Open toolbar popup"
} }
} }

View file

@ -5,6 +5,7 @@ import { initSettings, handleSettingsChange } from "src/settings/settings";
import { updateLogLevel, overWriteLogLevel } from "src/common/log"; import { updateLogLevel, overWriteLogLevel } from "src/common/log";
import onInstalledListener from "./onInstalledListener"; import onInstalledListener from "./onInstalledListener";
import { showMenus, onMenusShownListener, onMenusClickedListener } from "./menus"; import { showMenus, onMenusShownListener, onMenusClickedListener } from "./menus";
import { onCommandListener } from "./keyboardShortcuts";
const logDir = "background/background"; const logDir = "background/background";
@ -30,3 +31,4 @@ const init = async () => {
init(); init();
browser.runtime.onInstalled.addListener(onInstalledListener); browser.runtime.onInstalled.addListener(onInstalledListener);
browser.commands.onCommand.addListener(onCommandListener);

View file

@ -0,0 +1,64 @@
import browser from "webextension-polyfill";
import browserInfo from "browser-info";
import log from "loglevel";
import { getSettings, setSettings } from "src/settings/settings";
import getShortcut from "src/common/getShortcut";
import manifest from "src/manifest-chrome.json";
const logDir = "background/keyboardShortcuts";
export const initShortcuts = async () => {
const isValidShortcuts = browserInfo().name == "Firefox" && browserInfo().version >= 60;
if (!isValidShortcuts) return;
log.info(logDir, "initShortcuts()");
let initedShortcuts = getSettings("initedShortcuts") || [];
const commands = manifest.commands;
for (const commandId of Object.keys(commands)) {
if (initedShortcuts.includes(commandId)) continue;
try {
await browser.commands.update({ name: commandId, shortcut: getShortcut(commandId) });
initedShortcuts.push(commandId);
} catch (e) {
log.error(logDir, "initShortcuts()", e);
}
}
setSettings("initedShortcuts", initedShortcuts);
};
export const onCommandListener = async command => {
log.log(logDir, "onCommandListener()", command);
switch (command) {
case "translateSelectedText": {
translateSelectedText();
break;
}
case "translatePage": {
translatePage();
break;
}
}
};
const translateSelectedText = async () => {
const tab = (await browser.tabs.query({ active: true }))[0];
browser.tabs.sendMessage(tab.id, {
message: "translateSelectedText"
});
};
const translatePage = async () => {
const tab = (await browser.tabs.query({ active: true }))[0];
const tabInfo = await browser.tabs.sendMessage(tab.id, { message: "getTabInfo" });
const targetLang = getSettings("targetLang");
const encodedPageUrl = encodeURIComponent(tabInfo.url);
const translationUrl = `https://translate.google.com/translate?hl=${targetLang}&sl=auto&u=${encodedPageUrl}`;
browser.tabs.create({
url: translationUrl,
active: true,
index: tab.index + 1
});
};

View file

@ -1,5 +1,5 @@
import browserInfo from "browser-info"; import browserInfo from "browser-info";
import manifest from "src/manifest-firefox.json"; import manifest from "src/manifest-chrome.json";
export default commandId => { export default commandId => {
const suggestedKeys = manifest.commands[commandId].suggested_key || null; const suggestedKeys = manifest.commands[commandId].suggested_key || null;

View file

@ -45,5 +45,23 @@
"matches": ["http://*/*", "https://*/*", "<all_urls>"], "matches": ["http://*/*", "https://*/*", "<all_urls>"],
"js": ["content/content.js"] "js": ["content/content.js"]
} }
] ],
"commands": {
"_execute_browser_action": {
"description": "__MSG_openPopupDescription__",
"suggested_key": {
"default": "Alt+F1"
}
},
"translateSelectedText": {
"description": "__MSG_translateTextMenu__",
"suggested_key": {
"default": "Alt+F2"
}
},
"translatePage": {
"description": "__MSG_translatePageMenu__"
}
}
} }

View file

@ -51,5 +51,17 @@
"matches": ["http://*/*", "https://*/*", "<all_urls>"], "matches": ["http://*/*", "https://*/*", "<all_urls>"],
"js": ["content/content.js"] "js": ["content/content.js"]
} }
] ],
"commands": {
"_execute_browser_action": {
"description": "__MSG_openPopupDescription__"
},
"translateSelectedText": {
"description": "__MSG_translateTextMenu__"
},
"translatePage": {
"description": "__MSG_translatePageMenu__"
}
}
} }