mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-09-22 00:20:47 +02:00
Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
fc1cbf46aa
3 changed files with 61 additions and 7 deletions
|
@ -189,6 +189,20 @@ func getHeadingChildrenIDs(c *gin.Context) {
|
||||||
ret.Data = ids
|
ret.Data = ids
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func appendHeadingChildren(c *gin.Context) {
|
||||||
|
ret := gulu.Ret.NewResult()
|
||||||
|
defer c.JSON(http.StatusOK, ret)
|
||||||
|
|
||||||
|
arg, ok := util.JsonArg(c, ret)
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
id := arg["id"].(string)
|
||||||
|
childrenDOM := arg["childrenDOM"].(string)
|
||||||
|
model.AppendHeadingChildren(id, childrenDOM)
|
||||||
|
}
|
||||||
|
|
||||||
func getHeadingChildrenDOM(c *gin.Context) {
|
func getHeadingChildrenDOM(c *gin.Context) {
|
||||||
ret := gulu.Ret.NewResult()
|
ret := gulu.Ret.NewResult()
|
||||||
defer c.JSON(http.StatusOK, ret)
|
defer c.JSON(http.StatusOK, ret)
|
||||||
|
@ -199,7 +213,11 @@ func getHeadingChildrenDOM(c *gin.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
id := arg["id"].(string)
|
id := arg["id"].(string)
|
||||||
dom := model.GetHeadingChildrenDOM(id)
|
removeFoldAttr := true
|
||||||
|
if nil != arg["removeFoldAttr"] {
|
||||||
|
removeFoldAttr = arg["removeFoldAttr"].(bool)
|
||||||
|
}
|
||||||
|
dom := model.GetHeadingChildrenDOM(id, removeFoldAttr)
|
||||||
ret.Data = dom
|
ret.Data = dom
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -222,6 +222,7 @@ func ServeAPI(ginServer *gin.Engine) {
|
||||||
ginServer.Handle("POST", "/api/block/getBlockRelevantIDs", model.CheckAuth, getBlockRelevantIDs)
|
ginServer.Handle("POST", "/api/block/getBlockRelevantIDs", model.CheckAuth, getBlockRelevantIDs)
|
||||||
ginServer.Handle("POST", "/api/block/getBlockTreeInfos", model.CheckAuth, getBlockTreeInfos)
|
ginServer.Handle("POST", "/api/block/getBlockTreeInfos", model.CheckAuth, getBlockTreeInfos)
|
||||||
ginServer.Handle("POST", "/api/block/checkBlockRef", model.CheckAuth, checkBlockRef)
|
ginServer.Handle("POST", "/api/block/checkBlockRef", model.CheckAuth, checkBlockRef)
|
||||||
|
ginServer.Handle("POST", "/api/block/appendHeadingChildren", model.CheckAuth, appendHeadingChildren)
|
||||||
|
|
||||||
ginServer.Handle("POST", "/api/file/getFile", model.CheckAuth, getFile)
|
ginServer.Handle("POST", "/api/file/getFile", model.CheckAuth, getFile)
|
||||||
ginServer.Handle("POST", "/api/file/putFile", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, putFile)
|
ginServer.Handle("POST", "/api/file/putFile", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, putFile)
|
||||||
|
|
|
@ -20,6 +20,7 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -629,7 +630,35 @@ func GetHeadingChildrenIDs(id string) (ret []string) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetHeadingChildrenDOM(id string) (ret string) {
|
func AppendHeadingChildren(id, childrenDOM string) {
|
||||||
|
tree, err := LoadTreeByBlockID(id)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
heading := treenode.GetNodeInTree(tree, id)
|
||||||
|
if nil == heading || ast.NodeHeading != heading.Type {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
luteEngine := util.NewLute()
|
||||||
|
subTree := luteEngine.BlockDOM2Tree(childrenDOM)
|
||||||
|
var nodes []*ast.Node
|
||||||
|
for n := subTree.Root.FirstChild; nil != n; n = n.Next {
|
||||||
|
nodes = append(nodes, n)
|
||||||
|
}
|
||||||
|
|
||||||
|
slices.Reverse(nodes)
|
||||||
|
for _, n := range nodes {
|
||||||
|
heading.InsertAfter(n)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = indexWriteTreeUpsertQueue(tree); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetHeadingChildrenDOM(id string, removeFoldAttr bool) (ret string) {
|
||||||
tree, err := LoadTreeByBlockID(id)
|
tree, err := LoadTreeByBlockID(id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
@ -643,20 +672,26 @@ func GetHeadingChildrenDOM(id string) (ret string) {
|
||||||
children := treenode.HeadingChildren(heading)
|
children := treenode.HeadingChildren(heading)
|
||||||
nodes = append(nodes, children...)
|
nodes = append(nodes, children...)
|
||||||
|
|
||||||
// 取消折叠 https://github.com/siyuan-note/siyuan/issues/13232#issuecomment-2535955152
|
|
||||||
for _, child := range children {
|
for _, child := range children {
|
||||||
ast.Walk(child, func(n *ast.Node, entering bool) ast.WalkStatus {
|
ast.Walk(child, func(n *ast.Node, entering bool) ast.WalkStatus {
|
||||||
if !entering {
|
if !entering {
|
||||||
return ast.WalkContinue
|
return ast.WalkContinue
|
||||||
}
|
}
|
||||||
|
|
||||||
n.RemoveIALAttr("heading-fold")
|
if removeFoldAttr {
|
||||||
n.RemoveIALAttr("fold")
|
n.RemoveIALAttr("heading-fold")
|
||||||
|
n.RemoveIALAttr("fold")
|
||||||
|
}
|
||||||
return ast.WalkContinue
|
return ast.WalkContinue
|
||||||
})
|
})
|
||||||
|
|
||||||
|
child.SetIALAttr("parent-heading", id)
|
||||||
|
}
|
||||||
|
|
||||||
|
if removeFoldAttr {
|
||||||
|
heading.RemoveIALAttr("fold")
|
||||||
|
heading.RemoveIALAttr("heading-fold")
|
||||||
}
|
}
|
||||||
heading.RemoveIALAttr("fold")
|
|
||||||
heading.RemoveIALAttr("heading-fold")
|
|
||||||
|
|
||||||
luteEngine := util.NewLute()
|
luteEngine := util.NewLute()
|
||||||
ret = renderBlockDOMByNodes(nodes, luteEngine)
|
ret = renderBlockDOMByNodes(nodes, luteEngine)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue