diff --git a/lib/DB.rakumod b/lib/DB.rakumod index 4fc9288..190b4a3 100644 --- a/lib/DB.rakumod +++ b/lib/DB.rakumod @@ -140,14 +140,16 @@ class PostDB { $tags-dir.add("$tag.html").spurt: $config.generate-tag-page(self, $tag); } - # TODO: Generate the series pages + # Generate the series pages my $series-dir = $out-dir.add('series/'); mkdir $series-dir unless $series-dir.e; for %!series.kv -> $key, $value { $series-dir.add("$key.html").spurt: series-page($key, self); } - # TODO: Generate the main series page + # Generate the main series page + $out-dir.add('series.html').spurt: + series-list-page self; # Render the rss/atom feed my $atom-path = $out-dir.add('atom.xml'); my $atom = posts-to-atom self; diff --git a/lib/Render/Series.rakumod b/lib/Render/Series.rakumod index 0db9a55..add11be 100644 --- a/lib/Render/Series.rakumod +++ b/lib/Render/Series.rakumod @@ -103,3 +103,42 @@ sub series-page(Int:D $series-id, $db) is export { show-html $html; } + +sub series-blurb(Int:D $id, Series:D $series, $db) { + my $link = "/series/$id.html"; + div :class, [ + div :class, [ + a :href($link), span [ + h2 $series.title; + ]; + p $series.desc; + ]; + series-info $series, $db; + ] +} + +sub series-list-page($db) is export { + my @series = $db.series.sort(*.value.latest-post: $db); + my @series-blurbs = (); + for @series -> $pair { + my $id = $pair.key; + my $series = $pair.value; + @series-blurbs.push: + series-blurb $id, $series, $db; + } + + my $head = generate-head($db.meta); + my $body = body [ + site-header $db.meta; + div :class, [ + h1 "All Series" + ], @series-blurbs; + ]; + + my $html = html :lang, [ + $head; + $body; + ]; + + show-html $html; +} diff --git a/resources/colors.css b/resources/colors.css index 2880c7c..42db252 100644 --- a/resources/colors.css +++ b/resources/colors.css @@ -54,10 +54,10 @@ a:visited { color: var(--dim-0); } .post-body, .post-header, .post-blurbs, .tags, .tags .tag-blurb-post, -.series-header, .series-blurbs { +.series-header, .series-blurbs, .series-list { background-color: var(--bg-0); } -.post-blurb, .tags .tag-blurb { +.post-blurb, .tags .tag-blurb, .series-list-blurb { background-color: var(--bg-1); } :not(.tags) .tag-blurb { @@ -66,7 +66,7 @@ a:visited { :not(.tags) .tag-blurb-post { background-color: var(--bg-1); } -.post-title, .post-blurbs h1, .series-header h1 { +.post-title, .post-blurbs h1, .series-header h1, .series-list h1 { color: var(--green); } .post-body h2, .post-body h3, .post-body h4 { diff --git a/resources/main.css b/resources/main.css index 7a78e3f..3617870 100644 --- a/resources/main.css +++ b/resources/main.css @@ -33,7 +33,7 @@ body, .post, .series { align-items: center; gap: var(--box-gap); } -.post, .series { +.post, .series, .series-list { width: 100%; } @@ -108,7 +108,7 @@ body, .post, .series { .post-body h2, .post-body h3, .post-body h4 { text-align: center; } -.post-blurbs, .series-blurbs { +.post-blurbs, .series-blurbs, .series-list { display: flex; flex-direction: column; align-items: center; @@ -118,7 +118,7 @@ body, .post, .series { border-radius: var(--box-radius); box-sizing: border-box; } -.post-blurb { +.post-blurb, .series-list-blurb { width: 100%; display: block; border-radius: var(--box-radius);