🎨 块引用与所引用的内容块进行交换 https://github.com/siyuan-note/siyuan/issues/4981

This commit is contained in:
Liang Ding 2022-10-02 20:40:26 +08:00
parent 8b8859bc54
commit 875ffca004
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
3 changed files with 75 additions and 0 deletions

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,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 {