blob: a8fd8d06f2a06ac2da85226c8ef2d20bcfea764c [file] [log] [blame]
Adrià3fb18982014-12-14 18:02:01 +01001var isoLangs = {"af":{"name":"Afrikaans","nativeName":"Afrikaans"},"sq":{"name":"Albanian","nativeName":"Shqip"},"ar":{"name":"Arabic","nativeName":"\u0639\u0631\u0628\u064a"},"hy":{"name":"Armenian","nativeName":"\u0540\u0561\u0575\u0565\u0580\u0567\u0576"},"az":{"name":"Azerbaijani","nativeName":"\u0622\u0630\u0631\u0628\u0627\u06cc\u062c\u0627\u0646 \u062f\u06cc\u0644\u06cc"},"eu":{"name":"Basque","nativeName":"Euskara"},"be":{"name":"Belarusian","nativeName":"\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u043a\u0430\u044f"},"bg":{"name":"Bulgarian","nativeName":"\u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438"},"ca":{"name":"Catalan","nativeName":"Catal\u00e0"},"ny":{"name":"Chichewa","nativeName":"chiChe\u0175a"},"zh-CN":{"name":"Chinese (Simplified)","nativeName":"\u4e2d\u6587\u7b80\u4f53"},"zh-TW":{"name":"Chinese (Traditional)","nativeName":"\u4e2d\u6587\u7e41\u9ad4"},"hr":{"name":"Croatian","nativeName":"Hrvatski"},"cs":{"name":"Czech","nativeName":"\u010ce\u0161tina"},"da":{"name":"Danish","nativeName":"Dansk"},"nl":{"name":"Dutch","nativeName":"Nederlands"},"en":{"name":"English","nativeName":"English"},"et":{"name":"Estonian","nativeName":"Eesti keel"},"tl":{"name":"Filipino","nativeName":"Filipino"},"fi":{"name":"Finnish","nativeName":"Suomi"},"fr":{"name":"French","nativeName":"Fran\u00e7ais"},"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"},"ht":{"name":"Haitian Creole","nativeName":"Krey\u00f2l ayisyen"},"iw":{"name":"Hebrew","nativeName":"\u05e2\u05d1\u05e8\u05d9\u05ea"},"hi":{"name":"Hindi","nativeName":"\u0939\u093f\u0928\u094d\u0926\u0940"},"hu":{"name":"Hungarian","nativeName":"Magyar"},"is":{"name":"Icelandic","nativeName":"\u00cdslenska"},"id":{"name":"Indonesian","nativeName":"Bahasa Indonesia"},"ga":{"name":"Irish","nativeName":"Gaeilge"},"it":{"name":"Italian","nativeName":"Italiano"},"ja":{"name":"Japanese","nativeName":"\u65e5\u672c\u8a9e"},"kk":{"name":"Kazakh","nativeName":"\u049a\u0430\u0437\u0430\u049b \u0442\u0456\u043b\u0456"},"ko":{"name":"Korean","nativeName":"\ud55c\uad6d\uc5b4"},"lv":{"name":"Latvian","nativeName":"Latvie\u0161u"},"lt":{"name":"Lithuanian","nativeName":"Lietuvi\u0173 kalba"},"mk":{"name":"Macedonian","nativeName":"\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438"},"mg":{"name":"Malagasy","nativeName":"Malagasy fiteny"},"ms":{"name":"Malay","nativeName":"Malay"},"ml":{"name":"Malayalam","nativeName":"\u0d2e\u0d32\u0d2f\u0d3e\u0d33\u0d02"},"mt":{"name":"Maltese","nativeName":"Malti"},"my":{"name":"Myanmar (Burmese)","nativeName":"\u1017\u1019\u102c\u1005\u102c"},"no":{"name":"Norwegian","nativeName":"Norsk"},"fa":{"name":"Persian","nativeName":"\u0641\u0627\u0631\u0633\u06cc"},"pl":{"name":"Polish","nativeName":"Polski"},"pt":{"name":"Portuguese","nativeName":"Portugu\u00eas"},"ro":{"name":"Romanian","nativeName":"Rom\u00e2n\u0103"},"ru":{"name":"Russian","nativeName":"\u0420\u0443\u0441\u0441\u043a\u0438\u0439"},"sr":{"name":"Serbian","nativeName":"\u0421\u0440\u043f\u0441\u043a\u0438"},"st":{"name":"Sesotho","nativeName":"Sesotho"},"si":{"name":"Sinhala","nativeName":"\u0dc3\u0dd2\u0d82\u0dc4\u0dbd"},"sk":{"name":"Slovak","nativeName":"Sloven\u010dina"},"sl":{"name":"Slovenian","nativeName":"Slovensko"},"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"},"th":{"name":"Thai","nativeName":"\u0e44\u0e17\u0e22"},"tr":{"name":"Turkish","nativeName":"T\u00fcrk\u00e7e"},"uk":{"name":"Ukrainian","nativeName":"\u0423\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"},"yi":{"name":"Yiddish","nativeName":"\u05d9\u05d9\u05b4\u05d3\u05d9\u05e9"}};
Adriàbf3ff682014-07-19 20:32:17 +02002
3
4var array_elements = new Array(), translator_tab = false, translator_window = false;
5
6function isEmpty(obj) {
7 return Object.keys(obj).length === 0;
8}
9
10function click(info, tab) {
11 chrome.storage.sync.get("uniquetab", function(items) {
12 var settings_tab = {'url': 'https://translate.google.com/#auto/'+array_elements[info.menuItemId]['langCode']+'/'+encodeURIComponent(info.selectionText)};
13 if (translator_tab && items.uniquetab == "yep") {
14 chrome.tabs.update(translator_tab, settings_tab, function(tab){
15 chrome.tabs.highlight({'windowId': tab.windowId, 'tabs': tab.index}, function() {
16 chrome.windows.update(tab.windowId, {focused: true}, function() {});
17 });
18 });
19 } else if (items.uniquetab == "panel") {
20 chrome.windows.create({
21 type: 'panel', url: 'https://translate.google.com/#auto/'+array_elements[info.menuItemId]['langCode']+'/'+encodeURIComponent(info.selectionText), width: 1000, height: 382}, function(tab) {
22 translator_window = tab.windowId;
23 translator_tab = tab.id;
24 chrome.windows.onRemoved.addListener(function (windowId) {
25 if (windowId == translator_window) {
26 translator_window = false;
27 translator_tab = false;
28 }
29 });
30 }
31 );
32 } else {
33 chrome.tabs.create(settings_tab, function(tab) {
34 translator_window = tab.windowId;
35 translator_tab = tab.id;
36 chrome.tabs.onRemoved.addListener(function (tabId, removeInfo) {
37 if (tabId == translator_tab) {
38 translator_window = false;
39 translator_tab = false;
40 }
41 });
42 });
43 }
44 });
45}
46
47function click2(info, tab) {
avm99963866f73d2015-06-29 17:09:36 +020048 if (chrome.runtime.openOptionsPage) {
49 // New way to open options pages, if supported (Chrome 42+).
50 chrome.runtime.openOptionsPage();
51 } else {
52 chrome.tabs.create({'url': 'chrome-extension://'+chrome.i18n.getMessage("@@extension_id")+'/options.html', 'active': true}, function(tab) {
53 chrome.windows.update(tab.windowId, {'focused': true}, function() {});
54 });
55 }
Adriàbf3ff682014-07-19 20:32:17 +020056
57}
58
59function createmenus() {
Adrià348cbb72014-11-09 22:20:09 +010060 chrome.storage.sync.get("translateinto", function(items) {
Adriàbf3ff682014-07-19 20:32:17 +020061 chrome.contextMenus.removeAll();
62
Adrià3a503432014-11-02 17:02:04 +010063 var count = 0, singleone = true;
Adriàbf3ff682014-07-19 20:32:17 +020064
Adrià348cbb72014-11-09 22:20:09 +010065 for (var language in items.translateinto) {
Adrià3a503432014-11-02 17:02:04 +010066 if (count == 0) {
67 count++;
68 } else {
69 singleone = false;
70 break;
71 }
Adriàbf3ff682014-07-19 20:32:17 +020072 }
73
Adrià3a503432014-11-02 17:02:04 +010074 if (singleone) {
Adrià348cbb72014-11-09 22:20:09 +010075 for (var language_id in items.translateinto) {
76 var language = items.translateinto[language_id];
Adrià3a503432014-11-02 17:02:04 +010077 var languagem = isoLangs[language];
78 var title = languagem.name + " ("+languagem.nativeName+")";
avm99963866f73d2015-06-29 17:09:36 +020079 var parent = chrome.contextMenus.create({"id": "tr_single_parent", "title": chrome.i18n.getMessage("contextmenu_title2", languagem.name), "contexts": ["selection"]}); // TODO: implement onclick click
Adrià3a503432014-11-02 17:02:04 +010080 array_elements[parent] = new Array();
81 array_elements[parent]["langCode"] = language;
82 array_elements[parent]["langName"] = languagem.name;
83 array_elements[parent]["langNativeName"] = language.nativeName;
84 }
85 } else {
avm99963866f73d2015-06-29 17:09:36 +020086 var parent = chrome.contextMenus.create({"id": "parent", "title": chrome.i18n.getMessage("contextmenu_title"), "contexts": ["selection"]});
Adrià348cbb72014-11-09 22:20:09 +010087 for (var language_id in items.translateinto) {
88 var language = items.translateinto[language_id];
Adrià3a503432014-11-02 17:02:04 +010089 var languagem = isoLangs[language];
90 var title = languagem.name + " ("+languagem.nativeName+")";
avm99963866f73d2015-06-29 17:09:36 +020091 var id = chrome.contextMenus.create({"id": "tr_language_"+language, "title": title, "parentId": parent, "contexts":["selection"]}); // TODO: implement onclick click
Adrià3a503432014-11-02 17:02:04 +010092 array_elements[id] = new Array();
93 array_elements[id]["langCode"] = language;
94 array_elements[id]["langName"] = languagem.name;
95 array_elements[id]["langNativeName"] = language.nativeName;
96 }
avm99963866f73d2015-06-29 17:09:36 +020097 var id = chrome.contextMenus.create({"id": "tr_separator", "type": "separator","parentId": parent, "contexts":["selection"]});
98 var id = chrome.contextMenus.create({"id": "tr_options", "title": chrome.i18n.getMessage("contextmenu_edit"), "parentId": parent, "contexts":["selection"]}); // TODO: implement onclick click2
Adrià3a503432014-11-02 17:02:04 +010099 }
Adriàbf3ff682014-07-19 20:32:17 +0200100 });
101}
102
103chrome.runtime.onInstalled.addListener(function(details) {
104 chrome.storage.sync.get(null, function(items) {
105 if (details.reason == "install") {
106 if (isEmpty(items)) {
Adrià348cbb72014-11-09 22:20:09 +0100107 var settings = {'translateinto': {}, 'uniquetab': ''}, default_language = chrome.i18n.getMessage("@@ui_locale").split("_")[0];
Adriàbf3ff682014-07-19 20:32:17 +0200108 if (isoLangs[default_language] != "undefined") {
Adrià348cbb72014-11-09 22:20:09 +0100109 settings.translateinto[default_language] = default_language;
Adriàbf3ff682014-07-19 20:32:17 +0200110 }
111 chrome.storage.sync.set(settings, function() {
112 chrome.notifications.create("install", {
113 type: "basic",
Adriàa2296fe2014-12-14 19:57:42 +0100114 iconUrl: "icons/translate-128.png",
Adriàbf3ff682014-07-19 20:32:17 +0200115 title: chrome.i18n.getMessage("notification_install_title"),
116 message: chrome.i18n.getMessage("notification_install_message"),
117 isClickable: true
118 }, function(id) {});
119 });
120 }
121 }
122 if (details.reason == "update") {
123 var version = details.previousVersion.split(".");
124 if (version[0] == "0" && version[1] < "6") {
125 var settings = {'languages': {}, 'uniquetab': ''}, default_language = chrome.i18n.getMessage("@@ui_locale").split("_")[0];
126 if (isoLangs[default_language] != "undefined") {
127 settings.languages[default_language] = default_language;
128 }
129 chrome.storage.sync.set(settings, function() {
130 chrome.notifications.create("upgradedtostorage", {
131 type: "basic",
Adriàa2296fe2014-12-14 19:57:42 +0100132 iconUrl: "icons/translate-128.png",
Adriàbf3ff682014-07-19 20:32:17 +0200133 title: chrome.i18n.getMessage("notification_upgradedtostorage_title"),
134 message: chrome.i18n.getMessage("notification_upgradedtostorage_message"),
135 isClickable: true
136 }, function(id) {});
137 });
138 }
Adrià348cbb72014-11-09 22:20:09 +0100139 if (version[0] == "0" && version[1] < "7") {
140 items.translateinto = {};
141 var i = 0;
142 for (var language in items.languages) {
143 items.translateinto[i] = items.languages[language];
144 i++;
145 }
146 delete(items.languages);
Adriàa2296fe2014-12-14 19:57:42 +0100147 chrome.storage.sync.set(items, function() {
148 chrome.notifications.create("reorder", {
149 type: "basic",
150 iconUrl: "icons/translate-128.png",
151 title: chrome.i18n.getMessage("notification_reorder_title"),
152 message: chrome.i18n.getMessage("notification_reorder_message"),
153 isClickable: true
154 }, function(id) {});
155 });
Adrià348cbb72014-11-09 22:20:09 +0100156 }
Adriàbf3ff682014-07-19 20:32:17 +0200157 }
158 });
159});
160
161chrome.storage.onChanged.addListener(function(changes, areaName) {
162 if (areaName == "sync")
163 createmenus();
164});
165
166chrome.storage.sync.get(null, function(items) {
Adrià348cbb72014-11-09 22:20:09 +0100167 if (items.translateinto) {
Adriàbf3ff682014-07-19 20:32:17 +0200168 createmenus();
169 } else {
170 chrome.contextMenus.removeAll();
avm99963866f73d2015-06-29 17:09:36 +0200171 var parent = chrome.contextMenus.create({"id": "tr_parent", "title": chrome.i18n.getMessage("contextmenu_title"), "contexts":["selection"]});
172 var id = chrome.contextMenus.create({"id": "tr_options", "title": chrome.i18n.getMessage("contextmenu_edit"), "parentId": parent, "contexts":["selection"]});
Adriàbf3ff682014-07-19 20:32:17 +0200173 }
174});
175
176chrome.notifications.onClicked.addListener(function(notification_id) {
177 switch(notification_id) {
178 case "install":
179 click2();
180 break;
181
182 case "upgradedtostorage":
183 click2();
184 break;
Adriàa2296fe2014-12-14 19:57:42 +0100185
186 case "reorder":
187 click2();
188 break;
Adriàbf3ff682014-07-19 20:32:17 +0200189 }
190 chrome.notifications.clear(notification_id, function() {
191
192 });
avm99963866f73d2015-06-29 17:09:36 +0200193});
194
195chrome.contextMenus.onClicked.addListener(function(info, tab) {
196 if (info.menuItemId == "tr_options") {
197 click2(info, tab);
198 } else {
199 click(info, tab);
200 }
Adriàbf3ff682014-07-19 20:32:17 +0200201});