Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
Vanessa 2022-10-02 20:56:59 +08:00
commit a28683861b
3 changed files with 81 additions and 0 deletions

View file

@ -31,6 +31,26 @@ import (
"github.com/siyuan-note/siyuan/kernel/util"
)
func swapBlockRef(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)
arg, ok := util.JsonArg(c, ret)
if !ok {
return
}
refID := arg["refID"].(string)
defID := arg["defID"].(string)
err := model.SwapBlockRef(refID, defID)
if nil != err {
ret.Code = -1
ret.Msg = err.Error()
ret.Data = map[string]interface{}{"closeTimeout": 7000}
return
}
}
func getHeadingChildrenDOM(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)

View file

@ -149,6 +149,7 @@ func ServeAPI(ginServer *gin.Engine) {
ginServer.Handle("POST", "/api/block/setBlockReminder", model.CheckAuth, setBlockReminder)
ginServer.Handle("POST", "/api/block/getHeadingLevelTransaction", model.CheckAuth, getHeadingLevelTransaction)
ginServer.Handle("POST", "/api/block/getHeadingChildrenDOM", model.CheckAuth, getHeadingChildrenDOM)
ginServer.Handle("POST", "/api/block/swapBlockRef", model.CheckAuth, swapBlockRef)
ginServer.Handle("POST", "/api/file/getFile", model.CheckAuth, getFile)
ginServer.Handle("POST", "/api/file/putFile", model.CheckAuth, putFile)

View file

@ -22,8 +22,10 @@ import (
"github.com/88250/lute"
"github.com/88250/lute/ast"
"github.com/88250/lute/parse"
"github.com/siyuan-note/siyuan/kernel/sql"
"github.com/siyuan-note/siyuan/kernel/treenode"
"github.com/siyuan-note/siyuan/kernel/util"
)
// Block 描述了内容块。
@ -88,6 +90,64 @@ func RecentUpdatedBlocks() (ret []*Block) {
return
}
func SwapBlockRef(refID, defID string) (err error) {
refTree, err := loadTreeByBlockID(refID)
if nil != err {
return
}
refNode := treenode.GetNodeInTree(refTree, refID)
if nil == refNode {
return
}
refParentType := refNode.Parent.Type
defTree, err := loadTreeByBlockID(defID)
if nil != err {
return
}
defNode := treenode.GetNodeInTree(defTree, defID)
if nil == defNode {
return
}
refPivot := parse.NewParagraph()
refNode.InsertBefore(refPivot)
if ast.NodeListItem == defNode.Type {
if ast.NodeListItem != refParentType {
newID := ast.NewNodeID()
li := &ast.Node{ID: newID, Type: ast.NodeListItem, ListData: &ast.ListData{Typ: defNode.Parent.ListData.Typ}}
li.SetIALAttr("id", newID)
li.SetIALAttr("updated", newID[:14])
li.AppendChild(refNode)
defNode.InsertAfter(li)
newID = ast.NewNodeID()
list := &ast.Node{ID: newID, Type: ast.NodeList, ListData: &ast.ListData{Typ: defNode.Parent.ListData.Typ}}
list.SetIALAttr("id", newID)
list.SetIALAttr("updated", newID[:14])
list.AppendChild(defNode)
refPivot.InsertAfter(list)
} else {
defNode.InsertAfter(refNode)
refPivot.InsertAfter(defNode)
}
} else {
defNode.InsertAfter(refNode)
refPivot.InsertAfter(defNode)
}
refPivot.Unlink()
if err = writeJSONQueue(refTree); nil != err {
return
}
if err = writeJSONQueue(defTree); nil != err {
return
}
WaitForWritingFiles()
util.ReloadUI()
return
}
func GetHeadingChildrenDOM(id string) (ret string) {
tree, err := loadTreeByBlockID(id)
if nil != err {