|
- package views
-
- import (
- "bytes"
- "encoding/json"
- "html/template"
- "net/http"
- )
-
- type Renderer struct {
- tpl *template.Template
- }
-
- func NewRenderer(pattern string) (*Renderer, error) {
- tpl, err := template.New("ui").Funcs(template.FuncMap{
- "prettyJSON": prettyJSON,
- }).ParseGlob(pattern)
- if err != nil {
- return nil, err
- }
- return &Renderer{tpl: tpl}, nil
- }
-
- func (r *Renderer) Render(w http.ResponseWriter, name string, data any) {
- w.Header().Set("Content-Type", "text/html; charset=utf-8")
- if err := r.tpl.ExecuteTemplate(w, name, data); err != nil {
- http.Error(w, "template rendering failed", http.StatusInternalServerError)
- }
- }
-
- func prettyJSON(raw []byte) string {
- if len(raw) == 0 {
- return ""
- }
- var out bytes.Buffer
- if err := json.Indent(&out, raw, "", " "); err != nil {
- return string(raw)
- }
- return out.String()
- }
|