htmgo/framework/h/render.go
2024-10-23 09:28:19 -05:00

40 lines
651 B
Go

package h
import (
"strings"
)
type Ren interface {
Render(context *RenderContext)
}
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()
}