htmgo/framework/h/render.go
maddalax 3468baaa84 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	framework/h/attribute.go
#	framework/h/lifecycle.go
#	framework/h/render.go
2024-10-25 22:01:04 -05:00

41 lines
731 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
}
}
// Render renders the given node recursively, and returns the resulting string.
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()
}