Index: gc_lang/fr/build.py ================================================================== --- gc_lang/fr/build.py +++ gc_lang/fr/build.py @@ -31,11 +31,11 @@ sLang = dVars['sDefaultUILang'] for sSection, lOpt in dVars['lStructOpt']: sHTML += f'\n
\n

{dVars["dOptLabel"][sLang][sSection][0]}

\n' for lLineOpt in lOpt: for sOpt in lLineOpt: - sHTML += f'

\n' + sHTML += f'

\n' sHTML += '
\n' return sHTML def createFirefoxExtension (sLang, dVars): Index: gc_lang/fr/webext/background.js ================================================================== --- gc_lang/fr/webext/background.js +++ gc_lang/fr/webext/background.js @@ -15,34 +15,35 @@ // https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent try { let {sActionDone, result, dInfo} = e.data; switch (sActionDone) { case "init": + browser.storage.local.set({"gc_options": result}); break; case "parse": case "parseAndSpellcheck": case "parseAndSpellcheck1": case "getListOfTokens": + // send result to content script if (typeof(dInfo.iReturnPort) === "number") { let xPort = dConnx.get(dInfo.iReturnPort); xPort.postMessage(e.data); } else { console.log("[background] don’t know where to send results"); console.log(e.data); } break; case "textToTest": - browser.runtime.sendMessage({sCommand: "text_to_test_result", sResult: result}); - break; case "fullTests": - browser.runtime.sendMessage({sCommand: "fulltests_result", sResult: result}); - break; case "getOptions": case "getDefaultOptions": + // send result to panel + browser.runtime.sendMessage(e.data); + break; case "setOptions": case "setOption": - console.log("OPTIONS"); + browser.storage.local.set({"gc_options": result}); break; default: console.log("Unknown command: " + sActionDone); console.log(result); } @@ -51,11 +52,33 @@ showError(e); } }; -xGCEWorker.postMessage({sCommand: "init", dParam: {sExtensionPath: browser.extension.getURL("."), sOptions: "", sContext: "Firefox"}, dInfo: {}}); +function init () { + let xPromise = browser.storage.local.get("gc_options"); + xPromise.then( + function (dSavedOptions) { + let dOptions = (dSavedOptions.hasOwnProperty("gc_options")) ? dSavedOptions.gc_options : null; + xGCEWorker.postMessage({ + sCommand: "init", + dParam: {sExtensionPath: browser.extension.getURL("."), dOptions: dOptions, sContext: "Firefox"}, + dInfo: {} + }); + }, + function (e) { + showError(e); + xGCEWorker.postMessage({ + sCommand: "init", + dParam: {sExtensionPath: browser.extension.getURL("."), dOptions: null, sContext: "Firefox"}, + dInfo: {} + }); + } + ); +} + +init(); /* Ports from content-scripts */ Index: gc_lang/fr/webext/gce_worker.js ================================================================== --- gc_lang/fr/webext/gce_worker.js +++ gc_lang/fr/webext/gce_worker.js @@ -145,11 +145,11 @@ The answer is received by the background in another function (onmessage). That’s why the full text to analyze is send in one block, but analyse is returned paragraph by paragraph. */ -function init (sExtensionPath, sGCOptions="", sContext="JavaScript", dInfo={}) { +function init (sExtensionPath, dOptions=null, sContext="JavaScript", dInfo={}) { try { if (!bInitDone) { //console.log("[Worker] Loading… Extension path: " + sExtensionPath); conj.init(helpers.loadFile(sExtensionPath + "/grammalecte/fr/conj_data.json")); phonet.init(helpers.loadFile(sExtensionPath + "/grammalecte/fr/phonet_data.json")); @@ -157,21 +157,21 @@ //console.log("[Worker] Modules have been initialized…"); gc_engine.load(sContext, sExtensionPath+"grammalecte/_dictionaries"); oDict = gc_engine.getDictionary(); oTest = new TestGrammarChecking(gc_engine, sExtensionPath+"/grammalecte/fr/tests_data.json"); oLxg = new Lexicographe(oDict); - if (sGCOptions !== "") { - gc_engine.setOptions(helpers.objectToMap(JSON.parse(sGCOptions))); + if (dOptions !== null) { + gc_engine.setOptions(dOptions); } oTokenizer = new Tokenizer("fr"); //tests(); bInitDone = true; } else { console.log("[Worker] Already initialized…") } // we always retrieve options from the gc_engine, for setOptions filters obsolete options - postMessage(createResponse("init", gc_engine.getOptions().gl_toString(), dInfo, true)); + postMessage(createResponse("init", gc_engine.getOptions(), dInfo, true)); } catch (e) { helpers.logerror(e); postMessage(createResponse("init", createErrorResult(e, "init failed"), dInfo, true, true)); } @@ -202,30 +202,31 @@ let aSpellErr = oTokenizer.getSpellingErrors(sParagraph, oDict); postMessage(createResponse("parseAndSpellcheck1", {sParagraph: sParagraph, aGrammErr: aGrammErr, aSpellErr: aSpellErr}, dInfo, true)); } function getOptions (dInfo={}) { - postMessage(createResponse("getOptions", gc_engine.getOptions().gl_toString(), dInfo, true)); + postMessage(createResponse("getOptions", gc_engine.getOptions(), dInfo, true)); } function getDefaultOptions (dInfo={}) { - postMessage(createResponse("getDefaultOptions", gc_engine.getDefaultOptions().gl_toString(), dInfo, true)); + postMessage(createResponse("getDefaultOptions", gc_engine.getDefaultOptions(), dInfo, true)); } -function setOptions (sGCOptions, dInfo={}) { - gc_engine.setOptions(helpers.objectToMap(JSON.parse(sGCOptions))); - postMessage(createResponse("setOptions", gc_engine.getOptions().gl_toString(), dInfo, true)); +function setOptions (dOptions, dInfo={}) { + gc_engine.setOptions(dOptions); + postMessage(createResponse("setOptions", gc_engine.getOptions(), dInfo, true)); } function setOption (sOptName, bValue, dInfo={}) { + console.log(sOptName+": "+bValue); gc_engine.setOptions(new Map([ [sOptName, bValue] ])); - postMessage(createResponse("setOption", gc_engine.getOptions().gl_toString(), dInfo, true)); + postMessage(createResponse("setOption", gc_engine.getOptions(), dInfo, true)); } function resetOptions (dInfo={}) { gc_engine.resetOptions(); - postMessage(createResponse("resetOptions", gc_engine.getOptions().gl_toString(), dInfo, true)); + postMessage(createResponse("resetOptions", gc_engine.getOptions(), dInfo, true)); } function tests () { console.log(conj.getConj("devenir", ":E", ":2s")); console.log(mfsp.getMasForm("emmerdeuse", true)); Index: gc_lang/fr/webext/panel/main.js ================================================================== --- gc_lang/fr/webext/panel/main.js +++ gc_lang/fr/webext/panel/main.js @@ -1,55 +1,44 @@ // Main panel "use strict"; -/* - Common functions -*/ + function showError (e) { 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"; - } - catch (e) { - showError(e); - } -} - -function startWaitIcon () { - document.getElementById("waiticon").hidden = false; -} - -function stopWaitIcon () { - document.getElementById("waiticon").hidden = true; -} - /* Events */ window.addEventListener( "click", function (xEvent) { let xElem = xEvent.target; if (xElem.id) { - switch (xElem.id) { - case "text_to_test": - browser.runtime.sendMessage({sCommand: "textToTest", dParam: {sText: document.getElementById("text_to_test").value, sCountry: "FR", bDebug: false, bContext: false}, dInfo: {}}); - break; - case "fulltests": - document.getElementById("tests_result").textContent = "Veuillez patienter…"; - browser.runtime.sendMessage({sCommand: "fullTests", dParam: {}, dInfo: {}}); - break; + if (xElem.id === "text_to_test") { + browser.runtime.sendMessage({ + sCommand: "textToTest", + dParam: {sText: document.getElementById("text_to_test").value, sCountry: "FR", bDebug: false, bContext: false}, + dInfo: {} + }); + } + else if (xElem.id === "fulltests") { + document.getElementById("tests_result").textContent = "Veuillez patienter…"; + browser.runtime.sendMessage({ + sCommand: "fullTests", + dParam: {}, + dInfo: {} + }); + } + else if (xElem.id.startsWith("option_")) { + browser.runtime.sendMessage({ + sCommand: "setOption", + dParam: {sOptName: xElem.dataset.option, bValue: xElem.checked}, + dInfo: {} + }); } } else if (xElem.className.startsWith("select")) { showPage(xElem.dataset.page); }/* else if (xElem.tagName === "A") { openURL(xElem.getAttribute("href")); @@ -81,32 +70,67 @@ /* Messages received */ function handleMessage (oMessage, xSender, sendResponse) { - switch(oMessage.sCommand) { - case "text_to_test_result": - showTestResult(oMessage.sResult); - break; - case "fulltests_result": - showTestResult(oMessage.sResult); - break; - } - sendResponse({sCommand: "none", sResult: "done"}); + let {sActionDone, result, dInfo, bEnd, bError} = oMessage; + switch(sActionDone) { + case "textToTest": + case "fullTests": + showTestResult(result); + break; + case "getOptions": + case "getDefaultOptions": + break; + default: + console.log("GRAMMALECTE. Unknown command: " + oMessage.sCommand); + } + sendResponse({sCommand: "none", result: "done"}); } browser.runtime.onMessage.addListener(handleMessage); /* - - DEDICATED FUNCTIONS - + Actions */ +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"; + if (sPageName == "gc_options_page") { + setGCOptions(); + } + } + catch (e) { + showError(e); + } +} -/* - Test page -*/ + function showTestResult (sText) { document.getElementById("tests_result").textContent = sText; } + +function setGCOptions () { + let xPromise = browser.storage.local.get("gc_options"); + xPromise.then( + function (dSavedOptions) { + console.log(dSavedOptions); + if (dSavedOptions.hasOwnProperty("gc_options")) { + for (let [sOpt, bVal] of dSavedOptions.gc_options) { + if (document.getElementById("option_"+sOpt)) { + document.getElementById("option_"+sOpt).checked = bVal; + } + } + } + }, + function (e) { + showError(e); + } + ); +}