diff --git a/src/js/common.js b/src/js/common.js
new file mode 100644
index 0000000..8289ced
--- /dev/null
+++ b/src/js/common.js
@@ -0,0 +1,106 @@
+var isoLangs = {
+  'af': {'name': 'Afrikaans', 'nativeName': 'Afrikaans'},
+  'sq': {'name': 'Albanian', 'nativeName': 'Shqip'},
+  'am': {'name': 'Amharic', 'nativeName': 'አማርኛ'},
+  'ar': {'name': 'Arabic', 'nativeName': 'العربية'},
+  'hy': {'name': 'Armenian', 'nativeName': 'Հայերեն'},
+  'az': {'name': 'Azerbaijani', 'nativeName': 'azərbaycan dili'},
+  'eu': {'name': 'Basque', 'nativeName': 'euskara'},
+  'be': {'name': 'Belarusian', 'nativeName': 'Беларуская'},
+  'bn': {'name': 'Bengali', 'nativeName': 'বাংলা'},
+  'bs': {'name': 'Bosnian', 'nativeName': 'bosanski jezik'},
+  'bg': {'name': 'Bulgarian', 'nativeName': 'български език'},
+  'ca': {'name': 'Catalan', 'nativeName': 'Català'},
+  'ceb': {'name': 'Cebuano', 'nativeName': 'Bisaya'},
+  'ny': {'name': 'Chichewa', 'nativeName': 'chiCheŵa'},
+  'zh': {'name': 'Chinese', 'nativeName': '中文 (Zhōngwén)'},
+  'co': {'name': 'Corsican', 'nativeName': 'corsu'},
+  'hr': {'name': 'Croatian', 'nativeName': 'hrvatski'},
+  'cs': {'name': 'Czech', 'nativeName': 'česky'},
+  '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çais'},
+  'fy': {'name': 'Frisian', 'nativeName': 'Frysk'},
+  'gl': {'name': 'Galician', 'nativeName': 'Galego'},
+  'ka': {'name': 'Georgian', 'nativeName': 'ქართული'},
+  'de': {'name': 'German', 'nativeName': 'Deutsch'},
+  'el': {'name': 'Greek', 'nativeName': 'Ελληνικά'},
+  'gu': {'name': 'Gujarati', 'nativeName': 'ગુજરાતી'},
+  'ht': {'name': 'Haitian Creole', 'nativeName': 'Kreyòl ayisyen'},
+  'ha': {'name': 'Hausa', 'nativeName': 'Hausa'},
+  'haw': {'name': 'Hawaiian', 'nativeName': 'Hausa'},
+  'iw': {'name': 'Hebrew', 'nativeName': 'עברית'},
+  'hi': {'name': 'Hindi', 'nativeName': 'हिन्दी, हिंदी'},
+  'hmn': {'name': 'Hmong', 'nativeName': 'lus Hmoob'},
+  'hu': {'name': 'Hungarian', 'nativeName': 'Magyar'},
+  'is': {'name': 'Icelandic', 'nativeName': 'Íslenska'},
+  'ig': {'name': 'Igbo', 'nativeName': 'Asụsụ Igbo'},
+  'id': {'name': 'Indonesian', 'nativeName': 'Bahasa Indonesia'},
+  'ga': {'name': 'Irish', 'nativeName': 'Gaeilge'},
+  'it': {'name': 'Italian', 'nativeName': 'Italiano'},
+  'ja': {'name': 'Japanese', 'nativeName': '日本語 (にほんご／にっぽんご)'},
+  'jv': {'name': 'Javanese', 'nativeName': 'basa Jawa'},
+  'kn': {'name': 'Kannada', 'nativeName': 'ಕನ್ನಡ'},
+  'kk': {'name': 'Kazakh', 'nativeName': 'Қазақ тілі'},
+  'km': {'name': 'Khmer', 'nativeName': 'ភាសាខ្មែរ'},
+  'ko': {'name': 'Korean', 'nativeName': '한국어 (韓國語)'},
+  'ku': {'name': 'Kurdish (Kurmanji)', 'nativeName': 'Kurdî'},
+  'ky': {'name': 'Kyrgyz', 'nativeName': 'кыргыз тили'},
+  'lo': {'name': 'Lao', 'nativeName': 'ພາສາລາວ'},
+  'la': {'name': 'Latin', 'nativeName': 'latine'},
+  'lv': {'name': 'Latvian', 'nativeName': 'latviešu valoda'},
+  'lt': {'name': 'Lithuanian', 'nativeName': 'lietuvių kalba'},
+  'lb': {'name': 'Luxembourgish', 'nativeName': 'Lëtzebuergesch'},
+  'mk': {'name': 'Macedonian', 'nativeName': 'македонски јазик'},
+  'mg': {'name': 'Malagasy', 'nativeName': 'Malagasy fiteny'},
+  'ms': {'name': 'Malay', 'nativeName': 'bahasa Melayu'},
+  'ml': {'name': 'Malayalam', 'nativeName': 'മലയാളം'},
+  'mt': {'name': 'Maltese', 'nativeName': 'Malti'},
+  'mi': {'name': 'Māori', 'nativeName': 'te reo Māori'},
+  'mr': {'name': 'Marathi', 'nativeName': 'मराठी'},
+  'mn': {'name': 'Mongolian', 'nativeName': 'монгол'},
+  'my': {'name': 'Myanmar', 'nativeName': 'ဗမာစာ'},
+  'ne': {'name': 'Nepali', 'nativeName': 'नेपाली'},
+  'no': {'name': 'Norwegian', 'nativeName': 'Norsk'},
+  'ps': {'name': 'Pashto', 'nativeName': 'پښتو'},
+  'fa': {'name': 'Persian', 'nativeName': 'فارسی'},
+  'pl': {'name': 'Polish', 'nativeName': 'polski'},
+  'pt': {'name': 'Portuguese', 'nativeName': 'Português'},
+  'pa': {'name': 'Punjabi', 'nativeName': 'ਪੰਜਾਬ'},
+  'ro': {'name': 'Romanian', 'nativeName': 'română'},
+  'ru': {'name': 'Russian', 'nativeName': 'русский язык'},
+  'sm': {'name': 'Samoan', 'nativeName': 'gagana faa Samoa'},
+  'gd': {'name': 'Scots Gaelic', 'nativeName': 'Gàidhlig'},
+  'sr': {'name': 'Serbian', 'nativeName': 'српски језик'},
+  'st': {'name': 'Sesotho', 'nativeName': 'Sesotho'},
+  'sn': {'name': 'Shona', 'nativeName': 'chiShona'},
+  'sd': {'name': 'Sindhi', 'nativeName': 'सिन्धी'},
+  'si': {'name': 'Sinhala', 'nativeName': 'සිංහල'},
+  'sk': {'name': 'Slovak', 'nativeName': 'slovenčina'},
+  'sl': {'name': 'Slovenian', 'nativeName': 'slovenščina'},
+  'so': {'name': 'Somali', 'nativeName': 'Soomaaliga'},
+  'es': {'name': 'Spanish', 'nativeName': 'español'},
+  'su': {'name': 'Sundanese', 'nativeName': 'Basa Sunda'},
+  'sw': {'name': 'Swahili', 'nativeName': 'Kiswahili'},
+  'sv': {'name': 'Swedish', 'nativeName': 'svenska'},
+  'tg': {'name': 'Tajik', 'nativeName': 'тоҷикӣ'},
+  'ta': {'name': 'Tamil', 'nativeName': 'தமிழ்'},
+  'te': {'name': 'Telugu', 'nativeName': 'తెలుగు'},
+  'th': {'name': 'Thai', 'nativeName': 'ไทย'},
+  'tr': {'name': 'Turkish', 'nativeName': 'Türkçe'},
+  'uk': {'name': 'Ukrainian', 'nativeName': 'українська'},
+  'ur': {'name': 'Urdu', 'nativeName': 'اردو'},
+  'uz': {'name': 'Uzbek', 'nativeName': 'zbek'},
+  'vi': {'name': 'Vietnamese', 'nativeName': 'Tiếng Việt'},
+  'cy': {'name': 'Welsh', 'nativeName': 'Cymraeg'},
+  'xh': {'name': 'Xhosa', 'nativeName': 'isiXhosa'},
+  'yi': {'name': 'Yiddish', 'nativeName': 'ייִדיש'},
+  'yo': {'name': 'Yoruba', 'nativeName': 'Yorùbá'},
+  'za': {'name': 'Zhuang, Chuang', 'nativeName': 'Saɯ cueŋƅ'},
+  'zu': {'name': 'Zulu', 'nativeName': 'isiZulu'}
+};
diff --git a/src/js/options.js b/src/js/options.js
index 147b02e..eba0a1a 100644
--- a/src/js/options.js
+++ b/src/js/options.js
@@ -1,16 +1,3 @@
-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"}};
-
 function $(selector) {
     return document.querySelector(selector);
 }
