commit 83f63c16ca160d4783c5aafb2005af17794f677b Author: OverPoweredDev Date: Tue Jun 22 17:30:52 2021 +0530 added feature: hover translation diff --git a/src/background/background.js b/src/background/background.js index 2f86a6c..20193b5 100644 --- a/src/background/background.js +++ b/src/background/background.js @@ -3,8 +3,8 @@ window.browser = (function () { })(); browser.runtime.onMessage.addListener(function(request, sender, sendResponse) { - if (request.method === "getEnabledList") { - sendResponse({list: getEnabledWebsiteList()}); + if (request.method === "getSettings") { + sendResponse({settings: getGlobalSettings()}); } else { sendResponse({}); // snub them. } diff --git a/src/background/storage.js b/src/background/storage.js index 2450aad..f63d498 100644 --- a/src/background/storage.js +++ b/src/background/storage.js @@ -216,7 +216,7 @@ function getLanguageCodeMap(){ } -//API EndPoints +// API EndPoints function getLangPairsEndpoint() { return getGlobalSettings().apertiumSource + "listPairs"; } @@ -226,7 +226,7 @@ function getTranslationEndpoint() { } -//TODO: Enabled Website List +// Enabled Website List function getEnabledWebsiteList(){ let settings = getGlobalSettings(); return settings.enabledWebsites; @@ -268,7 +268,7 @@ function addToEnabledWebsiteList(settings, url) { } -//Source/Target Language Lists +// Source/Target Language Lists function getSourceList() { let languageList = getLangPairs().langPairs; let list = []; diff --git a/src/content/content.js b/src/content/content.js index 4195732..2495726 100644 --- a/src/content/content.js +++ b/src/content/content.js @@ -1,13 +1,27 @@ -let enabledList; - -chrome.runtime.sendMessage({method: "getEnabledList"}, function (response) { - enabledList = response.list; - addHoverElements(); +chrome.runtime.sendMessage({method: "getSettings"}, function (response) { + let enabledList = response.settings; + addHoverElements(enabledList); }); -function addHoverElements() { +function addHoverElements(settings) { + let enabledList = settings.enabledWebsites; if (enabledList.includes(window.location.hostname)) { - addHoverTag(); + addHoverTag(settings.defaultLanguage); } } +async function getTranslation(inputText, sourceLanguage, targetLanguage) { + let outputText; + let langPair = ""; + langPair = langPair.concat(sourceLanguage, "|", targetLanguage); + + let url = new URL(getTranslationEndpoint()); + let params = {langpair: langPair, q: inputText, format: "html"}; + url.search = new URLSearchParams(params).toString(); + + outputText = await fetch(url) + .then(response => response.json()) + .then(data => data.responseData.translatedText); + + return outputText; +} diff --git a/src/content/hover.css b/src/content/hover.css index ed32f8b..e0edaa3 100644 --- a/src/content/hover.css +++ b/src/content/hover.css @@ -13,7 +13,7 @@ padding: 4px 8px; font-size: 14px; line-height: 1.4; - min-width: 100px; + min-width: 5em; text-align: center; border-radius: 4px; } diff --git a/src/content/hover.js b/src/content/hover.js index f9ab6e5..95296ff 100644 --- a/src/content/hover.js +++ b/src/content/hover.js @@ -1,9 +1,34 @@ -function addHoverTag() { - $("p").each(function () { - $('p').each(function() { - let $this = $(this); - $this.html($this.text().replace(/(?]*|&[^;]*))([^\s<]+)/g, '$1$2')); - }); +function addHoverTag(targetLanguage) { + $('p').each(function () { + $(this).html($(this).html().replace(/(?![^<]*?>)([A-z0-9']+)/g , '$1')); + }); + let setTimeoutConst; + $("hover").hover(function() { + let self = $(this) + setTimeoutConst = setTimeout(async function () { + let text = self.attr('data-tooltip'); + let translation = await getTranslation(text, 'eng', targetLanguage); + self.attr('data-tooltip', translation); + }, 1000); + }, function() { + clearTimeout(setTimeoutConst); }); + +} + +async function getTranslation(inputText, sourceLanguage, targetLanguage) { + let outputText; + let langPair = ""; + langPair = langPair.concat(sourceLanguage, "|", targetLanguage); + + let url = new URL(getTranslationEndpoint()); + let params = {langpair: langPair, q: inputText, format: "html"}; + url.search = new URLSearchParams(params).toString(); + + outputText = await fetch(url) + .then(response => response.json()) + .then(data => data.responseData.translatedText); + + return outputText; } \ No newline at end of file diff --git a/src/popup/popup.js b/src/popup/popup.js index f94d5fa..8b03973 100644 --- a/src/popup/popup.js +++ b/src/popup/popup.js @@ -99,7 +99,7 @@ $("#translate-button").on('click', async function () { $("#translate-webpage-button").on('click', function () { }); -// TODO: Enable hover if inactive before, disable if active +// Enable hover if inactive before, disable if active $("#enable-hover-checkbox").on('click', async function () { await chrome.tabs.query({active: true, lastFocusedWindow: true}, tabs => { let url = tabs[0].url;