Index: gc_lang/fr/webext/background.js ================================================================== --- gc_lang/fr/webext/background.js +++ gc_lang/fr/webext/background.js @@ -1,25 +1,39 @@ // Background "use strict"; +/* + +*/ +let funcSendResultBack = null; + +/* + Worker (separate thread to avoid freezing Firefox) +*/ let xGCEWorker = new Worker("gce_worker.js"); xGCEWorker.onmessage = function (e) { + // https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent switch (e.data[0]) { case "grammar_errors": console.log("GRAMMAR ERRORS"); console.log(e.data[1].aGrammErr); + browser.runtime.sendMessage({sCommand: "grammar_errors", aGrammErr: e.data[1].aGrammErr}); break; case "spelling_and_grammar_errors": console.log("SPELLING AND GRAMMAR ERRORS"); console.log(e.data[1].aSpellErr); console.log(e.data[1].aGrammErr); break; - case "tests_results": + case "text_to_test_result": + browser.runtime.sendMessage({sCommand: "text_to_test_result", sResult: e.data[1]}); + break; + case "fulltests_result": console.log("TESTS RESULTS"); - console.log(e.data[1]); + //console.log(e.data[1]); + browser.runtime.sendMessage({sCommand: "fulltests_result", sResult: e.data[1]}); break; case "options": console.log("OPTIONS"); console.log(e.data[1]); break; @@ -36,23 +50,29 @@ } }; xGCEWorker.postMessage(["init", {sExtensionPath: browser.extension.getURL("."), sOptions: "", sContext: "Firefox"}]); -xGCEWorker.postMessage(["parse", {sText: "J’en aie mare...", sCountry: "FR", bDebug: false, bContext: false}]); - xGCEWorker.postMessage(["parseAndSpellcheck", {sText: "C’est terribles, ils va tout perdrre.", sCountry: "FR", bDebug: false, bContext: false}]); xGCEWorker.postMessage(["getListOfTokens", {sText: "J’en ai assez de ces âneries ! Merci bien. Ça suffira."}]); -xGCEWorker.postMessage(["fullTests"]); /* Messages from the extension (not the Worker) */ function handleMessage (oRequest, xSender, sendResponse) { - console.log(`[background] received: ${oRequest.content}`); - sendResponse({response: "response from background script"}); + console.log(xSender); + console.log(sendResponse); + switch(oRequest.sCommand) { + case "text_to_test": + xGCEWorker.postMessage(["textToTest", {sText: oRequest.sText, sCountry: "FR", bDebug: false, bContext: false}]); + break; + case "fulltests": + xGCEWorker.postMessage(["fullTests"]); + break; + } + //sendResponse({response: "response from background script"}); } browser.runtime.onMessage.addListener(handleMessage); Index: gc_lang/fr/webext/gce_worker.js ================================================================== --- gc_lang/fr/webext/gce_worker.js +++ gc_lang/fr/webext/gce_worker.js @@ -83,10 +83,13 @@ setOption(oParam.sOptName, oParam.bValue); break; case "resetOptions": resetOptions(); break; + case "textToTest": + textToTest(oParam.sText, oParam.sCountry, oParam.bDebug, oParam.bContext); + break; case "fullTests": fullTests(); break; case "getListOfTokens": getListOfTokens(oParam.sText); @@ -170,10 +173,23 @@ let aRes = gc_engine.parse("Je suit..."); for (let oErr of aRes) { console.log(text.getReadableError(oErr)); } } + +function textToTest (sText, sCountry, bDebug, bContext) { + if (!gc_engine || !oDict) { + postMessage(["error", "# Error: grammar checker or dictionary not loaded."]); + return; + } + let aGrammErr = gc_engine.parse(sText, sCountry, bDebug, bContext); + let sMsg = ""; + for (let oErr of aGrammErr) { + sMsg += text.getReadableError(oErr) + "\n"; + } + postMessage(["text_to_test_result", sMsg]); +} function fullTests (sGCOptions='{"nbsp":true, "esp":true, "unit":true, "num":true}') { if (!gc_engine || !oDict) { postMessage(["error", "# Error: grammar checker or dictionary not loaded."]); return; @@ -186,11 +202,11 @@ for (let sRes of oTest.testParse()) { sMsg += sRes + "\n"; console.log(sRes); } gc_engine.setOptions(dMemoOptions); - postMessage(["tests_results", sMsg]); + postMessage(["fulltests_result", sMsg]); } // Lexicographer Index: gc_lang/fr/webext/panel/main.css ================================================================== --- gc_lang/fr/webext/panel/main.css +++ gc_lang/fr/webext/panel/main.css @@ -263,11 +263,11 @@ border: 2px solid hsl(0, 0%, 89%); border-radius: 3px; resize: vertical; } -#test_results { +#tests_result { padding: 15px; background-color: hsl(0, 0%, 96%); } #test_page .button { Index: gc_lang/fr/webext/panel/main.html ================================================================== --- gc_lang/fr/webext/panel/main.html +++ gc_lang/fr/webext/panel/main.html @@ -61,22 +61,21 @@

