Vanessa 2025-04-10 17:25:21 +08:00
parent d204327be6
commit 544749e46f

View file

@ -491,10 +491,33 @@ export class Toolbar {
inlineElement.setAttribute("data-type", type);
inlineElement.textContent = item.textContent;
setFontStyle(inlineElement, textObj);
if (type === "text" && !inlineElement.getAttribute("style")) {
newNodes.push(item);
// 合并相同元素 https://github.com/siyuan-note/siyuan/issues/14290
const previousIsSame = index === 0 && previousElement && previousElement.nodeType !== 3 &&
type === previousElement.getAttribute("data-type") &&
hasSameTextStyle(inlineElement, previousElement, textObj)
const nextIsSame = index === contents.childNodes.length - 1 && nextElement && nextElement.nodeType !== 3 &&
type === nextElement.getAttribute("data-type") &&
hasSameTextStyle(inlineElement, nextElement, textObj)
if (previousIsSame) {
if (previousIsSame) {
previousIndex = previousElement.textContent.length;
previousElement.innerHTML = previousElement.innerHTML + inlineElement.innerHTML;
if (nextIsSame) {
nextIndex = previousElement.textContent.length;
previousElement.innerHTML = previousElement.innerHTML + nextElement.innerHTML;
nextElement.remove();
nextElement = previousElement;
}
}
} else if (nextIsSame) {
nextIndex = inlineElement.textContent.length;
nextElement.innerHTML = inlineElement.innerHTML + nextElement.innerHTML;
} else {
newNodes.push(inlineElement);
if (type === "text" && !inlineElement.getAttribute("style")) {
newNodes.push(item);
} else {
newNodes.push(inlineElement);
}
}
} else {
newNodes.push(item);
@ -590,14 +613,24 @@ export class Toolbar {
item.setAttribute("data-subtype", "s");
}
}
if (index === 0 && previousElement && previousElement.nodeType !== 3 &&
const previousIsSame = index === 0 && previousElement && previousElement.nodeType !== 3 &&
isArrayEqual(types, (previousElement.getAttribute("data-type") || "").split(" ")) &&
hasSameTextStyle(item, previousElement, textObj)) {
previousIndex = previousElement.textContent.length;
previousElement.innerHTML = previousElement.innerHTML + item.innerHTML;
} else if (index === contents.childNodes.length - 1 && nextElement && nextElement.nodeType !== 3 &&
hasSameTextStyle(item, previousElement, textObj)
const nextIsSame = index === contents.childNodes.length - 1 && nextElement && nextElement.nodeType !== 3 &&
isArrayEqual(types, (nextElement.getAttribute("data-type") || "").split(" ")) &&
hasSameTextStyle(item, nextElement, textObj)) {
hasSameTextStyle(item, nextElement, textObj)
if (previousIsSame) {
if (previousIsSame) {
previousIndex = previousElement.textContent.length;
previousElement.innerHTML = previousElement.innerHTML + item.innerHTML;
if (nextIsSame) {
nextIndex = previousElement.textContent.length;
previousElement.innerHTML = previousElement.innerHTML + nextElement.innerHTML;
nextElement.remove();
nextElement = previousElement;
}
}
} else if (nextIsSame) {
nextIndex = item.textContent.length;
nextElement.innerHTML = item.innerHTML + nextElement.innerHTML;
} else if (item.tagName !== "BR" && item.tagName !== "IMG") {
@ -774,7 +807,7 @@ export class Toolbar {
if (nextElement) {
this.mergeNode(nextElement.childNodes);
}
if (previousIndex) {
if (typeof previousIndex === "number") {
this.range.setStart(previousElement.firstChild, previousIndex);
} else if (newNodes.length > 0) {
if (newNodes[0].nodeType !== 3 && (newNodes[0] as HTMLElement).getAttribute("data-type") === "inline-math") {
@ -798,7 +831,7 @@ export class Toolbar {
// aaa**bbb** 选中 aaa 加粗
this.range.setStart(nextElement.firstChild, 0);
}
if (nextIndex) {
if (typeof nextIndex === "number") {
this.range.setEnd(nextElement.lastChild, nextIndex);
} else if (newNodes.length > 0) {
const lastNewNode = newNodes[newNodes.length - 1];