@@ -24,154 +11,187 @@
 }
 
 function i18n() {
-    $("#welcome").innerHTML = chrome.i18n.getMessage("options_welcome");
-    $("#introduction").innerHTML = chrome.i18n.getMessage("options_introduction");
-    //$("#languageselectheader").innerHTML = chrome.i18n.getMessage("options_languageselectheader");
-    $("#otheroptionsheader").innerHTML = chrome.i18n.getMessage("options_otheroptionsheader");
-    $("#varioustabs_label").innerHTML = chrome.i18n.getMessage("options_tabsoption_1");
-    $("#uniquetab_label").innerHTML = chrome.i18n.getMessage("options_tabsoption_2");
-    $("#panel_label").innerHTML = chrome.i18n.getMessage("options_tabsoption_3");
-    $("#languages_add").innerHTML = chrome.i18n.getMessage("options_addlanguage_addbutton");
-    $("#save").innerHTML = chrome.i18n.getMessage("options_savebutton");
-    $("#credits").innerHTML = chrome.i18n.getMessage("options_credits");
-    $("#credits_dialog h3").innerHTML = chrome.i18n.getMessage("options_credits");
-    $("#languages_add_ok").innerHTML = chrome.i18n.getMessage("options_ok");
-    $("#languages_add_cancel").innerHTML = chrome.i18n.getMessage("options_cancel");
-    $("#credits_ok").innerHTML = chrome.i18n.getMessage("options_ok");
-    $("#languages_add_dialog h3").innerHTML = chrome.i18n.getMessage("options_addlanguage");
-    $("#language_label").innerHTML = chrome.i18n.getMessage("options_language_label");
+    $all('[data-i18n]').forEach(el => {
+        el.innerHTML =
+            chrome.i18n.getMessage('options_' + el.getAttribute('data-i18n'));
+    });
 }
 
