Add BlogHTTPURL preprocess function

This commit is contained in:
Brian Picciano 2023-01-23 21:44:10 +01:00
parent 26dbc6691d
commit 024f514886
3 changed files with 31 additions and 17 deletions

View File

@ -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)
},
})

View File

@ -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)
},

View File

@ -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
@ -40,6 +46,7 @@ type PreprocessFunctions struct {
func (funcs PreprocessFunctions) ToFuncsMap() template.FuncMap {
return template.FuncMap{
"BlogURL": funcs.BlogURL,
"BlogHTTPURL": funcs.BlogHTTPURL,
"AssetURL": funcs.AssetURL,
"PostURL": funcs.PostURL,
"StaticURL": funcs.StaticURL,