diff options
author | Brian Picciano <mediocregopher@gmail.com> | 2022-05-17 13:52:18 -0600 |
---|---|---|
committer | Brian Picciano <mediocregopher@gmail.com> | 2022-05-17 13:52:18 -0600 |
commit | e742a2d6d5b75bce14a9be688c47c88807cfe94b (patch) | |
tree | a87e5e2fa64b88958d22a5ac58ca1b1c1cb85537 /srv | |
parent | 0fdece68c07836a566909d75a7f3836f229334b5 (diff) |
Add BlogURL template function
Diffstat (limited to 'srv')
-rw-r--r-- | srv/src/api/api.go | 4 | ||||
-rw-r--r-- | srv/src/api/render.go | 16 | ||||
-rw-r--r-- | srv/src/api/tpl/base.html | 7 | ||||
-rw-r--r-- | srv/src/cmd/mediocre-blog/main.go | 7 |
4 files changed, 27 insertions, 7 deletions
diff --git a/srv/src/api/api.go b/srv/src/api/api.go index 37ea1fc..7323d29 100644 --- a/srv/src/api/api.go +++ b/srv/src/api/api.go @@ -26,6 +26,10 @@ type Params struct { Logger *mlog.Logger PowManager pow.Manager + // PathPrefix, if given, will be prefixed to all url paths which are + // rendered by the API's templating system. + PathPrefix string + PostStore post.Store PostAssetStore post.AssetStore diff --git a/srv/src/api/render.go b/srv/src/api/render.go index cacdb26..2b6b5a0 100644 --- a/srv/src/api/render.go +++ b/srv/src/api/render.go @@ -20,7 +20,7 @@ import ( //go:embed tpl var tplFS embed.FS -func mustParseTpl(name string) *template.Template { +func (a *api) mustParseTpl(name string) *template.Template { mustRead := func(fileName string) string { path := filepath.Join("tpl", fileName) @@ -33,7 +33,15 @@ func mustParseTpl(name string) *template.Template { return string(b) } - tpl := template.Must(template.New("").Parse(mustRead(name))) + blogURL := func(path string) string { + return filepath.Join(a.params.PathPrefix, "/v2", path) + } + + tpl := template.New("").Funcs(template.FuncMap{ + "BlogURL": blogURL, + }) + + tpl = template.Must(tpl.Parse(mustRead(name))) tpl = template.Must(tpl.New("base.html").Parse(mustRead("base.html"))) return tpl @@ -41,7 +49,7 @@ func mustParseTpl(name string) *template.Template { func (a *api) renderIndexHandler() http.Handler { - tpl := mustParseTpl("index.html") + tpl := a.mustParseTpl("index.html") const pageCount = 10 return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { @@ -95,7 +103,7 @@ func (a *api) renderIndexHandler() http.Handler { func (a *api) renderPostHandler() http.Handler { - tpl := mustParseTpl("post.html") + tpl := a.mustParseTpl("post.html") return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { diff --git a/srv/src/api/tpl/base.html b/srv/src/api/tpl/base.html index bf81032..6031919 100644 --- a/srv/src/api/tpl/base.html +++ b/srv/src/api/tpl/base.html @@ -18,7 +18,7 @@ <div class="row"> <div class="seven columns" style="margin-bottom: 3rem;"> <h1 class="title"> - <a href="/">Mediocre Blog</a> + <a href="{{ BlogURL "/" }}">Mediocre Blog</a> </h1> <div class="light social"> <span>By Brian Picciano</span> @@ -31,13 +31,14 @@ <div class="five columns light"> <span style="display:block; margin-bottom:0.5rem;">Get notified when new posts are published!</span> - <a href="/follow.html"> + <a href="{{ BlogURL "follow.html" }}"> <button class="button-primary"> <i class="far fa-envelope"></i> Follow </button> </a> - <a href="/feed.xml"> + + <a href="{{ BlogURL "feed.xml" }}"> <button class="button"> <i class="fas fa-rss"></i> RSS diff --git a/srv/src/cmd/mediocre-blog/main.go b/srv/src/cmd/mediocre-blog/main.go index 2660ea4..092c4da 100644 --- a/srv/src/cmd/mediocre-blog/main.go +++ b/srv/src/cmd/mediocre-blog/main.go @@ -53,6 +53,8 @@ func main() { chatGlobalRoomMaxMsgs := cfg.Int("chat-global-room-max-messages", 1000, "Maximum number of messages the global chat room can retain") chatUserIDCalcSecret := cfg.String("chat-user-id-calc-secret", "", "Secret to use when calculating user ids") + pathPrefix := cfg.String("path-prefix", "", "Prefix which is optionally applied to all URL paths rendered by the blog") + // initialization err := cfg.Init(ctx) @@ -70,6 +72,10 @@ func main() { "chatGlobalRoomMaxMsgs", *chatGlobalRoomMaxMsgs, ) + if *pathPrefix != "" { + ctx = mctx.Annotate(ctx, "pathPrefix", *pathPrefix) + } + clock := clock.Realtime() powStore := pow.NewMemoryStore(clock) @@ -124,6 +130,7 @@ func main() { apiParams.Logger = logger.WithNamespace("api") apiParams.PowManager = powMgr + apiParams.PathPrefix = *pathPrefix apiParams.PostStore = postStore apiParams.PostAssetStore = postAssetStore apiParams.MailingList = ml |