Hi… I am well aware that this diff view is very suboptimal. It will be fixed when the refactored server comes along!
Add gohtmplgen to the build process
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-FileContributor: Runxi Yu <https://runxiyu.org> .PHONY: clean version.go CFLAGS = -Wall -Wextra -Werror -pedantic -std=c99 -D_GNU_SOURCE forge: $(filter-out forge,$(wildcard *)) version.go hookc/*.c hookc/hookc go mod vendor go build . hookc/hookc: version.go: printf 'package main\nconst VERSION="%s"\n' $(shell git describe --tags --always --dirty) > $@ clean: $(RM) forge version.go vendor
htmpl.go: htmpl/* gohtmplgen -o htmpl.go htmpl/*
// SPDX-License-Identifier: AGPL-3.0-only // SPDX-FileContributor: Runxi Yu <https://runxiyu.org> package main import ( "embed" "html/template" "io/fs" "net/http" "github.com/tdewolff/minify/v2" "github.com/tdewolff/minify/v2/html" ) // We embed all source for easy AGPL compliance. // //go:embed .gitignore .gitattributes //go:embed LICENSE README.md //go:embed *.go go.mod go.sum //go:embed *.scfg //go:embed Makefile
//go:embed static/* templates/* scripts/* sql/*
//go:embed static/* htmpl/* templates/* scripts/* sql/*
//go:embed hookc/*.c
//go:embed vendor/*
var sourceFS embed.FS
var sourceHandler = http.StripPrefix(
	"/:/source/",
	http.FileServer(http.FS(sourceFS)),
)
//go:embed templates/* static/* hookc/hookc
var resourcesFS embed.FS
var templates *template.Template
func loadTemplates() (err error) {
	m := minify.New()
	m.Add("text/html", &html.Minifier{TemplateDelims: [2]string{"{{", "}}"}, KeepDefaultAttrVals: true})
	templates = template.New("templates").Funcs(template.FuncMap{
		"first_line":   firstLine,
		"base_name":    baseName,
		"path_escape":  pathEscape,
		"query_escape": queryEscape,
	})
	err = fs.WalkDir(resourcesFS, "templates", func(path string, d fs.DirEntry, err error) error {
		if err != nil {
			return err
		}
		if !d.IsDir() {
			content, err := fs.ReadFile(resourcesFS, path)
			if err != nil {
				return err
			}
			minified, err := m.Bytes("text/html", content)
			if err != nil {
				return err
			}
			_, err = templates.Parse(string(minified))
			if err != nil {
				return err
			}
		}
		return nil
	})
	return err
}
var staticHandler http.Handler
func init() {
	staticFS, err := fs.Sub(resourcesFS, "static")
	if err != nil {
		panic(err)
	}
	staticHandler = http.StripPrefix("/:/static/", http.FileServer(http.FS(staticFS)))
}