From 2695e4e3310b0d127e376b7b3e34ad422bf6415d Mon Sep 17 00:00:00 2001 From: Teal Dulcet Date: Thu, 6 May 2021 00:38:40 -0700 Subject: [PATCH 1/2] Updated content script to use the beforeinput event. --- README.md | 2 +- assets/texts/en/amoDescription.html | 2 +- scripts/manifests/dev.json | 2 +- scripts/manifests/firefox.json | 2 +- scripts/manifests/thunderbirdmanifest.json | 2 +- src/content_scripts/autocorrect.js | 52 ++++++++++++---------- src/manifest.json | 2 +- 7 files changed, 34 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 660e28d..bf7c50d 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ For instance, it converts quotes like `"these"` to `β€œthese”`, which are typo Additionally, you can convert text into more than 20 different font styles and casing changes. You can enable and disable any features in the options and adjust more settings regarding the behavior of the add-on. -This extension works with modern Firefox v78 or higher, Chromium/Chrome and Thunderbird v78 or higher. +This extension works with modern Firefox v87 or higher, Chromium/Chrome and Thunderbird v87 or higher. ## Download diff --git a/assets/texts/en/amoDescription.html b/assets/texts/en/amoDescription.html index c0ace92..16f18ef 100644 --- a/assets/texts/en/amoDescription.html +++ b/assets/texts/en/amoDescription.html @@ -83,7 +83,7 @@ The add-on is free/libre open-source software and developed on GitHub. Fork it on GitHub and contribute. There are some easy issues to start with. -This extension works with modern Firefox and Thunderbird v78 or higher. +This extension works with modern Firefox and Thunderbird v87 or higher. πŸ™‹β€β™€οΈ Contribute πŸ™‹β€β™€οΈ diff --git a/scripts/manifests/dev.json b/scripts/manifests/dev.json index 378e20d..9223efd 100644 --- a/scripts/manifests/dev.json +++ b/scripts/manifests/dev.json @@ -44,7 +44,7 @@ "applications": { "gecko": { "id": "unicodify@rugk.github.io", - "strict_min_version": "78.0" + "strict_min_version": "87.0" } } } diff --git a/scripts/manifests/firefox.json b/scripts/manifests/firefox.json index 349755b..a0ddeeb 100644 --- a/scripts/manifests/firefox.json +++ b/scripts/manifests/firefox.json @@ -42,7 +42,7 @@ "applications": { "gecko": { "id": "unicodify@rugk.github.io", - "strict_min_version": "78.0" + "strict_min_version": "87.0" } } } diff --git a/scripts/manifests/thunderbirdmanifest.json b/scripts/manifests/thunderbirdmanifest.json index a7974b0..5068e68 100644 --- a/scripts/manifests/thunderbirdmanifest.json +++ b/scripts/manifests/thunderbirdmanifest.json @@ -45,7 +45,7 @@ "applications": { "gecko": { "id": "unicodify@rugk.github.io", - "strict_min_version": "78.0" + "strict_min_version": "87.0" } } } diff --git a/src/content_scripts/autocorrect.js b/src/content_scripts/autocorrect.js index c03ecf7..9186cb1 100644 --- a/src/content_scripts/autocorrect.js +++ b/src/content_scripts/autocorrect.js @@ -266,9 +266,8 @@ function firstDifferenceIndex(a, b) { * @returns {void} */ function autocorrect(event) { - // console.log('keydown', event.key, event.key.length, event.keyCode); - // Exclude all keys that do not produce a single Unicode character - if (!((event.key.length === 0 || event.key.length === 1 || event.keyCode === 13 || event.key === "Unidentified") && !event.ctrlKey && !event.metaKey && !event.altKey)) { + // console.log('beforeinput', event.inputType, event.data); + if (!(event.inputType === "insertText" || event.inputType === "insertCompositionText" || event.inputType === "insertParagraph" || event.inputType === "insertLineBreak")) { return; } if (!symbolpatterns) { @@ -279,11 +278,12 @@ function autocorrect(event) { if (caretposition) { const value = target.value || target.innerText; let deletecount = 0; - let insert = value.slice(caretposition - 1, caretposition); // event.key; + let insert = event.inputType === "insertLineBreak" || event.inputType === "insertParagraph" ? "\n" : event.data; + const ainsert = insert; let output = false; // Use Unicode smart quotes if (quotes && (insert === "'" || insert === '"')) { - const previouschar = value.slice(caretposition < 2 ? 0 : caretposition - 2, caretposition - 1); + const previouschar = value.slice(caretposition < 1 ? 0 : caretposition - 1, caretposition); // White space const re = /^\s*$/; if (insert === "'") { @@ -291,19 +291,18 @@ function autocorrect(event) { } else if (insert === '"') { insert = re.test(previouschar) ? "β€œ" : "”"; } - deletecount = 1; output = true; } - const previousText = value.slice(caretposition < (longest + 1) ? 0 : caretposition - (longest + 1), caretposition - 1); + const previousText = value.slice(caretposition < longest ? 0 : caretposition - longest, caretposition); const regexResult = symbolpatterns.exec(previousText); // Autocorrect Unicode Symbols if (regexResult) { - const text = value.slice(caretposition < longest ? 0 : caretposition - longest, caretposition); + const text = value.slice(caretposition < (longest - 1) ? 0 : caretposition - (longest - 1), caretposition) + ainsert; const aregexResult = symbolpatterns.exec(text); const aaregexResult = antipatterns.exec(text); if (!aaregexResult && (!aregexResult || (caretposition <= longest ? regexResult.index < aregexResult.index : regexResult.index <= aregexResult.index))) { - insert = autocorrections[regexResult[0]] + (event.keyCode === 13 ? "\n" : insert); - deletecount = regexResult[0].length + 1; + insert = autocorrections[regexResult[0]] + ainsert; + deletecount = regexResult[0].length; output = true; } } else { @@ -311,17 +310,17 @@ function autocorrect(event) { if (!output && fracts) { // Numbers: https://regex101.com/r/7jUaSP/2 const numberRegex = /[0-9]+(\.[0-9]+)?$/; - const previousText = value.slice(0, caretposition - 1); + const previousText = value.slice(0, caretposition); const regexResult = numberRegex.exec(previousText); if (regexResult) { - const text = value.slice(0, caretposition); + const text = value.slice(0, caretposition) + ainsert; const aregexResult = numberRegex.exec(text); if (!aregexResult) { const label = outputLabel(regexResult[0], regexResult[1]); const index = firstDifferenceIndex(label, regexResult[0]); if (index >= 0) { - insert = label.slice(index) + (event.keyCode === 13 ? "\n" : insert); - deletecount = regexResult[0].length - index + 1; + insert = label.slice(index) + ainsert; + deletecount = regexResult[0].length - index; output = true; } } @@ -329,13 +328,17 @@ function autocorrect(event) { } } if (output) { - const text = value.slice(caretposition - deletecount, caretposition); - deleteCaret(target, text); + event.preventDefault(); + + const text = deletecount ? value.slice(caretposition - deletecount, caretposition) : ""; + if (text) { + deleteCaret(target, text); + } insertAtCaret(target, insert); - console.debug("Autocorrect: β€œ%s” was replaced with β€œ%s”.", text, insert); insertedText = insert; - deletedText = text; + deletedText = text + ainsert; + console.debug("Autocorrect: β€œ%s” was replaced with β€œ%s”.", deletedText, insertedText); lastTarget = target; lastCaretPosition = caretposition - deletecount + insert.length; @@ -350,9 +353,9 @@ function autocorrect(event) { * @returns {void} */ function undoAutocorrect(event) { - // console.log('keyup', event.key, event.key.length, event.keyCode); + // console.log('beforeinput', event.inputType, event.data); // Backspace - if (!(event.keyCode === 8 && !event.ctrlKey && !event.metaKey && !event.altKey)) { + if (event.inputType !== "deleteContentBackward") { return; } const target = event.target; @@ -362,6 +365,7 @@ function undoAutocorrect(event) { event.preventDefault(); if (insertedText) { + lastTarget = null; deleteCaret(target, insertedText); } if (deletedText) { @@ -369,9 +373,9 @@ function undoAutocorrect(event) { } console.debug("Undo autocorrect: β€œ%s” was replaced with β€œ%s”.", insertedText, deletedText); } - } - lastTarget = null; + lastTarget = null; + } } /** @@ -406,6 +410,6 @@ function handleError(error) { browser.runtime.sendMessage({ "type": AUTOCORRECT_CONTENT }).then(handleResponse, handleError); browser.runtime.onMessage.addListener(handleResponse); -window.addEventListener("keydown", undoAutocorrect, true); -window.addEventListener("keyup", autocorrect, true); +window.addEventListener("beforeinput", undoAutocorrect, true); +window.addEventListener("beforeinput", autocorrect, true); console.log("Unicodify autocorrect module loaded."); diff --git a/src/manifest.json b/src/manifest.json index 378e20d..9223efd 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -44,7 +44,7 @@ "applications": { "gecko": { "id": "unicodify@rugk.github.io", - "strict_min_version": "78.0" + "strict_min_version": "87.0" } } } From 9d9b4035b13c4ccdc3263e8931e3e1f3e1c592cb Mon Sep 17 00:00:00 2001 From: Teal Dulcet Date: Sun, 24 Oct 2021 01:12:41 -0700 Subject: [PATCH 2/2] Made requested changes. --- src/content_scripts/autocorrect.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/content_scripts/autocorrect.js b/src/content_scripts/autocorrect.js index f5b3ff5..9a0a3cb 100644 --- a/src/content_scripts/autocorrect.js +++ b/src/content_scripts/autocorrect.js @@ -279,7 +279,7 @@ function autocorrect(event) { const value = target.value || target.innerText; let deletecount = 0; let insert = event.inputType === "insertLineBreak" || event.inputType === "insertParagraph" ? "\n" : event.data; - const ainsert = insert; + const inserted = insert; let output = false; // Use Unicode smart quotes if (quotes && (insert === "'" || insert === '"')) { @@ -297,11 +297,12 @@ function autocorrect(event) { const regexResult = symbolpatterns.exec(previousText); // Autocorrect Unicode Symbols if (regexResult) { - const text = value.slice(caretposition < (longest - 1) ? 0 : caretposition - (longest - 1), caretposition) + ainsert; + const length = longest - 1; + const text = value.slice(caretposition < length ? 0 : caretposition - length, caretposition) + inserted; const aregexResult = symbolpatterns.exec(text); const aaregexResult = antipatterns.exec(text); if (!aaregexResult && (!aregexResult || (caretposition <= longest ? regexResult.index < aregexResult.index : regexResult.index <= aregexResult.index))) { - insert = autocorrections[regexResult[0]] + ainsert; + insert = autocorrections[regexResult[0]] + inserted; deletecount = regexResult[0].length; output = true; } @@ -314,13 +315,13 @@ function autocorrect(event) { const previousText = value.slice(0, caretposition); const regexResult = numberRegex.exec(previousText); if (regexResult && insert !== ".") { - const text = value.slice(0, caretposition) + ainsert; + const text = value.slice(0, caretposition) + inserted; const aregexResult = numberRegex.exec(text); if (!aregexResult) { const label = outputLabel(regexResult[0], regexResult.groups.fractionpart); const index = firstDifferenceIndex(label, regexResult[0]); if (index >= 0) { - insert = label.slice(index) + ainsert; + insert = label.slice(index) + inserted; deletecount = regexResult[0].length - index; output = true; } @@ -338,7 +339,7 @@ function autocorrect(event) { insertAtCaret(target, insert); insertedText = insert; - deletedText = text + ainsert; + deletedText = text + inserted; console.debug("Autocorrect: β€œ%s” was replaced with β€œ%s”.", deletedText, insertedText); lastTarget = target;