Adrià | bf3ff68 | 2014-07-19 20:32:17 +0200 | [diff] [blame] | 1 | var 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"},"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"},"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"},"ms":{"name":"Malay","nativeName":"Malay"},"mt":{"name":"Maltese","nativeName":"Malti"},"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"},"sk":{"name":"Slovak","nativeName":"Sloven\u010dina"},"sl":{"name":"Slovenian","nativeName":"Slovensko"},"es":{"name":"Spanish","nativeName":"Espa\u00f1ol"},"sw":{"name":"Swahili","nativeName":"Kiswahili"},"sv":{"name":"Swedish","nativeName":"Svenska"},"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"},"vi":{"name":"Vietnamese","nativeName":"Ti\u1ebfng Vi\u1ec7t"},"cy":{"name":"Welsh","nativeName":"Cymraeg"},"yi":{"name":"Yiddish","nativeName":"\u05d9\u05d9\u05b4\u05d3\u05d9\u05e9"}}; |
| 2 | |
| 3 | |
| 4 | var array_elements = new Array(), translator_tab = false, translator_window = false; |
| 5 | |
| 6 | function isEmpty(obj) { |
| 7 | return Object.keys(obj).length === 0; |
| 8 | } |
| 9 | |
| 10 | function 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 | |
| 47 | function click2(info, tab) { |
| 48 | chrome.tabs.create({'url': 'chrome-extension://'+chrome.i18n.getMessage("@@extension_id")+'/options.html', 'active': true}, function(tab) { |
| 49 | chrome.windows.update(tab.windowId, {'focused': true}, function() {}); |
| 50 | }); |
| 51 | |
| 52 | } |
| 53 | |
| 54 | function createmenus() { |
Adrià | 348cbb7 | 2014-11-09 22:20:09 +0100 | [diff] [blame^] | 55 | chrome.storage.sync.get("translateinto", function(items) { |
Adrià | bf3ff68 | 2014-07-19 20:32:17 +0200 | [diff] [blame] | 56 | chrome.contextMenus.removeAll(); |
| 57 | |
Adrià | 3a50343 | 2014-11-02 17:02:04 +0100 | [diff] [blame] | 58 | var count = 0, singleone = true; |
Adrià | bf3ff68 | 2014-07-19 20:32:17 +0200 | [diff] [blame] | 59 | |
Adrià | 348cbb7 | 2014-11-09 22:20:09 +0100 | [diff] [blame^] | 60 | for (var language in items.translateinto) { |
Adrià | 3a50343 | 2014-11-02 17:02:04 +0100 | [diff] [blame] | 61 | if (count == 0) { |
| 62 | count++; |
| 63 | } else { |
| 64 | singleone = false; |
| 65 | break; |
| 66 | } |
Adrià | bf3ff68 | 2014-07-19 20:32:17 +0200 | [diff] [blame] | 67 | } |
| 68 | |
Adrià | 3a50343 | 2014-11-02 17:02:04 +0100 | [diff] [blame] | 69 | if (singleone) { |
Adrià | 348cbb7 | 2014-11-09 22:20:09 +0100 | [diff] [blame^] | 70 | for (var language_id in items.translateinto) { |
| 71 | var language = items.translateinto[language_id]; |
Adrià | 3a50343 | 2014-11-02 17:02:04 +0100 | [diff] [blame] | 72 | var languagem = isoLangs[language]; |
| 73 | var title = languagem.name + " ("+languagem.nativeName+")"; |
| 74 | var parent = chrome.contextMenus.create({"title": chrome.i18n.getMessage("contextmenu_title2", languagem.name), "contexts": ["selection"], "onclick": click}); |
| 75 | array_elements[parent] = new Array(); |
| 76 | array_elements[parent]["langCode"] = language; |
| 77 | array_elements[parent]["langName"] = languagem.name; |
| 78 | array_elements[parent]["langNativeName"] = language.nativeName; |
| 79 | } |
| 80 | } else { |
| 81 | var parent = chrome.contextMenus.create({"title": chrome.i18n.getMessage("contextmenu_title"), "contexts": ["selection"]}); |
Adrià | 348cbb7 | 2014-11-09 22:20:09 +0100 | [diff] [blame^] | 82 | for (var language_id in items.translateinto) { |
| 83 | var language = items.translateinto[language_id]; |
Adrià | 3a50343 | 2014-11-02 17:02:04 +0100 | [diff] [blame] | 84 | var languagem = isoLangs[language]; |
| 85 | var title = languagem.name + " ("+languagem.nativeName+")"; |
| 86 | var id = chrome.contextMenus.create({"title": title, "parentId": parent, "contexts":["selection"], "onclick": click}); |
| 87 | array_elements[id] = new Array(); |
| 88 | array_elements[id]["langCode"] = language; |
| 89 | array_elements[id]["langName"] = languagem.name; |
| 90 | array_elements[id]["langNativeName"] = language.nativeName; |
| 91 | } |
| 92 | var id = chrome.contextMenus.create({"type": "separator","parentId": parent, "contexts":["selection"], "onclick": click2}); |
| 93 | var id = chrome.contextMenus.create({"title": chrome.i18n.getMessage("contextmenu_edit"), "parentId": parent, "contexts":["selection"], "onclick": click2}); |
| 94 | } |
Adrià | bf3ff68 | 2014-07-19 20:32:17 +0200 | [diff] [blame] | 95 | }); |
| 96 | } |
| 97 | |
| 98 | chrome.runtime.onInstalled.addListener(function(details) { |
| 99 | chrome.storage.sync.get(null, function(items) { |
| 100 | if (details.reason == "install") { |
| 101 | if (isEmpty(items)) { |
Adrià | 348cbb7 | 2014-11-09 22:20:09 +0100 | [diff] [blame^] | 102 | var settings = {'translateinto': {}, 'uniquetab': ''}, default_language = chrome.i18n.getMessage("@@ui_locale").split("_")[0]; |
Adrià | bf3ff68 | 2014-07-19 20:32:17 +0200 | [diff] [blame] | 103 | if (isoLangs[default_language] != "undefined") { |
Adrià | 348cbb7 | 2014-11-09 22:20:09 +0100 | [diff] [blame^] | 104 | settings.translateinto[default_language] = default_language; |
Adrià | bf3ff68 | 2014-07-19 20:32:17 +0200 | [diff] [blame] | 105 | } |
| 106 | chrome.storage.sync.set(settings, function() { |
| 107 | chrome.notifications.create("install", { |
| 108 | type: "basic", |
| 109 | iconUrl: "translate-128.png", |
| 110 | title: chrome.i18n.getMessage("notification_install_title"), |
| 111 | message: chrome.i18n.getMessage("notification_install_message"), |
| 112 | isClickable: true |
| 113 | }, function(id) {}); |
| 114 | }); |
| 115 | } |
| 116 | } |
| 117 | if (details.reason == "update") { |
| 118 | var version = details.previousVersion.split("."); |
| 119 | if (version[0] == "0" && version[1] < "6") { |
| 120 | var settings = {'languages': {}, 'uniquetab': ''}, default_language = chrome.i18n.getMessage("@@ui_locale").split("_")[0]; |
| 121 | if (isoLangs[default_language] != "undefined") { |
| 122 | settings.languages[default_language] = default_language; |
| 123 | } |
| 124 | chrome.storage.sync.set(settings, function() { |
| 125 | chrome.notifications.create("upgradedtostorage", { |
| 126 | type: "basic", |
| 127 | iconUrl: "translate-128.png", |
| 128 | title: chrome.i18n.getMessage("notification_upgradedtostorage_title"), |
| 129 | message: chrome.i18n.getMessage("notification_upgradedtostorage_message"), |
| 130 | isClickable: true |
| 131 | }, function(id) {}); |
| 132 | }); |
| 133 | } |
Adrià | 348cbb7 | 2014-11-09 22:20:09 +0100 | [diff] [blame^] | 134 | if (version[0] == "0" && version[1] < "7") { |
| 135 | items.translateinto = {}; |
| 136 | var i = 0; |
| 137 | for (var language in items.languages) { |
| 138 | items.translateinto[i] = items.languages[language]; |
| 139 | i++; |
| 140 | } |
| 141 | delete(items.languages); |
| 142 | chrome.storage.sync.set(items); |
| 143 | } |
Adrià | bf3ff68 | 2014-07-19 20:32:17 +0200 | [diff] [blame] | 144 | } |
| 145 | }); |
| 146 | }); |
| 147 | |
| 148 | chrome.storage.onChanged.addListener(function(changes, areaName) { |
| 149 | if (areaName == "sync") |
| 150 | createmenus(); |
| 151 | }); |
| 152 | |
| 153 | chrome.storage.sync.get(null, function(items) { |
Adrià | 348cbb7 | 2014-11-09 22:20:09 +0100 | [diff] [blame^] | 154 | if (items.translateinto) { |
Adrià | bf3ff68 | 2014-07-19 20:32:17 +0200 | [diff] [blame] | 155 | createmenus(); |
| 156 | } else { |
| 157 | chrome.contextMenus.removeAll(); |
| 158 | var parent = chrome.contextMenus.create({"title": chrome.i18n.getMessage("contextmenu_title"), "contexts":["selection"]}); |
| 159 | var id = chrome.contextMenus.create({"title": chrome.i18n.getMessage("contextmenu_edit"), "parentId": parent, "contexts":["selection"], "onclick": click2}); |
| 160 | } |
| 161 | }); |
| 162 | |
| 163 | chrome.notifications.onClicked.addListener(function(notification_id) { |
| 164 | switch(notification_id) { |
| 165 | case "install": |
| 166 | click2(); |
| 167 | break; |
| 168 | |
| 169 | case "upgradedtostorage": |
| 170 | click2(); |
| 171 | break; |
| 172 | } |
| 173 | chrome.notifications.clear(notification_id, function() { |
| 174 | |
| 175 | }); |
| 176 | }); |