From 7077a3748fa545e8dee83d4f3464c55b4b459183 Mon Sep 17 00:00:00 2001 From: Alan Pearce Date: Sun, 12 May 2024 21:44:57 +0200 Subject: feat: allow adding extra HTML to the body via configuration --- frontend/templates/index.gotmpl | 2 +- internal/config/config.go | 10 ++++++---- internal/server/mux.go | 35 ++++++++++++++++++----------------- 3 files changed, 25 insertions(+), 22 deletions(-) diff --git a/frontend/templates/index.gotmpl b/frontend/templates/index.gotmpl index dbe182a..8bff09c 100644 --- a/frontend/templates/index.gotmpl +++ b/frontend/templates/index.gotmpl @@ -35,6 +35,6 @@ {{ block "js" . }} {{ end }} - {{ .LiveReload }} + {{ .ExtraBodyHTML }} diff --git a/internal/config/config.go b/internal/config/config.go index 9880b3a..71b56be 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -1,6 +1,7 @@ package config import ( + "html/template" "log/slog" "maps" "net/url" @@ -27,10 +28,11 @@ func (u *URL) UnmarshalText(text []byte) (err error) { } type Config struct { - DataPath string `toml:"data-path"` - CSP CSP `toml:"content-security-policy"` - Headers map[string]string - Sources map[string]*importer.Source + DataPath string `toml:"data-path"` + CSP CSP `toml:"content-security-policy"` + ExtraBodyHTML template.HTML `toml:"extra-body-html"` + Headers map[string]string + Sources map[string]*importer.Source } var defaultConfig = Config{ diff --git a/internal/server/mux.go b/internal/server/mux.go index d98d415..ac128ce 100644 --- a/internal/server/mux.go +++ b/internal/server/mux.go @@ -50,12 +50,12 @@ type HTTPError struct { const jsSnippet = template.HTML(livereload.JsSnippet) // #nosec G203 type TemplateData struct { - LiveReload template.HTML - Sources map[string]*importer.Source - Source importer.Source - Query string - Results bool - SourceResult *bleve.SearchResult + Sources map[string]*importer.Source + Source importer.Source + Query string + Results bool + SourceResult *bleve.SearchResult + ExtraBodyHTML template.HTML } type ResultData[T options.NixOption] struct { @@ -109,11 +109,11 @@ func NewMux(runtimeConfig *Config) (*http.ServeMux, error) { top := http.NewServeMux() mux := http.NewServeMux() - indexData := TemplateData{ - LiveReload: jsSnippet, - Sources: config.Sources, - } mux.HandleFunc("/{$}", func(w http.ResponseWriter, _ *http.Request) { + indexData := TemplateData{ + ExtraBodyHTML: config.ExtraBodyHTML, + Sources: config.Sources, + } err := templates["index"].ExecuteTemplate(w, "index.gotmpl", indexData) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) @@ -157,9 +157,9 @@ func NewMux(runtimeConfig *Config) (*http.ServeMux, error) { tdata := ResultData[options.NixOption]{ TemplateData: TemplateData{ - LiveReload: jsSnippet, - Source: *source, - Sources: config.Sources, + ExtraBodyHTML: config.ExtraBodyHTML, + Source: *source, + Sources: config.Sources, }, ResultsPerPage: search.ResultsPerPage, Query: qs, @@ -216,10 +216,10 @@ func NewMux(runtimeConfig *Config) (*http.ServeMux, error) { } err = templates["search"].Execute(w, TemplateData{ - LiveReload: jsSnippet, - Sources: config.Sources, - Source: *source, - SourceResult: sourceResult, + ExtraBodyHTML: config.ExtraBodyHTML, + Sources: config.Sources, + Source: *source, + SourceResult: sourceResult, }) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) @@ -233,6 +233,7 @@ func NewMux(runtimeConfig *Config) (*http.ServeMux, error) { if runtimeConfig.LiveReload { applyDevModeOverrides(config) + config.ExtraBodyHTML = jsSnippet liveReload := livereload.New() liveReload.Start() top.Handle("/livereload", liveReload) -- cgit 1.4.1