tijl.dev-core/internal/apps/inflation/chart_renderer.go

55 lines
1.2 KiB
Go
Raw Permalink Normal View History

2024-09-08 01:01:29 +02:00
package inflation
import (
"bytes"
"fmt"
"io"
"regexp"
log "git.tijl.dev/tijl/tijl.dev-core/modules/logger"
"github.com/go-echarts/go-echarts/v2/render"
tpls "github.com/go-echarts/go-echarts/v2/templates"
)
type InternalRenderer struct {
render.BaseRender
c interface{}
before []func()
}
func NewRenderer(c interface{}, before ...func()) render.Renderer {
return &InternalRenderer{c: c, before: before}
}
func CustomRender(r *InternalRenderer) (string, error) {
for _, fn := range r.before {
fn()
}
contents := []string{tpls.BaseTpl, tpls.ChartTpl}
tpl := render.MustTemplate("chart", contents)
var buf bytes.Buffer
if err := tpl.ExecuteTemplate(&buf, "chart", r.c); err != nil {
return "", err
}
log.Debug().Interface("bufst", buf.String()).Msg("t")
return buf.String(), nil
}
func (r *InternalRenderer) Render(w io.Writer) error {
return nil
}
var scriptRegex = regexp.MustCompile(`<script[^>]*>([\s\S]*?)<\/script>`)
func handleScriptElement(scriptTag string) string {
matches := scriptRegex.FindStringSubmatch(scriptTag)
if len(matches) > 1 {
return matches[1]
}
return fmt.Sprintf(`window.onload = function() {%v}`, scriptTag)
}