Vanessa 2025-04-16 20:57:17 +08:00
parent 9889ef7fb2
commit 84e59e83f5
2 changed files with 16 additions and 2 deletions

View File

@ -417,7 +417,7 @@ export const focusByOffset = (container: Element, start: number, end: number, is
} else if (isFocus && (isNotEditBlock(container) || container.classList.contains("av"))) { } else if (isFocus && (isNotEditBlock(container) || container.classList.contains("av"))) {
return focusBlock(container); return focusBlock(container);
} }
let startNode; let startNode: Node;
searchNode(container, container.firstChild, node => { searchNode(container, container.firstChild, node => {
if (node.nodeType === Node.TEXT_NODE) { if (node.nodeType === Node.TEXT_NODE) {
const dataLength = (node as Text).data.length; const dataLength = (node as Text).data.length;
@ -428,6 +428,14 @@ export const focusByOffset = (container: Element, start: number, end: number, is
start -= dataLength; start -= dataLength;
end -= dataLength; end -= dataLength;
return false; return false;
} else if (node.nodeType === Node.ELEMENT_NODE && (node as Element).tagName === "BR") {
if (start <= 1) {
startNode = node;
return true;
}
start -= 1;
end -= 1;
return false;
} }
}); });
@ -448,7 +456,7 @@ export const focusByOffset = (container: Element, start: number, end: number, is
const range = document.createRange(); const range = document.createRange();
if (startNode) { if (startNode) {
if (start < (startNode as Text).data.length) { if (startNode.nodeType === Node.TEXT_NODE && start < (startNode as Text).data.length) {
range.setStart(startNode, start); range.setStart(startNode, start);
} else { } else {
range.setStartAfter(startNode); range.setStartAfter(startNode);

View File

@ -422,6 +422,9 @@ export class WYSIWYG {
if (isEndOfBlock(range)) { if (isEndOfBlock(range)) {
textPlain = textPlain.replace(/\n$/, ""); textPlain = textPlain.replace(/\n$/, "");
} }
} else if (hasClosestByTag(range.startContainer, "TD") || hasClosestByTag(range.startContainer, "TH")) {
tempElement.innerHTML = tempElement.innerHTML.replace(/<br>/g, "\n").replace(/<br\/>/g, "\n");
textPlain = tempElement.textContent;
} else if (!hasClosestByTag(range.startContainer, "CODE")) { } else if (!hasClosestByTag(range.startContainer, "CODE")) {
textPlain = range.toString(); textPlain = range.toString();
} }
@ -1678,6 +1681,9 @@ export class WYSIWYG {
protyle.hint.render(protyle); protyle.hint.render(protyle);
if (!selectAVElement) { if (!selectAVElement) {
textPlain = textPlain || protyle.lute.BlockDOM2StdMd(html).trimEnd(); // 需要 trimEnd否则 \n 会导致 https://github.com/siyuan-note/siyuan/issues/6218 textPlain = textPlain || protyle.lute.BlockDOM2StdMd(html).trimEnd(); // 需要 trimEnd否则 \n 会导致 https://github.com/siyuan-note/siyuan/issues/6218
if (nodeElement.classList.contains("table")) {
textPlain = textPlain.replace(/<br>/g, "\n").replace(/<br\/>/g, "\n");
}
} }
textPlain = textPlain.replace(/\u00A0/g, " "); // Replace non-breaking spaces with normal spaces when copying https://github.com/siyuan-note/siyuan/issues/9382 textPlain = textPlain.replace(/\u00A0/g, " "); // Replace non-breaking spaces with normal spaces when copying https://github.com/siyuan-note/siyuan/issues/9382
event.clipboardData.setData("text/plain", textPlain); event.clipboardData.setData("text/plain", textPlain);