diff options
| -rw-r--r-- | roseh.moe.go | 61 | ||||
| -rw-r--r-- | templates/index.html.template | 2 | ||||
| -rw-r--r-- | templates/outline.html.template | 2 |
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> |
