github.com/sdqri/sequined@v0.0.0-20240421190656-fc6bf956f4d8/internal/dashboard/snippetrenderer/snippet_renderer.go (about) 1 package snippetrenderer 2 3 import ( 4 "bytes" 5 "io" 6 "regexp" 7 8 _ "embed" 9 10 render "github.com/go-echarts/go-echarts/v2/render" 11 ) 12 13 var pat = regexp.MustCompile(`(__f__")|("__f__)|(__f__)`) 14 15 //go:embed base.html.tmpl 16 var BaseTmpl string 17 18 type SnippetRenderer struct { 19 c interface{} 20 before []func() 21 } 22 23 func NewSnippetRenderer(c interface{}, before ...func()) render.Renderer { 24 return &SnippetRenderer{c: c, before: before} 25 } 26 27 func (r *SnippetRenderer) Render(w io.Writer) error { 28 29 content := r.RenderContent() 30 _, err := w.Write(content) 31 return err 32 } 33 34 func (r *SnippetRenderer) RenderContent() []byte { 35 for _, fn := range r.before { 36 fn() 37 } 38 39 contents := []string{BaseTmpl} 40 tpl := render.MustTemplate(render.ModChart, contents) 41 42 var buf bytes.Buffer 43 if err := tpl.ExecuteTemplate(&buf, render.ModChart, r.c); err != nil { 44 panic(err) 45 } 46 47 return pat.ReplaceAll(buf.Bytes(), []byte("")) 48 }