diff --git a/post.go b/post.go
index 966a00b..c280072 100644
--- a/post.go
+++ b/post.go
@@ -3,6 +3,7 @@ package main
import (
"bytes"
"fmt"
+ "io"
"log"
"os"
"sort"
@@ -31,7 +32,7 @@ type Post struct {
Slug string
Metadata Metadata
Contents string
- Image bytes.Buffer
+ Image []byte
}
func newPost(slug string) (*Post, error) {
@@ -75,10 +76,15 @@ func newPost(slug string) (*Post, error) {
}
url := blogURL + "/" + slug
- err = createImage(post.Metadata.Title, post.Metadata.Summary, url, &post.Image)
+ var buf bytes.Buffer
+ err = createImage(post.Metadata.Title, post.Metadata.Summary, url, &buf)
if err != nil {
return nil, fmt.Errorf("could not create post image: %v", err)
}
+ post.Image, err = io.ReadAll(&buf)
+ if err != nil {
+ return nil, err
+ }
return post, nil
}
diff --git a/server.go b/server.go
index 43608a6..2ea124b 100644
--- a/server.go
+++ b/server.go
@@ -26,7 +26,7 @@ type server struct {
templates map[string]*raymond.Template
postList
styles map[string]string
- homeImage bytes.Buffer
+ homeImage []byte
}
func newServer() (*server, error) {
@@ -34,7 +34,12 @@ func newServer() (*server, error) {
staticHandler: http.FileServer(http.Dir("static/")),
}
- err := createImage(blogTitle, blogSummary, blogURL, &s.homeImage)
+ var imgBuffer bytes.Buffer
+ err := createImage(blogTitle, blogSummary, blogURL, &imgBuffer)
+ if err != nil {
+ return nil, err
+ }
+ s.homeImage, err = io.ReadAll(&imgBuffer)
if err != nil {
return nil, err
}
@@ -109,7 +114,7 @@ func (s *server) router(res http.ResponseWriter, req *http.Request) {
return
}
if slug == "about.png" {
- s.renderImage(res, req, &s.homeImage)
+ s.renderImage(res, req, s.homeImage)
return
}
@@ -118,7 +123,7 @@ func (s *server) router(res http.ResponseWriter, req *http.Request) {
s.postPage(p, res, req)
return
} else if slug == p.Slug+"/about.png" {
- s.renderImage(res, req, &p.Image)
+ s.renderImage(res, req, p.Image)
return
}
}
@@ -140,11 +145,12 @@ func (s *server) errorInRequest(res http.ResponseWriter, req *http.Request, err
log.Printf("ERR %s: %s", req.URL.Path, err)
}
-func (s *server) createWebPage(title, subtitle, contents string) (string, error) {
+func (s *server) createWebPage(title, subtitle, contents, path string) (string, error) {
ctx := map[string]interface{}{
"title": title,
"subtitle": subtitle,
"contents": contents,
+ "path": blogURL + path,
}
return s.templates["page"].Exec(ctx)
}
@@ -155,7 +161,7 @@ func (s *server) postPage(p *Post, res http.ResponseWriter, req *http.Request) {
if err != nil {
s.errorInRequest(res, req, err)
}
- page, err := s.createWebPage(p.Metadata.Title, p.Metadata.Summary, contents)
+ page, err := s.createWebPage(p.Metadata.Title, p.Metadata.Summary, contents, req.URL.Path)
if err != nil {
s.errorInRequest(res, req, err)
}
@@ -175,7 +181,7 @@ func (s *server) homePage(res http.ResponseWriter, req *http.Request) {
posts = posts + summary
}
- page, err := s.createWebPage("Home", blogSummary, posts)
+ page, err := s.createWebPage("Home", blogSummary, posts, "")
if err != nil {
s.errorInRequest(res, req, err)
@@ -184,12 +190,9 @@ func (s *server) homePage(res http.ResponseWriter, req *http.Request) {
res.Write([]byte(page))
}
-func (s *server) renderImage(res http.ResponseWriter, req *http.Request, img io.Reader) {
+func (s *server) renderImage(res http.ResponseWriter, req *http.Request, img []byte) {
res.Header().Add("content-type", "image/png")
- _, err := io.Copy(res, img)
- if err != nil {
- s.errorInRequest(res, req, err)
- }
+ res.Write(img)
}
func (s *server) loadStylesheet(res http.ResponseWriter, req *http.Request, filename string) (ok bool) {
@@ -203,8 +206,9 @@ func (s *server) loadStylesheet(res http.ResponseWriter, req *http.Request, file
}
func createImage(title, summary, url string, out io.Writer) error {
- imgWidth, imgPaddingX, imgPaddingY := 800, 30, 60
- titleSize, summarySize, urlSize := 42.0, 28.0, 18.0
+ imgWidth, imgPaddingX, imgPaddingY := 1200, 45, 90
+ accentHeight := 7.5
+ titleSize, summarySize, urlSize := 63.0, 42.0, 27.0
lineHeight := 1.5
textWidth := float64(imgWidth - 2*imgPaddingX)
@@ -245,7 +249,6 @@ func createImage(title, summary, url string, out io.Writer) error {
draw.DrawRectangle(0, 0, float64(imgWidth), float64(imgHeight))
draw.Fill()
draw.SetHexColor("#3498db")
- accentHeight := 5.0
draw.DrawRectangle(0, float64(imgHeight)-accentHeight, float64(imgWidth), accentHeight)
draw.Fill()
diff --git a/templates/page.html b/templates/page.html
index 8658c56..dba8e80 100644
--- a/templates/page.html
+++ b/templates/page.html
@@ -8,7 +8,7 @@
-
+