htmgo/framework/h/render.go
2025-01-14 21:32:18 -03:00

47 lines
861 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 WithNonce(nonce string) RenderOpt {
return func(context *RenderContext, opt *RenderOptions) {
context.nonce = nonce
}
}
// 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()
}