write doctype when rendering html

This commit is contained in:
maddalax 2024-10-23 09:28:19 -05:00
parent 146034c78b
commit bb9fb0b327
3 changed files with 32 additions and 2 deletions

View file

@ -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
} }

View file

@ -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()
} }

View file

@ -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(