From af434077ef3a971494fb0bc69ec9617c3b365abd Mon Sep 17 00:00:00 2001 From: Brian Picciano Date: Fri, 20 May 2022 14:30:09 -0600 Subject: Implement image macro for rendering images --- srv/src/http/tpl.go | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) (limited to 'srv/src/http/tpl.go') diff --git a/srv/src/http/tpl.go b/srv/src/http/tpl.go index 65f23a7..62a4d06 100644 --- a/srv/src/http/tpl.go +++ b/srv/src/http/tpl.go @@ -1,6 +1,7 @@ package http import ( + "bytes" "embed" "fmt" "html/template" @@ -27,7 +28,7 @@ func mustReadTplFile(fileName string) string { return string(b) } -func (a *api) mustParseTpl(name string) *template.Template { +func (a *api) parseTpl(tplBody string) (*template.Template, error) { blogURL := func(path string) string { @@ -43,7 +44,9 @@ func (a *api) mustParseTpl(name string) *template.Template { return path } - tpl := template.New("").Funcs(template.FuncMap{ + tpl := template.New("root") + + tpl = tpl.Funcs(template.FuncMap{ "BlogURL": blogURL, "StaticURL": func(path string) string { path = filepath.Join("static", path) @@ -62,9 +65,39 @@ func (a *api) mustParseTpl(name string) *template.Template { }, }) - tpl = template.Must(tpl.Parse(mustReadTplFile(name))) + tpl = template.Must(tpl.New("image.html").Parse(mustReadTplFile("image.html"))) - return tpl + tpl = tpl.Funcs(template.FuncMap{ + "Image": func(id string) (template.HTML, error) { + + tplPayload := struct { + ID string + Resizable bool + }{ + ID: id, + Resizable: isImgResizable(id), + } + + buf := new(bytes.Buffer) + if err := tpl.ExecuteTemplate(buf, "image.html", tplPayload); err != nil { + return "", err + } + + return template.HTML(buf.Bytes()), nil + }, + }) + + var err error + + if tpl, err = tpl.New("").Parse(tplBody); err != nil { + return nil, err + } + + return tpl, nil +} + +func (a *api) mustParseTpl(name string) *template.Template { + return template.Must(a.parseTpl(mustReadTplFile(name))) } func (a *api) mustParseBasedTpl(name string) *template.Template { -- cgit v1.2.3