Changes In Branch tbnext Through [9acf544aa6] Excluding Merge-Ins
This is equivalent to a diff from 94e2e47aea to 9acf544aa6
2018-03-21
| ||
09:10 | [build][fr] path for Thunderbird Daily check-in: 7a4f69d41b user: olr tags: fr, build, tbnext | |
2018-03-14
| ||
20:52 | [tb] remove useless console.log() check-in: 9acf544aa6 user: olr tags: tb, tbnext | |
19:50 | [tb] spellchecker: tabulations to spaces check-in: ce4a3cc724 user: olr tags: tb, tbnext | |
2018-03-12
| ||
13:58 | [fr] pt: chaque fois check-in: 066a99dfc3 user: olr tags: trunk, fr | |
2018-03-09
| ||
08:28 | [tb] new TB API: x-javascript > javascript check-in: 0e232d6b0f user: olr tags: tb, tbnext | |
2018-03-07
| ||
17:32 | merge trunk check-in: a693df4168 user: olr tags: multid | |
16:10 | [fx] hide useless panel about dictionaries for now check-in: 94e2e47aea user: olr tags: trunk, fx | |
16:01 | [fx] new version for WebExtension check-in: 23d108bf86 user: olr tags: trunk, fx | |
Modified gc_lang/fr/build.py from [9ca6336e46] to [a54b2ffcfb].
︙ | ︙ | |||
89 90 91 92 93 94 95 96 97 98 99 100 101 102 | for sp in os.listdir(spDict): if os.path.isdir(spDict+"/"+sp): hZip.write(spDict+"/"+sp+"/"+sp+".dic", "content/dictionaries/"+sp+"/"+sp+".dic") hZip.write(spDict+"/"+sp+"/"+sp+".aff", "content/dictionaries/"+sp+"/"+sp+".aff") hZip.close() spfDebugProfile = dVars['win_tb_debug_extension_path'] if platform.system() == "Windows" else dVars['linux_tb_debug_extension_path'] helpers.unzip(spfZip, spfDebugProfile) def _createOptionsForThunderbird (dVars): dVars['sXULTabs'] = "" dVars['sXULTabPanels'] = "" # dialog options for sSection, lOpt in dVars['lStructOpt']: | > > | 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | for sp in os.listdir(spDict): if os.path.isdir(spDict+"/"+sp): hZip.write(spDict+"/"+sp+"/"+sp+".dic", "content/dictionaries/"+sp+"/"+sp+".dic") hZip.write(spDict+"/"+sp+"/"+sp+".aff", "content/dictionaries/"+sp+"/"+sp+".aff") hZip.close() spfDebugProfile = dVars['win_tb_debug_extension_path'] if platform.system() == "Windows" else dVars['linux_tb_debug_extension_path'] helpers.unzip(spfZip, spfDebugProfile) spfBetaProfile = dVars['win_tb_beta_extension_path'] if platform.system() == "Windows" else dVars['linux_tb_beta_extension_path'] helpers.unzip(spfZip, spfBetaProfile) def _createOptionsForThunderbird (dVars): dVars['sXULTabs'] = "" dVars['sXULTabPanels'] = "" # dialog options for sSection, lOpt in dVars['lStructOpt']: |
︙ | ︙ |
Modified gc_lang/fr/config.ini from [eb081b50e5] to [c5bda27e4c].
︙ | ︙ | |||
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | win_fx_nightly_path = C:\Program Files\Nightly\firefox.exe linux_fx_dev_path = /usr/bin/firefox linux_fx_nightly_path = /usr/bin/firefox # Thunderbird tb_identifier = French-GC-TB@grammalecte.net tb_name = Grammalecte [fr] win_tb_debug_extension_path = D:\_temp\tb-debug.profile\extensions\French-GC-TB@grammalecte.net linux_tb_debug_extension_path = ~/tb-debug.profile/extensions/French-GC-TB@grammalecte.net # Set Thunderbird folder in your PATH variable # Create a local profile: # thunderbird -CreateProfile "debug _build\tb-debug.profile" # Or you can use the GUI with: # thunderbird -P # To launch Thunderbird with the profile debug, type: # thunderbird -P debug | > > > > > > | 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | win_fx_nightly_path = C:\Program Files\Nightly\firefox.exe linux_fx_dev_path = /usr/bin/firefox linux_fx_nightly_path = /usr/bin/firefox # Thunderbird tb_identifier = French-GC-TB@grammalecte.net tb_name = Grammalecte [fr] win_tb_path = C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe win_tb_beta_path = C:\Program Files (x86)\Mozilla Thunderbird (Beta)\thunderbird.exe linux_tb_path = /usr/bin/thunderbird linux_tb_beta_path = /usr/bin/thunderbird win_tb_debug_extension_path = D:\_temp\tb-debug.profile\extensions\French-GC-TB@grammalecte.net linux_tb_debug_extension_path = ~/tb-debug.profile/extensions/French-GC-TB@grammalecte.net win_tb_beta_extension_path = D:\_temp\tb-beta.profile\extensions\French-GC-TB@grammalecte.net linux_tb_beta_extension_path = ~/tb-beta.profile/extensions/French-GC-TB@grammalecte.net # Set Thunderbird folder in your PATH variable # Create a local profile: # thunderbird -CreateProfile "debug _build\tb-debug.profile" # Or you can use the GUI with: # thunderbird -P # To launch Thunderbird with the profile debug, type: # thunderbird -P debug |
︙ | ︙ |
Modified gc_lang/fr/tb/chrome.manifest from [39608040f5] to [a8f859a2c4].
1 2 3 4 5 6 7 8 | # https://developer.mozilla.org/en-US/docs/Chrome_Registration content grammarchecker content/ content promiseworker ./worker/ resource grammalecte ./grammalecte-js/ locale grammarchecker fr locale/fr/ locale grammarchecker en locale/en/ skin grammarchecker classic/1.0 skin/ overlay chrome://messenger/content/messengercompose/messengercompose.xul chrome://grammarchecker/content/overlay.xul | | | 1 2 3 4 5 6 7 8 9 | # https://developer.mozilla.org/en-US/docs/Chrome_Registration content grammarchecker content/ content promiseworker ./worker/ resource grammalecte ./grammalecte-js/ locale grammarchecker fr locale/fr/ locale grammarchecker en locale/en/ skin grammarchecker classic/1.0 skin/ overlay chrome://messenger/content/messengercompose/messengercompose.xul chrome://grammarchecker/content/overlay.xul style chrome://messenger/content/customizeToolbar.xul chrome://grammarchecker/content/overlay.css |
Modified gc_lang/fr/tb/content/about.js from [2bc9ad5ee7] to [c5c1006b2d].
1 2 3 4 5 | // JavaScript const Cc = Components.classes; const Ci = Components.interfaces; const Cu = Components.utils; | < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 | // JavaScript const Cc = Components.classes; const Ci = Components.interfaces; const Cu = Components.utils; function openInBrowserURL (sURL) { // method found in S3.Google.Translator try { openURL(sURL); // Works in overlay.js, but not here… Seems there is no documentation available about this feature on Mozilla.org |
︙ | ︙ |
Modified gc_lang/fr/tb/content/about.xul from [fc21852913] to [9407ba6c78].
︙ | ︙ | |||
30 31 32 33 34 35 36 | onclick="openInTabURL('http://lamouette.org/?from=grammalecte-tb');" /> <label class="stdlabel" value="&" /> <image src="chrome://grammarchecker/skin/Algoo_logo.png" style="cursor: pointer;" onclick="openInTabURL('https://www.algoo.fr/?from=grammalecte-tb');" /> <label id="contrib" value="&contrib;" onclick="openInTabURL('https://www.dicollecte.org/#thanks');" /> | | | 30 31 32 33 34 35 36 37 38 | onclick="openInTabURL('http://lamouette.org/?from=grammalecte-tb');" /> <label class="stdlabel" value="&" /> <image src="chrome://grammarchecker/skin/Algoo_logo.png" style="cursor: pointer;" onclick="openInTabURL('https://www.algoo.fr/?from=grammalecte-tb');" /> <label id="contrib" value="&contrib;" onclick="openInTabURL('https://www.dicollecte.org/#thanks');" /> <script type="application/javascript" src="about.js"/> </dialog> |
Modified gc_lang/fr/tb/content/conjugueur.js from [52fcb1616a] to [e2b39bc09c].
1 2 3 | // JavaScript const Cu = Components.utils; | | | < < < < < | | | | | | | | | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | // JavaScript const Cu = Components.utils; //const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {}); //const conj = require("resource://grammalecte/fr/conj.js"); let oConj = { init: function () { console.log("Init conjugueur"); try { // button document.getElementById('conjugate').addEventListener("click", (xEvent) => { this.getVerbAndConjugate(); }); // text field document.getElementById('verb').addEventListener("change", (xEvent) => { this.getVerbAndConjugate(); }); // options document.getElementById('oneg').addEventListener("click", (xEvent) => { this._displayResults(); }); document.getElementById('opro').addEventListener("click", (xEvent) => { this._displayResults(); }); document.getElementById('oint').addEventListener("click", (xEvent) => { this._displayResults(); }); document.getElementById('ofem').addEventListener("click", (xEvent) => { this._displayResults(); }); document.getElementById('otco').addEventListener("click", (xEvent) => { this._displayResults(); }); } catch (e) { Cu.reportError(e); } this.conjugate("être"); }, |
︙ | ︙ | |||
81 82 83 84 85 86 87 | if (!conj.isVerb(sVerb)) { document.getElementById('verb').style = "color: #BB4411;"; } else { document.getElementById('verb_title').textContent = sVerb; document.getElementById('verb').style = "color: #999999;"; document.getElementById('verb').value = ""; | | | 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | if (!conj.isVerb(sVerb)) { document.getElementById('verb').style = "color: #BB4411;"; } else { document.getElementById('verb_title').textContent = sVerb; document.getElementById('verb').style = "color: #999999;"; document.getElementById('verb').value = ""; this.oVerb = new Verb(sVerb); let sRawInfo = this.oVerb._sRawInfo; document.getElementById('info').textContent = this.oVerb.sInfo; document.getElementById('opro').textContent = "pronominal"; if (sRawInfo.endsWith("zz")) { document.getElementById('opro').checked = false; document.getElementById('opro').disabled = true; document.getElementById('opro').style = "color: #CCC;"; |
︙ | ︙ | |||
269 270 271 272 273 274 275 276 | } catch (e) { Cu.reportError(e); } } }; oConj.init(); | > < | 264 265 266 267 268 269 270 271 272 | } catch (e) { Cu.reportError(e); } } }; conj.init(helpers.loadFile("resource://grammalecte/fr/conj_data.json")); oConj.init(); |
Modified gc_lang/fr/tb/content/conjugueur.xul from [ee8b63b554] to [a9e15bac00].
︙ | ︙ | |||
150 151 152 153 154 155 156 | <label id="condb4" class="cj">.</label> <label id="condb5" class="cj">.</label> <label id="condb6" class="cj">.</label> </groupbox> </column> </columns> | > > | | 150 151 152 153 154 155 156 157 158 159 160 | <label id="condb4" class="cj">.</label> <label id="condb5" class="cj">.</label> <label id="condb6" class="cj">.</label> </groupbox> </column> </columns> <script type="application/javascript" src="resource://grammalecte/graphspell/helpers.js"/> <script type="application/javascript" src="resource://grammalecte/fr/conj.js"/> <script type="application/javascript" src="conjugueur.js"/> </dialog> |
Modified gc_lang/fr/tb/content/editor.js from [71421bf6bc] to [8eea7833f2].
︙ | ︙ | |||
17 18 19 20 21 22 23 | } }; * _getParsableNodes (xRootNode=this.xEditor.rootElement) { // recursive function try { for (let xNode of xRootNode.childNodes) { | < < | 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | } }; * _getParsableNodes (xRootNode=this.xEditor.rootElement) { // recursive function try { for (let xNode of xRootNode.childNodes) { if (xNode.className !== "moz-cite-prefix" && xNode.tagName !== "BLOCKQUOTE" && (xNode.nodeType == Node.TEXT_NODE || (xNode.nodeType == Node.ELEMENT_NODE && !xNode.textContent.startsWith(">"))) && xNode.textContent !== "") { if (xNode.tagName === undefined) { if (!prefs.getBoolPref("bCheckSignature") && xNode.textContent.startsWith("-- ")) { break; } yield xNode; } else if (this.lParsableNodes.includes(xNode.tagName)) { yield xNode; |
︙ | ︙ |
Modified gc_lang/fr/tb/content/gc_options.js from [f85fde1089] to [aee78a8d90].
1 2 3 4 5 6 | // JavaScript const Cc = Components.classes; const Ci = Components.interfaces; const Cu = Components.utils; const prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.grammarchecker."); | < < < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | // JavaScript const Cc = Components.classes; const Ci = Components.interfaces; const Cu = Components.utils; const prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.grammarchecker."); var oOptControl = { oOptions: null, load: function () { this._setDialogOptions(false); }, _setDialogOptions: function (bDefaultOptions=false) { try { sOptions = bDefaultOptions ? prefs.getCharPref("sGCDefaultOptions") : prefs.getCharPref("sGCOptions"); this.oOptions = JSON.parse(sOptions); for (let sParam in this.oOptions) { if (document.getElementById("option_"+sParam) !== null) { document.getElementById("option_"+sParam).checked = this.oOptions[sParam]; } } } catch (e) { Cu.reportError(e); } }, save: function () { try { for (let xNode of document.getElementsByClassName("option")) { this.oOptions[xNode.id.slice(7)] = xNode.checked; } prefs.setCharPref("sGCOptions", JSON.stringify(this.oOptions)); } catch (e) { Cu.reportError(e); } }, reset: function () { this._setDialogOptions(true); } } oOptControl.load(); |
Modified gc_lang/fr/tb/content/gc_options.xul from [8e6b4a963d] to [65926a1200].
︙ | ︙ | |||
27 28 29 30 31 32 33 | ${sXULTabs} </tabs> <tabpanels> ${sXULTabPanels} </tabpanels> </tabbox> | | | 27 28 29 30 31 32 33 34 35 36 | ${sXULTabs} </tabs> <tabpanels> ${sXULTabPanels} </tabpanels> </tabbox> <script type="application/javascript" src="gc_options.js" /> </dialog> |
Added gc_lang/fr/tb/content/options.css version [9480df93df].
> > | 1 2 | /* CSS */ |
Added gc_lang/fr/tb/content/options.js version [73166a402f].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | // JavaScript "use strict"; const Cc = Components.classes; const Ci = Components.interfaces; const Cu = Components.utils; const prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.grammarchecker."); var oOptControl = { load: function () { try { document.getElementById('check_signature').checked = prefs.getBoolPref('bCheckSignature'); } catch (e) { Cu.reportError(e); } }, save: function () { try { prefs.setBoolPref('bCheckSignature', document.getElementById('check_signature').checked); } catch (e) { Cu.reportError(e); } } } oOptControl.load(); |
Modified gc_lang/fr/tb/content/options.xul from [4546c76788] to [b4b7f2b7c3].
|
| | > | > | | > > > > > > > > | | | < < < < < | | < < | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin/" type="text/css"?> <?xml-stylesheet href="chrome://grammarchecker/content/options.css" type="text/css"?> <!DOCTYPE dialog SYSTEM "chrome://grammarchecker/locale/options.dtd"> <dialog id="grammalecte-options-window" title="&window.title;" orient="vertical" buttons="accept, cancel" ondialogaccept="oOptControl.save();" ondialogcancel="return;" defaultButton="accept" width="400" onload="document.getElementById('grammalecte-options-window').centerWindowOnScreen();" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <!-- Other elements go here --> <dialogheader id="grammalecte-title" title="&dialogheader.label;" description="" /> <checkbox id="check_signature" label="&check_signature.label;" accesskey="&check_signature.accesskey;" /> <script type="application/javascript" src="options.js" /> </dialog> |
Modified gc_lang/fr/tb/content/overlay.js from [0f3db968a0] to [fcc7e4e2d6].
1 2 3 4 5 6 7 8 | // JavaScript "use strict"; const Cc = Components.classes; const Ci = Components.interfaces; const Cu = Components.utils; | | < < < | | < < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | // JavaScript "use strict"; const Cc = Components.classes; const Ci = Components.interfaces; const Cu = Components.utils; //const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {}); const { BasePromiseWorker } = Cu.import('resource://gre/modules/PromiseWorker.jsm', {}); const Task = Cu.import("resource://gre/modules/Task.jsm").Task; const prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.grammarchecker."); //const text = require("resource://grammalecte/text.js"); //const tf = require("resource://grammalecte/fr/textformatter.js"); const oConverterToExponent = { dNumbers: new Map ([ ["1", "¹"], ["2", "²"], ["3", "³"], ["4", "⁴"], ["5", "⁵"], ["6", "⁶"], ["7", "⁷"], ["8", "⁸"], ["9", "⁹"], ["0", "⁰"] ]), |
︙ | ︙ | |||
43 44 45 46 47 48 49 | var oGrammarChecker = { // you must use var to be able to call this object from elsewhere xGCEWorker: null, bDictActive: null, loadGC: function () { if (this.xGCEWorker === null) { // Grammar checker | | | | | | | | | | | | | | | | | | | | | | | 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | var oGrammarChecker = { // you must use var to be able to call this object from elsewhere xGCEWorker: null, bDictActive: null, loadGC: function () { if (this.xGCEWorker === null) { // Grammar checker console.log('Loading Grammalecte'); this.xGCEWorker = new BasePromiseWorker('chrome://promiseworker/content/gce_worker.js'); let xPromise = this.xGCEWorker.post('loadGrammarChecker', [prefs.getCharPref("sGCOptions"), "Thunderbird"]); xPromise.then( function (aVal) { console.log(aVal); prefs.setCharPref("sGCOptions", aVal); }, function (aReason) { console.log('Promise rejected - ', aReason); } ).catch( function (aCaught) { console.log('Promise Error - ', aCaught); } ); } }, fullTests: function () { console.log('Performing tests... Wait...'); let xPromise = this.xGCEWorker.post('fullTests', ['{"nbsp":true, "esp":true, "unit":true, "num":true}']); xPromise.then( function (aVal) { console.log('Done.'); console.log(aVal); }, function (aReason) { console.log('Promise rejected', aReason); } ).catch( function (aCaught) { console.log('Promise Error', aCaught); } ); }, test: function (sText) { console.log("Test..."); let xPromise = this.xGCEWorker.post('parse', [sText, "FR", true]); xPromise.then( function (aVal) { let lErr = JSON.parse(aVal); if (lErr.length > 0) { for (let dErr of lErr) { console.log(text.getReadableError(dErr)); } } else { console.log("no error found"); } }, function (aReason) { console.log('Promise rejected', aReason); } ).catch( function (aCaught) { console.log('Promise Error', aCaught); } ); }, setOptions: function () { console.log('Set options'); let xPromise = this.xGCEWorker.post('setOptions', [prefs.getCharPref("sGCOptions")]); xPromise.then( function (aVal) { console.log(aVal); prefs.setCharPref("sGCOptions", aVal); }, function (aReason) { console.log('Promise rejected', aReason); } ).catch( function (aCaught) { console.log('Promise Error', aCaught); } ); }, resetOptions: function () { let xPromise = this.xGCEWorker.post('resetOptions'); xPromise.then( function (aVal) { console.log(aVal); prefs.setCharPref("sGCOptions", aVal); }, function (aReason) { console.log('Promise rejected', aReason); } ).catch( function (aCaught) { console.log('Promise Error', aCaught); } ); }, _getGCResultPromise: function (sParagraph, sLang, bDebug, bContext) { // For some reason, you can’t use result of PromiseWorker within a Task, // you have to wrap it in a common Promise. Task and yield can be replaced with async / await when it is available. let that = this; return new Promise(function (resolve, reject) { |
︙ | ︙ | |||
184 185 186 187 188 189 190 | try { let that = this; let xResultNode = document.getElementById("resnode"+iParagraph); xResultNode.textContent = "…………… réanalyse en cours ……………"; let sParagraph = xEditor.getParagraph(iParagraph); let xPromise = this._getGCResultPromise(sParagraph, "FR", false, false); xPromise.then(function (res) { | | | 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 | try { let that = this; let xResultNode = document.getElementById("resnode"+iParagraph); xResultNode.textContent = "…………… réanalyse en cours ……………"; let sParagraph = xEditor.getParagraph(iParagraph); let xPromise = this._getGCResultPromise(sParagraph, "FR", false, false); xPromise.then(function (res) { //console.log("res: " + res); xResultNode.textContent = ""; let oRes = JSON.parse(res); if (oRes.aGrammErr.length > 0 || oRes.aSpellErr.length > 0) { that.fillResultNode(xResultNode, xEditor, sParagraph, iParagraph, oRes.aGrammErr, oRes.aSpellErr); } }, function (res) { xResultNode.textContent = "Erreur: " + res; |
︙ | ︙ | |||
367 368 369 370 371 372 373 | } }); xNodeSuggLine.appendChild(xNodeSuggButton); xNodeDiv.appendChild(xNodeSuggLine); return xNodeDiv; }, loadUI: function() { | | | 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 | } }); xNodeSuggLine.appendChild(xNodeSuggButton); xNodeDiv.appendChild(xNodeSuggLine); return xNodeDiv; }, loadUI: function() { console.log("loadUI"); this._strings = document.getElementById("grammarchecker-strings"); let that = this; let nsGrammarCommand = { isCommandEnabled: function (aCommand, dummy) { return (IsDocumentEditable() && !IsInHTMLSourceMode()); }, getCommandStateParams: function (aCommand, aParams, aRefCon) {}, |
︙ | ︙ | |||
470 471 472 473 474 475 476 | this.closePanel(); }, onOpenGCOptions: function (e) { let that = this; let xPromise = this.xGCEWorker.post('getDefaultOptions'); xPromise.then( function (aVal) { | | | | | | | 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 | this.closePanel(); }, onOpenGCOptions: function (e) { let that = this; let xPromise = this.xGCEWorker.post('getDefaultOptions'); xPromise.then( function (aVal) { console.log(aVal); prefs.setCharPref("sGCDefaultOptions", aVal); }, function (aReason) { console.log('Promise rejected', aReason); } ).catch( function (aCaught) { console.log('Promise Error', aCaught); } ).then( function () { that.openDialog("chrome://grammarchecker/content/gc_options.xul", "", "chrome, dialog, modal, resizable=no"); that.setOptions(); }, function (aReason) { console.log('Error options dialog', aReason); } ).catch( function (aCaught) { console.log('Error', aCaught); } ); }, onOpenSpellOptions: function (e) { this.openDialog("chrome://grammarchecker/content/spell_options.xul", "", "chrome, dialog, modal, resizable=no"); }, onOpenOptions: function (e) { this.openDialog("chrome://grammarchecker/content/options.xul", "", "chrome, dialog, modal, resizable=no"); |
︙ | ︙ | |||
564 565 566 567 568 569 570 | } }, saveOptions: function () { let oOptions = {}; for (let xNode of document.getElementsByClassName("option")) { oOptions[xNode.id] = xNode.checked; } | | | 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 | } }, saveOptions: function () { let oOptions = {}; for (let xNode of document.getElementsByClassName("option")) { oOptions[xNode.id] = xNode.checked; } //console.log("save options: " + JSON.stringify(oOptions)); prefs.setCharPref("sTFOptions", JSON.stringify(oOptions)); }, setOptionsInPanel: function (oOptions) { for (let sOptName in oOptions) { //console.log(sOptName + ":" + oOptions[sOptName]); if (document.getElementById(sOptName) !== null) { document.getElementById(sOptName).checked = oOptions[sOptName]; |
︙ | ︙ | |||
878 879 880 881 882 883 884 | Cu.reportError(e); } return sText; }, formatText: function (sText, sOptName) { let nCount = 0; try { | | | | | 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 | Cu.reportError(e); } return sText; }, formatText: function (sText, sOptName) { let nCount = 0; try { if (!oReplTable.hasOwnProperty(sOptName)) { console.log("# Error. TF: there is no option “" + sOptName+ "”."); return [sText, nCount]; } for (let [zRgx, sRep] of oReplTable[sOptName]) { nCount += (sText.match(zRgx) || []).length; sText = sText.replace(zRgx, sRep); } } catch (e) { Cu.reportError(e); } |
︙ | ︙ |
Modified gc_lang/fr/tb/content/overlay.xul from [f4f8642995] to [32fb17e890].
1 2 3 4 5 6 7 8 | <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="chrome://grammarchecker/content/overlay.css" type="text/css"?> <!DOCTYPE overlay SYSTEM "chrome://grammarchecker/locale/overlay.dtd"> <overlay id="grammarchecker-overlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> | | > > | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="chrome://grammarchecker/content/overlay.css" type="text/css"?> <!DOCTYPE overlay SYSTEM "chrome://grammarchecker/locale/overlay.dtd"> <overlay id="grammarchecker-overlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <script type="application/javascript" src="chrome://global/content/globalOverlay.js"/> <script type="application/javascript" src="resource://grammalecte/text.js"/> <script type="application/javascript" src="resource://grammalecte/fr/textformatter.js"/> <script type="application/javascript" src="overlay.js"/> <script type="application/javascript" src="spellchecker.js"/> <script type="application/javascript" src="editor.js"/> <stringbundleset id="stringbundleset"> <stringbundle id="grammarchecker-strings" src="chrome://grammarchecker/locale/grammarchecker.properties"/> </stringbundleset> <commandset id="composerEditMenuItems" commandupdater="true" events="focus" |
︙ | ︙ |
Modified gc_lang/fr/tb/content/spell_options.js from [9ebffece09] to [4444b40148].
1 2 3 4 5 6 7 8 9 | // JavaScript "use strict"; const Cc = Components.classes; const Ci = Components.interfaces; const Cu = Components.utils; const prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.grammarchecker."); | < < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // JavaScript "use strict"; const Cc = Components.classes; const Ci = Components.interfaces; const Cu = Components.utils; const prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.grammarchecker."); var oDialogControl = { load: function () { try { document.getElementById('fr-FR-modern').checked = prefs.getBoolPref('bDictModern'); document.getElementById('fr-FR-classic').checked = prefs.getBoolPref('bDictClassic'); |
︙ | ︙ |
Modified gc_lang/fr/tb/content/spell_options.xul from [5453a7e2cc] to [e6c1baec4c].
︙ | ︙ | |||
30 31 32 33 34 35 36 | <description class="dicdescr">&option.classic.descr;</description> <checkbox id="fr-FR-reform" class="option" label="&option.reform.label;" /> <description class="dicdescr">&option.reform.descr;</description> <checkbox id="fr-FR-classic-reform" class="option" label="&option.allvar.label;" /> <description class="dicdescr">&option.allvar.descr;</description> </groupbox> | | | | 30 31 32 33 34 35 36 37 38 39 40 | <description class="dicdescr">&option.classic.descr;</description> <checkbox id="fr-FR-reform" class="option" label="&option.reform.label;" /> <description class="dicdescr">&option.reform.descr;</description> <checkbox id="fr-FR-classic-reform" class="option" label="&option.allvar.label;" /> <description class="dicdescr">&option.allvar.descr;</description> </groupbox> <script type="application/javascript" src="spell_options.js"/> <script type="application/javascript" src="spellchecker.js"/> </dialog> |
Modified gc_lang/fr/tb/content/spellchecker.js from [3be1484aff] to [bf36be002a].
1 2 3 | // JavaScript /* | | | | | | | | | > < < < < < < < | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > > | | | | | | | | > | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | // JavaScript /* Hunspell wrapper XPCOM obsolete (?), but there is nothing else... Overly complicated and weird. To throw away ASAP if possible. And you can’t access to this from a PromiseWorker (it sucks). https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/mozISpellCheckingEngine https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XUL/Using_spell_checking_in_XUL https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIFile https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/FileUtils.jsm */ "use strict"; /* // Loaded in another file const Cc = Components.classes; const Ci = Components.interfaces; const Cu = Components.utils; const { require } = Cu.import("resource://gre/modules/commonjs/toolkit/require.js", {}); */ const FileUtils = Cu.import("resource://gre/modules/FileUtils.jsm").FileUtils; const AddonManager = Cu.import("resource://gre/modules/AddonManager.jsm").AddonManager; var oSpellControl = { xSCEngine: null, init: function () { if (this.xSCEngine === null) { try { let sSpellchecker = "@mozilla.org/spellchecker/myspell;1"; if ("@mozilla.org/spellchecker/hunspell;1" in Cc) { sSpellchecker = "@mozilla.org/spellchecker/hunspell;1"; } if ("@mozilla.org/spellchecker/engine;1" in Cc) { sSpellchecker = "@mozilla.org/spellchecker/engine;1"; } this.xSCEngine = Cc[sSpellchecker].getService(Ci.mozISpellCheckingEngine); } catch (e) { console.log("Can’t initiate the spellchecker."); Cu.reportError(e); } } }, getDictionariesList: function () { this.init(); try { let l = {}; let c = {}; this.xSCEngine.getDictionaryList(l, c); return l.value; } catch (e) { Cu.reportError(e); return []; } }, setDictionary: function (sLocale) { if (this.getDictionariesList().includes(sLocale)) { try { this.xSCEngine.dictionary = sLocale; // en-US, fr, etc. return true; } catch (e) { Cu.reportError(e); return false; } } else { console.log("Warning. No dictionary for locale: " + sLocale); console.log("Existing dictionaries: " + this.getDictionariesList().join(" | ")); } return false; }, check: function (sWord) { // todo: check in personal dict? try { return this.xSCEngine.check(sWord); } catch (e) { Cu.reportError(e); return false; } }, suggest: function (sWord) { try { let lSugg = {}; this.xSCEngine.suggest(sWord, lSugg, {}); return lSugg.value; // lSugg.value is a JavaScript Array of strings } catch (e) { Cu.reportError(e); return ['#Erreur.']; } }, addDirectory: function (sFolder) { try { let xNsiFolder = new FileUtils.File(sFolder); this.xSCEngine.addDirectory(xNsiFolder); } catch (e) { console.log("Unable to add directory: " + sFolder); Cu.reportError(e); } }, removeDirectory: function (sFolder) { // does not work but no exception raised (bug?) try { let xNsiFolder = new FileUtils.File(sFolder); this.xSCEngine.removeDirectory(xNsiFolder); } catch (e) { console.log("Unable to remove directory: " + sFolder); Cu.reportError(e); } }, setExtensionDictFolder: function (sDictName, bActivate) { try { let that = this; let sPath = "/content/dictionaries/" + sDictName; AddonManager.getAddonByID("French-GC-TB@grammalecte.net", function (addon) { let xURI = addon.getResourceURI(sPath); //console.log(xURI); let sFolder = xURI.filePath; if (sFolder !== undefined) { if (/^\/[A-Z]:\//.test(sFolder)) { // Windows path sFolder = sFolder.slice(1).replace(/\//g, "\\\\"); } console.log("folder: " + sFolder); if (bActivate) { that.addDirectory(sFolder); } else { that.removeDirectory(sFolder); } } }); } catch (e) { console.log("Unable to add extension folder"); Cu.reportError(e); } } }; |
Modified gc_lang/fr/tb/install.rdf from [c98ee16b92] to [95227f9159].
1 2 3 4 5 6 7 8 9 10 11 | <?xml version="1.0" encoding="UTF-8"?> <RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#"> <Description about="urn:mozilla:install-manifest"> <em:id>${tb_identifier}</em:id> <em:name>${tb_name}</em:name> <em:type>2</em:type> <em:version>${version}</em:version> <em:creator>${author}</em:creator> <em:description>${description}</em:description> <em:homepageURL>${link}</em:homepageURL> | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?xml version="1.0" encoding="UTF-8"?> <RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#"> <Description about="urn:mozilla:install-manifest"> <em:id>${tb_identifier}</em:id> <em:name>${tb_name}</em:name> <em:type>2</em:type> <em:version>${version}</em:version> <em:creator>${author}</em:creator> <em:description>${description}</em:description> <em:homepageURL>${link}</em:homepageURL> <!--<em:optionsURL>chrome://grammarchecker/content/options.xul</em:optionsURL>--> <em:unpack>true</em:unpack> <em:targetApplication> <Description> <em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id> <!-- thunderbird --> <em:minVersion>45.8.0</em:minVersion> <em:maxVersion>55.*</em:maxVersion> |
︙ | ︙ |
Modified gc_lang/fr/tb/locale/en/options.dtd from [071253db94] to [5fe56718ba].
|
| | | < < < > > | 1 2 3 4 5 6 | <!ENTITY window.title "Grammalecte · Options"> <!ENTITY dialogheader.label "Other options"> <!ENTITY check_signature.label "Check signature text (in text mode)"> <!ENTITY check_signature.accesskey "C"> |
Modified gc_lang/fr/tb/locale/fr/options.dtd from [a50c0f39f8] to [37a043f079].
|
| | | < < < | 1 2 3 4 | <!ENTITY window.title "Grammalecte · Options"> <!ENTITY dialogheader.label "Autres options"> <!ENTITY check_signature.label "Vérifier le texte de la signature (en mode texte)"> <!ENTITY check_signature.accesskey "V"> |
Modified graphspell-js/helpers.js from [b70dea39e2] to [d93f7e0941].
︙ | ︙ | |||
49 50 51 52 53 54 55 | loadFile: function (spf) { // load ressources in workers (suggested by Mozilla extensions reviewers) // for more options have a look here: https://gist.github.com/Noitidart/ec1e6b9a593ec7e3efed // if not in workers, use sdk/data.load() instead try { let xRequest; | < | < < < < < < | 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | loadFile: function (spf) { // load ressources in workers (suggested by Mozilla extensions reviewers) // for more options have a look here: https://gist.github.com/Noitidart/ec1e6b9a593ec7e3efed // if not in workers, use sdk/data.load() instead try { let xRequest; xRequest = new XMLHttpRequest(); xRequest.open('GET', spf, false); // 3rd arg is false for synchronous, sync is acceptable in workers xRequest.overrideMimeType('text/json'); xRequest.send(); return xRequest.responseText; } catch (e) { this.logerror(e); |
︙ | ︙ |
Modified make.py from [dbe9299caf] to [4008460ad6].
︙ | ︙ | |||
361 362 363 364 365 366 367 368 369 370 371 372 373 374 | xParser.add_argument("-pm", "--perf_memo", help="run performance tests and store results in perf_memo.txt", action="store_true") xParser.add_argument("-js", "--javascript", help="JavaScript build for Firefox", action="store_true") xParser.add_argument("-aed", "--add_extended_dictionary", help="add extended dictionary to the build", action="store_true") xParser.add_argument("-apd", "--add_personal_dictionary", help="add personal dictionary to the build", action="store_true") xParser.add_argument("-fx", "--firefox", help="Launch Firefox Developper for WebExtension testing", action="store_true") xParser.add_argument("-we", "--web_ext", help="Launch Firefox Nightly for WebExtension testing", action="store_true") xParser.add_argument("-tb", "--thunderbird", help="Launch Thunderbird", action="store_true") xParser.add_argument("-i", "--install", help="install the extension in Writer (path of unopkg must be set in config.ini)", action="store_true") xArgs = xParser.parse_args() if xArgs.build_data: xArgs.build_data_before = True xArgs.build_data_after = True | > | 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 | xParser.add_argument("-pm", "--perf_memo", help="run performance tests and store results in perf_memo.txt", action="store_true") xParser.add_argument("-js", "--javascript", help="JavaScript build for Firefox", action="store_true") xParser.add_argument("-aed", "--add_extended_dictionary", help="add extended dictionary to the build", action="store_true") xParser.add_argument("-apd", "--add_personal_dictionary", help="add personal dictionary to the build", action="store_true") xParser.add_argument("-fx", "--firefox", help="Launch Firefox Developper for WebExtension testing", action="store_true") xParser.add_argument("-we", "--web_ext", help="Launch Firefox Nightly for WebExtension testing", action="store_true") xParser.add_argument("-tb", "--thunderbird", help="Launch Thunderbird", action="store_true") xParser.add_argument("-tbb", "--thunderbird_beta", help="Launch Thunderbird Beta", action="store_true") xParser.add_argument("-i", "--install", help="install the extension in Writer (path of unopkg must be set in config.ini)", action="store_true") xArgs = xParser.parse_args() if xArgs.build_data: xArgs.build_data_before = True xArgs.build_data_after = True |
︙ | ︙ | |||
446 447 448 449 450 451 452 | else: # Firefox Nightly edition spfFirefox = dVars['win_fx_nightly_path'] if platform.system() == "Windows" else dVars['linux_fx_nightly_path'] os.system(r'web-ext run --firefox="' + spfFirefox + '" --browser-console --firefox-profile=debug') # Thunderbird if xArgs.thunderbird: | > > | > > > > | 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 | else: # Firefox Nightly edition spfFirefox = dVars['win_fx_nightly_path'] if platform.system() == "Windows" else dVars['linux_fx_nightly_path'] os.system(r'web-ext run --firefox="' + spfFirefox + '" --browser-console --firefox-profile=debug') # Thunderbird if xArgs.thunderbird: spfThunderbird = '"'+dVars['win_tb_path']+'"' if platform.system() == "Windows" else dVars['linux_tb_path'] print(spfThunderbird) os.system(spfThunderbird + ' -jsconsole -P debug') if xArgs.thunderbird_beta: spfThunderbird = '"'+dVars['win_tb_beta_path']+'"' if platform.system() == "Windows" else dVars['linux_tb_beta_path'] print(spfThunderbird) os.system(spfThunderbird + ' -jsconsole -P beta') else: print("Folder not found: gc_lang/"+sLang) oNow = datetime.datetime.now() print("============== MAKE GRAMMALECTE [finished] at {0.hour:>2} h {0.minute:>2} min {0.second:>2} s ==============".format(oNow)) if __name__ == '__main__': main() |