Index: gc_lang/fr/webext/background.js ================================================================== --- gc_lang/fr/webext/background.js +++ gc_lang/fr/webext/background.js @@ -69,10 +69,19 @@ } catch (e) { showError(e); } }; + +function initUIOptions (dSavedOptions) { + if (!dSavedOptions.hasOwnProperty("ui_options")) { + browser.storage.local.set({"ui_options": { + textarea: true, + editablenode: false + }}); + } +} function initGrammarChecker (dSavedOptions) { let dOptions = (dSavedOptions.hasOwnProperty("gc_options")) ? dSavedOptions.gc_options : null; xGCEWorker.postMessage({ sCommand: "init", @@ -82,24 +91,15 @@ } function init () { if (bChrome) { browser.storage.local.get("gc_options", initGrammarChecker); + browser.storage.local.get("ui_options", initUIOptions); return; } - let xPromise = browser.storage.local.get("gc_options"); - xPromise.then( - initGrammarChecker, - function (e) { - showError(e); - xGCEWorker.postMessage({ - sCommand: "init", - dParam: {sExtensionPath: browser.extension.getURL("."), dOptions: null, sContext: "Firefox"}, - dInfo: {} - }); - } - ); + browser.storage.local.get("gc_options").then(initGrammarChecker, showError); + browser.storage.local.get("ui_options").then(initUIOptions, showError); } init(); Index: gc_lang/fr/webext/content_scripts/init.js ================================================================== --- gc_lang/fr/webext/content_scripts/init.js +++ gc_lang/fr/webext/content_scripts/init.js @@ -63,24 +63,34 @@ clearRightClickedNode: function () { this.xRightClickedNode = null; }, createMenus: function () { - let lNode = document.getElementsByTagName("textarea"); - for (let xNode of lNode) { - if (xNode.style.display !== "none" && xNode.style.visibility !== "hidden") { - this.lMenu.push(new GrammalecteMenu(this.nMenu, xNode)); - this.nMenu += 1; - } + if (bChrome) { + browser.storage.local.get("ui_options", this._createMenus.bind(this)); + return; } + browser.storage.local.get("ui_options").then(this._createMenus.bind(this), showError); }, - createMenus2 () { - let lNode = document.querySelectorAll("[contenteditable]"); - for (let xNode of lNode) { - this.lMenu.push(new GrammalecteMenu(this.nMenu, xNode)); - this.nMenu += 1; + _createMenus: function (dOptions) { + if (dOptions.hasOwnProperty("ui_options")) { + dOptions = dOptions.ui_options; + if (dOptions.textarea) { + for (let xNode of document.getElementsByTagName("textarea")) { + if (xNode.style.display !== "none" && xNode.style.visibility !== "hidden") { + this.lMenu.push(new GrammalecteMenu(this.nMenu, xNode)); + this.nMenu += 1; + } + } + } + if (dOptions.editablenode) { + for (let xNode of document.querySelectorAll("[contenteditable]")) { + this.lMenu.push(new GrammalecteMenu(this.nMenu, xNode)); + this.nMenu += 1; + } + } } }, rescanPage: function () { if (this.oTFPanel !== null) { this.oTFPanel.hide(); } @@ -90,11 +100,10 @@ oMenu.deleteNodes(); } this.lMenu.length = 0; // to clear an array this.listenRightClick(); this.createMenus(); - this.createMenus2(); }, createTFPanel: function () { if (this.oTFPanel === null) { this.oTFPanel = new GrammalecteTextFormatter("grammalecte_tf_panel", "Formateur de texte", 760, 600, false); @@ -287,6 +296,5 @@ /* Start */ oGrammalecte.listenRightClick(); oGrammalecte.createMenus(); -oGrammalecte.createMenus2(); Index: gc_lang/fr/webext/panel/main.css ================================================================== --- gc_lang/fr/webext/panel/main.css +++ gc_lang/fr/webext/panel/main.css @@ -153,24 +153,25 @@ } /* Help */ -#help_page { +#ui_options_page { display: none; padding: 20px; } -#help_page h2 { +#ui_options_page h2 { + margin-top: 10px; font: bold 20px 'Yanone Kaffeesatz', "Oswald", "Liberation Sans Narrow", sans-serif; color: hsl(210, 50%, 50%); } -#help_page .shortcut { +#ui_options_page .shortcut { margin-top: 10px; font-weight: bold; font-size: 13px; } -#help_page .shortcut_label { +#ui_options_page .shortcut_label { margin-left: 30px; } /* Grammar checking options @@ -230,23 +231,28 @@ padding: 10px; border-radius: 3px; background-color: hsl(0, 50%, 40%); color: hsl(0, 10%, 96%); } -.dict_section { + + +/* + Options +*/ +.option_section { padding: 10px; margin-top: 10px; border-radius: 5px; background-color: hsl(210, 20%, 96%); } -.dict_section label { +.option_section label { font-size: 16px; line-height: 20px; color: hsl(210, 20%, 50%); font-weight: bold; } -.dict_description { +.option_description { padding: 0 0 0 20px; color: hsl(0, 0%, 0%); font-size: 12px; } Index: gc_lang/fr/webext/panel/main.html ================================================================== --- gc_lang/fr/webext/panel/main.html +++ gc_lang/fr/webext/panel/main.html @@ -15,11 +15,11 @@ @@ -48,25 +48,34 @@ et tous ceux qui l’ont soutenu

-
+

INTERFACE

-
-

Grammalecte affiche un bouton d’accès au menu en bas à gauche des zones de texte usuelles pour accéder aux fonctionnalités existantes.

-

-

-

Pour les autres zones de texte (HTML éditable), il faut sélectionner le texte et utiliser le menu contextuel.

-

-

Raccourcis clavier

-

CTRL+MAJ+6

-

Conjugueur (dans un onglet)

-

CTRL+MAJ+7

-

Conjugueur (dans une fenêtre)

+

Menu contextuel

+

Les commandes permettant de lancer Grammalecte sont trouvables via le menu contextuel.

+

+

Boutons d’accès

+

Grammalecte peut aussi afficher un bouton d’accès au menu en bas à gauche des zones de texte pour accéder aux fonctionnalités existantes.

+

+

+

Vous pouvez activer ou désactiver l’affichage de ces boutons sur les zones de texte. Il existe deux types de zones de texte.

+
+

+

Ces zones de texte sont les champs de formulaire usuels pour saisir du texte. Ils ne permettent que la saisie de texte brut, sans fioritures.

+
+
+

+

Ces zones de texte sont des sections de page web éditables. Il est fréquent que ces zones de texte apparaissent comme des “textareas” standard. Il est aussi fréquent que ces zones de texte soient couplées avec toutes sortes de logiciels (de simples scripts d’aide à la mise en page ou des applications complexes). Ces zones de texte permettent l’affichage de texte enrichi (italique, gras, hyperlien, images, etc.). Il est assez fréquent que des “textareas” invisibles se cachent derrière ces “nodes” éditables.

-
+

Raccourcis clavier

+

CTRL+MAJ+6

+

Conjugueur (dans un onglet)

+

CTRL+MAJ+7

+

Conjugueur (dans une fenêtre)

+

OPTIONS GRAMMATICALES

${webextOptionsHTML} @@ -76,25 +85,25 @@

OPTIONS ORTHOGRAPHIQUES

Section inactive. Le nouveau système d’extension de Firefox (WebExtension) ne propose pas encore d’interface de programmation pour le correcteur orthographique.

-
+

-

Ce dictionnaire propose l’orthographe telle qu’elle est écrite aujourd’hui le plus couramment. C’est le dictionnaire recommandé si le français n’est pas votre langue maternelle ou si vous ne désirez qu’une seule graphie correcte par mot.

+

Ce dictionnaire propose l’orthographe telle qu’elle est écrite aujourd’hui le plus couramment. C’est le dictionnaire recommandé si le français n’est pas votre langue maternelle ou si vous ne désirez qu’une seule graphie correcte par mot.

-
+

-

Il s’agit du dictionnaire “Moderne”, avec des graphies classiques en sus, certaines encore communément utilisées, d’autres désuètes. C’est le dictionnaire recommandé si le français est votre langue maternelle.

+

Il s’agit du dictionnaire “Moderne”, avec des graphies classiques en sus, certaines encore communément utilisées, d’autres désuètes. C’est le dictionnaire recommandé si le français est votre langue maternelle.

-
+

-

Avec ce dictionnaire, seule l’orthographe réformée est reconnue. Attendu que bon nombre de graphies réformées sont considérées comme erronées par beaucoup, ce dictionnaire est déconseillé. Les graphies passées dans l’usage sont déjà incluses dans le dictionnaire “Moderne”.

+

Avec ce dictionnaire, seule l’orthographe réformée est reconnue. Attendu que bon nombre de graphies réformées sont considérées comme erronées par beaucoup, ce dictionnaire est déconseillé. Les graphies passées dans l’usage sont déjà incluses dans le dictionnaire “Moderne”.

-
+

-

Ce dictionnaire contient les variantes graphiques, classiques, réformées, ainsi que d’autres plus rares encore. Ce dictionnaire est déconseillé à ceux qui ne connaissent pas très bien la langue française.

+

Ce dictionnaire contient les variantes graphiques, classiques, réformées, ainsi que d’autres plus rares encore. Ce dictionnaire est déconseillé à ceux qui ne connaissent pas très bien la langue française.

Index: gc_lang/fr/webext/panel/main.js ================================================================== --- gc_lang/fr/webext/panel/main.js +++ gc_lang/fr/webext/panel/main.js @@ -50,10 +50,13 @@ browser.runtime.sendMessage({ sCommand: "setOption", dParam: {sOptName: xElem.dataset.option, bValue: xElem.checked}, dInfo: {} }); + } + else if (xElem.id.startsWith("ui_option_")) { + storeUIOptions(); } else if (xElem.id.startsWith("link_")) { browser.tabs.create({url: xElem.dataset.url}); } } else if (xElem.className.startsWith("select")) { @@ -121,10 +124,13 @@ // show the selected one document.getElementById(sPageName).style.display = "block"; if (sPageName == "gc_options_page") { setGCOptionsFromStorage(); } + else if (sPageName == "ui_options_page") { + setUIOptionsFromStorage(); + } } catch (e) { showError(e); } } @@ -133,10 +139,47 @@ function showTestResult (sText) { document.getElementById("tests_result").textContent = sText; } +/* + UI options +*/ + +function setUIOptionsFromStorage () { + if (bChrome) { + browser.storage.local.get("ui_options", setUIOptions); + return; + } + let xPromise = browser.storage.local.get("ui_options"); + xPromise.then(setUIOptions, showError); +} + +function setUIOptions (dOptions) { + if (!dOptions.hasOwnProperty("ui_options")) { + console.log("no ui options found"); + return; + } + dOptions = dOptions.ui_options; + for (let sOpt in dOptions) { + if (document.getElementById("ui_option_"+sOpt)) { + document.getElementById("ui_option_"+sOpt).checked = dOptions[sOpt]; + } + } +} + +function storeUIOptions () { + browser.storage.local.set({"ui_options": { + textarea: ui_option_textarea.checked, + editablenode: ui_option_editablenode.checked + }}); +} + + +/* + GC options +*/ function setGCOptionsFromStorage () { if (bChrome) { browser.storage.local.get("gc_options", _setGCOptions); return; }