@@ -14,6 +14,7 @@ import (
14
14
"github.com/88250/lute/lex"
15
15
"github.com/88250/lute/render"
16
16
luteUtil "github.com/88250/lute/util"
17
+ "github.com/PuerkitoBio/goquery"
17
18
"github.com/siyuan-note/oceanpress/src/conf"
18
19
structAll "github.com/siyuan-note/oceanpress/src/struct"
19
20
"github.com/siyuan-note/oceanpress/src/util"
@@ -65,11 +66,36 @@ func (r *OceanPressRender) Render() (html string, xml string) {
65
66
66
67
return html , xml
67
68
}
68
- func (r * OceanPressRender ) renderIFrame (node * ast.Node , entering bool ) ast.WalkStatus {
69
+
70
+ func (r * OceanPressRender ) renderWidget (node * ast.Node , entering bool ) ast.WalkStatus {
69
71
if entering {
70
72
attr := [][]string {{"class" , "iframe" }}
71
73
// 添加自定义属性
72
74
attr = append (attr , node .KramdownIAL ... )
75
+ htmlStr := node .TokensStr ()
76
+ dom , err := goquery .NewDocumentFromReader (strings .NewReader (htmlStr ))
77
+ if err == nil {
78
+ iframe := dom .Find ("iframe" )
79
+ src , exists := iframe .Attr ("src" )
80
+ if exists {
81
+ localPrefix := "http://127.0.0.1:6806/"
82
+ if strings .HasPrefix (src , localPrefix ) {
83
+ src = src [len (localPrefix ):]
84
+ if strings .HasSuffix (src , "/" ) {
85
+ src += "index.html"
86
+ } else if ! strings .HasSuffix (src , ".html" ) {
87
+ src += "/index.html"
88
+ }
89
+ iframe .SetAttr ("src" , r .context .BaseEntity .RootPath ()+ "assets/" + src )
90
+ }
91
+ html , err := goquery .OuterHtml (iframe )
92
+ if err == nil {
93
+ node .Tokens = []byte (html )
94
+ }
95
+ }
96
+ } else {
97
+ util .Warn ("renderWidget" , err )
98
+ }
73
99
r .Tag ("div" , attr , false )
74
100
tokens := node .Tokens
75
101
if r .Options .Sanitize {
@@ -205,7 +231,7 @@ func (r *OceanPressRender) renderNodeToHTML(node *ast.Node, headerIncludes bool)
205
231
}
206
232
}
207
233
208
- renderer := NewOceanPressRenderer (r .Tree , (* Options )(r .context . LuteEngine . RenderOptions ), r .context )
234
+ renderer := NewOceanPressRenderer (r .Tree , (* Options )(r .Options ), r .context )
209
235
// renderer2 := render.NewFormatRenderer(tree, luteEngine.RenderOptions)
210
236
renderer .Writer = & bytes.Buffer {}
211
237
// renderer.NodeWriterStack = append(renderer.NodeWriterStack, renderer.Writer) // 因为有可能不是从 root 开始渲染,所以需要初始化
@@ -475,7 +501,6 @@ func (r *OceanPressRender) Tag(name string, attrs [][]string, selfclosing bool)
475
501
}
476
502
id , idIndex , _ := FindAttr (attrs , "id" )
477
503
nId , nIdIndex , _ := FindAttr (attrs , "data-n-id" )
478
-
479
504
var attrsTemp [][]string
480
505
if idIndex != nIdIndex && id == nId && id != "" {
481
506
for i , v := range attrs {
@@ -648,13 +673,6 @@ func headingChildren(heading *ast.Node) (ret []*ast.Node) {
648
673
ret = append (ret , blocks ... )
649
674
return
650
675
}
651
- func getRootByNode (node * ast.Node ) * ast.Node {
652
- if node .Parent == nil {
653
- return node
654
- } else {
655
- return getRootByNode (node .Parent )
656
- }
657
- }
658
676
659
677
// getAllNextByNode 获取一个节点的 所有后续节点
660
678
func getAllNextByNode (node * ast.Node ) []* ast.Node {
0 commit comments