Daniel 2025-06-24 10:19:32 +08:00
parent 08de630e6f
commit 233bd2d88c
No known key found for this signature in database
GPG key ID: 86211BA83DF03017

View file

@ -227,22 +227,39 @@ func renderBlockDOMByNode(node *ast.Node, luteEngine *lute.Lute) string {
tree := &parse.Tree{Root: &ast.Node{Type: ast.NodeDocument}, Context: &parse.Context{ParseOption: luteEngine.ParseOptions}} tree := &parse.Tree{Root: &ast.Node{Type: ast.NodeDocument}, Context: &parse.Context{ParseOption: luteEngine.ParseOptions}}
blockRenderer := render.NewProtyleRenderer(tree, luteEngine.RenderOptions) blockRenderer := render.NewProtyleRenderer(tree, luteEngine.RenderOptions)
blockRenderer.Options.ProtyleContenteditable = false blockRenderer.Options.ProtyleContenteditable = false
resetIDs := map[string]string{}
ast.Walk(node, func(n *ast.Node, entering bool) ast.WalkStatus { ast.Walk(node, func(n *ast.Node, entering bool) ast.WalkStatus {
if entering { if entering {
// 内容图中不需要渲染数据库角标 https://github.com/siyuan-note/siyuan/issues/15057 if n.IsBlock() {
ial := parse.IAL2Map(n.KramdownIAL) // 内容图中不需要渲染数据库角标 https://github.com/siyuan-note/siyuan/issues/15057
delete(ial, av.NodeAttrNameAvs) ial := parse.IAL2Map(n.KramdownIAL)
delete(ial, av.NodeAttrNameAvs)
// 重置 data-node-id 的值,避免触发前端绑定的事件 https://github.com/siyuan-note/siyuan/issues/15088 // 重置 data-node-id 的值,避免触发前端绑定的事件 https://github.com/siyuan-note/siyuan/issues/15088
ial["id"] = ast.NewNodeID() newID := ast.NewNodeID()
n.KramdownIAL = parse.Map2IAL(ial) resetIDs[newID] = n.ID
n.ID, ial["id"] = newID, newID
n.KramdownIAL = parse.Map2IAL(ial)
}
} }
rendererFunc := blockRenderer.RendererFuncs[n.Type] rendererFunc := blockRenderer.RendererFuncs[n.Type]
return rendererFunc(n, entering) return rendererFunc(n, entering)
}) })
h := strings.TrimSpace(blockRenderer.Writer.String()) ret := strings.TrimSpace(blockRenderer.Writer.String())
if strings.HasPrefix(h, "<li") { if strings.HasPrefix(ret, "<li") {
h = "<ul>" + h + "</ul>" ret = "<ul>" + ret + "</ul>"
} }
return h ast.Walk(node, func(n *ast.Node, entering bool) ast.WalkStatus {
if entering {
if n.IsBlock() {
// 还原上面重置 data-node-id 的值
ial := parse.IAL2Map(n.KramdownIAL)
oldID := resetIDs[n.ID]
n.ID, ial["id"] = oldID, oldID
n.KramdownIAL = parse.Map2IAL(ial)
}
}
return ast.WalkContinue
})
return ret
} }