summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--roseh.moe.go61
-rw-r--r--templates/index.html.template2
-rw-r--r--templates/outline.html.template2
3 files changed, 40 insertions, 25 deletions
diff --git a/roseh.moe.go b/roseh.moe.go
index f159692..932579f 100644
--- a/roseh.moe.go
+++ b/roseh.moe.go
@@ -55,6 +55,26 @@ var (
blogPostFiles embed.FS
)
+func posts() []string {
+ postFiles, err := blogPostFiles.ReadDir("templates/blog/posts")
+ if err != nil {
+ log.Fatalf("blog posts: %s", err)
+ }
+ posts := make([]string, len(postFiles))
+ for i, f := range postFiles {
+ posts[i] = strings.TrimSuffix(f.Name(), ".html.template")
+ }
+ return posts
+}
+
+func postName(post string) string {
+ postBytes, err := blogPostFiles.ReadFile("templates/blog/posts/" + post + ".html.template")
+ if err != nil {
+ log.Fatalf("blog post %q: %s", post, err)
+ }
+ return string(bytes.TrimSuffix(bytes.TrimPrefix(postBytes[:bytes.IndexByte(postBytes, '\n')], []byte("<h1>")), []byte("</h1>")))
+}
+
func preloadBlogPosts() map[string][]byte {
base, err := outlineTemplate.Clone()
if err != nil {
@@ -64,29 +84,29 @@ func preloadBlogPosts() map[string][]byte {
if err != nil {
log.Fatalf("post.html.template: invalid template: %s", err)
}
- postTemplates, err := blogPostFiles.ReadDir("templates/blog/posts")
- if err != nil {
- log.Fatalf("blog posts: %s", err)
- }
- posts := make(map[string][]byte, len(postTemplates))
- for _, post := range postTemplates {
+ postSlugs := posts()
+ posts := make(map[string][]byte, len(postSlugs))
+ for _, post := range postSlugs {
postTemplate, err := base.Clone()
if err != nil {
log.Fatalf("base.Clone: %s", err)
}
- postString, err := blogPostFiles.ReadFile("templates/blog/posts/" + post.Name())
+ postString, err := blogPostFiles.ReadFile("templates/blog/posts/" + post + ".html.template")
if err != nil {
log.Fatalf("somehow I fucked the paths up: %s", err)
}
postTemplate, err = postTemplate.New("post").Parse(string(postString))
if err != nil {
- log.Fatalf("%q: invalid template: %s", post.Name(), err)
+ log.Fatalf("%q: invalid template: %s", post, err)
+ }
+ type args struct {
+ Title string
}
buf := new(bytes.Buffer)
- if err := postTemplate.ExecuteTemplate(buf, "outline", nil); err != nil {
- log.Fatalf("%q: error: %s", post.Name(), err)
+ if err := postTemplate.ExecuteTemplate(buf, "outline", args{Title: postName(post)}); err != nil {
+ log.Fatalf("%q: error: %s", post, err)
}
- posts[strings.TrimSuffix(post.Name(), ".html.template")] = buf.Bytes()
+ posts[post] = buf.Bytes()
}
return posts
}
@@ -112,26 +132,21 @@ func preloadIndex() []byte {
}
base.Funcs(template.FuncMap{
"name": func(post string) string {
- postBytes, err := blogPostFiles.ReadFile("templates/blog/posts/" + post + ".html.template")
- if err != nil {
- log.Fatalf("no such post %q: %s", post, err)
- }
- date := post[:strings.IndexByte(post, '_')]
- firstLine := postBytes[:bytes.IndexByte(postBytes, '\n')]
- return date + ": " + string(bytes.TrimSuffix(bytes.TrimPrefix(firstLine, []byte("<h1>")), []byte("</h1>")))
+ return post[:strings.IndexByte(post, '_')] + ": " + postName(post)
},
})
indexTemplate, err := base.New("body").Parse(indexString)
if err != nil {
log.Fatalf("index.html.template: invalid template: %s", err)
}
- posts := make([]string, 0, len(blogPostsHTML))
- for p := range blogPostsHTML {
- posts = append(posts, p)
- }
+ posts := posts()
slices.SortFunc(posts, func(x, y string) int { return strings.Compare(y, x) })
+ type args struct {
+ Title string
+ Posts []string
+ }
buf := new(bytes.Buffer)
- if err := indexTemplate.ExecuteTemplate(buf, "outline", posts); err != nil {
+ if err := indexTemplate.ExecuteTemplate(buf, "outline", args{Title: "roseh.moe", Posts: posts}); err != nil {
log.Fatalf("index.html.template: error: %s", err)
}
return buf.Bytes()
diff --git a/templates/index.html.template b/templates/index.html.template
index 0d83073..5c8d11b 100644
--- a/templates/index.html.template
+++ b/templates/index.html.template
@@ -10,7 +10,7 @@
<p><a href="/pong">Games?</a> (Warning: loud)</p>
</article>
-{{range .}}
+{{range .Posts}}
<article>
<a href="/blog/{{.}}"><h2>{{name .}}</h2></a>
</article>
diff --git a/templates/outline.html.template b/templates/outline.html.template
index 960a880..be739c3 100644
--- a/templates/outline.html.template
+++ b/templates/outline.html.template
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="en">
<head>
- <title>rose.moe</title>
+ <title>{{.Title}}</title>
<link rel="icon" href="/static/icon.png">
<link rel="stylesheet" href="/static/styles.css">
</head>