write doctype when rendering html
This commit is contained in:
parent
146034c78b
commit
bb9fb0b327
3 changed files with 32 additions and 2 deletions
|
|
@ -247,7 +247,7 @@ func writeHtml(w http.ResponseWriter, element Ren) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
w.Header().Set("Content-Type", "text/html")
|
w.Header().Set("Content-Type", "text/html")
|
||||||
_, err := fmt.Fprint(w, Render(element))
|
_, err := fmt.Fprint(w, Render(element, WithDocType()))
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,11 +8,33 @@ type Ren interface {
|
||||||
Render(context *RenderContext)
|
Render(context *RenderContext)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Render(node Ren) string {
|
type RenderOptions struct {
|
||||||
|
doctype bool
|
||||||
|
}
|
||||||
|
|
||||||
|
type RenderOpt func(context *RenderContext, opt *RenderOptions)
|
||||||
|
|
||||||
|
func WithDocType() RenderOpt {
|
||||||
|
return func(context *RenderContext, opt *RenderOptions) {
|
||||||
|
opt.doctype = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Render(node Ren, opts ...RenderOpt) string {
|
||||||
builder := &strings.Builder{}
|
builder := &strings.Builder{}
|
||||||
context := &RenderContext{
|
context := &RenderContext{
|
||||||
builder: builder,
|
builder: builder,
|
||||||
}
|
}
|
||||||
|
options := &RenderOptions{}
|
||||||
|
|
||||||
|
for _, opt := range opts {
|
||||||
|
opt(context, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
if options.doctype {
|
||||||
|
builder.WriteString("<!DOCTYPE html>")
|
||||||
|
}
|
||||||
|
|
||||||
node.Render(context)
|
node.Render(context)
|
||||||
return builder.String()
|
return builder.String()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,14 @@ import (
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestRendererShouldRenderDocType(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
result := Render(Html(
|
||||||
|
Div(),
|
||||||
|
), WithDocType())
|
||||||
|
assert.Equal(t, `<!DOCTYPE html><html><div></div></html>`, result)
|
||||||
|
}
|
||||||
|
|
||||||
func TestSimpleRender(t *testing.T) {
|
func TestSimpleRender(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
result := Render(
|
result := Render(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue