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
|
||||
}
|
||||
w.Header().Set("Content-Type", "text/html")
|
||||
_, err := fmt.Fprint(w, Render(element))
|
||||
_, err := fmt.Fprint(w, Render(element, WithDocType()))
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,11 +8,33 @@ type Ren interface {
|
|||
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{}
|
||||
context := &RenderContext{
|
||||
builder: builder,
|
||||
}
|
||||
options := &RenderOptions{}
|
||||
|
||||
for _, opt := range opts {
|
||||
opt(context, options)
|
||||
}
|
||||
|
||||
if options.doctype {
|
||||
builder.WriteString("<!DOCTYPE html>")
|
||||
}
|
||||
|
||||
node.Render(context)
|
||||
return builder.String()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,14 @@ import (
|
|||
"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) {
|
||||
t.Parallel()
|
||||
result := Render(
|
||||
|
|
|
|||
Loading…
Reference in a new issue