🎨 Add kernel API /api/block/getChildBlocks
Fix https://github.com/siyuan-note/siyuan/issues/8249
This commit is contained in:
parent
897b1d5ccc
commit
b3b891338b
5 changed files with 149 additions and 1 deletions
41
API.md
41
API.md
|
@ -29,6 +29,7 @@
|
|||
* [Delete a block](#Delete-a-block)
|
||||
* [Move a block](#Move-a-block)
|
||||
* [Get a block kramdown](#Get-a-block-kramdown)
|
||||
* [Get child blocks](#get-child-blocks)
|
||||
* [Attributes](#Attributes)
|
||||
* [Set block attributes](#Set-block-attributes)
|
||||
* [Get block attributes](#Get-block-attributes)
|
||||
|
@ -769,6 +770,44 @@ View API token in <kbd>Settings - About</kbd>, request header: `Authorization: T
|
|||
}
|
||||
```
|
||||
|
||||
### Get child blocks
|
||||
|
||||
* `/api/block/getChildBlocks`
|
||||
* Parameters
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "20230506212712-vt9ajwj"
|
||||
}
|
||||
```
|
||||
|
||||
* `id`: Parent block ID
|
||||
* The blocks below a heading are also counted as child blocks
|
||||
* Return value
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 0,
|
||||
"msg": "",
|
||||
"data": [
|
||||
{
|
||||
"id": "20230512083858-mjdwkbn",
|
||||
"type": "h",
|
||||
"subType": "h1"
|
||||
},
|
||||
{
|
||||
"id": "20230513213727-thswvfd",
|
||||
"type": "s"
|
||||
},
|
||||
{
|
||||
"id": "20230513213633-9lsj4ew",
|
||||
"type": "l",
|
||||
"subType": "u"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Attributes
|
||||
|
||||
### Set block attributes
|
||||
|
@ -880,7 +919,7 @@ View API token in <kbd>Settings - About</kbd>, request header: `Authorization: T
|
|||
}
|
||||
```
|
||||
|
||||
### 渲染 Sprig
|
||||
### Render Sprig
|
||||
|
||||
* `/api/template/renderSprig`
|
||||
* Parameters
|
||||
|
|
39
API_zh_CN.md
39
API_zh_CN.md
|
@ -29,6 +29,7 @@
|
|||
* [删除块](#删除块)
|
||||
* [移动块](#移动块)
|
||||
* [获取块 kramdown 源码](#获取块-kramdown-源码)
|
||||
* [获取子块](#获取子块)
|
||||
* [属性](#属性)
|
||||
* [设置块属性](#设置块属性)
|
||||
* [获取块属性](#获取块属性)
|
||||
|
@ -762,6 +763,44 @@
|
|||
}
|
||||
```
|
||||
|
||||
### 获取子块
|
||||
|
||||
* `/api/block/getChildBlocks`
|
||||
* 参数
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "20230506212712-vt9ajwj"
|
||||
}
|
||||
```
|
||||
|
||||
* `id`:父块 ID
|
||||
* 标题下方块也算作子块
|
||||
* 返回值
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 0,
|
||||
"msg": "",
|
||||
"data": [
|
||||
{
|
||||
"id": "20230512083858-mjdwkbn",
|
||||
"type": "h",
|
||||
"subType": "h1"
|
||||
},
|
||||
{
|
||||
"id": "20230513213727-thswvfd",
|
||||
"type": "s"
|
||||
},
|
||||
{
|
||||
"id": "20230513213633-9lsj4ew",
|
||||
"type": "l",
|
||||
"subType": "u"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 属性
|
||||
|
||||
### 设置块属性
|
||||
|
|
|
@ -481,3 +481,20 @@ func getBlockKramdown(c *gin.Context) {
|
|||
"kramdown": kramdown,
|
||||
}
|
||||
}
|
||||
|
||||
func getChildBlocks(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)
|
||||
if util.InvalidIDPattern(id, ret) {
|
||||
return
|
||||
}
|
||||
|
||||
ret.Data = model.GetChildBlocks(id)
|
||||
}
|
||||
|
|
|
@ -147,6 +147,7 @@ func ServeAPI(ginServer *gin.Engine) {
|
|||
ginServer.Handle("POST", "/api/block/getBlockInfo", model.CheckAuth, getBlockInfo)
|
||||
ginServer.Handle("POST", "/api/block/getBlockDOM", model.CheckAuth, getBlockDOM)
|
||||
ginServer.Handle("POST", "/api/block/getBlockKramdown", model.CheckAuth, getBlockKramdown)
|
||||
ginServer.Handle("POST", "/api/block/getChildBlocks", model.CheckAuth, getChildBlocks)
|
||||
ginServer.Handle("POST", "/api/block/getBlockBreadcrumb", model.CheckAuth, getBlockBreadcrumb)
|
||||
ginServer.Handle("POST", "/api/block/getBlockIndex", model.CheckAuth, getBlockIndex)
|
||||
ginServer.Handle("POST", "/api/block/getRefIDs", model.CheckAuth, getRefIDs)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue