Grammalecte  Check-in [9091d60a11]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:[fx] fix copy to clipboard
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fx
Files: files | file ages | folders
SHA3-256:9091d60a11eefc7ef31b3090c7fa97c6eb38cef0896cff233223dc2a04c97b5e
User & Date: olr 2019-05-17 12:48:32
Context
2019-05-17
13:53
[fr] ajustements check-in: 3eaf3a0427 user: olr tags: fr, trunk
12:48
[fx] fix copy to clipboard check-in: 9091d60a11 user: olr tags: fx, trunk
10:15
[fx] Fix information which looks and sounds like an error message check-in: d7fa354cc5 user: olr tags: fx, trunk
Changes

Changes to gc_lang/fr/webext/content_scripts/init.js.

   222    222               return xNode;
   223    223           }
   224    224           catch (e) {
   225    225               showError(e);
   226    226           }
   227    227       },
   228    228   
   229         -    sendTextToClipboard (sText)  {
   230         -        // recipe from https://github.com/mdn/webextensions-examples/blob/master/context-menu-copy-link-with-types/clipboard-helper.js
   231         -        // It doesn’t seem to work anymore on Firefox. Still OK on Chrome.
   232         -        //console.log(sText);
   233         -        function setClipboardData (xEvent) {
   234         -            document.removeEventListener("copy", setClipboardData, true);
   235         -            xEvent.stopImmediatePropagation();
   236         -            xEvent.preventDefault();
   237         -            xEvent.clipboardData.setData("text/plain", sText);
   238         -        }
   239         -        document.addEventListener("copy", setClipboardData, true);
   240         -        document.execCommand("copy");
   241         -    },
   242         -
   243    229       getCaretPosition (xElement) {
   244    230           // JS awfulness again.
   245    231           // recepie from https://stackoverflow.com/questions/4811822/get-a-ranges-start-and-end-offsets-relative-to-its-parent-container
   246    232           let nCaretOffsetStart = 0;
   247    233           let nCaretOffsetEnd = 0;
   248    234           let xSelection = window.getSelection();
   249    235           if (xSelection.rangeCount > 0) {

Changes to gc_lang/fr/webext/content_scripts/panel_gc.js.

   385    385           let xNode = oGrammalecte.createNode("div", {className: "grammalecte_panel_flow_message", textContent: sMessage});
   386    386           this.xParagraphList.appendChild(xNode);
   387    387       }
   388    388   
   389    389       copyTextToClipboard () {
   390    390           this.startWaitIcon();
   391    391           try {
   392         -            let xClipboardButton = this.xParent.getElementById("grammalecte_clipboard_button");
   393         -            xClipboardButton.textContent = "⇒ presse-papiers";
          392  +
   394    393               let sText = "";
   395         -            // Quand c'est dans un shadow "this.xParent.getElementsByClassName" n'existe pas.
          394  +            // Dans un shadow, <this.xParent.getElementsByClassName> n’existe pas.
   396    395               let xElem = this.xParent.getElementById("grammalecte_gc_panel");
   397    396               for (let xNode of xElem.getElementsByClassName("grammalecte_paragraph")) {
   398    397                   sText += xNode.textContent + "\n";
   399    398               }
   400         -            oGrammalecte.sendTextToClipboard(sText);
   401         -            window.setTimeout(() => { xClipboardButton.textContent = "📋"; }, 2000);
          399  +            this._sendTextToClipboard(sText);
          400  +
   402    401           }
   403    402           catch (e) {
   404    403               showError(e);
   405    404           }
   406    405           this.stopWaitIcon();
   407    406       }
   408    407   
          408  +    _sendTextToClipboard (sText)  {
          409  +        let xClipboardButton = this.xParent.getElementById("grammalecte_clipboard_button");
          410  +        xClipboardButton.textContent = "⇒ presse-papiers";
          411  +        // Firefox 63+, Chrome 66+
          412  +        // Working draft: https://developer.mozilla.org/en-US/docs/Web/API/Clipboard
          413  +        navigator.clipboard.writeText(sText)
          414  +        .then(
          415  +            (res) => { window.setTimeout(() => { xClipboardButton.textContent = "📋"; }, 2000); }
          416  +        )
          417  +        .catch(
          418  +            (e) => { console.error(e); this._sendTextToClipboard(sText, xClipboardButton); }
          419  +        );
          420  +    }
          421  +
          422  +    _sendTextToClipboardFallback (sText, xClipboardButton) {
          423  +        try {
          424  +            // Copy to clipboard fallback
          425  +            // recipe from https://github.com/mdn/webextensions-examples/blob/master/context-menu-copy-link-with-types/clipboard-helper.js
          426  +            function setClipboardData (xEvent) {
          427  +                document.removeEventListener("copy", setClipboardData, true);
          428  +                xEvent.stopImmediatePropagation();
          429  +                xEvent.preventDefault();
          430  +                xEvent.clipboardData.setData("text/plain", sText);
          431  +            }
          432  +            document.addEventListener("copy", setClipboardData, true);
          433  +            document.execCommand("copy");
          434  +            window.setTimeout(() => { xClipboardButton.textContent = "📋"; }, 2000);
          435  +        }
          436  +        catch (e) {
          437  +            console.error(e);
          438  +        }
          439  +    }
   409    440   
   410    441       // Lexicographer
   411    442   
   412    443       clearLexicographer () {
   413    444           this.nLxgCount = 0;
   414    445           while (this.xLxgPanelContent.firstChild) {
   415    446               this.xLxgPanelContent.removeChild(this.xLxgPanelContent.firstChild);

Changes to gc_lang/fr/webext/panel/main.html.

   178    178             <p>Il est nécessaire de pouvoir lire ce que contient une page web pour proposer la correction grammaticale. Ceci ne se fait qu’à la demande de l’utilisateur.</p>
   179    179             <p>Contrairement à tous les autres correcteurs grammaticaux, tout se fait en mode hors-ligne. Aucune information n’est transmise.</p>
   180    180   
   181    181             <h3>“Télécharger des fichiers et consulter et modifier l’historique des téléchargements” (Firefox)</h3>
   182    182             <p>Grammalecte requiert les droits de l’interface “downloads” pour pouvoir exporter votre dictionnaire personnel sur le disque dur (par une astuce de programmation).</p>
   183    183             <p>Mais l’extension ne télécharge rien et ne consulte ni ne modifie votre historique de téléchargement.</p>
   184    184   
          185  +          <h3>“Ajouter des données dans le presse-papiers” (Firefox)</h3>
          186  +          <p>Ce droit est nécessaire pour copier, uniquement à votre demande, le texte corrigé dans le presse-papiers. (Cette fonctionnalité est expérimentale et peut ne pas fonctionner.)</p>
          187  +
   185    188             <h2>Revue de code</h2>
   186    189             <p>Le code de l’extension est passé en revue par les équipes de Mozilla et de Google.</p>
   187    190   
   188    191             <h2>Développement et tests</h2>
   189    192             <p>Cette extension est développée et testée avec Firefox. Il se peut qu’il y ait des différences de comportement avec Chrome et les autres navigateurs avec lesquels cette extension est compatible.</p>
   190    193           </section> <!-- #info_page -->
   191    194