🎨 Add kernel API /api/block/getChildBlocks Fix https://github.com/siyuan-note/siyuan/issues/8249

This commit is contained in:
Liang Ding 2023-05-13 21:50:32 +08:00
parent 897b1d5ccc
commit b3b891338b
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
5 changed files with 149 additions and 1 deletions

View file

@ -445,6 +445,58 @@ func GetBlockKramdown(id string) (ret string) {
return
}
type ChildBlock struct {
ID string `json:"id"`
Type string `json:"type"`
SubType string `json:"subType,omitempty"`
}
func GetChildBlocks(id string) (ret []*ChildBlock) {
ret = []*ChildBlock{}
if "" == id {
return
}
tree, err := loadTreeByBlockID(id)
if nil != err {
return
}
node := treenode.GetNodeInTree(tree, id)
if nil == node {
return
}
if ast.NodeHeading == node.Type {
children := treenode.HeadingChildren(node)
for _, c := range children {
ret = append(ret, &ChildBlock{
ID: c.ID,
Type: treenode.TypeAbbr(c.Type.String()),
SubType: treenode.SubTypeAbbr(c),
})
}
return
}
if !node.IsContainerBlock() {
return
}
for c := node.FirstChild; nil != c; c = c.Next {
if !c.IsBlock() {
continue
}
ret = append(ret, &ChildBlock{
ID: c.ID,
Type: treenode.TypeAbbr(c.Type.String()),
SubType: treenode.SubTypeAbbr(c),
})
}
return
}
func GetBlock(id string, tree *parse.Tree) (ret *Block, err error) {
ret, err = getBlock(id, tree)
return