Replace background with ES6
This commit is contained in:
parent
c23837e6e1
commit
9d7bc76ffd
|
@ -1,130 +1,32 @@
|
||||||
/* Copyright (c) 2017-2018 Sienori All rights reserved.
|
import browser from "webextension-polyfill";
|
||||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
import browserInfo from "browser-info";
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
import log from "loglevel";
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
import { initSettings, handleSettingsChange } from "src/settings/settings";
|
||||||
|
import { updateLogLevel, overWriteLogLevel } from "src/common/log";
|
||||||
|
import onInstalledListener from "./onInstalledListener";
|
||||||
|
import { showMenus, onMenusShownListener, onMenusClickedListener } from "./menus";
|
||||||
|
|
||||||
//初回起動時にオプションページを表示して設定を初期化
|
const logDir = "background/background";
|
||||||
browser.runtime.onInstalled.addListener(details => {
|
|
||||||
if (details.reason != "install" && details.reason != "update") return;
|
|
||||||
|
|
||||||
browser.tabs.create({
|
const addListeners = () => {
|
||||||
url: "options/options.html#information?action=updated",
|
browser.storage.onChanged.addListener((changes, areaName) => {
|
||||||
active: false
|
handleSettingsChange(changes, areaName);
|
||||||
});
|
updateLogLevel();
|
||||||
|
showMenus();
|
||||||
});
|
});
|
||||||
|
const isValidMenusOnShown = browserInfo().name === "Firefox" && browserInfo().version >= 60;
|
||||||
|
if (isValidMenusOnShown) browser.contextMenus.onShown.addListener(onMenusShownListener);
|
||||||
|
browser.contextMenus.onClicked.addListener(onMenusClickedListener);
|
||||||
|
};
|
||||||
|
|
||||||
let S = new settingsObj();
|
const init = async () => {
|
||||||
|
await initSettings();
|
||||||
|
overWriteLogLevel();
|
||||||
|
updateLogLevel();
|
||||||
|
log.info(logDir, "init()");
|
||||||
|
addListeners();
|
||||||
|
showMenus();
|
||||||
|
};
|
||||||
|
init();
|
||||||
|
|
||||||
browser.storage.onChanged.addListener(showMenu);
|
browser.runtime.onInstalled.addListener(onInstalledListener);
|
||||||
if (typeof browser.contextMenus.onShown != "undefined")
|
|
||||||
browser.contextMenus.onShown.addListener(updateMenu);
|
|
||||||
|
|
||||||
S.init().then(function() {
|
|
||||||
showMenu();
|
|
||||||
});
|
|
||||||
|
|
||||||
function showMenu() {
|
|
||||||
if (S.get().ifShowMenu) {
|
|
||||||
menuRemove();
|
|
||||||
menuCreate();
|
|
||||||
} else menuRemove();
|
|
||||||
}
|
|
||||||
|
|
||||||
//テキストまたはリンクの選択時はページ翻訳を非表示にする
|
|
||||||
function updateMenu(info, tab) {
|
|
||||||
if (info.contexts.includes("selection") || info.contexts.includes("link")) {
|
|
||||||
browser.contextMenus.update("translatePage", { contexts: ["password"] }); //passwordにすることで事実上無効にする
|
|
||||||
} else {
|
|
||||||
browser.contextMenus.update("translatePage", { contexts: ["all"] });
|
|
||||||
}
|
|
||||||
browser.contextMenus.refresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
//メニューを表示
|
|
||||||
function menuCreate() {
|
|
||||||
browser.contextMenus.create({
|
|
||||||
id: "translatePageOnTab",
|
|
||||||
title: browser.i18n.getMessage("translatePageMenu"),
|
|
||||||
contexts: ["tab"]
|
|
||||||
});
|
|
||||||
|
|
||||||
browser.contextMenus.create({
|
|
||||||
id: "translatePage",
|
|
||||||
title: browser.i18n.getMessage("translatePageMenu"),
|
|
||||||
contexts: ["all"]
|
|
||||||
});
|
|
||||||
|
|
||||||
browser.contextMenus.create({
|
|
||||||
id: "translateText",
|
|
||||||
title: browser.i18n.getMessage("translateTextMenu"),
|
|
||||||
contexts: ["selection"]
|
|
||||||
});
|
|
||||||
|
|
||||||
browser.contextMenus.create({
|
|
||||||
id: "translateLink",
|
|
||||||
title: browser.i18n.getMessage("translateLinkMenu"),
|
|
||||||
contexts: ["link"]
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//メニューを削除
|
|
||||||
function menuRemove() {
|
|
||||||
browser.contextMenus.removeAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
//メニュークリック時
|
|
||||||
browser.contextMenus.onClicked.addListener(function(info, tab) {
|
|
||||||
switch (info.menuItemId) {
|
|
||||||
case "translatePage":
|
|
||||||
case "translatePageOnTab":
|
|
||||||
translatePageMenu(info, tab);
|
|
||||||
break;
|
|
||||||
case "translateText":
|
|
||||||
translateTextMenu(info, tab);
|
|
||||||
break;
|
|
||||||
case "translateLink":
|
|
||||||
translateLinkMenu(info, tab);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
//テキストを翻訳
|
|
||||||
function translateTextMenu(info, tab) {
|
|
||||||
browser.tabs.sendMessage(tab.id, {
|
|
||||||
message: "showPanelFromMenu"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//ページ全体を翻訳
|
|
||||||
function translatePageMenu(info, tab) {
|
|
||||||
browser.tabs.create({
|
|
||||||
url:
|
|
||||||
"https://translate.google.com/translate?hl=" +
|
|
||||||
S.get().targetLang +
|
|
||||||
"&sl=auto&u=" +
|
|
||||||
encodeURIComponent(info.pageUrl),
|
|
||||||
active: true,
|
|
||||||
index: tab.index + 1
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//リンクを翻訳
|
|
||||||
function translateLinkMenu(info, tab) {
|
|
||||||
browser.tabs.create({
|
|
||||||
url:
|
|
||||||
"https://translate.google.com/translate?hl=" +
|
|
||||||
S.get().targetLang +
|
|
||||||
"&sl=auto&u=" +
|
|
||||||
encodeURIComponent(info.linkUrl),
|
|
||||||
active: true,
|
|
||||||
index: tab.index + 1
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//スクリプトからのメッセージに返信
|
|
||||||
browser.runtime.onMessage.addListener(function(request) {
|
|
||||||
switch (request.message) {
|
|
||||||
case "getSetting":
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
103
src/background/menus.js
Normal file
103
src/background/menus.js
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
import browser from "webextension-polyfill";
|
||||||
|
import browserInfo from "browser-info";
|
||||||
|
import log from "loglevel";
|
||||||
|
import { getSettings } from "src/settings/settings";
|
||||||
|
|
||||||
|
const logDir = "background/menus";
|
||||||
|
|
||||||
|
export const showMenus = () => {
|
||||||
|
if (getSettings("ifShowMenu")) {
|
||||||
|
removeMenus();
|
||||||
|
createMenus();
|
||||||
|
} else removeMenus();
|
||||||
|
};
|
||||||
|
|
||||||
|
export const onMenusShownListener = (info, tab) => {
|
||||||
|
//テキストまたはリンクの選択時はページ翻訳を非表示にする
|
||||||
|
if (info.contexts.includes("selection") || info.contexts.includes("link")) {
|
||||||
|
//passwordにすることで事実上無効にする
|
||||||
|
browser.contextMenus.update("translatePage", { contexts: ["password"] });
|
||||||
|
} else {
|
||||||
|
browser.contextMenus.update("translatePage", { contexts: ["all"] });
|
||||||
|
}
|
||||||
|
browser.contextMenus.refresh();
|
||||||
|
};
|
||||||
|
|
||||||
|
export const onMenusClickedListener = (info, tab) => {
|
||||||
|
log.log(logDir, "onMenusClickedListener()", info, tab);
|
||||||
|
switch (info.menuItemId) {
|
||||||
|
case "translatePage":
|
||||||
|
case "translatePageOnTab":
|
||||||
|
translatePage(info, tab);
|
||||||
|
break;
|
||||||
|
case "translateText":
|
||||||
|
translateText(tab);
|
||||||
|
break;
|
||||||
|
case "translateLink":
|
||||||
|
translateLink(info, tab);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function createMenus() {
|
||||||
|
const isValidContextsTypeTab = browserInfo().name === "Firefox" && browserInfo().version >= 53;
|
||||||
|
if (isValidContextsTypeTab) {
|
||||||
|
browser.contextMenus.create({
|
||||||
|
id: "translatePageOnTab",
|
||||||
|
title: browser.i18n.getMessage("translatePageMenu"),
|
||||||
|
contexts: ["tab"]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
browser.contextMenus.create({
|
||||||
|
id: "translatePage",
|
||||||
|
title: browser.i18n.getMessage("translatePageMenu"),
|
||||||
|
contexts: ["all"]
|
||||||
|
});
|
||||||
|
|
||||||
|
browser.contextMenus.create({
|
||||||
|
id: "translateText",
|
||||||
|
title: browser.i18n.getMessage("translateTextMenu"),
|
||||||
|
contexts: ["selection"]
|
||||||
|
});
|
||||||
|
|
||||||
|
browser.contextMenus.create({
|
||||||
|
id: "translateLink",
|
||||||
|
title: browser.i18n.getMessage("translateLinkMenu"),
|
||||||
|
contexts: ["link"]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeMenus() {
|
||||||
|
browser.contextMenus.removeAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
function translateText(tab) {
|
||||||
|
browser.tabs.sendMessage(tab.id, {
|
||||||
|
message: "translateSelectedText"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function translatePage(info, tab) {
|
||||||
|
const targetLang = getSettings("targetLang");
|
||||||
|
const encodedPageUrl = encodeURIComponent(info.pageUrl);
|
||||||
|
const translationUrl = `https://translate.google.com/translate?hl=${targetLang}&sl=auto&u=${encodedPageUrl}`;
|
||||||
|
|
||||||
|
browser.tabs.create({
|
||||||
|
url: translationUrl,
|
||||||
|
active: true,
|
||||||
|
index: tab.index + 1
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function translateLink(info, tab) {
|
||||||
|
const targetLang = getSettings("targetLang");
|
||||||
|
const encodedLinkUrl = encodeURIComponent(info.linkUrl);
|
||||||
|
const translationUrl = `https://translate.google.com/translate?hl=${targetLang}&sl=auto&u=${encodedLinkUrl}`;
|
||||||
|
|
||||||
|
browser.tabs.create({
|
||||||
|
url: translationUrl,
|
||||||
|
active: true,
|
||||||
|
index: tab.index + 1
|
||||||
|
});
|
||||||
|
}
|
25
src/background/onInstalledListener.js
Normal file
25
src/background/onInstalledListener.js
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
import browser from "webextension-polyfill";
|
||||||
|
import log from "loglevel";
|
||||||
|
import { initSettings, getSettings, setSettings } from "src/settings/settings";
|
||||||
|
import { initShortcuts } from "./keyboardShortcuts";
|
||||||
|
|
||||||
|
const logDir = "background/onInstalledListener";
|
||||||
|
|
||||||
|
const openOptionsPage = active => {
|
||||||
|
browser.tabs.create({
|
||||||
|
url: "options/index.html#information?action=updated",
|
||||||
|
active: active
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default async details => {
|
||||||
|
if (details.reason != "install" && details.reason != "update") return;
|
||||||
|
log.info(logDir, "onInstalledListener()", details);
|
||||||
|
|
||||||
|
await initSettings();
|
||||||
|
initShortcuts();
|
||||||
|
|
||||||
|
const isShowOptionsPage = getSettings("isShowOptionsPageWhenUpdated");
|
||||||
|
if (isShowOptionsPage) openOptionsPage(false);
|
||||||
|
setSettings("isShowUpdated", true);
|
||||||
|
};
|
|
@ -1,3 +1,4 @@
|
||||||
|
import browser from "webextension-polyfill";
|
||||||
const alphabeticallySort = (a, b) => a.name.localeCompare(b.name);
|
const alphabeticallySort = (a, b) => a.name.localeCompare(b.name);
|
||||||
|
|
||||||
export default () => {
|
export default () => {
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import browser from "webextension-polyfill";
|
||||||
import genelateLangOptions from "src/common/genelateLangOptions";
|
import genelateLangOptions from "src/common/genelateLangOptions";
|
||||||
|
|
||||||
const getDefaultLangs = () => {
|
const getDefaultLangs = () => {
|
||||||
|
|
Loading…
Reference in a new issue