From c4404cbbff31238e0abb7955342d128759c375a4 Mon Sep 17 00:00:00 2001 From: Vanessa Date: Sat, 20 Dec 2025 10:27:55 +0800 Subject: [PATCH] :art: https://github.com/siyuan-note/siyuan/issues/16197 --- app/src/protyle/util/insertHTML.ts | 43 +++++++++++++++++++----------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/app/src/protyle/util/insertHTML.ts b/app/src/protyle/util/insertHTML.ts index 490a43453..154f0aaa9 100644 --- a/app/src/protyle/util/insertHTML.ts +++ b/app/src/protyle/util/insertHTML.ts @@ -553,24 +553,35 @@ export const insertHTML = (html: string, protyle: IProtyle, isBlock = false, // https://github.com/siyuan-note/siyuan/issues/5591 focusBlock(lastElement, undefined, false); } - const wbrElement = protyle.wysiwyg.element.querySelector("wbr"); - if (wbrElement) { - wbrElement.remove(); - } - let foldData; - if (blockElement.getAttribute("data-type") === "NodeHeading" && - blockElement.getAttribute("fold") === "1") { - foldData = setFold(protyle, blockElement, true, false, false, true); - doOperation.reverse(); - foldData.doOperations[0].context = { - focusId: lastElement?.getAttribute("data-node-id"), - }; - doOperation.push(...foldData.doOperations); - undoOperation.push(...foldData.undoOperations); - } - transaction(protyle, doOperation, undoOperation); + protyle.wysiwyg.element.querySelectorAll("wbr").forEach(item => { + item.remove(); + }); // 复制容器块中包含折叠标题块 protyle.wysiwyg.element.querySelectorAll("[parent-heading]").forEach(item => { item.remove(); }); + let foldData; + if (blockElement.getAttribute("data-type") === "NodeHeading" && + blockElement.getAttribute("fold") === "1" && !insertBefore) { + fetchPost("/api/block/getHeadingChildrenIDs", {id: blockElement.getAttribute("data-node-id")}, (response) => { + const childrenIDs: string[] = response.data; + if (childrenIDs.length > 0) { + const previousId = childrenIDs[childrenIDs.length - 1]; + foldData = setFold(protyle, blockElement, true, false, false, true); + foldData.doOperations[0].context = { + focusId: lastElement?.getAttribute("data-node-id"), + }; + doOperation.forEach(item => { + if (item.action === "insert") { + item.previousID = previousId; + } + }); + doOperation.splice(0, 0, ...foldData.doOperations); + undoOperation.push(...foldData.undoOperations); + transaction(protyle, doOperation, undoOperation); + } + }); + return; + } + transaction(protyle, doOperation, undoOperation); };