commit f0b7486120d86405c46b3ed3d36311dc2ccc314f Author: OverPoweredDev Date: Sun Jun 6 15:16:57 2021 +0530 enabled dropdowns to work everywhere diff --git a/background/storage.js b/background/storage.js index 7ece728..fb424c9 100644 --- a/background/storage.js +++ b/background/storage.js @@ -34,10 +34,12 @@ function getLanguageCodeMap(){ "mlt" : "Maltese", "mlt_translit" : "Maltese(translit.)", "cat" : "Catalan", + "cym" : "Welsh", "spa" : "Spanish", "ben" : "Bangali", "eng" : "English", "rus" : "Russian", + "eus" : "Basque", "tat" : "Tatar", "btc" : "Bati", "asm" : "Assamese", @@ -227,4 +229,26 @@ function getTargetList() { list.push(languageList[i].targetLanguage); } return [...new Set(list)]; +} + +function getSourceWithTarget(target) { + let languageList = JSON.parse(localStorage.getItem("apertium.langPairs")).langPairs; + let list = []; + for (let i = 0; i < languageList.length; i++) { + if(languageList[i].targetLanguage === target) { + list.push(languageList[i].sourceLanguage); + } + } + return [...new Set(list)]; +} + +function getTargetwithSource(source) { + let languageList = JSON.parse(localStorage.getItem("apertium.langPairs")).langPairs; + let list = []; + for (let i = 0; i < languageList.length; i++) { + if(languageList[i].sourceLanguage === source) { + list.push(languageList[i].targetLanguage); + } + } + return [...new Set(list)]; } \ No newline at end of file diff --git a/popup/options.html b/popup/options.html index 2fcdec0..df0dfdc 100644 --- a/popup/options.html +++ b/popup/options.html @@ -39,7 +39,7 @@ -
+
diff --git a/popup/popup.css b/popup/popup.css index 5c7cf84..624b412 100644 --- a/popup/popup.css +++ b/popup/popup.css @@ -233,13 +233,13 @@ tr, td, th { position: absolute; background-color: #f1f1f1; max-height: 9em; - width: 10em; + width: 10.5em; box-shadow: 0 0.2em 0.4em 0 rgba(0,0,0,0.2); z-index: 2; overflow-y: auto; } -#target-language-dropdown { +.target-language-dropdown { right: 0; } diff --git a/popup/popup.html b/popup/popup.html index 70a67e6..fac04b7 100644 --- a/popup/popup.html +++ b/popup/popup.html @@ -32,8 +32,8 @@
diff --git a/popup/popup.js b/popup/popup.js index a4fd8b7..63f2395 100644 --- a/popup/popup.js +++ b/popup/popup.js @@ -1,15 +1,40 @@ -let globalSettings = getGlobalSettings(); +let globalSettings; let prevText = ""; +init(); + //TODO: Displays source languages available -$("#source-language-dropdown").click(function () { - let sourceLanguageList = getSourceList(); - createDropdown($("#source-dropdown-div"), sourceLanguageList); +$("#source-language-button").click(function () { + let dropdown = $("#source-dropdown-div")[0]; + if (dropdown.style.display === "") { + dropdown.style.display = "block"; + } else { + dropdown.style.display = ""; + } +}); + +$(".source-language-option").click(function () { + let selectedLanguage = getSelectedLanguage($(this)); + + setSourceLanguage(selectedLanguage); + createTargetDropdown($("#target-language-button"), selectedLanguage) }); //TODO: Displays target languages available for current source -$("#target-language-dropdown").click(function () { +$("#target-language-button").click(function () { + let dropdown = $("#target-dropdown-div")[0]; + if (dropdown.style.display === "") { + dropdown.style.display = "block"; + } else { + dropdown.style.display = ""; + } +}); + +$(".target-language-option").click(function () { + let selectedLanguage = getSelectedLanguage($(this)); + setTargetLanguage(selectedLanguage); + createSourceDropdown($("#source-language-button"), selectedLanguage); }); //TODO: Exchange source and target languages if possible. Set up cases if not @@ -43,6 +68,10 @@ $("#enable-hover-checkbox").click(function () { function init() { + globalSettings = getGlobalSettings(); + setTargetLanguage(globalSettings.defaultLanguage); + createSourceDropdown($("#source-dropdown-div"), globalSettings.defaultLanguage); + createTargetDropdown($("#target-dropdown-div")); } @@ -67,6 +96,14 @@ function getInputText() { return text; } +function getSelectedLanguage(selector) { + selector.addClass("selected-language"); + let text = $(".selected-language").text(); + selector.removeClass("selected-language"); + + return text; +} + async function getTranslation(inputText, sourceLanguage, targetLanguage) { let outputText; let langPair = ""; @@ -83,9 +120,64 @@ async function getTranslation(inputText, sourceLanguage, targetLanguage) { return outputText; } -function createDropdown(parent, list) { +function setTargetLanguage(targetLanguage) { + let codeMap = getLanguageCodeMap(); + if (codeMap[targetLanguage] === undefined) { + $("#target-language").text(targetLanguage); + } else { + $("#target-language").text(codeMap[targetLanguage]); + } +} + +function setSourceLanguage(sourceLanguage) { + let codeMap = getLanguageCodeMap(); + if (codeMap[sourceLanguage] === undefined) { + $("#source-language").text(sourceLanguage); + } else { + $("#source-language").text(codeMap[sourceLanguage]); + } +} + +function createTargetDropdown(parent, source = "") { parent.empty(); + let codeMap = getLanguageCodeMap(); + + let list; + if (source) { + list = getTargetwithSource(source); + } else { + list = getTargetList(); + } + list.forEach((languageCode) => { - parent.append(""); - }) + let languageName; + if (codeMap[languageCode] === undefined) { + languageName = languageCode; + } else { + languageName = codeMap[languageCode]; + } + parent.append(""); + }); } + +function createSourceDropdown(parent, target = "") { + parent.empty(); + let codeMap = getLanguageCodeMap(); + + let list; + if (target) { + list = getSourceWithTarget(target); + } else { + list = getSourceList(); + } + + list.forEach((languageCode) => { + let languageName; + if (codeMap[languageCode] === undefined) { + languageName = languageCode; + } else { + languageName = codeMap[languageCode]; + } + parent.append(""); + }); +} \ No newline at end of file