mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-22 01:20:12 +01:00
🎨 Improve kernel API /api/block/insertBlock argument checking https://github.com/siyuan-note/siyuan/issues/10144
This commit is contained in:
parent
03f2f628f3
commit
caf0717a73
4 changed files with 57 additions and 11 deletions
|
|
@ -17,6 +17,7 @@
|
|||
package api
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net/http"
|
||||
|
||||
"github.com/88250/gulu"
|
||||
|
|
@ -221,7 +222,13 @@ func appendBlock(c *gin.Context) {
|
|||
}
|
||||
if "markdown" == dataType {
|
||||
luteEngine := util.NewLute()
|
||||
data = dataBlockDOM(data, luteEngine)
|
||||
var err error
|
||||
data, err = dataBlockDOM(data, luteEngine)
|
||||
if nil != err {
|
||||
ret.Code = -1
|
||||
ret.Msg = "data block DOM failed: " + err.Error()
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
transactions := []*model.Transaction{
|
||||
|
|
@ -260,7 +267,13 @@ func prependBlock(c *gin.Context) {
|
|||
}
|
||||
if "markdown" == dataType {
|
||||
luteEngine := util.NewLute()
|
||||
data = dataBlockDOM(data, luteEngine)
|
||||
var err error
|
||||
data, err = dataBlockDOM(data, luteEngine)
|
||||
if nil != err {
|
||||
ret.Code = -1
|
||||
ret.Msg = "data block DOM failed: " + err.Error()
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
transactions := []*model.Transaction{
|
||||
|
|
@ -315,7 +328,13 @@ func insertBlock(c *gin.Context) {
|
|||
|
||||
if "markdown" == dataType {
|
||||
luteEngine := util.NewLute()
|
||||
data = dataBlockDOM(data, luteEngine)
|
||||
var err error
|
||||
data, err = dataBlockDOM(data, luteEngine)
|
||||
if nil != err {
|
||||
ret.Code = -1
|
||||
ret.Msg = "data block DOM failed: " + err.Error()
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
transactions := []*model.Transaction{
|
||||
|
|
@ -357,7 +376,13 @@ func updateBlock(c *gin.Context) {
|
|||
|
||||
luteEngine := util.NewLute()
|
||||
if "markdown" == dataType {
|
||||
data = dataBlockDOM(data, luteEngine)
|
||||
var err error
|
||||
data, err = dataBlockDOM(data, luteEngine)
|
||||
if nil != err {
|
||||
ret.Code = -1
|
||||
ret.Msg = "data block DOM failed: " + err.Error()
|
||||
return
|
||||
}
|
||||
}
|
||||
tree := luteEngine.BlockDOM2Tree(data)
|
||||
if nil == tree || nil == tree.Root || nil == tree.Root.FirstChild {
|
||||
|
|
@ -461,14 +486,35 @@ func broadcastTransactions(transactions []*model.Transaction) {
|
|||
util.PushEvent(evt)
|
||||
}
|
||||
|
||||
func dataBlockDOM(data string, luteEngine *lute.Lute) (ret string) {
|
||||
func dataBlockDOM(data string, luteEngine *lute.Lute) (ret string, err error) {
|
||||
luteEngine.SetHTMLTag2TextMark(true) // API `/api/block/**` 无法使用 `<u>foo</u>` 与 `<kbd>bar</kbd>` 插入/更新行内元素 https://github.com/siyuan-note/siyuan/issues/6039
|
||||
|
||||
ret = luteEngine.Md2BlockDOM(data, true)
|
||||
ret, tree := luteEngine.Md2BlockDOM(data, true)
|
||||
if "" == ret {
|
||||
// 使用 API 插入空字符串出现错误 https://github.com/siyuan-note/siyuan/issues/3931
|
||||
blankParagraph := treenode.NewParagraph()
|
||||
ret = luteEngine.RenderNodeBlockDOM(blankParagraph)
|
||||
}
|
||||
|
||||
invalidID := ""
|
||||
ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus {
|
||||
if !entering {
|
||||
return ast.WalkContinue
|
||||
}
|
||||
|
||||
if "" != n.ID {
|
||||
if !ast.IsNodeIDPattern(n.ID) {
|
||||
invalidID = n.ID
|
||||
return ast.WalkStop
|
||||
}
|
||||
}
|
||||
return ast.WalkContinue
|
||||
})
|
||||
|
||||
if "" != invalidID {
|
||||
err = errors.New("found invalid ID [" + invalidID + "]")
|
||||
ret = ""
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue