mirror of
https://github.com/Kugelschieber/marvinblum.git
synced 2026-01-18 06:40:27 +00:00
Added blog page, article page and added latest articles to start page.
This commit is contained in:
68
tpl/template.go
Normal file
68
tpl/template.go
Normal file
@@ -0,0 +1,68 @@
|
||||
package tpl
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"github.com/emvi/logbuch"
|
||||
"github.com/gosimple/slug"
|
||||
"html/template"
|
||||
"net/http"
|
||||
"os"
|
||||
)
|
||||
|
||||
const (
|
||||
templateDir = "template/*"
|
||||
)
|
||||
|
||||
var (
|
||||
tpl *template.Template
|
||||
tplCache = make(map[string][]byte)
|
||||
hotReload bool
|
||||
)
|
||||
|
||||
var funcMap = template.FuncMap{
|
||||
"slug": slug.Make,
|
||||
}
|
||||
|
||||
func LoadTemplate() {
|
||||
logbuch.Debug("Loading templates")
|
||||
var err error
|
||||
tpl, err = template.New("").Funcs(funcMap).ParseGlob(templateDir)
|
||||
|
||||
if err != nil {
|
||||
logbuch.Fatal("Error loading template", logbuch.Fields{"err": err})
|
||||
}
|
||||
|
||||
hotReload = os.Getenv("MB_HOT_RELOAD") == "true"
|
||||
logbuch.Debug("Templates loaded", logbuch.Fields{"hot_reload": hotReload})
|
||||
}
|
||||
|
||||
func renderTemplate(name string) {
|
||||
logbuch.Debug("Rendering template", logbuch.Fields{"name": name})
|
||||
var buffer bytes.Buffer
|
||||
|
||||
if err := tpl.ExecuteTemplate(&buffer, name, nil); err != nil {
|
||||
logbuch.Fatal("Error executing template", logbuch.Fields{"err": err, "name": name})
|
||||
}
|
||||
|
||||
tplCache[name] = buffer.Bytes()
|
||||
}
|
||||
|
||||
func Get() *template.Template {
|
||||
return tpl
|
||||
}
|
||||
|
||||
func ServeTemplate(name string) http.HandlerFunc {
|
||||
// render once so we have it in cache
|
||||
renderTemplate(name)
|
||||
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
if hotReload {
|
||||
LoadTemplate()
|
||||
renderTemplate(name)
|
||||
}
|
||||
|
||||
if _, err := w.Write(tplCache[name]); err != nil {
|
||||
logbuch.Error("Error returning page to client", logbuch.Fields{"err": err, "name": name})
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user