From ce0def95f3924a10b0faceb72aa5df18bf813fb1 Mon Sep 17 00:00:00 2001 From: tjpcc Date: Sun, 17 Sep 2023 14:00:03 -0600 Subject: GOPHER --- templates.go | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'templates.go') diff --git a/templates.go b/templates.go index 3f8cf42..4c226f6 100644 --- a/templates.go +++ b/templates.go @@ -2,6 +2,7 @@ package syw import ( "embed" + "net/url" "text/template" ) @@ -11,6 +12,47 @@ var ( geminiTemplate = template.Must(template.ParseFS(geminiTemplateFS, "templates/*.gmi")) ) +var ( + //go:embed templates/*.gophermap templates/*.gophertext + gopherTemplateFS embed.FS + gopherTemplate = template.Must( + template.New("gopher").Funcs(template.FuncMap{ + "combine": gopherCombine, + "join": gopherJoin, + }).ParseFS( + gopherTemplateFS, + "templates/*.gophermap", + "templates/*.gophertext", + ), + ) +) + +func gopherCombine(base string, relative ...string) (string, error) { + bu, err := url.Parse(base) + if err != nil { + return "", err + } + + for _, rel := range relative { + ru, err := url.Parse(rel) + if err != nil { + return "", err + } + bu = bu.ResolveReference(ru) + } + + return bu.String(), nil +} + +func gopherJoin(base string, relative ...string) (string, error) { + bu, err := url.Parse(base) + if err != nil { + return "", err + } + + return bu.JoinPath(relative...).Path, nil +} + func addTemplates(base *template.Template, additions *template.Template) (*template.Template, error) { base, err := base.Clone() if err != nil { -- cgit v1.2.3