now getOnlyTypedText can autoselect the typed text. see #229

This commit is contained in:
mic 2025-01-15 21:39:49 +01:00
parent 59f0dcdc13
commit 3928fe399d

View file

@ -18,10 +18,11 @@
browser.runtime.onMessage.addListener((message) => { browser.runtime.onMessage.addListener((message) => {
switch (message.command) { switch (message.command) {
case "getSelectedText": case "getSelectedText": {
return Promise.resolve(window.getSelection().toString()); return Promise.resolve(window.getSelection().toString());
}
case "replaceSelectedText": case "replaceSelectedText": {
const selectedText = window.getSelection().toString(); const selectedText = window.getSelection().toString();
if (selectedText === '') { if (selectedText === '') {
return Promise.resolve(false); return Promise.resolve(false);
@ -37,7 +38,7 @@ switch (message.command) {
r.insertNode(doc.body); r.insertNode(doc.body);
browser.runtime.sendMessage({command: "compose_reloadBody", tabId: message.tabId}); browser.runtime.sendMessage({command: "compose_reloadBody", tabId: message.tabId});
return Promise.resolve(true); return Promise.resolve(true);
break; }
case "getText": { case "getText": {
let t = ''; let t = '';
@ -53,15 +54,22 @@ switch (message.command) {
return Promise.resolve(t); return Promise.resolve(t);
} }
case "getTextOnly": case "getTextOnly": {
return Promise.resolve(window.document.body.innerText); return Promise.resolve(window.document.body.innerText);
}
case "getFullHtml": case "getFullHtml": {
return Promise.resolve(window.document.body.innerHTML); return Promise.resolve(window.document.body.innerHTML);
}
case "getOnlyTypedText": { case "getOnlyTypedText": {
let t = ''; let t = '';
const children = window.document.body.childNodes; const children = window.document.body.childNodes;
const selection = window.getSelection();
let firstNode = null;
let lastNode = null;
for (const node of children) { for (const node of children) {
if (node instanceof Element) { if (node instanceof Element) {
if (node.classList.contains('moz-cite-prefix')) { if (node.classList.contains('moz-cite-prefix')) {
@ -69,7 +77,22 @@ switch (message.command) {
} }
} }
t += node.textContent; 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); return Promise.resolve(t);
} }