mirror of
https://github.com/siyuan-note/siyuan.git
synced 2026-01-20 15:26:09 +01:00
This commit is contained in:
parent
d204327be6
commit
544749e46f
1 changed files with 44 additions and 11 deletions
|
|
@ -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];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue