diff options
| author | Rose Hogenson <rosehogenson@posteo.net> | 2024-10-23 07:03:22 -0700 |
|---|---|---|
| committer | Rose Hogenson <rosehogenson@posteo.net> | 2024-10-23 07:03:22 -0700 |
| commit | 44645b7ec78750ee61e9f65313242788c324437d (patch) | |
| tree | 21b13915b014663adf58f5cb9c611ac0a289490c /roseh.moe.go | |
| parent | Fix some bugs in how blog posts are rendered. (diff) | |
| download | roseh.moe-44645b7ec78750ee61e9f65313242788c324437d.tar.zst | |
Fix the page title for blog posts.
Diffstat (limited to 'roseh.moe.go')
| -rw-r--r-- | roseh.moe.go | 61 |
1 files changed, 38 insertions, 23 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() |
