commit 63531066369a561a34338cbac04571b1df79de9e Author: OverPoweredDev Date: Sat Jun 5 14:42:15 2021 +0530 finished dropdown for the popup settings page diff --git a/popup/options.html b/popup/options.html index 8b8f9fb..d86e37f 100644 --- a/popup/options.html +++ b/popup/options.html @@ -27,14 +27,18 @@
Default Language to Translate to -
- - +
diff --git a/popup/options.js b/popup/options.js index e4adb17..59d605f 100644 --- a/popup/options.js +++ b/popup/options.js @@ -1,9 +1,118 @@ -// TODO: Resets default language +let globalSettings; +init() + +// Sets default language $("#default-target-language-button").click(function () { + let dropdown = $("#target-language-dropdown")[0]; + if (dropdown.style.display === "") { + dropdown.style.display = "block"; + } else { + dropdown.style.display = ""; + } +}); +$(".enabled-language").click(function () { + let selectedLanguage = getSelectedLanguage($(this)); + + globalSettings.DefaultLanguage = selectedLanguage; + $("#target-language").text(selectedLanguage); + saveGlobalSettings(globalSettings); }); // TODO: delete a website from the hover list $(".delete-website").click(function () { -}); \ No newline at end of file +}); + +function init() { + globalSettings = getGlobalSettings(); + getLangPairs(); + createDropdown($("#target-language-dropdown")); + setDefaultLanguage(globalSettings.DefaultLanguage); +} + + + +function getGlobalSettings() { + let settings = JSON.parse(localStorage.getItem("apertium.settings")); + if (settings === null) { + return { + ApertiumSource: "https://apertium.org/apy/", + DefaultLanguage: "eng", + lastUpdated: "on Installation" + } + } else { + return settings; + } +} + +function saveGlobalSettings(settings) { + let settingsJSON = JSON.stringify(settings); + localStorage.setItem("apertium.settings", settingsJSON); +} + +function getLangPairs() { + let langPairs = localStorage.getItem("apertium.langPairs"); + + if(langPairs === null) { + let languageList = fetchLanguageList(getLangPairsEndpoint()); + createLanguagePairs(languageList); + } +} + +function getLangPairsEndpoint() { + return globalSettings.ApertiumSource + "listPairs"; +} + +async function fetchLanguageList(listPairURL) { + return fetch(listPairURL) + .then(response => response.json()) + .then(data => data.responseData); +} + +function createLanguagePairs(languageList){ + let current = new Date(); + + let langPairs = { + last_updated: current.toLocaleString(), + source: globalSettings.ApertiumSource, + langPairs: languageList + }; + + let langPairsJSON = JSON.stringify(langPairs); + localStorage.setItem("apertium.langPairs", langPairsJSON); + return langPairs; +} + +function getTargetLanguages() { + let languageList = JSON.parse(localStorage.getItem("apertium.langPairs")).langPairs; + let list = []; + for (let i = 0; i < languageList.length; i++) { + list.push(languageList[i].targetLanguage); + } + return [...new Set(list)]; +} + + + +function setDefaultLanguage(defaultLanguage) { + + + $("#target-language").text(defaultLanguage); +} + +function createDropdown(parent) { + parent.empty(); + let list = getTargetLanguages(); + list.forEach((languageCode) => { + parent.append(""); + }) +} + +function getSelectedLanguage(selector) { + selector.addClass("selected-language"); + let text = $(".selected-language").text(); + selector.removeClass("selected-language"); + + return text; +} \ No newline at end of file diff --git a/popup/popup.css b/popup/popup.css index d1de05d..5c7cf84 100644 --- a/popup/popup.css +++ b/popup/popup.css @@ -221,4 +221,40 @@ tr, td, th { font-size: smaller; color: #333333; text-decoration: none; +} + +.dropdown { + position: relative; + display: inline-block; +} + +.language-dropdown { + display: none; + position: absolute; + background-color: #f1f1f1; + max-height: 9em; + width: 10em; + box-shadow: 0 0.2em 0.4em 0 rgba(0,0,0,0.2); + z-index: 2; + overflow-y: auto; +} + +#target-language-dropdown { + right: 0; +} + +.enabled-language { + color: black; + padding: 0.3em 0.4em; + + cursor: pointer; + display: block; +} + +.disabled-language { + color: gray; + padding: 0.3em 0.4em; + text-decoration: none; + display: block; + cursor: pointer; } \ No newline at end of file diff --git a/popup/popup.html b/popup/popup.html index 26b7177..dc51ffb 100644 --- a/popup/popup.html +++ b/popup/popup.html @@ -29,14 +29,17 @@
-
- - +
@@ -47,14 +50,17 @@
-
- - +
diff --git a/popup/popup.js b/popup/popup.js index 3c7aa4c..35caf60 100644 --- a/popup/popup.js +++ b/popup/popup.js @@ -1,4 +1,4 @@ -globalSettings = getGlobalSettings(); +let globalSettings = getGlobalSettings(); const INPUT_SIZE_LIMIT = 1000; const TRANSLATE_URL = "https://beta.apertium.org/apy/translate"; @@ -7,7 +7,8 @@ let prevText = ""; //TODO: Displays source languages available $("#source-language-dropdown").click(function () { - + let sourceLanguageList = getSourceList(); + createDropdown($("#source-dropdown-div"), sourceLanguageList); }); //TODO: Displays target languages available for current source @@ -44,18 +45,44 @@ $("#enable-hover-checkbox").click(function () { }); -function getGlobalSettings() { - let settings = localStorage.getItem("apertium.settings") +function init() { + +} + +function getGlobalSettings() { + let settings = JSON.parse(localStorage.getItem("apertium.settings")); if (settings === null) { return { - ApertiumSource: "https://beta.apertium.org/apy/" + ApertiumSource: "https://apertium.org/apy/", + DefaultLanguage: "eng", + lastUpdated: "on Installation" } } else { return settings; } } +function getSourceList() { + let languageList = JSON.parse(localStorage.getItem("apertium.langPairs")).langPairs; + let list = []; + for (let i = 0; i < languageList.length; i++) { + list.push(languageList[i].sourceLanguage); + } + return [...new Set(list)]; +} + +function getTargetList() { + let languageList = JSON.parse(localStorage.getItem("apertium.langPairs")).langPairs; + let list = []; + for (let i = 0; i < languageList.length; i++) { + list.push(languageList[i].targetLanguage); + } + return [...new Set(list)]; +} + + + // only return text if it is (a) non-empty; (b) less than the limit; (c) different from the previous input. function getInputText() { let inputField = $(".input-text-box"); @@ -91,4 +118,12 @@ async function getTranslation(inputText, sourceLanguage, targetLanguage) { .then(data => data.responseData.translatedText); return outputText; -} \ No newline at end of file +} + +function createDropdown(parent, list) { + parent.empty(); + list.forEach((languageCode) => { + console.log(languageCode) + parent.append(""); + }) +} diff --git a/settings/settings.js b/settings/settings.js index 51e8085..da2742c 100644 --- a/settings/settings.js +++ b/settings/settings.js @@ -43,43 +43,24 @@ $("#source-select").change(async function () { // TODO: hover-enabled table + function init() { globalSettings = getGlobalSettings(); + getLangPairs(); + createDropdown($("#target-language-dropdown")); setDefaultLanguage(globalSettings.DefaultLanguage); setApertiumSource(globalSettings.ApertiumSource); setLastUpdated(globalSettings.lastUpdated) } -function setDefaultLanguage(defaultLanguage) { - $("#target-language").text(defaultLanguage); -} - -function setApertiumSource(apertiumSource) { - let sourceSelect = $("#source-select"); - switch (apertiumSource) { - case "https://apertium.org/apy/": - sourceSelect.val("release").change(); - break; - case "https://beta.apertium.org/apy/": - sourceSelect.val("beta").change(); - break; - case "Local/Custom Source": - sourceSelect.val("custom").change(); - break; - } -} -function setLastUpdated(lastUpdated) { - let updatedText = "Last Updated: " + lastUpdated - $("#last-updated").text(updatedText); -} function getGlobalSettings() { let settings = JSON.parse(localStorage.getItem("apertium.settings")); if (settings === null) { return { - ApertiumSource: "https://beta.apertium.org/apy/", + ApertiumSource: "https://apertium.org/apy/", DefaultLanguage: "eng", lastUpdated: "on Installation" } @@ -93,6 +74,15 @@ function saveGlobalSettings(settings) { localStorage.setItem("apertium.settings", settingsJSON); } +function getLangPairs() { + let langPairs = localStorage.getItem("apertium.langPairs"); + + if(langPairs === null) { + let languageList = fetchLanguageList(getLangPairsEndpoint()); + createLanguagePairs(languageList); + } +} + async function updateLanguagePairs() { let time = new Date().toLocaleString(); let languageList = await fetchLanguageList(getLangPairsEndpoint()); @@ -116,11 +106,15 @@ async function fetchLanguageList(listPairURL) { function createLanguagePairs(languageList){ let current = new Date(); - return { + let langPairs = { last_updated: current.toLocaleString(), source: globalSettings.ApertiumSource, langPairs: languageList }; + + let langPairsJSON = JSON.stringify(langPairs); + localStorage.setItem("apertium.langPairs", langPairsJSON); + return langPairs; } function getTargetLanguages() { @@ -132,6 +126,32 @@ function getTargetLanguages() { return [...new Set(list)]; } + + +function setDefaultLanguage(defaultLanguage) { + $("#target-language").text(defaultLanguage); +} + +function setApertiumSource(apertiumSource) { + let sourceSelect = $("#source-select"); + switch (apertiumSource) { + case "https://apertium.org/apy/": + sourceSelect.val("release").change(); + break; + case "https://beta.apertium.org/apy/": + sourceSelect.val("beta").change(); + break; + case "Local/Custom Source": + sourceSelect.val("custom").change(); + break; + } +} + +function setLastUpdated(lastUpdated) { + let updatedText = "Last Updated: " + lastUpdated + $("#last-updated").text(updatedText); +} + function createDropdown(parent) { parent.empty(); let list = getTargetLanguages();