-function print_list_modal() {
-    $("#select_language").innerHTML = "";
+function printListModal() {
+    $('#select_language').textContent = '';
     var heysortable = sortable.toArray();
     for (var language in isoLangs) {
         if (!inArray(language, heysortable)) {
             var el = document.createElement('option');
             el.setAttribute('value', language);
-            el.innerText = isoLangs[language]["name"]+" ("+isoLangs[language]["nativeName"]+")";
-            $("#select_language").appendChild(el);
+            el.innerText = isoLangs[language]['name'] + ' (' +
+                isoLangs[language]['nativeName'] + ')';
+            $('#select_language').appendChild(el);
         }
     }
 }
 
 function init() {
     i18n();
-    chrome.storage.sync.get(null, function(items) {
+    chrome.storage.sync.get(null, items => {
         // If no settings are set
         if (isEmpty(items)) {
-            items = {'translateinto': {}, 'uniquetab': ''};
-            chrome.storage.sync.set({'translateinto': {}, 'uniquetab': ''});
+            items = {
+                translateinto: {},
+                uniquetab: '',
+            };
+            chrome.storage.sync.set(items);
         }
 
         // Check the checkbox of the window opening
-        if (items.uniquetab === "yep")
-            $("#uniquetab").checked = true;
-        if (items.uniquetab === "")
-            $("#varioustabs").checked = true;
-        if (items.uniquetab === "panel")
-            $("#panel").checked = true;
+        if (items.uniquetab === 'yep') $('#uniquetab').checked = true;
+        if (items.uniquetab === '') $('#varioustabs').checked = true;
+        if (items.uniquetab === 'panel') $('#panel').checked = true;
 
         // Add event listeners for certain buttons and links
-        $("#panelsflag").addEventListener('click', function() { event.preventDefault(); chrome.tabs.create({url: 'chrome://flags/#enable-panels'}); });
-        $("#save").addEventListener('click', function() {
-            save_options();
+        $('#panelsflag').addEventListener('click', _ => {
+            event.preventDefault();
+            chrome.tabs.create({url: 'chrome://flags/#enable-panels'});
+        });
+
+        $('#save').addEventListener('click', _ => {
+            saveOptions();
         });
 
         // Print selected language list
         var languages = items.translateinto;
 
         if (languages) {
-            for (var language_id in languages) {
+            for (var language_id of Object.keys(languages)) {
                 var language = languages[language_id];
                 var el = document.createElement('li');
                 el.setAttribute('data-language', language);
                 el.setAttribute('data-id', language);
-                el.innerHTML = isoLangs[language]["name"]+" ("+isoLangs[language]["nativeName"]+")"+"<span data-language='"+language+"' class='delete'>x</span>";
-                $("#languages").appendChild(el);
-                $("#languages li[data-language="+language+"] .delete").addEventListener('click', function() {
-                    $("#languages").removeChild($("li[data-language="+this.getAttribute("data-language")+"]"));
-                    print_list_modal();
-                });
+                el.innerHTML = isoLangs[language]['name'] + ' (' +
+                    isoLangs[language]['nativeName'] + ')' +
+                    '<span data-language=\'' + language +
+                    '\' class=\'delete\'>x</span>';
+                $('#languages').appendChild(el);
+                $('#languages li[data-language=' + language + '] .delete')
+                    .addEventListener('click', function() {
+                        $('#languages')
+                            .removeChild(
+                                $('li[data-language=' +
+                                  this.getAttribute('data-language') + ']'));
+                        printListModal();
+                    });
             }
         }
 
         // Initiate Sortable
-        sortable = new Sortable($("#languages"), {
-            animation: 150
-        });
+        sortable = new Sortable($('#languages'), {animation: 150});
 
         // Handling The Dialog
-        $("#languages_add").addEventListener('click', function() { $("dialog#languages_add_dialog").showModal(); $("#select_language").focus(); });
-        $("#languages_add_cancel").addEventListener('click', function() { $("dialog#languages_add_dialog").close(); });
-        $("#languages_add_ok").addEventListener('click', function() {
+        $('#languages_add').addEventListener('click', _ => {
+            $('dialog#languages_add_dialog').showModal();
+            $('#select_language').focus();
+        });
+
+        $('#languages_add_cancel').addEventListener('click', _ => {
+            $('dialog#languages_add_dialog').close();
+        });
+
+        $('#languages_add_ok').addEventListener('click', _ => {
             var el = document.createElement('li');
-            var language = $("#select_language").value;
+            var language = $('#select_language').value;
             if (inArray(language, sortable.toArray())) {
                 return;
             }
             el.setAttribute('data-language', language);
             el.setAttribute('data-id', language);
-            el.innerHTML = isoLangs[language]["name"]+" ("+isoLangs[language]["nativeName"]+")"+"<span data-language='"+language+"' class='delete'>x</span>";
-            $("#languages").appendChild(el);
-            var selection = $("#select_language option[value="+language+"]");
+            el.innerHTML = isoLangs[language]['name'] + ' (' +
+                isoLangs[language]['nativeName'] + ')' +
+                '<span data-language=\'' + language +
+                '\' class=\'delete\'>x</span>';
+            $('#languages').appendChild(el);
+            var selection =
+                $('#select_language option[value=' + language + ']');
             selection.parentNode.removeChild(selection);
-            $("#languages li[data-id="+language+"] .delete").addEventListener('click', function() {
-                $("#languages").removeChild($("li[data-language="+this.getAttribute("data-language")+"]"));
-                print_list_modal();
-            });
-            $("dialog").close();
+            $('#languages li[data-id=' + language + '] .delete')
+                .addEventListener('click', function() {
+                    $('#languages')
+                        .removeChild(
+                            $('li[data-language=' +
+                              this.getAttribute('data-language') + ']'));
+                    printListModal();
+                });
+            $('dialog').close();
         });
 
         // About credits...
-        var xhr = new XMLHttpRequest();
-        xhr.onreadystatechange = function() {
-            if (xhr.readyState == 4 && xhr.status == 200) {
-                var json = JSON.parse(xhr.responseText), printhtml = "";
-                for (var item in json) {
-                    printhtml += "<div>";
-                    if (json[item].url) {
-                        printhtml += "<a href='"+json[item].url+"' class='homepage' target='_blank'>"+chrome.i18n.getMessage("options_credits_homepage")+"</a>";
+        fetch('json/credits.json')
+            .then(res => res.json())
+            .then(json => {
+                var content = $('dialog#credits_dialog .content_area');
+                json.forEach(item => {
+                    var div = document.createElement('div');
+                    if (item.url) {
+                        var a = document.createElement('a');
+                        a.classList.add('homepage');
+                        a.href = item.url;
+                        a.target = '_blank';
+                        a.textContent =
+                            chrome.i18n.getMessage('options_credits_homepage');
+                        div.append(a);
                     }
-                    printhtml += "<h4>"+json[item].name+"</h4>";
-                    if (json[item].author) {
-                        printhtml += "<p class='author'>"+chrome.i18n.getMessage("options_credits_by")+" "+json[item].author;
-                    }
-                    if (json[item].license) {
-                        printhtml += " – "+json[item].license+"</p>";
-                    } else {
-                        printhtml += "</p>";
-                    }
-                    printhtml += "</div>";
-                }
-                $("dialog#credits_dialog .content_area").innerHTML = printhtml;
-                window.onhashchange = function() {
-                    if (location.hash == "#credits") {
-                        $("dialog#credits_dialog").showModal();
-                        $("#credits_ok").focus();
-                    }
-                }
-                if (location.hash == "#credits") {
-                    $("dialog#credits_dialog").showModal();
-                    $("#credits_ok").focus();
-                }
-                $("#credits_ok").addEventListener('click', function() { $("dialog#credits_dialog").close(); });
-                $("dialog#credits_dialog").addEventListener('close', function() { history.pushState("", document.title, window.location.pathname + window.location.search); });
-            }
-        }
-        xhr.open("GET", "json/credits.json", true);
-        xhr.send();
 
-        // Print language list in the modal dialog
-        print_list_modal();
+                    var h4 = document.createElement('h4');
+                    h4.textContent = item.name;
+                    div.append(h4);
+
+                    if (item.author) {
+                        var p = document.createElement('p');
+                        p.classList.add('author');
+                        p.textContent =
+                            chrome.i18n.getMessage('options_credits_by') + ' ' +
+                            item.author +
+                            (item.license ? ' - ' + item.license : '');
+                        div.append(p);
+                    }
+                    content.append(div);
+                });
+
+                window.onhashchange = function() {
+                    if (location.hash == '#credits') {
+                        $('dialog#credits_dialog').showModal();
+                        $('#credits_ok').focus();
+                    }
+                };
+
+                if (location.hash == '#credits') {
+                    $('dialog#credits_dialog').showModal();
+                    $('#credits_ok').focus();
+                }
+
+                $('#credits_ok').addEventListener('click', _ => {
+                    $('dialog#credits_dialog').close();
+                });
+                $('dialog#credits_dialog').addEventListener('close', _ => {
+                    history.pushState(
+                        '', document.title,
+                        window.location.pathname + window.location.search);
+                });
+
+                // Print language list in the modal dialog
+                printListModal();
+            })
+            .catch(err => console.log(err));
     });
 }
 
-function save_options() {
-    var languages = document.getElementById("languages");
-    var options = {"uniquetab": "", "translateinto": {}};
+function saveOptions() {
+    var languages = document.getElementById('languages');
+    var options = {
+        uniquetab: '',
+        translateinto: {},
+    };
 
-    options.uniquetab = radio_selected("uniquetab");
+    options.uniquetab = radioSelected('uniquetab');
 
     var selected_languages = sortable.toArray();
 
@@ -189,29 +209,19 @@
         background.translator_window = false;
         window.close();
     });
-
-    // We don't need the following code because the background.js is already listening to changes in chrome.sync ;-) Yeeey!
-    //chrome.extension.getBackgroundPage().createmenus(JSON.stringify(options));
 }
 
-function toObject(arr) {
-    var rv = {};
-    for (var i = 0; i < arr.length; ++i)
-        if (arr[i] !== undefined) rv[i] = arr[i];
-    return rv;
-}
-
-function radio_selected(a) {
+function radioSelected(a) {
     var elements = document.getElementsByName(a);
 
-    for (var i=0; i<elements.length; i++)
+    for (var i = 0; i < elements.length; i++)
         if (elements[i].checked) return elements[i].value;
 }
 
 function inArray(needle, haystack) {
     var length = haystack.length;
-    for(var i = 0; i < length; i++) {
-        if(haystack[i] == needle) return true;
+    for (var i = 0; i < length; i++) {
+        if (haystack[i] == needle) return true;
     }
     return false;
 }