TESTS

- -
Tests complets
Analyser
+ +
Tests complets
Analyser
-
-
+

         

CONJUGUEUR

- Conjuguer + Conjuguer

Index: gc_lang/fr/webext/panel/main.js ================================================================== --- gc_lang/fr/webext/panel/main.js +++ gc_lang/fr/webext/panel/main.js @@ -1,70 +1,95 @@ +// Main panel function showError (e) { - console.error(e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message); -} - -function beastNameToURL(beastName) { - switch (beastName) { - case "Frog": - return browser.extension.getURL("beasts/frog.jpg"); - case "Snake": - return browser.extension.getURL("beasts/snake.jpg"); - case "Turtle": - return browser.extension.getURL("beasts/turtle.jpg"); - } -} - -window.addEventListener( - "click", - function (xEvent) { - let xElem = xEvent.target; - if (xElem.id) { - if (xElem.id) { - - } - } else if (xElem.className === "select") { - showPage(xElem.dataset.page); - } else if (xElem.tagName === "A") { - openURL(xElem.getAttribute("href")); - } - }, - false + console.error(e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message); +} + +function showPage (sPageName) { + try { + // hide them all + for (let xNodePage of document.getElementsByClassName("page")) { + xNodePage.style.display = "none"; + } + // show the selected one + document.getElementById(sPageName).style.display = "block"; + // specific modifications + if (sPageName === "conj_page") { + document.body.style.width = "600px"; + document.documentElement.style.width = "600px"; + //document.getElementById("movewindow").style.display = "none"; + } else { + document.body.style.width = "530px"; + document.documentElement.style.width = "530px"; + //document.getElementById("movewindow").style.display = "block"; + } + } + catch (e) { + showError(e); + } +} + + +/* + Events +*/ +window.addEventListener( + "click", + function (xEvent) { + let xElem = xEvent.target; + if (xElem.id) { + switch (xElem.id) { + case "text_to_test": + browser.runtime.sendMessage({sCommand: "text_to_test", sText: document.getElementById("text_to_test").value}); + break; + case "fulltests": + document.getElementById("tests_result").textContent = "Veuillez patienter…"; + browser.runtime.sendMessage({sCommand: "fulltests"}); + break; + } + } else if (xElem.className === "select") { + showPage(xElem.dataset.page); + } else if (xElem.tagName === "A") { + openURL(xElem.getAttribute("href")); + } + }, + false ); -function showPage (sPageName) { - try { - // hide them all - for (let xNodePage of document.getElementsByClassName("page")) { - xNodePage.style.display = "None"; - } - // show the one - document.getElementById(sPageName).style.display = "block"; - sendMessage("Mon message"); - // specific modifications - if (sPageName === "conj_page") { - document.body.style.width = "600px"; - document.documentElement.style.width = "600px"; - //document.getElementById("movewindow").style.display = "none"; - } else { - document.body.style.width = "530px"; - document.documentElement.style.width = "530px"; - //document.getElementById("movewindow").style.display = "block"; - } - } - catch (e) { - showError(e); - } -} - -function handleResponse(message) { - console.log(`[Panel] received: ${message.response}`); -} - -function handleError(error) { - console.log(`[Panel] Error: ${error}`); -} - -function sendMessage (sMessage) { - let sending = browser.runtime.sendMessage({content: sMessage}); - sending.then(handleResponse, handleError); -} + +/* + Message sender + and response handling +*/ +function handleResponse (oResponse) { + console.log(`[Panel] received:`); + console.log(oResponse); +} + +function handleError (error) { + console.log(`[Panel] Error:`); + console.log(error); +} + +function sendMessageAndWaitResponse (oData) { + let xPromise = browser.runtime.sendMessage(oData); + xPromise.then(handleResponse, handleError); +} + + +/* + Messages received +*/ +function handleMessage (oMessage, xSender, sendResponse) { + //console.log(xSender); + switch(oMessage.sCommand) { + case "text_to_test_result": + document.getElementById("tests_result").textContent = oMessage.sResult; + break; + case "fulltests_result": + document.getElementById("tests_result").textContent = oMessage.sResult; + break; + } + sendResponse({sCommand: "none", sResult: "done"}); +} + +browser.runtime.onMessage.addListener(handleMessage);