From 896d4c595b6fa10246082ee155c07509a99cfee5 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 29 Sep 2025 18:01:20 +0800 Subject: [PATCH 1/3] :art: https://ld246.com/article/1759136051188 Signed-off-by: Daniel <845765@qq.com> --- kernel/util/working.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/kernel/util/working.go b/kernel/util/working.go index 7ea183ad9..448d7dd21 100644 --- a/kernel/util/working.go +++ b/kernel/util/working.go @@ -471,6 +471,16 @@ func initMime() { mime.AddExtensionType(".md", "text/markdown") mime.AddExtensionType(".markdown", "text/markdown") + + // 添加常用的图片格式 + mime.AddExtensionType(".png", "image/png") + mime.AddExtensionType(".jpg", "image/jpeg") + mime.AddExtensionType(".jpeg", "image/jpeg") + mime.AddExtensionType(".gif", "image/gif") + mime.AddExtensionType(".bmp", "image/bmp") + mime.AddExtensionType(".tiff", "image/tiff") + mime.AddExtensionType(".webp", "image/webp") + mime.AddExtensionType(".ico", "image/x-icon") } func GetDataAssetsAbsPath() (ret string) { From 36a31c050369895180fb4b557e25ab3db0db6be6 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 29 Sep 2025 18:20:39 +0800 Subject: [PATCH 2/3] :art: Improve fold heading editing https://github.com/siyuan-note/siyuan/issues/15848 Signed-off-by: Daniel <845765@qq.com> --- kernel/model/transaction.go | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index f897a674a..85cb38865 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -906,6 +906,23 @@ func (tx *Transaction) doDelete(operation *Operation) (ret *TxErr) { task.AppendAsyncTaskWithDelay(task.SetDefRefCount, util.SQLFlushInterval, refreshRefCount, defID) } + if parentFoldedHeading := treenode.GetParentFoldedHeading(node); nil != parentFoldedHeading { + children := treenode.HeadingChildren(parentFoldedHeading) + for _, child := range children { + ast.Walk(child, func(n *ast.Node, entering bool) ast.WalkStatus { + if !entering || !n.IsBlock() { + return ast.WalkContinue + } + + n.RemoveIALAttr("fold") + n.RemoveIALAttr("heading-fold") + return ast.WalkContinue + }) + } + parentFoldedHeading.RemoveIALAttr("fold") + parentFoldedHeading.RemoveIALAttr("heading-fold") + } + parent := node.Parent if nil != node.Next && ast.NodeKramdownBlockIAL == node.Next.Type && bytes.Contains(node.Next.Tokens, []byte(node.ID)) { // 列表块撤销状态异常 https://github.com/siyuan-note/siyuan/issues/3985 @@ -1282,10 +1299,12 @@ func (tx *Transaction) doInsert(operation *Operation) (ret *TxErr) { return ast.WalkContinue } - n.SetIALAttr("fold", "1") - n.SetIALAttr("heading-fold", "1") + n.RemoveIALAttr("fold") + n.RemoveIALAttr("heading-fold") return ast.WalkContinue }) + parentFoldedHeading.RemoveIALAttr("fold") + parentFoldedHeading.RemoveIALAttr("heading-fold") } } else { node = treenode.GetNodeInTree(tree, operation.ParentID) @@ -1537,8 +1556,7 @@ func (tx *Transaction) doUpdate(operation *Operation) (ret *TxErr) { oldNode.InsertAfter(updatedNode) oldNode.Unlink() - parentFoldedHeading := treenode.GetParentFoldedHeading(updatedNode) - if nil != parentFoldedHeading { + if parentFoldedHeading := treenode.GetParentFoldedHeading(updatedNode); nil != parentFoldedHeading { children := treenode.HeadingChildren(parentFoldedHeading) for _, child := range children { ast.Walk(child, func(n *ast.Node, entering bool) ast.WalkStatus { @@ -1546,11 +1564,13 @@ func (tx *Transaction) doUpdate(operation *Operation) (ret *TxErr) { return ast.WalkContinue } - n.SetIALAttr("fold", "1") - n.SetIALAttr("heading-fold", "1") + n.RemoveIALAttr("fold") + n.RemoveIALAttr("heading-fold") return ast.WalkContinue }) } + parentFoldedHeading.RemoveIALAttr("fold") + parentFoldedHeading.RemoveIALAttr("heading-fold") } createdUpdated(updatedNode) From f6f58a0719e57460f50ec810c88135281e6b2429 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 29 Sep 2025 18:29:03 +0800 Subject: [PATCH 3/3] :art: Improve fold heading editing https://github.com/siyuan-note/siyuan/issues/15848 Signed-off-by: Daniel <845765@qq.com> --- kernel/model/transaction.go | 71 +++++++++++++------------------------ kernel/treenode/heading.go | 4 +++ 2 files changed, 28 insertions(+), 47 deletions(-) diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index 85cb38865..e1c23a36b 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -906,30 +906,16 @@ func (tx *Transaction) doDelete(operation *Operation) (ret *TxErr) { task.AppendAsyncTaskWithDelay(task.SetDefRefCount, util.SQLFlushInterval, refreshRefCount, defID) } - if parentFoldedHeading := treenode.GetParentFoldedHeading(node); nil != parentFoldedHeading { - children := treenode.HeadingChildren(parentFoldedHeading) - for _, child := range children { - ast.Walk(child, func(n *ast.Node, entering bool) ast.WalkStatus { - if !entering || !n.IsBlock() { - return ast.WalkContinue - } - - n.RemoveIALAttr("fold") - n.RemoveIALAttr("heading-fold") - return ast.WalkContinue - }) - } - parentFoldedHeading.RemoveIALAttr("fold") - parentFoldedHeading.RemoveIALAttr("heading-fold") - } - parent := node.Parent if nil != node.Next && ast.NodeKramdownBlockIAL == node.Next.Type && bytes.Contains(node.Next.Tokens, []byte(node.ID)) { // 列表块撤销状态异常 https://github.com/siyuan-note/siyuan/issues/3985 node.Next.Unlink() } + next := node.Next node.Unlink() + unfoldParentFoldedHeading(next) + if nil != parent && ast.NodeListItem == parent.Type && nil == parent.FirstChild { needAppendEmptyListItem := true for _, op := range tx.DoOperations { @@ -1293,19 +1279,7 @@ func (tx *Transaction) doInsert(operation *Operation) (ret *TxErr) { } node.InsertAfter(insertedNode) - if parentFoldedHeading := treenode.GetParentFoldedHeading(insertedNode); nil != parentFoldedHeading { - ast.Walk(insertedNode, func(n *ast.Node, entering bool) ast.WalkStatus { - if !entering || !n.IsBlock() { - return ast.WalkContinue - } - - n.RemoveIALAttr("fold") - n.RemoveIALAttr("heading-fold") - return ast.WalkContinue - }) - parentFoldedHeading.RemoveIALAttr("fold") - parentFoldedHeading.RemoveIALAttr("heading-fold") - } + unfoldParentFoldedHeading(insertedNode) } else { node = treenode.GetNodeInTree(tree, operation.ParentID) if nil == node { @@ -1556,23 +1530,7 @@ func (tx *Transaction) doUpdate(operation *Operation) (ret *TxErr) { oldNode.InsertAfter(updatedNode) oldNode.Unlink() - if parentFoldedHeading := treenode.GetParentFoldedHeading(updatedNode); nil != parentFoldedHeading { - children := treenode.HeadingChildren(parentFoldedHeading) - for _, child := range children { - ast.Walk(child, func(n *ast.Node, entering bool) ast.WalkStatus { - if !entering || !n.IsBlock() { - return ast.WalkContinue - } - - n.RemoveIALAttr("fold") - n.RemoveIALAttr("heading-fold") - return ast.WalkContinue - }) - } - parentFoldedHeading.RemoveIALAttr("fold") - parentFoldedHeading.RemoveIALAttr("heading-fold") - } - + unfoldParentFoldedHeading(updatedNode) createdUpdated(updatedNode) tx.nodes[updatedNode.ID] = updatedNode if err = tx.writeTree(tree); err != nil { @@ -1603,6 +1561,25 @@ func (tx *Transaction) doUpdate(operation *Operation) (ret *TxErr) { return } +func unfoldParentFoldedHeading(node *ast.Node) { + if parentFoldedHeading := treenode.GetParentFoldedHeading(node); nil != parentFoldedHeading { + children := treenode.HeadingChildren(parentFoldedHeading) + for _, child := range children { + ast.Walk(child, func(n *ast.Node, entering bool) ast.WalkStatus { + if !entering || !n.IsBlock() { + return ast.WalkContinue + } + + n.RemoveIALAttr("fold") + n.RemoveIALAttr("heading-fold") + return ast.WalkContinue + }) + } + parentFoldedHeading.RemoveIALAttr("fold") + parentFoldedHeading.RemoveIALAttr("heading-fold") + } +} + func getRefDefIDs(node *ast.Node) (refDefIDs []string) { ast.Walk(node, func(n *ast.Node, entering bool) ast.WalkStatus { if !entering { diff --git a/kernel/treenode/heading.go b/kernel/treenode/heading.go index d48b3aca0..eeecfcd1c 100644 --- a/kernel/treenode/heading.go +++ b/kernel/treenode/heading.go @@ -86,6 +86,10 @@ func GetHeadingFold(nodes []*ast.Node) (ret []*ast.Node) { } func GetParentFoldedHeading(node *ast.Node) (parentFoldedHeading *ast.Node) { + if nil == node { + return + } + currentLevel := 7 if ast.NodeHeading == node.Type { currentLevel = node.HeadingLevel