From 3928fe399d98367a569bfb8fe372f89b6affdff8 Mon Sep 17 00:00:00 2001 From: mic Date: Wed, 15 Jan 2025 21:39:49 +0100 Subject: [PATCH] now getOnlyTypedText can autoselect the typed text. see #229 --- js/mzta-compose-script.js | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/js/mzta-compose-script.js b/js/mzta-compose-script.js index ed0731b1..b2089bf0 100644 --- a/js/mzta-compose-script.js +++ b/js/mzta-compose-script.js @@ -18,10 +18,11 @@ browser.runtime.onMessage.addListener((message) => { switch (message.command) { - case "getSelectedText": + case "getSelectedText": { return Promise.resolve(window.getSelection().toString()); + } - case "replaceSelectedText": + case "replaceSelectedText": { const selectedText = window.getSelection().toString(); if (selectedText === '') { return Promise.resolve(false); @@ -37,7 +38,7 @@ switch (message.command) { r.insertNode(doc.body); browser.runtime.sendMessage({command: "compose_reloadBody", tabId: message.tabId}); return Promise.resolve(true); - break; + } case "getText": { let t = ''; @@ -53,15 +54,22 @@ switch (message.command) { return Promise.resolve(t); } - case "getTextOnly": + case "getTextOnly": { return Promise.resolve(window.document.body.innerText); + } - case "getFullHtml": + case "getFullHtml": { return Promise.resolve(window.document.body.innerHTML); + } case "getOnlyTypedText": { let t = ''; const children = window.document.body.childNodes; + const selection = window.getSelection(); + + let firstNode = null; + let lastNode = null; + for (const node of children) { if (node instanceof Element) { if (node.classList.contains('moz-cite-prefix')) { @@ -69,7 +77,22 @@ switch (message.command) { } } t += node.textContent; + + // Track the first and last nodes for range + if (!firstNode) { + firstNode = node; + } + lastNode = node; } + + if(message.do_autoselect && selection.isCollapsed && firstNode && lastNode) { + const range = document.createRange(); + range.setStartBefore(firstNode); + range.setEndAfter(lastNode); + selection.removeAllRanges(); + selection.addRange(range); + } + return Promise.resolve(t); }