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 @@ -224,24 +224,10 @@ catch (e) { showError(e); } }, - sendTextToClipboard (sText) { - // recipe from https://github.com/mdn/webextensions-examples/blob/master/context-menu-copy-link-with-types/clipboard-helper.js - // It doesn’t seem to work anymore on Firefox. Still OK on Chrome. - //console.log(sText); - function setClipboardData (xEvent) { - document.removeEventListener("copy", setClipboardData, true); - xEvent.stopImmediatePropagation(); - xEvent.preventDefault(); - xEvent.clipboardData.setData("text/plain", sText); - } - document.addEventListener("copy", setClipboardData, true); - document.execCommand("copy"); - }, - getCaretPosition (xElement) { // JS awfulness again. // recepie from https://stackoverflow.com/questions/4811822/get-a-ranges-start-and-end-offsets-relative-to-its-parent-container let nCaretOffsetStart = 0; let nCaretOffsetEnd = 0; Index: gc_lang/fr/webext/content_scripts/panel_gc.js ================================================================== --- gc_lang/fr/webext/content_scripts/panel_gc.js +++ gc_lang/fr/webext/content_scripts/panel_gc.js @@ -387,27 +387,58 @@ } copyTextToClipboard () { this.startWaitIcon(); try { - let xClipboardButton = this.xParent.getElementById("grammalecte_clipboard_button"); - xClipboardButton.textContent = "⇒ presse-papiers"; + let sText = ""; - // Quand c'est dans un shadow "this.xParent.getElementsByClassName" n'existe pas. + // Dans un shadow, n’existe pas. let xElem = this.xParent.getElementById("grammalecte_gc_panel"); for (let xNode of xElem.getElementsByClassName("grammalecte_paragraph")) { sText += xNode.textContent + "\n"; } - oGrammalecte.sendTextToClipboard(sText); - window.setTimeout(() => { xClipboardButton.textContent = "📋"; }, 2000); + this._sendTextToClipboard(sText); + } catch (e) { showError(e); } this.stopWaitIcon(); } + _sendTextToClipboard (sText) { + let xClipboardButton = this.xParent.getElementById("grammalecte_clipboard_button"); + xClipboardButton.textContent = "⇒ presse-papiers"; + // Firefox 63+, Chrome 66+ + // Working draft: https://developer.mozilla.org/en-US/docs/Web/API/Clipboard + navigator.clipboard.writeText(sText) + .then( + (res) => { window.setTimeout(() => { xClipboardButton.textContent = "📋"; }, 2000); } + ) + .catch( + (e) => { console.error(e); this._sendTextToClipboard(sText, xClipboardButton); } + ); + } + + _sendTextToClipboardFallback (sText, xClipboardButton) { + try { + // Copy to clipboard fallback + // recipe from https://github.com/mdn/webextensions-examples/blob/master/context-menu-copy-link-with-types/clipboard-helper.js + function setClipboardData (xEvent) { + document.removeEventListener("copy", setClipboardData, true); + xEvent.stopImmediatePropagation(); + xEvent.preventDefault(); + xEvent.clipboardData.setData("text/plain", sText); + } + document.addEventListener("copy", setClipboardData, true); + document.execCommand("copy"); + window.setTimeout(() => { xClipboardButton.textContent = "📋"; }, 2000); + } + catch (e) { + console.error(e); + } + } // Lexicographer clearLexicographer () { this.nLxgCount = 0; Index: gc_lang/fr/webext/panel/main.html ================================================================== --- gc_lang/fr/webext/panel/main.html +++ gc_lang/fr/webext/panel/main.html @@ -180,10 +180,13 @@

“Télécharger des fichiers et consulter et modifier l’historique des téléchargements” (Firefox)

Grammalecte requiert les droits de l’interface “downloads” pour pouvoir exporter votre dictionnaire personnel sur le disque dur (par une astuce de programmation).

Mais l’extension ne télécharge rien et ne consulte ni ne modifie votre historique de téléchargement.

+

“Ajouter des données dans le presse-papiers” (Firefox)

+

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.)

+

Revue de code

Le code de l’extension est passé en revue par les équipes de Mozilla et de Google.

Développement et tests

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.