feat: add WASM entry point with renderToString
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
76cef5a8d0
commit
5acf63cb4b
1 changed files with 55 additions and 0 deletions
55
cmd/wasm/main.go
Normal file
55
cmd/wasm/main.go
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
//go:build js && wasm
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"syscall/js"
|
||||
|
||||
html "forge.lthn.ai/core/go-html"
|
||||
)
|
||||
|
||||
func renderToString(_ js.Value, args []js.Value) any {
|
||||
if len(args) < 1 {
|
||||
return ""
|
||||
}
|
||||
|
||||
variant := args[0].String()
|
||||
ctx := html.NewContext()
|
||||
|
||||
if len(args) >= 2 {
|
||||
ctx.Locale = args[1].String()
|
||||
}
|
||||
|
||||
layout := html.NewLayout(variant)
|
||||
|
||||
if len(args) >= 3 && args[2].Type() == js.TypeObject {
|
||||
slots := args[2]
|
||||
for _, slot := range []string{"H", "L", "C", "R", "F"} {
|
||||
content := slots.Get(slot)
|
||||
if content.Type() == js.TypeString && content.String() != "" {
|
||||
switch slot {
|
||||
case "H":
|
||||
layout.H(html.Raw(content.String()))
|
||||
case "L":
|
||||
layout.L(html.Raw(content.String()))
|
||||
case "C":
|
||||
layout.C(html.Raw(content.String()))
|
||||
case "R":
|
||||
layout.R(html.Raw(content.String()))
|
||||
case "F":
|
||||
layout.F(html.Raw(content.String()))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return layout.Render(ctx)
|
||||
}
|
||||
|
||||
func main() {
|
||||
js.Global().Set("gohtml", js.ValueOf(map[string]any{
|
||||
"renderToString": js.FuncOf(renderToString),
|
||||
}))
|
||||
|
||||
select {}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue