summaryrefslogtreecommitdiff
path: root/src/http/tpl.go
diff options
context:
space:
mode:
authorBrian Picciano <mediocregopher@gmail.com>2023-01-24 12:40:32 +0100
committerBrian Picciano <mediocregopher@gmail.com>2023-01-24 12:45:10 +0100
commit6b3933282e3aa9803636b2ba580aced5c202eaa9 (patch)
treeafee0d9661e964a3f6f2f782bd959333c4cdaa09 /src/http/tpl.go
parent63cc6cb217dadc2fa5aa8d55e054cdbad14df60a (diff)
Refactor URL construction a bit
BlogHTTPURL and BlogGeminiURL are now used specifically to construct absolute URLs to their respective endpoints.
Diffstat (limited to 'src/http/tpl.go')
-rw-r--r--src/http/tpl.go50
1 files changed, 18 insertions, 32 deletions
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