Generate series pages
This commit is contained in:
parent
7cf4827d0c
commit
baf8d6556b
8 changed files with 168 additions and 41 deletions
105
lib/Render/Series.rakumod
Normal file
105
lib/Render/Series.rakumod
Normal file
|
@ -0,0 +1,105 @@
|
|||
use v6.e.PREVIEW;
|
||||
unit module Render::Series;
|
||||
|
||||
use Render::Util;
|
||||
use Render::Head;
|
||||
use Render::Post;
|
||||
use DB::Post;
|
||||
use DB::Series;
|
||||
|
||||
use HTML::Functional;
|
||||
|
||||
sub series-date(Series:D $series, $db) is export {
|
||||
my $datetime = $series.latest-post: $db;
|
||||
if $datetime {
|
||||
my $timestamp = sprintf(
|
||||
"%s %02d:%02d%s",
|
||||
$datetime.yyyy-mm-dd,
|
||||
($datetime.hour % 12) || 12,
|
||||
$datetime.minute,
|
||||
$datetime.hour < 12 ?? 'am' !! 'pm'
|
||||
);
|
||||
|
||||
div :class<series-time>, :title("Latest post made at $timestamp"), [
|
||||
icon 'calendar';
|
||||
' ';
|
||||
$datetime.Date.Str
|
||||
]
|
||||
} else {
|
||||
[]
|
||||
}
|
||||
}
|
||||
|
||||
sub series-read-time(Series:D $series, $db) is export {
|
||||
my @readtimes = $series.post-ids.map(-> $i {$db.posts{$i}.readtimes});
|
||||
my ($slow, $average, $fast) = 0, 0, 0;
|
||||
for @readtimes -> ($s, $a, $f) {
|
||||
$slow += $s;
|
||||
$average += $a;
|
||||
$fast += $f;
|
||||
}
|
||||
div :class<series-read-time>, :title<Estimated read time at 140/180/220 WPM>, [
|
||||
icon 'timer';
|
||||
' ';
|
||||
mins-to-string $slow;
|
||||
' ';
|
||||
'/';
|
||||
' ';
|
||||
mins-to-string $average;
|
||||
' ';
|
||||
'/';
|
||||
' ';
|
||||
mins-to-string $fast;
|
||||
]
|
||||
}
|
||||
|
||||
sub series-count(Series:D $series, $db) is export {
|
||||
my $count = $series.post-ids.elems;
|
||||
div :class<series-article-count>, :title("Series has $count articles"), [
|
||||
icon 'add-to-queue';
|
||||
' ';
|
||||
"$count articles";
|
||||
]
|
||||
}
|
||||
|
||||
sub series-info(Series:D $series, $db) is export {
|
||||
div :class<series-info>, [
|
||||
series-date $series, $db;
|
||||
series-read-time $series, $db;
|
||||
series-count $series, $db;
|
||||
]
|
||||
}
|
||||
|
||||
sub series-header(Series:D $series, $db) is export {
|
||||
header :class<series-header>, [
|
||||
div :class<series-title>, [
|
||||
h1 $series.title;
|
||||
];
|
||||
div :class<series-desc>, [
|
||||
p $series.desc;
|
||||
];
|
||||
series-info $series, $db;
|
||||
]
|
||||
}
|
||||
|
||||
sub series-page(Int:D $series-id, $db) is export {
|
||||
my $meta = $db.meta;
|
||||
my $series = $db.series{$series-id};
|
||||
my $head = generate-head($meta, $series.title, $series.desc);
|
||||
my $body =
|
||||
body [
|
||||
site-header $meta;
|
||||
article :class<series>, [
|
||||
series-header $series, $db;
|
||||
div :class<series-blurbs>,
|
||||
$series.post-ids.map(*.&generate-blurb($db));
|
||||
]
|
||||
];
|
||||
|
||||
my $html = html :lang<en>, [
|
||||
$head;
|
||||
$body
|
||||
];
|
||||
|
||||
show-html $html;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue