use v6.e.PREVIEW; use HTML::Functional; use Render::Util; use Render::Head; use Render::Post; use DB::BlogMeta; use DB::Post; unit class Config; method generate-post(Int:D $id, Post:D $post, $db) { my $meta = $db.meta; my $content = $post.render-html; my $head = generate-head($meta, $post.title, $post.description); my $body = body [ site-header $meta; article :class, [ post-header $id, $post, $db; div :class, [ $content; ] ] ]; # TODO: Setup Comments # TODO: Setup footer # my $footer; my $html = html :lang, [ $head, $body ]; show-html $html } method generate-index($db) { my @most-recent = $db.sorted-posts .head(10) .grep(!*.value.hidden) .map(-> $pair { generate-blurb $pair.key, $db }); my $head = generate-head($db.meta); my $body = body [ site-header $db.meta; div :class, [ h1 "Recent Posts" ], @most-recent; ]; my $html = html :lang, [ $head, $body ]; show-html $html } method generate-archive($db) { my @most-recent = $db.sorted-posts .grep(!*.value.hidden) .map(-> $pair { generate-blurb $pair.key, $db }); my $head = generate-head($db.meta); my $body = body [ site-header $db.meta; div :class, [ h1 "All Posts" ], @most-recent; ]; my $html = html :lang, [ $head, $body ]; show-html $html } method generate-tag-blurb($db, $tag, $limit?) { sub post-to-link($id, $post) { my $desc = $post.description; my $link = post-link $id, $post; div :class, [ div :class, [ a :href($link), span [ h3 $post.title; ]; post-info $id, $post, $db; if $desc ~~ Str:D { div :class, [ p $post.description; ]; } else { [] } ]; ] } my @posts = $db.sorted-posts.grep(-> $a { $tag (elem) $a.value.tags }); if $limit { @posts.=head($limit); } if @posts { div :class, [ span :class, [ a :href("/tags/$tag.html"), [ icon 'hash'; $tag; ]; ]; div :class, @posts.map(-> $a {post-to-link $a.key, $a.value}); ] } else { [] } } method generate-tags-page($db, @tags) { my $head = generate-head($db.meta); my $body = body [ site-header $db.meta; div :class, [ h1 "Tags"; ], @tags.map(-> $tag {self.generate-tag-blurb($db, $tag, 4)}); ]; my $html = html :lang, [ $head, $body ]; show-html $html } method generate-tag-page($db, $tag) { my $head = generate-head($db.meta); my $body = body [ site-header $db.meta; self.generate-tag-blurb($db, $tag, 4); ]; my $html = html :lang, [ $head, $body ]; show-html $html }