mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-23 10:00:13 +01:00
Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
44a23b87cf
2 changed files with 54 additions and 7 deletions
|
|
@ -42,7 +42,8 @@ func swapBlockRef(c *gin.Context) {
|
||||||
|
|
||||||
refID := arg["refID"].(string)
|
refID := arg["refID"].(string)
|
||||||
defID := arg["defID"].(string)
|
defID := arg["defID"].(string)
|
||||||
err := model.SwapBlockRef(refID, defID)
|
includeChildren := arg["includeChildren"].(bool)
|
||||||
|
err := model.SwapBlockRef(refID, defID, includeChildren)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
ret.Code = -1
|
ret.Code = -1
|
||||||
ret.Msg = err.Error()
|
ret.Msg = err.Error()
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ func RecentUpdatedBlocks() (ret []*Block) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func SwapBlockRef(refID, defID string) (err error) {
|
func SwapBlockRef(refID, defID string, includeChildren bool) (err error) {
|
||||||
refTree, err := loadTreeByBlockID(refID)
|
refTree, err := loadTreeByBlockID(refID)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
return
|
return
|
||||||
|
|
@ -99,7 +99,9 @@ func SwapBlockRef(refID, defID string) (err error) {
|
||||||
if nil == refNode {
|
if nil == refNode {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
refParentType := refNode.Parent.Type
|
if ast.NodeListItem == refNode.Parent.Type {
|
||||||
|
refNode = refNode.Parent
|
||||||
|
}
|
||||||
defTree, err := loadTreeByBlockID(defID)
|
defTree, err := loadTreeByBlockID(defID)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
return
|
return
|
||||||
|
|
@ -108,18 +110,44 @@ func SwapBlockRef(refID, defID string) (err error) {
|
||||||
if nil == defNode {
|
if nil == defNode {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
var defNodeChildren []*ast.Node
|
||||||
|
if ast.NodeListItem == defNode.Parent.Type {
|
||||||
|
defNode = defNode.Parent
|
||||||
|
} else if ast.NodeHeading == defNode.Type && includeChildren {
|
||||||
|
defNodeChildren = treenode.HeadingChildren(defNode)
|
||||||
|
}
|
||||||
|
if ast.NodeListItem == defNode.Type {
|
||||||
|
for c := defNode.FirstChild; nil != c; c = c.Next {
|
||||||
|
if ast.NodeList == c.Type {
|
||||||
|
defNodeChildren = append(defNodeChildren, c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
refPivot := parse.NewParagraph()
|
refPivot := parse.NewParagraph()
|
||||||
refNode.InsertBefore(refPivot)
|
refNode.InsertBefore(refPivot)
|
||||||
|
|
||||||
if ast.NodeListItem == defNode.Type {
|
if ast.NodeListItem == defNode.Type {
|
||||||
if ast.NodeListItem != refParentType {
|
if ast.NodeListItem == refNode.Type {
|
||||||
|
defNode.InsertAfter(refNode)
|
||||||
|
if !includeChildren {
|
||||||
|
for _, c := range defNodeChildren {
|
||||||
|
refNode.AppendChild(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
refPivot.InsertAfter(defNode)
|
||||||
|
} else {
|
||||||
newID := ast.NewNodeID()
|
newID := ast.NewNodeID()
|
||||||
li := &ast.Node{ID: newID, Type: ast.NodeListItem, ListData: &ast.ListData{Typ: defNode.Parent.ListData.Typ}}
|
li := &ast.Node{ID: newID, Type: ast.NodeListItem, ListData: &ast.ListData{Typ: defNode.Parent.ListData.Typ}}
|
||||||
li.SetIALAttr("id", newID)
|
li.SetIALAttr("id", newID)
|
||||||
li.SetIALAttr("updated", newID[:14])
|
li.SetIALAttr("updated", newID[:14])
|
||||||
li.AppendChild(refNode)
|
li.AppendChild(refNode)
|
||||||
defNode.InsertAfter(li)
|
defNode.InsertAfter(li)
|
||||||
|
if !includeChildren {
|
||||||
|
for _, c := range defNodeChildren {
|
||||||
|
li.AppendChild(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
newID = ast.NewNodeID()
|
newID = ast.NewNodeID()
|
||||||
list := &ast.Node{ID: newID, Type: ast.NodeList, ListData: &ast.ListData{Typ: defNode.Parent.ListData.Typ}}
|
list := &ast.Node{ID: newID, Type: ast.NodeList, ListData: &ast.ListData{Typ: defNode.Parent.ListData.Typ}}
|
||||||
|
|
@ -127,19 +155,37 @@ func SwapBlockRef(refID, defID string) (err error) {
|
||||||
list.SetIALAttr("updated", newID[:14])
|
list.SetIALAttr("updated", newID[:14])
|
||||||
list.AppendChild(defNode)
|
list.AppendChild(defNode)
|
||||||
refPivot.InsertAfter(list)
|
refPivot.InsertAfter(list)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ast.NodeListItem == refNode.Type {
|
||||||
|
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(refNode)
|
||||||
|
defNode.InsertAfter(list)
|
||||||
|
|
||||||
|
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(defNode)
|
||||||
|
refPivot.InsertAfter(li)
|
||||||
} else {
|
} else {
|
||||||
defNode.InsertAfter(refNode)
|
defNode.InsertAfter(refNode)
|
||||||
refPivot.InsertAfter(defNode)
|
refPivot.InsertAfter(defNode)
|
||||||
|
for i := len(defNodeChildren) - 1; -1 < i; i-- {
|
||||||
|
defNode.InsertAfter(defNodeChildren[i])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
defNode.InsertAfter(refNode)
|
|
||||||
refPivot.InsertAfter(defNode)
|
|
||||||
}
|
}
|
||||||
refPivot.Unlink()
|
refPivot.Unlink()
|
||||||
|
|
||||||
|
treenode.ReindexBlockTree(refTree)
|
||||||
if err = writeJSONQueue(refTree); nil != err {
|
if err = writeJSONQueue(refTree); nil != err {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
treenode.ReindexBlockTree(defTree)
|
||||||
if err = writeJSONQueue(defTree); nil != err {
|
if err = writeJSONQueue(defTree); nil != err {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue