diff --git a/web/render/render.go b/web/render/render.go index 0061528..95533ed 100644 --- a/web/render/render.go +++ b/web/render/render.go @@ -5,11 +5,13 @@ import ( "embed" "html/template" "io" + "io/fs" ) type Render struct { - fs embed.FS - t *template.Template + fs embed.FS + t *template.Template + FileExtension string } type Data map[string]interface{} @@ -23,8 +25,32 @@ func NewRender(efs embed.FS, t *template.Template) Render { return tr } +func NewRenderWithoutTemplate(ets embed.FS) (Render, error) { + tmpl, err := template.ParseFS(ets, "templates/*") + if err != nil { + return Render{}, err + } + + r := NewRender(ets, tmpl) + return r, nil +} + func (r Render) Render(ctx context.Context, w io.Writer, name string, data interface{}) error { tmpl := template.Must(r.t.Clone()) - tmpl = template.Must(tmpl.ParseFS(r.fs, "templates/"+name+".html")) + _, err := fs.Stat(r.fs, "templates/"+name+".txt") + if err == nil { + tmpl = template.Must(tmpl.ParseFS(r.fs, "templates/"+name+".txt")) + } + _, err = fs.Stat(r.fs, "templates/"+name+".html") + if err == nil { + tmpl = template.Must(tmpl.ParseFS(r.fs, "templates/"+name+".html")) + } + _, err = fs.Stat(r.fs, "templates/"+name) + if err == nil { + tmpl = template.Must(tmpl.ParseFS(r.fs, "templates/"+name)) + } return tmpl.ExecuteTemplate(w, name, data) } + +func (r Render) RenderToString(ctx context.Context, name string, data interface{}) (string, error) { +}