feat: add render duration in footer

This commit is contained in:
Marc 2024-09-21 13:09:43 -04:00
parent d24f48bc52
commit c05b34f4cd
Signed by: marc
GPG key ID: 048E042F22B5DC79
5 changed files with 44 additions and 6 deletions

View file

@ -2,16 +2,16 @@ body {
margin: 0; margin: 0;
} }
header { body > header {
padding: 10px; padding: 10px;
} }
header > h1 { body > header > h1 {
margin: 0; margin: 0;
font-size: 1.2em; font-size: 1.2em;
} }
header ul { body > header ul {
list-style: none; list-style: none;
display: flex; display: flex;
gap: 5px; gap: 5px;
@ -19,6 +19,15 @@ header ul {
padding: 5px; padding: 5px;
} }
body > footer {
font-size: 0.9em;
margin-top: 10px;
padding: 10px;
display: flex;
gap: 5px;
justify-content: center;
}
#items { #items {
list-style: none; list-style: none;
padding-left: 0; padding-left: 0;

View file

@ -5,8 +5,13 @@ import (
"io" "io"
"path/filepath" "path/filepath"
"text/template" "text/template"
"time"
) )
func getRenderDuration(start time.Time) time.Duration {
return time.Now().Sub(start)
}
func Render(w io.Writer, templateName string, data interface{}) error { func Render(w io.Writer, templateName string, data interface{}) error {
asTemplatePath := func(templateName string) string { asTemplatePath := func(templateName string) string {
return filepath.Join("templates", fmt.Sprintf("%s.html.tmpl", templateName)) return filepath.Join("templates", fmt.Sprintf("%s.html.tmpl", templateName))
@ -15,13 +20,29 @@ func Render(w io.Writer, templateName string, data interface{}) error {
templatePartials := []string{ templatePartials := []string{
asTemplatePath(templateName), asTemplatePath(templateName),
asTemplatePath("base"), asTemplatePath("base"),
asTemplatePath("footer"),
} }
tmpl, err := template.New(templateName).ParseFiles(templatePartials...) start := time.Now()
tmpl := template.New(templateName).Funcs(template.FuncMap{
"getRenderDuration": getRenderDuration,
})
tmpl, err := tmpl.ParseFiles(templatePartials...)
if err != nil { if err != nil {
return err return err
} }
return tmpl.ExecuteTemplate(w, "base", data) type RenderMeta struct {
RenderStart time.Time
}
type RenderContext struct {
Data interface{}
Meta RenderMeta
}
return tmpl.ExecuteTemplate(w, "base", RenderContext{Data: data, Meta: RenderMeta{RenderStart: start}})
} }

View file

@ -17,6 +17,7 @@
</nav> </nav>
</header> </header>
{{ template "content" . }} {{ template "content" . }}
{{ template "footer" . }}
</body> </body>
</html> </html>
{{ end }} {{ end }}

View file

@ -0,0 +1,7 @@
{{ define "footer" }}
<footer>
<span>Morning Coffee</span>
<span>☕</span>
<span>Rendered: {{ getRenderDuration .Meta.RenderStart }}</span>
</footer>
{{ end }}

View file

@ -1,6 +1,6 @@
{{ define "content" }} {{ define "content" }}
<ul id="items"> <ul id="items">
{{ range . }} {{ range .Data }}
<li> <li>
<a href="{{ .Url }}">{{ .Title }}</a> <a href="{{ .Url }}">{{ .Title }}</a>
<span>{{ .PublishedDate }}</span> <span>{{ .PublishedDate }}</span>