From d84538da74b14f9b6f1c4596ef1611c8770b1331 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sat, 4 Oct 2025 16:30:58 +0800 Subject: [PATCH] :art: Improve fold heading editing https://github.com/siyuan-note/siyuan/issues/15989 Signed-off-by: Daniel <845765@qq.com> --- kernel/model/transaction.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index 0ba8d8fd0..f768c045d 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -1528,12 +1528,12 @@ func (tx *Transaction) doUpdate(operation *Operation) (ret *TxErr) { // 将不属于折叠标题的块移动到折叠标题下方,需要展开折叠标题 needUnfoldParentHeading := 0 < oldNode.HeadingLevel && (0 == updatedNode.HeadingLevel || oldNode.HeadingLevel < updatedNode.HeadingLevel) - parentFoldedHeading := treenode.GetParentFoldedHeading(oldNode) + oldParentFoldedHeading := treenode.GetParentFoldedHeading(oldNode) // 将原先折叠标题下的块提升为与折叠标题同级或更高一级的标题时,需要在折叠标题后插入该提升后的标题块(只需要推送界面插入) - if needInsertAfterParentHeading := nil != parentFoldedHeading && 0 != updatedNode.HeadingLevel && updatedNode.HeadingLevel <= parentFoldedHeading.HeadingLevel; needInsertAfterParentHeading { + if needInsertAfterParentHeading := nil != oldParentFoldedHeading && 0 != updatedNode.HeadingLevel && updatedNode.HeadingLevel <= oldParentFoldedHeading.HeadingLevel; needInsertAfterParentHeading { evt := util.NewCmdResult("transactions", 0, util.PushModeBroadcast) evt.Data = []*Transaction{{ - DoOperations: []*Operation{{Action: "insert", ID: updatedNode.ID, PreviousID: parentFoldedHeading.ID, Data: data}}, + DoOperations: []*Operation{{Action: "insert", ID: updatedNode.ID, PreviousID: oldParentFoldedHeading.ID, Data: data}}, UndoOperations: []*Operation{{Action: "delete", ID: updatedNode.ID}}, }} util.PushEvent(evt) @@ -1543,8 +1543,10 @@ func (tx *Transaction) doUpdate(operation *Operation) (ret *TxErr) { oldNode.Unlink() if needUnfoldParentHeading { - parentFoldedHeading = treenode.GetParentFoldedHeading(updatedNode) - unfoldHeading(parentFoldedHeading) + newParentFoldedHeading := treenode.GetParentFoldedHeading(updatedNode) + if nil == oldParentFoldedHeading || (nil != newParentFoldedHeading && oldParentFoldedHeading.ID != newParentFoldedHeading.ID) { + unfoldHeading(newParentFoldedHeading) + } } createdUpdated(updatedNode)