Skip to content

Commit f427fa0

Browse files
committed
w/ TemplateRenderable
1 parent fc42a3d commit f427fa0

File tree

3 files changed

+40
-22
lines changed

3 files changed

+40
-22
lines changed

render_container_test.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,12 @@ func tplWithRealSlotFunc(ctx context.Context, tpl *template.Template, slots map[
3333
}
3434

3535
func (v ContainerView) RenderToHTML(ctx context.Context) (template.HTML, error) {
36-
return RenderToHTML(tplWithRealSlotFunc(
37-
ctx,
38-
containerViewTpl,
39-
map[string]AsRenderable{
36+
return TemplateRenderable{
37+
Tpl: tplWithRealSlotFunc(ctx, containerViewTpl, map[string]AsRenderable{
4038
"heading": v.Heading,
4139
"body": v.Body,
42-
},
43-
), nil)
40+
}),
41+
}.RenderToHTML(ctx)
4442
}
4543

4644
func (v ContainerView) Renderable(_ context.Context) (Renderable, error) {

renderer.go

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,33 +7,55 @@ import (
77
"html/template"
88
)
99

10-
func Render(ctx context.Context, r AsRenderable) (template.HTML, error) {
10+
func RenderToHTML(ctx context.Context, r Renderable, errHandler any) (template.HTML, error) {
11+
var empty template.HTML
12+
1113
if r == nil {
12-
return template.HTML(""), nil
14+
return empty, nil
15+
}
16+
17+
out, err := r.RenderToHTML(ctx)
18+
if err != nil {
19+
return handleRenderError(ctx, err, errHandler)
20+
}
21+
22+
return out, nil
23+
}
24+
25+
func Render(ctx context.Context, v AsRenderable) (template.HTML, error) {
26+
var empty template.HTML
27+
28+
if v == nil {
29+
return empty, nil
1330
}
1431

15-
renderable, err := r.Renderable(ctx)
32+
r, err := v.Renderable(ctx)
1633
if err != nil {
17-
return handleRenderError(ctx, err, r)
34+
return handleRenderError(ctx, err, v)
1835
}
1936

20-
out, err := renderable.RenderToHTML(ctx)
37+
out, err := RenderToHTML(ctx, r, v)
2138
if err != nil {
22-
return handleRenderError(ctx, err, r)
39+
return empty, err
2340
}
2441

2542
return out, nil
2643
}
2744

28-
func RenderToHTML(tpl *template.Template, data any) (template.HTML, error) {
45+
type TemplateRenderable struct {
46+
Tpl *template.Template
47+
Data any
48+
}
49+
50+
func (v TemplateRenderable) RenderToHTML(_ context.Context) (template.HTML, error) {
2951
var empty template.HTML
3052

31-
if tpl == nil {
53+
if v.Tpl == nil {
3254
return empty, fmt.Errorf("missing template")
3355
}
3456

3557
var bs bytes.Buffer
36-
if err := tpl.Execute(&bs, data); err != nil {
58+
if err := v.Tpl.Execute(&bs, v.Data); err != nil {
3759
return empty, fmt.Errorf("tpl.Execute(): %w", err)
3860
}
3961

view.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,13 @@ type View struct {
1313
}
1414

1515
func (v View) RenderToHTML(ctx context.Context) (template.HTML, error) {
16-
tpl := v.Tpl
17-
if v.Tpl != nil {
18-
tpl = v.Slots.addToTemplate(ctx, v.Tpl)
19-
}
20-
21-
return RenderToHTML(tpl, v.Data)
16+
return TemplateRenderable{
17+
Tpl: v.Slots.addToTemplate(ctx, v.Tpl),
18+
Data: v.Data,
19+
}.RenderToHTML(ctx)
2220
}
2321

24-
func (v View) Renderable(_ context.Context) (Renderable, error) {
22+
func (v View) Renderable(ctx context.Context) (Renderable, error) {
2523
return v, nil
2624
}
2725

0 commit comments

Comments
 (0)