Add image/asset inclusion #2

Merged
jolheiser merged 1 commits from image into main 2022-07-07 20:16:17 +00:00
5 changed files with 56 additions and 4 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,9 @@
---
title = "Cool"
date = 2022-07-07
tags = ["gopher", "cool"]
---
# Cool
![gophercool](./gophercool.png)

View File

@ -1,7 +1,9 @@
package router package router
import ( import (
"fmt"
"net/http" "net/http"
"path/filepath"
"go.jolheiser.com/blog/post" "go.jolheiser.com/blog/post"
"go.jolheiser.com/blog/static" "go.jolheiser.com/blog/static"
@ -18,7 +20,10 @@ func New(blog *post.Blog) *chi.Mux {
m.Use(middleware.Recoverer) m.Use(middleware.Recoverer)
m.Get("/", indexHandler(blog)) m.Get("/", indexHandler(blog))
m.Get("/{post}", fileHandler(blog)) m.Route("/{post}", func(r chi.Router) {
r.With(slashesMiddleware).Get("/", fileHandler(blog))
r.Get("/{asset}", assetHandler(blog))
})
m.Route("/_", func(r chi.Router) { m.Route("/_", func(r chi.Router) {
r.Get("/sakura.css", static.SakuraCSS) r.Get("/sakura.css", static.SakuraCSS)
}) })
@ -48,3 +53,41 @@ func fileHandler(blog *post.Blog) http.HandlerFunc {
} }
} }
} }
func assetHandler(blog *post.Blog) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
postName := chi.URLParam(r, "post")
p, ok := blog.Post(postName)
if !ok {
w.WriteHeader(http.StatusNotFound)
return
}
assetName := chi.URLParam(r, "asset")
apn := filepath.Join(filepath.Dir(p.Path), assetName)
http.ServeFile(w, r, apn)
}
}
func slashesMiddleware(next http.Handler) http.Handler {
fn := func(w http.ResponseWriter, r *http.Request) {
var path string
rctx := chi.RouteContext(r.Context())
if rctx != nil && rctx.RoutePath != "" {
path = rctx.RoutePath
} else {
path = r.URL.Path
}
if len(path) > 1 && path[len(path)-1] != '/' {
path += "/"
if r.URL.RawQuery != "" {
path = fmt.Sprintf("%s?%s", path, r.URL.RawQuery)
}
redirectURL := fmt.Sprintf("//%s%s", r.Host, path)
http.Redirect(w, r, redirectURL, 301)
return
}
next.ServeHTTP(w, r)
}
return http.HandlerFunc(fn)
}

View File

@ -22,7 +22,7 @@
<h1 class="title">Blog Posts</h1> <h1 class="title">Blog Posts</h1>
{{range .SortedPosts}} {{range .SortedPosts}}
<h5> <h5>
<a href="{{.Slug}}"><strong>{{.Title}}</strong></a><br/> <a href="{{.Slug}}/"><strong>{{.Title}}</strong></a><br/>
{{if .Author}}<small>@{{.Author}}</small>{{end}}<span class="right">{{.Date.Format "Jan 2, 2006"}}</span><br/> {{if .Author}}<small>@{{.Author}}</small>{{end}}<span class="right">{{.Date.Format "Jan 2, 2006"}}</span><br/>
{{range .Tags}}<code class="tag">{{.}}</code> {{end}} {{range .Tags}}<code class="tag">{{.}}</code> {{end}}
</h5> </h5>

View File

@ -4,10 +4,10 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>{{.Title}}</title> <title>{{.Title}}</title>
<link rel="icon" href="data:,"> <link rel="icon" href="data:,">
<link rel="stylesheet" href="_/sakura.css"/> <link rel="stylesheet" href="../_/sakura.css"/>
</head> </head>
<body> <body>
<a style="position: absolute; left: 1em;" href="../../">Index</a> <a style="position: absolute; left: 1em;" href="../">Index</a>
{{.Content}} {{.Content}}
</body> </body>
<script> <script>