summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBrian Picciano <mediocregopher@gmail.com>2023-01-23 21:44:10 +0100
committerBrian Picciano <mediocregopher@gmail.com>2023-01-23 21:44:10 +0100
commit024f51488614919240a71cae1cae1c8fe6df1229 (patch)
treef423fd10b1bdfcfc9fe700c4ae31254f2380a557 /src
parent26dbc6691dbe038cbbbeb11195678d77693b335d (diff)
Add BlogHTTPURL preprocess function
Diffstat (limited to 'src')
-rw-r--r--src/gmi/tpl.go28
-rw-r--r--src/http/posts.go3
-rw-r--r--src/post/preprocess.go17
3 files changed, 31 insertions, 17 deletions
diff --git a/src/gmi/tpl.go b/src/gmi/tpl.go
index 8f4c3be..566ace0 100644
--- a/src/gmi/tpl.go
+++ b/src/gmi/tpl.go
@@ -134,11 +134,12 @@ func (r renderer) Add(a, b int) int { return a + b }
func (a *api) tplHandler() (gemini.Handler, error) {
- blogURL := func(path string, abs bool) string {
+ blogURL := func(base *url.URL, path string, abs bool) string {
+
// filepath.Join strips trailing slash, but we want to keep it
trailingSlash := strings.HasSuffix(path, "/")
- path = filepath.Join("/", a.params.PublicURL.Path, path)
+ path = filepath.Join("/", base.Path, path)
if trailingSlash && path != "/" {
path += "/"
@@ -148,27 +149,29 @@ func (a *api) tplHandler() (gemini.Handler, error) {
return path
}
- u := *a.params.PublicURL
+ u := *base
u.Path = path
return u.String()
}
preprocessFuncs := post.PreprocessFunctions{
BlogURL: func(path string) string {
- return blogURL(path, false)
+ return blogURL(a.params.PublicURL, path, false)
+ },
+ BlogHTTPURL: func(path string) string {
+ return blogURL(a.params.HTTPPublicURL, path, true)
},
AssetURL: func(id string) string {
path := filepath.Join("assets", id)
- return blogURL(path, false)
+ return blogURL(a.params.PublicURL, path, false)
},
PostURL: func(id string) string {
path := filepath.Join("posts", id) + ".gmi"
- return blogURL(path, false)
+ return blogURL(a.params.PublicURL, path, false)
},
StaticURL: func(path string) string {
- httpPublicURL := *a.params.HTTPPublicURL
- httpPublicURL.Path = filepath.Join(httpPublicURL.Path, "/static", path)
- return httpPublicURL.String()
+ path = filepath.Join("static", path)
+ return blogURL(a.params.HTTPPublicURL, path, true)
},
Image: func(args ...string) (string, error) {
@@ -181,7 +184,8 @@ func (a *api) tplHandler() (gemini.Handler, error) {
descr = args[1]
}
- path := blogURL(filepath.Join("assets", id), false)
+ path := filepath.Join("assets", id)
+ path = blogURL(a.params.PublicURL, path, false)
return fmt.Sprintf("\n=> %s %s", path, descr), nil
},
@@ -193,11 +197,11 @@ func (a *api) tplHandler() (gemini.Handler, error) {
allTpls.Funcs(template.FuncMap{
"BlogURLAbs": func(path string) string {
- return blogURL(path, true)
+ return blogURL(a.params.PublicURL, path, true)
},
"PostURLAbs": func(id string) string {
path := filepath.Join("posts", id) + ".gmi"
- return blogURL(path, true)
+ return blogURL(a.params.PublicURL, path, true)
},
})
diff --git a/src/http/posts.go b/src/http/posts.go
index bb1c899..8cb8472 100644
--- a/src/http/posts.go
+++ b/src/http/posts.go
@@ -72,6 +72,9 @@ func (a *api) postToPostTplPayload(storedPost post.StoredPost) (postTplPayload,
BlogURL: func(path string) string {
return a.blogURL(path, false)
},
+ BlogHTTPURL: func(path string) string {
+ return a.blogURL(path, false)
+ },
AssetURL: func(id string) string {
return a.assetURL(id, false)
},
diff --git a/src/post/preprocess.go b/src/post/preprocess.go
index 424c7b8..3ec54ca 100644
--- a/src/post/preprocess.go
+++ b/src/post/preprocess.go
@@ -17,6 +17,12 @@ type PreprocessFunctions struct {
// The given path should not have a leading slash.
BlogURL func(path string) string
+ // BlogURL returns the given string, rooted to the base URL of the blog's
+ // HTTP server (which may or may not include path components itself).
+ //
+ // The given path should not have a leading slash.
+ BlogHTTPURL func(path string) string
+
// AssetURL returns the URL of the asset with the given ID.
AssetURL func(id string) string
@@ -39,11 +45,12 @@ type PreprocessFunctions struct {
func (funcs PreprocessFunctions) ToFuncsMap() template.FuncMap {
return template.FuncMap{
- "BlogURL": funcs.BlogURL,
- "AssetURL": funcs.AssetURL,
- "PostURL": funcs.PostURL,
- "StaticURL": funcs.StaticURL,
- "Image": funcs.Image,
+ "BlogURL": funcs.BlogURL,
+ "BlogHTTPURL": funcs.BlogHTTPURL,
+ "AssetURL": funcs.AssetURL,
+ "PostURL": funcs.PostURL,
+ "StaticURL": funcs.StaticURL,
+ "Image": funcs.Image,
}
}