apps/blobs/render.go 1013 B raw
1
package main
2
3
import (
4
	"fmt"
5
	"html/template"
6
	"io/fs"
7
	"net/http"
8
	"path"
9
10
	"github.com/stevedylandev/andromeda/pkg/web"
11
)
12
13
func buildTemplates() (map[string]*template.Template, error) {
14
	pages, err := fs.Glob(appFS, "templates/*.html")
15
	if err != nil {
16
		return nil, err
17
	}
18
	out := make(map[string]*template.Template, len(pages))
19
	for _, page := range pages {
20
		name := path.Base(page)
21
		if name == "base.html" {
22
			continue
23
		}
24
		patterns := []string{page}
25
		if name != "login.html" {
26
			patterns = append([]string{"templates/base.html"}, patterns...)
27
		}
28
		tmpl, err := template.ParseFS(appFS, patterns...)
29
		if err != nil {
30
			return nil, fmt.Errorf("parse %s: %w", page, err)
31
		}
32
		out[name] = tmpl
33
	}
34
	return out, nil
35
}
36
37
func (a *App) renderPage(w http.ResponseWriter, name string, data any) {
38
	tmpl, ok := a.Templates[name]
39
	if !ok {
40
		a.Log.Error("template missing", "name", name)
41
		http.Error(w, "template missing", http.StatusInternalServerError)
42
		return
43
	}
44
	web.Render(tmpl, w, name, data, a.Log)
45
}