From 14995a815def2a6443217b37272552d349583919 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Sun, 2 Oct 2022 22:09:54 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E5=9D=97=E5=BC=95=E7=94=A8=E4=B8=8E?= =?UTF-8?q?=E6=89=80=E5=BC=95=E7=94=A8=E7=9A=84=E5=86=85=E5=AE=B9=E5=9D=97?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E4=BA=A4=E6=8D=A2=20https://github.com/siyua?= =?UTF-8?q?n-note/siyuan/issues/4981?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/model/block.go | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/kernel/model/block.go b/kernel/model/block.go index 70adde70f..36dcb9b3f 100644 --- a/kernel/model/block.go +++ b/kernel/model/block.go @@ -99,7 +99,9 @@ func SwapBlockRef(refID, defID string) (err error) { if nil == refNode { return } - refParentType := refNode.Parent.Type + if ast.NodeListItem == refNode.Parent.Type { + refNode = refNode.Parent + } defTree, err := loadTreeByBlockID(defID) if nil != err { return @@ -108,12 +110,18 @@ func SwapBlockRef(refID, defID string) (err error) { if nil == defNode { return } + if ast.NodeListItem == defNode.Parent.Type { + defNode = defNode.Parent + } refPivot := parse.NewParagraph() refNode.InsertBefore(refPivot) if ast.NodeListItem == defNode.Type { - if ast.NodeListItem != refParentType { + if ast.NodeListItem == refNode.Type { + defNode.InsertAfter(refNode) + refPivot.InsertAfter(defNode) + } else { newID := ast.NewNodeID() li := &ast.Node{ID: newID, Type: ast.NodeListItem, ListData: &ast.ListData{Typ: defNode.Parent.ListData.Typ}} li.SetIALAttr("id", newID) @@ -127,19 +135,34 @@ func SwapBlockRef(refID, defID string) (err error) { list.SetIALAttr("updated", newID[:14]) list.AppendChild(defNode) refPivot.InsertAfter(list) + } + } else { + if ast.NodeListItem == refNode.Type { + newID := ast.NewNodeID() + li := &ast.Node{ID: newID, Type: ast.NodeListItem, ListData: &ast.ListData{Typ: refNode.Parent.ListData.Typ}} + li.SetIALAttr("id", newID) + li.SetIALAttr("updated", newID[:14]) + li.AppendChild(refNode) + refPivot.InsertAfter(li) + + newID = ast.NewNodeID() + list := &ast.Node{ID: newID, Type: ast.NodeList, ListData: &ast.ListData{Typ: refNode.Parent.ListData.Typ}} + list.SetIALAttr("id", newID) + list.SetIALAttr("updated", newID[:14]) + list.AppendChild(defNode) + defNode.InsertAfter(list) } else { defNode.InsertAfter(refNode) refPivot.InsertAfter(defNode) } - } else { - defNode.InsertAfter(refNode) - refPivot.InsertAfter(defNode) } refPivot.Unlink() + treenode.ReindexBlockTree(refTree) if err = writeJSONQueue(refTree); nil != err { return } + treenode.ReindexBlockTree(defTree) if err = writeJSONQueue(defTree); nil != err { return }