Code refactoring
The code was repetitive and old. This change is one iteration towards a
complete refactoring of the code which brings it to a better state.
Also, the extension icon now can be clicked to open the options page.
Change-Id: I998355cd871e31d6590608ff2563d43040944a83
diff --git a/src/background.js b/src/background.js
index 3c34a89..ed86f66 100644
--- a/src/background.js
+++ b/src/background.js
@@ -1,53 +1,64 @@
-// To generate isoLangs, edit code at isolangs.json and use Closure to minimize it
-var isoLangs={af:{name:"Afrikaans",nativeName:"Afrikaans"},sq:{name:"Albanian",nativeName:"Shqip"},am:{name:"Amharic",nativeName:"\u12a0\u121b\u122d\u129b"},ar:{name:"Arabic",nativeName:"\u0627\u0644\u0639\u0631\u0628\u064a\u0629"},hy:{name:"Armenian",nativeName:"\u0540\u0561\u0575\u0565\u0580\u0565\u0576"},az:{name:"Azerbaijani",nativeName:"az\u0259rbaycan dili"},eu:{name:"Basque",nativeName:"euskara"},be:{name:"Belarusian",nativeName:"\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430\u044f"},
-bn:{name:"Bengali",nativeName:"\u09ac\u09be\u0982\u09b2\u09be"},bs:{name:"Bosnian",nativeName:"bosanski jezik"},bg:{name:"Bulgarian",nativeName:"\u0431\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438 \u0435\u0437\u0438\u043a"},ca:{name:"Catalan",nativeName:"Catal\u00e0"},ceb:{name:"Cebuano",nativeName:"Bisaya"},ny:{name:"Chichewa",nativeName:"chiChe\u0175a"},zh:{name:"Chinese",nativeName:"\u4e2d\u6587 (Zh\u014dngw\u00e9n)"},co:{name:"Corsican",nativeName:"corsu"},hr:{name:"Croatian",nativeName:"hrvatski"},
-cs:{name:"Czech",nativeName:"\u010desky"},da:{name:"Danish",nativeName:"dansk"},nl:{name:"Dutch",nativeName:"Nederlands"},en:{name:"English",nativeName:"English"},eo:{name:"Esperanto",nativeName:"Esperanto"},et:{name:"Estonian",nativeName:"eesti"},tl:{name:"Filipino",nativeName:"Pilipino"},fi:{name:"Finnish",nativeName:"suomi"},fr:{name:"French",nativeName:"fran\u00e7ais"},fy:{name:"Frisian",nativeName:"Frysk"},gl:{name:"Galician",nativeName:"Galego"},ka:{name:"Georgian",nativeName:"\u10e5\u10d0\u10e0\u10d7\u10e3\u10da\u10d8"},
-de:{name:"German",nativeName:"Deutsch"},el:{name:"Greek",nativeName:"\u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac"},gu:{name:"Gujarati",nativeName:"\u0a97\u0ac1\u0a9c\u0ab0\u0abe\u0aa4\u0ac0"},ht:{name:"Haitian Creole",nativeName:"Krey\u00f2l ayisyen"},ha:{name:"Hausa",nativeName:"Hausa"},haw:{name:"Hawaiian",nativeName:"Hausa"},iw:{name:"Hebrew",nativeName:"\u05e2\u05d1\u05e8\u05d9\u05ea"},hi:{name:"Hindi",nativeName:"\u0939\u093f\u0928\u094d\u0926\u0940, \u0939\u093f\u0902\u0926\u0940"},hmn:{name:"Hmong",
-nativeName:"lus Hmoob"},hu:{name:"Hungarian",nativeName:"Magyar"},is:{name:"Icelandic",nativeName:"\u00cdslenska"},ig:{name:"Igbo",nativeName:"As\u1ee5s\u1ee5 Igbo"},id:{name:"Indonesian",nativeName:"Bahasa Indonesia"},ga:{name:"Irish",nativeName:"Gaeilge"},it:{name:"Italian",nativeName:"Italiano"},ja:{name:"Japanese",nativeName:"\u65e5\u672c\u8a9e (\u306b\u307b\u3093\u3054\uff0f\u306b\u3063\u307d\u3093\u3054)"},jv:{name:"Javanese",nativeName:"basa Jawa"},kn:{name:"Kannada",nativeName:"\u0c95\u0ca8\u0ccd\u0ca8\u0ca1"},
-kk:{name:"Kazakh",nativeName:"\u049a\u0430\u0437\u0430\u049b \u0442\u0456\u043b\u0456"},km:{name:"Khmer",nativeName:"\u1797\u17b6\u179f\u17b6\u1781\u17d2\u1798\u17c2\u179a"},ko:{name:"Korean",nativeName:"\ud55c\uad6d\uc5b4 (\u97d3\u570b\u8a9e)"},ku:{name:"Kurdish (Kurmanji)",nativeName:"Kurd\u00ee"},ky:{name:"Kyrgyz",nativeName:"\u043a\u044b\u0440\u0433\u044b\u0437 \u0442\u0438\u043b\u0438"},lo:{name:"Lao",nativeName:"\u0e9e\u0eb2\u0eaa\u0eb2\u0ea5\u0eb2\u0ea7"},la:{name:"Latin",nativeName:"latine"},
-lv:{name:"Latvian",nativeName:"latvie\u0161u valoda"},lt:{name:"Lithuanian",nativeName:"lietuvi\u0173 kalba"},lb:{name:"Luxembourgish",nativeName:"L\u00ebtzebuergesch"},mk:{name:"Macedonian",nativeName:"\u043c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438 \u0458\u0430\u0437\u0438\u043a"},mg:{name:"Malagasy",nativeName:"Malagasy fiteny"},ms:{name:"Malay",nativeName:"bahasa Melayu"},ml:{name:"Malayalam",nativeName:"\u0d2e\u0d32\u0d2f\u0d3e\u0d33\u0d02"},mt:{name:"Maltese",nativeName:"Malti"},
-mi:{name:"M\u0101ori",nativeName:"te reo M\u0101ori"},mr:{name:"Marathi",nativeName:"\u092e\u0930\u093e\u0920\u0940"},mn:{name:"Mongolian",nativeName:"\u043c\u043e\u043d\u0433\u043e\u043b"},my:{name:"Myanmar",nativeName:"\u1017\u1019\u102c\u1005\u102c"},ne:{name:"Nepali",nativeName:"\u0928\u0947\u092a\u093e\u0932\u0940"},no:{name:"Norwegian",nativeName:"Norsk"},ps:{name:"Pashto",nativeName:"\u067e\u069a\u062a\u0648"},fa:{name:"Persian",nativeName:"\u0641\u0627\u0631\u0633\u06cc"},pl:{name:"Polish",
-nativeName:"polski"},pt:{name:"Portuguese",nativeName:"Portugu\u00eas"},pa:{name:"Punjabi",nativeName:"\u0a2a\u0a70\u0a1c\u0a3e\u0a2c"},ro:{name:"Romanian",nativeName:"rom\u00e2n\u0103"},ru:{name:"Russian",nativeName:"\u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a"},sm:{name:"Samoan",nativeName:"gagana faa Samoa"},gd:{name:"Scots Gaelic",nativeName:"G\u00e0idhlig"},sr:{name:"Serbian",nativeName:"\u0441\u0440\u043f\u0441\u043a\u0438 \u0458\u0435\u0437\u0438\u043a"},st:{name:"Sesotho",
-nativeName:"Sesotho"},sn:{name:"Shona",nativeName:"chiShona"},sd:{name:"Sindhi",nativeName:"\u0938\u093f\u0928\u094d\u0927\u0940"},si:{name:"Sinhala",nativeName:"\u0dc3\u0dd2\u0d82\u0dc4\u0dbd"},sk:{name:"Slovak",nativeName:"sloven\u010dina"},sl:{name:"Slovenian",nativeName:"sloven\u0161\u010dina"},so:{name:"Somali",nativeName:"Soomaaliga"},es:{name:"Spanish",nativeName:"espa\u00f1ol"},su:{name:"Sundanese",nativeName:"Basa Sunda"},sw:{name:"Swahili",nativeName:"Kiswahili"},sv:{name:"Swedish",nativeName:"svenska"},
-tg:{name:"Tajik",nativeName:"\u0442\u043e\u04b7\u0438\u043a\u04e3"},ta:{name:"Tamil",nativeName:"\u0ba4\u0bae\u0bbf\u0bb4\u0bcd"},te:{name:"Telugu",nativeName:"\u0c24\u0c46\u0c32\u0c41\u0c17\u0c41"},th:{name:"Thai",nativeName:"\u0e44\u0e17\u0e22"},tr:{name:"Turkish",nativeName:"T\u00fcrk\u00e7e"},uk:{name:"Ukrainian",nativeName:"\u0443\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430"},ur:{name:"Urdu",nativeName:"\u0627\u0631\u062f\u0648"},uz:{name:"Uzbek",nativeName:"zbek"},vi:{name:"Vietnamese",
-nativeName:"Ti\u1ebfng Vi\u1ec7t"},cy:{name:"Welsh",nativeName:"Cymraeg"},xh:{name:"Xhosa",nativeName:"isiXhosa"},yi:{name:"Yiddish",nativeName:"\u05d9\u05d9\u05b4\u05d3\u05d9\u05e9"},yo:{name:"Yoruba",nativeName:"Yor\u00f9b\u00e1"},za:{name:"Zhuang, Chuang",nativeName:"Sa\u026f cue\u014b\u0185"},zu:{name:"Zulu",nativeName:"isiZulu"}};
-
-var array_elements = new Array(), translator_tab = false, translator_window = false;
+var array_elements = [], translator_tab = null, translator_window = null;
function isEmpty(obj) {
- return Object.keys(obj).length === 0;
+ return Object.keys(obj).length === 0;
}
-function click(info, tab) {
- chrome.storage.sync.get("uniquetab", function(items) {
- var settings_tab = {'url': 'https://translate.google.com/#auto/'+array_elements[info.menuItemId]['langCode']+'/'+encodeURIComponent(info.selectionText)};
- if (translator_tab && items.uniquetab == "yep") {
- chrome.tabs.update(translator_tab, settings_tab, function(tab){
- chrome.tabs.highlight({'windowId': tab.windowId, 'tabs': tab.index}, function() {
- chrome.windows.update(tab.windowId, {focused: true}, function() {});
- });
+function getTranslationUrl(lang, text) {
+ var params = new URLSearchParams({
+ sl: 'auto',
+ tl: lang,
+ text: text,
+ op: 'translate',
+ });
+ return 'https://translate.google.com/?' + params.toString();
+}
+
+function translationClick(info, tab) {
+ console.log(info.selectionText);
+ chrome.storage.sync.get('uniquetab', items => {
+ var url = getTranslationUrl(
+ array_elements[info.menuItemId]['langCode'], info.selectionText);
+ var settings_tab = {url};
+ if (translator_tab && items.uniquetab == 'yep') {
+ chrome.tabs.update(translator_tab, settings_tab, tab => {
+ chrome.tabs.highlight(
+ {
+ windowId: tab.windowId,
+ tabs: tab.index,
+ },
+ _ => {
+ chrome.windows.update(tab.windowId, {
+ focused: true,
+ });
+ });
});
- } else if (items.uniquetab == "panel") {
- chrome.windows.create({
- type: 'panel', url: 'https://translate.google.com/#auto/'+array_elements[info.menuItemId]['langCode']+'/'+encodeURIComponent(info.selectionText), width: 1000, height: 382}, function(tab) {
- translator_window = tab.windowId;
- translator_tab = tab.id;
- chrome.windows.onRemoved.addListener(function (windowId) {
- if (windowId == translator_window) {
- translator_window = false;
- translator_tab = false;
- }
- });
- }
- );
+ } else if (items.uniquetab == 'panel') {
+ chrome.windows.create(
+ {
+ type: 'panel',
+ url,
+ width: 1000,
+ height: 382,
+ },
+ function(tab) {
+ translator_window = tab.windowId;
+ translator_tab = tab.id;
+ chrome.windows.onRemoved.addListener(function(windowId) {
+ if (windowId == translator_window) {
+ translator_window = null;
+ translator_tab = null;
+ }
+ });
+ });
} else {
chrome.tabs.create(settings_tab, function(tab) {
translator_window = tab.windowId;
translator_tab = tab.id;
- chrome.tabs.onRemoved.addListener(function (tabId, removeInfo) {
+ chrome.tabs.onRemoved.addListener(function(tabId, removeInfo) {
if (tabId == translator_tab) {
- translator_window = false;
- translator_tab = false;
+ translator_window = null;
+ translator_tab = null;
}
});
});
@@ -55,25 +66,30 @@
});
}
-function click2(info, tab) {
+function openOptionsPage() {
if (chrome.runtime.openOptionsPage) {
// New way to open options pages, if supported (Chrome 42+).
chrome.runtime.openOptionsPage();
} else {
- chrome.tabs.create({'url': 'chrome-extension://'+chrome.i18n.getMessage("@@extension_id")+'/options.html', 'active': true}, function(tab) {
- chrome.windows.update(tab.windowId, {'focused': true}, function() {});
- });
+ chrome.tabs.create(
+ {
+ 'url': 'chrome-extension://' +
+ chrome.i18n.getMessage('@@extension_id') + '/options.html',
+ 'active': true
+ },
+ tab => {
+ chrome.windows.update(tab.windowId, {focused: true});
+ });
}
-
}
function createmenus() {
- chrome.storage.sync.get("translateinto", function(items) {
+ chrome.storage.sync.get('translateinto', function(items) {
chrome.contextMenus.removeAll();
var count = 0, singleone = true;
- for (var language in items.translateinto) {
+ for (var language of Object.keys(items.translateinto)) {
if (count == 0) {
count++;
} else {
@@ -83,130 +99,168 @@
}
if (singleone) {
- for (var language_id in items.translateinto) {
+ for (var language_id of Object.keys(items.translateinto)) {
var language = items.translateinto[language_id];
var languagem = isoLangs[language];
- var title = languagem.name + " ("+languagem.nativeName+")";
- var parent = chrome.contextMenus.create({"id": "tr_single_parent", "title": chrome.i18n.getMessage("contextmenu_title2", languagem.name), "contexts": ["selection"]});
- array_elements[parent] = new Array();
- array_elements[parent]["langCode"] = language;
- array_elements[parent]["langName"] = languagem.name;
- array_elements[parent]["langNativeName"] = language.nativeName;
+ var id = chrome.contextMenus.create({
+ 'id': 'tr_single_parent',
+ 'title': chrome.i18n.getMessage('contextmenu_title2', languagem.name),
+ 'contexts': ['selection'],
+ });
+ array_elements[id] = new Array();
+ array_elements[id]['langCode'] = language;
}
} else {
- var parent = chrome.contextMenus.create({"id": "parent", "title": chrome.i18n.getMessage("contextmenu_title"), "contexts": ["selection"]});
- for (var language_id in items.translateinto) {
+ var parentEl = chrome.contextMenus.create({
+ 'id': 'parent',
+ 'title': chrome.i18n.getMessage('contextmenu_title'),
+ 'contexts': ['selection']
+ });
+ for (var language_id of Object.keys(items.translateinto)) {
var language = items.translateinto[language_id];
var languagem = isoLangs[language];
- var title = languagem.name + " ("+languagem.nativeName+")";
- var id = chrome.contextMenus.create({"id": "tr_language_"+language, "title": title, "parentId": parent, "contexts":["selection"]});
+ var title = languagem.name + ' (' + languagem.nativeName + ')';
+ var id = chrome.contextMenus.create({
+ 'id': 'tr_language_' + language,
+ 'title': title,
+ 'parentId': parentEl,
+ 'contexts': ['selection']
+ });
array_elements[id] = new Array();
- array_elements[id]["langCode"] = language;
- array_elements[id]["langName"] = languagem.name;
- array_elements[id]["langNativeName"] = language.nativeName;
+ array_elements[id]['langCode'] = language;
}
- var id = chrome.contextMenus.create({"id": "tr_separator", "type": "separator","parentId": parent, "contexts":["selection"]});
- var id = chrome.contextMenus.create({"id": "tr_options", "title": chrome.i18n.getMessage("contextmenu_edit"), "parentId": parent, "contexts":["selection"]});
+ chrome.contextMenus.create({
+ 'id': 'tr_separator',
+ 'type': 'separator',
+ 'parentId': parentEl,
+ 'contexts': ['selection']
+ });
+ chrome.contextMenus.create({
+ 'id': 'tr_options',
+ 'title': chrome.i18n.getMessage('contextmenu_edit'),
+ 'parentId': parentEl,
+ 'contexts': ['selection']
+ });
}
});
}
chrome.runtime.onInstalled.addListener(function(details) {
chrome.storage.sync.get(null, function(items) {
- if (details.reason == "install") {
+ if (details.reason == 'install') {
if (isEmpty(items)) {
- var settings = {'translateinto': {}, 'uniquetab': ''}, default_language = chrome.i18n.getMessage("@@ui_locale").split("_")[0];
- if (isoLangs[default_language] != "undefined") {
+ var settings = {'translateinto': {}, 'uniquetab': ''},
+ default_language =
+ chrome.i18n.getMessage('@@ui_locale').split('_')[0];
+
+ if (isoLangs[default_language] != 'undefined') {
settings.translateinto[default_language] = default_language;
}
+
chrome.storage.sync.set(settings, function() {
- chrome.notifications.create("install", {
- type: "basic",
- iconUrl: "icons/translate-128.png",
- title: chrome.i18n.getMessage("notification_install_title"),
- message: chrome.i18n.getMessage("notification_install_message"),
+ chrome.notifications.create('install', {
+ type: 'basic',
+ iconUrl: 'icons/translate-128.png',
+ title: chrome.i18n.getMessage('notification_install_title'),
+ message: chrome.i18n.getMessage('notification_install_message'),
isClickable: true
- }, function(id) {});
+ });
});
}
}
- if (details.reason == "update") {
- var version = details.previousVersion.split(".");
- if (version[0] == "0" && version[1] < "6") {
- var settings = {'languages': {}, 'uniquetab': ''}, default_language = chrome.i18n.getMessage("@@ui_locale").split("_")[0];
- if (isoLangs[default_language] != "undefined") {
+ if (details.reason == 'update') {
+ var version = details.previousVersion.split('.');
+
+ // Updating from a version previous to v0.6
+ if (version[0] == '0' && version[1] < '6') {
+ var settings = {
+ languages: {},
+ uniquetab: '',
+ };
+ var default_language =
+ chrome.i18n.getMessage('@@ui_locale').split('_')[0];
+
+ if (isoLangs[default_language] != 'undefined')
settings.languages[default_language] = default_language;
- }
+
chrome.storage.sync.set(settings, function() {
- chrome.notifications.create("upgradedtostorage", {
- type: "basic",
- iconUrl: "icons/translate-128.png",
- title: chrome.i18n.getMessage("notification_upgradedtostorage_title"),
- message: chrome.i18n.getMessage("notification_upgradedtostorage_message"),
- isClickable: true
- }, function(id) {});
+ chrome.notifications.create('upgradedtostorage', {
+ type: 'basic',
+ iconUrl: 'icons/translate-128.png',
+ title:
+ chrome.i18n.getMessage('notification_upgradedtostorage_title'),
+ message: chrome.i18n.getMessage(
+ 'notification_upgradedtostorage_message'),
+ isClickable: true,
+ });
});
}
- if (version[0] == "0" && version[1] < "7") {
+
+ // Updating from a version previous to v0.7
+ if (version[0] == '0' && version[1] < '7') {
items.translateinto = {};
var i = 0;
for (var language in items.languages) {
items.translateinto[i] = items.languages[language];
i++;
}
- delete(items.languages);
- chrome.storage.sync.set(items, function() {
- chrome.notifications.create("reorder", {
- type: "basic",
- iconUrl: "icons/translate-128.png",
- title: chrome.i18n.getMessage("notification_reorder_title"),
- message: chrome.i18n.getMessage("notification_reorder_message"),
+ delete items.languages;
+ chrome.storage.sync.set(items, _ => {
+ chrome.notifications.create('reorder', {
+ type: 'basic',
+ iconUrl: 'icons/translate-128.png',
+ title: chrome.i18n.getMessage('notification_reorder_title'),
+ message: chrome.i18n.getMessage('notification_reorder_message'),
isClickable: true
- }, function(id) {});
+ });
});
}
}
});
});
-chrome.storage.onChanged.addListener(function(changes, areaName) {
- if (areaName == "sync")
- createmenus();
+chrome.storage.onChanged.addListener((changes, areaName) => {
+ if (areaName == 'sync') createmenus();
});
-chrome.storage.sync.get(null, function(items) {
+chrome.storage.sync.get(null, items => {
if (items.translateinto) {
createmenus();
} else {
chrome.contextMenus.removeAll();
- var parent = chrome.contextMenus.create({"id": "tr_parent", "title": chrome.i18n.getMessage("contextmenu_title"), "contexts":["selection"]});
- var id = chrome.contextMenus.create({"id": "tr_options", "title": chrome.i18n.getMessage("contextmenu_edit"), "parentId": parent, "contexts":["selection"]});
+ var parent = chrome.contextMenus.create({
+ 'id': 'tr_parent',
+ 'title': chrome.i18n.getMessage('contextmenu_title'),
+ 'contexts': ['selection']
+ });
+ var id = chrome.contextMenus.create({
+ 'id': 'tr_options',
+ 'title': chrome.i18n.getMessage('contextmenu_edit'),
+ 'parentId': parent,
+ 'contexts': ['selection']
+ });
}
});
-chrome.notifications.onClicked.addListener(function(notification_id) {
- switch(notification_id) {
- case "install":
- click2();
- break;
-
- case "upgradedtostorage":
- click2();
- break;
-
- case "reorder":
- click2();
- break;
+chrome.notifications.onClicked.addListener(notification_id => {
+ switch (notification_id) {
+ case 'install':
+ case 'upgradedtostorage':
+ case 'reorder':
+ openOptionsPage();
+ break;
}
- chrome.notifications.clear(notification_id, function() {
-
- });
+ chrome.notifications.clear(notification_id);
});
-chrome.contextMenus.onClicked.addListener(function(info, tab) {
- if (info.menuItemId == "tr_options") {
- click2(info, tab);
+chrome.contextMenus.onClicked.addListener((info, tab) => {
+ if (info.menuItemId == 'tr_options') {
+ openOptionsPage();
} else {
- click(info, tab);
+ translationClick(info, tab);
}
});
+
+chrome.browserAction.onClicked.addListener(_ => {
+ openOptionsPage();
+});