Skip to content
This repository was archived by the owner on Sep 17, 2023. It is now read-only.

Commit feef0e8

Browse files
committed
✨ feat(renderWidget): 挂件块路径处理
1 parent c22b451 commit feef0e8

File tree

4 files changed

+38
-18
lines changed

4 files changed

+38
-18
lines changed

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ require (
66
github.com/88250/gulu v1.1.73 // indirect
77
github.com/88250/lute v1.7.4-0.20210905031547-428c40898db4 // https://pkg.go.dev/github.com/88250/lute
88
github.com/88250/protyle v0.0.0-20210807012712-9e3fb38884a3
9+
github.com/PuerkitoBio/goquery v1.7.1
910
github.com/alecthomas/chroma v0.9.2
1011
github.com/alecthomas/repr v0.0.0-20210801044451-80ca428c5142 // indirect
1112
github.com/jinzhu/gorm v1.9.16 // indirect

go.sum

+7
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
6262
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
6363
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
6464
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
65+
github.com/PuerkitoBio/goquery v1.7.1 h1:oE+T06D+1T7LNrn91B4aERsRIeCLJ/oPSa6xB9FPnz4=
66+
github.com/PuerkitoBio/goquery v1.7.1/go.mod h1:XY0pP4kfraEmmV1O7Uf6XyjoslwsneBbgeDjLYuN8xY=
6567
github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38 h1:smF2tmSOzy2Mm+0dGI2AIUHY+w0BUc+4tn40djz7+6U=
6668
github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38/go.mod h1:r7bzyVFMNntcxPZXK3/+KdruV1H5KSlyVY0gc+NgInI=
6769
github.com/alecthomas/chroma v0.8.1 h1:ym20sbvyC6RXz45u4qDglcgr8E313oPROshcuCHqiEE=
@@ -88,6 +90,8 @@ github.com/alecthomas/repr v0.0.0-20210801044451-80ca428c5142/go.mod h1:2kn6fqh/
8890
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
8991
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
9092
github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
93+
github.com/andybalholm/cascadia v1.2.0 h1:vuRCkM5Ozh/BfmsaTm26kbjm0mIOM3yS5Ek/F5h18aE=
94+
github.com/andybalholm/cascadia v1.2.0/go.mod h1:YCyR8vOZT9aZ1CHEd8ap0gMVm2aFgxBp0T0eFw1RUQY=
9195
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
9296
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
9397
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
@@ -386,6 +390,8 @@ golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLL
386390
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
387391
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
388392
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
393+
golang.org/x/net v0.0.0-20210614182718-04defd469f4e h1:XpT3nA5TvE525Ne3hInMh6+GETgn27Zfm9dxsThnX2Q=
394+
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
389395
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
390396
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
391397
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -424,6 +430,7 @@ golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7w
424430
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57 h1:F5Gozwx4I1xtr/sr/8CFbb57iKi3297KFs0QDbGN60A=
425431
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
426432
golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
433+
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
427434
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
428435
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
429436
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=

src/render/link.go

+2-8
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,11 @@ func (r *BaseRenderer) PrefixPath(dest []byte) []byte {
3636
var BaseLinkOcean = make(map[string]*OceanPressRender)
3737

3838
func (r *BaseRenderer) RelativePath(dest []byte) []byte {
39-
oceanpressRender := BaseLinkOcean[r.Tree.ID]
39+
// oceanpressRender := BaseLinkOcean[r.Tree.ID]
4040

4141
// 强制将 %5C 即反斜杠 \ 转换为斜杠 / 以兼容 Windows 平台上使用的路径
4242
dest = bytes.ReplaceAll(dest, []byte("%5C"), []byte("\\"))
43-
if !r.isRelativePath(dest) {
44-
// 挂件块路径处理
45-
if bytes.HasPrefix(dest, []byte("/widgets/")) {
46-
dest = append([]byte(oceanpressRender.context.BaseEntity.RootPath()+"assets/"), dest...)
47-
}
48-
return dest
49-
}
43+
5044

5145
linkBase := util.StrToBytes(r.Options.LinkBase)
5246
// if !bytes.HasSuffix(linkBase, []byte("/")) {

src/render/ocean_press_render_custom.go

+28-10
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/88250/lute/lex"
1515
"github.com/88250/lute/render"
1616
luteUtil "github.com/88250/lute/util"
17+
"github.com/PuerkitoBio/goquery"
1718
"github.com/siyuan-note/oceanpress/src/conf"
1819
structAll "github.com/siyuan-note/oceanpress/src/struct"
1920
"github.com/siyuan-note/oceanpress/src/util"
@@ -65,11 +66,36 @@ func (r *OceanPressRender) Render() (html string, xml string) {
6566

6667
return html, xml
6768
}
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 {
6971
if entering {
7072
attr := [][]string{{"class", "iframe"}}
7173
// 添加自定义属性
7274
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+
}
7399
r.Tag("div", attr, false)
74100
tokens := node.Tokens
75101
if r.Options.Sanitize {
@@ -205,7 +231,7 @@ func (r *OceanPressRender) renderNodeToHTML(node *ast.Node, headerIncludes bool)
205231
}
206232
}
207233

208-
renderer := NewOceanPressRenderer(r.Tree, (*Options)(r.context.LuteEngine.RenderOptions), r.context)
234+
renderer := NewOceanPressRenderer(r.Tree, (*Options)(r.Options), r.context)
209235
// renderer2 := render.NewFormatRenderer(tree, luteEngine.RenderOptions)
210236
renderer.Writer = &bytes.Buffer{}
211237
// renderer.NodeWriterStack = append(renderer.NodeWriterStack, renderer.Writer) // 因为有可能不是从 root 开始渲染,所以需要初始化
@@ -475,7 +501,6 @@ func (r *OceanPressRender) Tag(name string, attrs [][]string, selfclosing bool)
475501
}
476502
id, idIndex, _ := FindAttr(attrs, "id")
477503
nId, nIdIndex, _ := FindAttr(attrs, "data-n-id")
478-
479504
var attrsTemp [][]string
480505
if idIndex != nIdIndex && id == nId && id != "" {
481506
for i, v := range attrs {
@@ -648,13 +673,6 @@ func headingChildren(heading *ast.Node) (ret []*ast.Node) {
648673
ret = append(ret, blocks...)
649674
return
650675
}
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-
}
658676

659677
// getAllNextByNode 获取一个节点的 所有后续节点
660678
func getAllNextByNode(node *ast.Node) []*ast.Node {

0 commit comments

Comments
 (0)