From 6b3933282e3aa9803636b2ba580aced5c202eaa9 Mon Sep 17 00:00:00 2001 From: Brian Picciano Date: Tue, 24 Jan 2023 12:40:32 +0100 Subject: Refactor URL construction a bit BlogHTTPURL and BlogGeminiURL are now used specifically to construct absolute URLs to their respective endpoints. --- src/http/tpl.go | 50 ++++++++++++++++++-------------------------------- 1 file changed, 18 insertions(+), 32 deletions(-) (limited to 'src/http/tpl.go') diff --git a/src/http/tpl.go b/src/http/tpl.go index 5fc54f3..4af715a 100644 --- a/src/http/tpl.go +++ b/src/http/tpl.go @@ -6,6 +6,7 @@ import ( "html/template" "io/fs" "net/http" + "net/url" "path/filepath" "strings" "time" @@ -27,28 +28,28 @@ func mustReadTplFile(fileName string) string { return string(b) } -func (a *api) blogURL(path string, abs bool) string { +func (a *api) blogURL(base *url.URL, path string, abs bool) string { // filepath.Join strips trailing slash, but we want to keep it trailingSlash := strings.HasSuffix(path, "/") - res := filepath.Join("/", a.params.PublicURL.Path, path) + path = filepath.Join("/", base.Path, path) - if trailingSlash && res != "/" { - res += "/" + if trailingSlash && path != "/" { + path += "/" } - if abs { - u := *a.params.PublicURL - u.Path = res - res = u.String() + if !abs { + return path } - return res + u := *base + u.Path = path + return u.String() } func (a *api) postURL(id string, abs bool) string { path := filepath.Join("posts", id) - return a.blogURL(path, abs) + return a.blogURL(a.params.PublicURL, path, abs) } func (a *api) editPostURL(id string, abs bool) string { @@ -56,21 +57,21 @@ func (a *api) editPostURL(id string, abs bool) string { } func (a *api) managePostsURL(abs bool) string { - return a.blogURL("posts?method=manage", abs) + return a.blogURL(a.params.PublicURL, "posts?method=manage", abs) } func (a *api) manageAssetsURL(abs bool) string { - return a.blogURL("assets?method=manage", abs) + return a.blogURL(a.params.PublicURL, "assets?method=manage", abs) } func (a *api) assetURL(id string, abs bool) string { path := filepath.Join("assets", id) - return a.blogURL(path, false) + return a.blogURL(a.params.PublicURL, path, false) } func (a *api) draftPostURL(id string, abs bool) string { path := filepath.Join("drafts", id) - return a.blogURL(path, abs) + return a.blogURL(a.params.PublicURL, path, abs) } func (a *api) editDraftPostURL(id string, abs bool) string { @@ -78,36 +79,20 @@ func (a *api) editDraftPostURL(id string, abs bool) string { } func (a *api) manageDraftPostsURL(abs bool) string { - return a.blogURL("drafts", abs) + "?method=manage" + return a.blogURL(a.params.PublicURL, "drafts", abs) + "?method=manage" } func (a *api) draftsURL(abs bool) string { - return a.blogURL("drafts", abs) + return a.blogURL(a.params.PublicURL, "drafts", abs) } func (a *api) tplFuncs() template.FuncMap { return template.FuncMap{ - "BlogURL": func(path string) string { - return a.blogURL(path, false) - }, - "BlogURLAbs": func(path string) string { - return a.blogURL(path, true) - }, - "StaticURL": func(path string) string { - path = filepath.Join("static", path) - return a.blogURL(path, false) - }, "StaticInlineCSS": func(path string) (template.CSS, error) { path = filepath.Join("static", path) b, err := staticFS.ReadFile(path) return template.CSS(b), err }, - "PostURL": func(id string) string { - return a.postURL(id, false) - }, - "AssetURL": func(id string) string { - return a.assetURL(id, false) - }, "DraftURL": func(id string) string { return a.draftPostURL(id, false) }, @@ -121,6 +106,7 @@ func (a *api) parseTpl(name, tplBody string) (*template.Template, error) { tpl := template.New(name) tpl = tpl.Funcs(a.tplFuncs()) + tpl = tpl.Funcs(template.FuncMap(a.postPreprocessFuncs().ToFuncMap())) var err error -- cgit v1.2.3