🎨 Improve fold heading editing https://github.com/siyuan-note/siyuan/issues/14349 Point 01

This commit is contained in:
Daniel 2025-07-30 16:59:24 +08:00
parent 9e7426a6f4
commit de55ea9315
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
2 changed files with 26 additions and 0 deletions

View file

@ -1222,6 +1222,12 @@ func (tx *Transaction) doInsert(operation *Operation) (ret *TxErr) {
node.InsertAfter(remain)
}
node.InsertAfter(insertedNode)
if treenode.IsUnderFoldedHeading(insertedNode) {
// 保持在标题下的折叠状态
insertedNode.SetIALAttr("fold", "1")
insertedNode.SetIALAttr("heading-fold", "1")
}
} else {
node = treenode.GetNodeInTree(tree, operation.ParentID)
if nil == node {
@ -1459,6 +1465,12 @@ func (tx *Transaction) doUpdate(operation *Operation) (ret *TxErr) {
oldNode.InsertAfter(updatedNode)
oldNode.Unlink()
if treenode.IsUnderFoldedHeading(updatedNode) {
// 保持在标题下的折叠状态
updatedNode.SetIALAttr("fold", "1")
updatedNode.SetIALAttr("heading-fold", "1")
}
createdUpdated(updatedNode)
tx.nodes[updatedNode.ID] = updatedNode

View file

@ -85,6 +85,20 @@ func GetHeadingFold(nodes []*ast.Node) (ret []*ast.Node) {
return
}
func IsUnderFoldedHeading(node *ast.Node) bool {
for n := node.Previous; nil != n; n = n.Previous {
if ast.NodeHeading == n.Type && "1" == n.IALAttr("fold") {
if ast.NodeHeading != node.Type {
return true
}
if n.HeadingLevel > node.HeadingLevel {
return true
}
}
}
return false
}
func HeadingChildren(heading *ast.Node) (ret []*ast.Node) {
start := heading.Next
if nil == start {