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

This commit is contained in:
Vanessa 2023-09-30 19:55:15 +08:00
commit 83dce4f3e6
3 changed files with 35 additions and 10 deletions

View file

@ -120,7 +120,7 @@ func GetBlockRefText(id string) string {
func GetDOMText(dom string) (ret string) {
luteEngine := NewLute()
tree := luteEngine.BlockDOM2Tree(dom)
ret = renderBlockText(tree.Root, nil)
ret = renderBlockText(tree.Root.FirstChild, nil)
return
}

View file

@ -1038,7 +1038,7 @@ func CreateWithMarkdown(boxID, hPath, md, parentID, id string) (retID string, er
WaitForWritingFiles()
luteEngine := util.NewLute()
dom := luteEngine.Md2BlockDOM(md, false)
retID, _, err = createDocsByHPath(box.ID, hPath, dom, parentID, id)
retID, err = createDocsByHPath(box.ID, hPath, dom, parentID, id)
return
}
@ -1442,7 +1442,7 @@ func CreateDailyNote(boxID string) (p string, existed bool, err error) {
return
}
id, existed, err := createDocsByHPath(box.ID, hPath, "", "", "")
id, err := createDocsByHPath(box.ID, hPath, "", "", "")
if nil != err {
return
}

View file

@ -33,13 +33,8 @@ import (
"github.com/siyuan-note/siyuan/kernel/util"
)
func createDocsByHPath(boxID, hPath, content, parentID, id string /* id 参数仅在 parentID 不为空的情况下使用 */) (retID string, existed bool, err error) {
func createDocsByHPath(boxID, hPath, content, parentID, id string /* id 参数仅在 parentID 不为空的情况下使用 */) (retID string, err error) {
hPath = strings.TrimSuffix(hPath, ".sy")
pathBuilder := bytes.Buffer{}
pathBuilder.WriteString("/")
hPathBuilder := bytes.Buffer{}
hPathBuilder.WriteString("/")
if "" != parentID {
retID = id
@ -62,11 +57,41 @@ func createDocsByHPath(boxID, hPath, content, parentID, id string /* id 参数
}
}
root := treenode.GetBlockTreeRootByPath(boxID, hPath)
if nil != root {
retID = root.ID
return
}
hPathBuilder := bytes.Buffer{}
hpathBtMap := map[string]*treenode.BlockTree{}
parts := strings.Split(hPath, "/")[1:]
// The subdoc creation path is unstable when a parent doc with the same name exists https://github.com/siyuan-note/siyuan/issues/9322
// 存在同名父文档时子文档创建路径不稳定,这里需要按照完整的 hpath 映射,不能在下面的循环中边构建 hpath 边构建 path否则虽然 hpath 相同,但是会导致 path 组装错位
for i, part := range parts {
if i == len(parts)-1 {
break
}
hPathBuilder.WriteString("/")
hPathBuilder.WriteString(part)
hp := hPathBuilder.String()
root = treenode.GetBlockTreeRootByHPath(boxID, hp)
if nil == root {
break
}
hpathBtMap[hp] = root
}
pathBuilder := bytes.Buffer{}
pathBuilder.WriteString("/")
hPathBuilder = bytes.Buffer{}
hPathBuilder.WriteString("/")
for i, part := range parts {
hPathBuilder.WriteString(part)
hp := hPathBuilder.String()
root := treenode.GetBlockTreeRootByHPath(boxID, hp)
root = hpathBtMap[hp]
isNotLast := i < len(parts)-1
if nil == root {
retID = ast.NewNodeID()