From 875ffca004993de5de908dbcdf66d001483d5d48 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Sun, 2 Oct 2022 20:40:26 +0800 Subject: [PATCH 1/2] =?UTF-8?q?:art:=20=E5=9D=97=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E4=B8=8E=E6=89=80=E5=BC=95=E7=94=A8=E7=9A=84=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E5=9D=97=E8=BF=9B=E8=A1=8C=E4=BA=A4=E6=8D=A2=20https://github.?= =?UTF-8?q?com/siyuan-note/siyuan/issues/4981?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/api/block.go | 20 ++++++++++++++++ kernel/api/router.go | 1 + kernel/model/block.go | 54 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+) diff --git a/kernel/api/block.go b/kernel/api/block.go index 5111d2a5f..ca079e9a2 100644 --- a/kernel/api/block.go +++ b/kernel/api/block.go @@ -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) diff --git a/kernel/api/router.go b/kernel/api/router.go index 1475ac87b..08032d446 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -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) diff --git a/kernel/model/block.go b/kernel/model/block.go index ce5e50e1f..4ea1f9432 100644 --- a/kernel/model/block.go +++ b/kernel/model/block.go @@ -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,58 @@ 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) + refParentType := refNode.Parent.Type + defTree, err := loadTreeByBlockID(defID) + if nil != err { + return + } + defNode := treenode.GetNodeInTree(defTree, defID) + + 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 { From a960ae862e3ac788bf50242e7d7b2d3c2d5f0986 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Sun, 2 Oct 2022 20:42:15 +0800 Subject: [PATCH 2/2] =?UTF-8?q?:art:=20=E5=9D=97=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E4=B8=8E=E6=89=80=E5=BC=95=E7=94=A8=E7=9A=84=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E5=9D=97=E8=BF=9B=E8=A1=8C=E4=BA=A4=E6=8D=A2=20https://github.?= =?UTF-8?q?com/siyuan-note/siyuan/issues/4981?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/model/block.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/kernel/model/block.go b/kernel/model/block.go index 4ea1f9432..70adde70f 100644 --- a/kernel/model/block.go +++ b/kernel/model/block.go @@ -96,12 +96,18 @@ func SwapBlockRef(refID, defID string) (err error) { 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)