🐛 Fix selectAll on mixed span styles

This commit is contained in:
Elena Torro
2025-12-02 16:50:48 +01:00
parent 511e80c948
commit c6b64a8e39

View File

@@ -1939,11 +1939,21 @@ export class SelectionController extends EventTarget {
const textSpan = this.startTextSpan; const textSpan = this.startTextSpan;
const midText = startNode.splitText(startOffset); const midText = startNode.splitText(startOffset);
const endText = midText.splitText(endOffset - startOffset); const endText = midText.splitText(endOffset - startOffset);
const midTextSpan = createTextSpanFrom(textSpan, midText, newStyles);
textSpan.after(midTextSpan); // Only create text span if midText is not empty
if (endText.length > 0) { if (midText.nodeValue && midText.nodeValue.length > 0) {
const endTextSpan = createTextSpan(endText, textSpan.style); const midTextSpan = createTextSpanFrom(textSpan, midText, newStyles);
midTextSpan.after(endTextSpan); textSpan.after(midTextSpan);
if (endText.length > 0) {
const endTextSpan = createTextSpan(endText, textSpan.style);
midTextSpan.after(endTextSpan);
}
} else {
// If midText is empty, just create endTextSpan if needed
if (endText.length > 0) {
const endTextSpan = createTextSpan(endText, textSpan.style);
textSpan.after(endTextSpan);
}
} }
// NOTE: This is necessary because sometimes // NOTE: This is necessary because sometimes
@@ -1996,7 +2006,8 @@ export class SelectionController extends EventTarget {
// new text span. // new text span.
if ( if (
this.#textNodeIterator.currentNode === startNode && this.#textNodeIterator.currentNode === startNode &&
startOffset > 0 startOffset > 0 &&
startOffset < (startNode.nodeValue?.length || 0)
) { ) {
const newTextSpan = splitTextSpan(textSpan, startOffset); const newTextSpan = splitTextSpan(textSpan, startOffset);
setTextSpanStyles(newTextSpan, newStyles); setTextSpanStyles(newTextSpan, newStyles);
@@ -2018,7 +2029,8 @@ export class SelectionController extends EventTarget {
// If we're at end node // If we're at end node
} else if ( } else if (
this.#textNodeIterator.currentNode === endNode && this.#textNodeIterator.currentNode === endNode &&
endOffset < endNode.nodeValue.length endOffset < endNode.nodeValue.length &&
endOffset > 0
) { ) {
const newTextSpan = splitTextSpan(textSpan, endOffset); const newTextSpan = splitTextSpan(textSpan, endOffset);
setTextSpanStyles(textSpan, newStyles); setTextSpanStyles(textSpan, newStyles);