From 87e18dbf608dbbd2df7c7656c0e61a837bb49372 Mon Sep 17 00:00:00 2001 From: Nathan McCarty Date: Fri, 7 Feb 2025 02:44:35 -0500 Subject: [PATCH] Factor out and clean up site-header --- lib/Config.rakumod | 63 ++++------------------------------------- lib/Render/Head.rakumod | 26 +++++++++++++++++ lib/Render/Util.rakumod | 6 ++++ 3 files changed, 37 insertions(+), 58 deletions(-) diff --git a/lib/Config.rakumod b/lib/Config.rakumod index 298d2ed..a7982e6 100644 --- a/lib/Config.rakumod +++ b/lib/Config.rakumod @@ -9,55 +9,6 @@ use DB::Post; unit class Config; -method site-header(BlogMeta:D $meta) { - header :class, [ - div :class, [ - # TODO: Use a real image here - $meta.title - ]; - div :class, [ - $meta.tagline - ]; - div :class, [ - a :href, [ - icon 'home'; - ' '; - span [ - 'Home'; - ]; - ]; - a :href, [ - icon 'archive'; - ' '; - span [ - 'Archive'; - ]; - ]; - a :href, [ - icon 'purchase-tag-alt'; - ' '; - span [ - 'Tags'; - ]; - ]; - a :href, [ - icon 'info-circle'; - ' '; - span [ - 'About'; - ]; - ]; - a :href, [ - icon 'rss'; - ' '; - span [ - 'Feed'; - ]; - ]; - ]; - ] -} - method post-date(Post:D $post) { my $datetime = $post.posted-at; my $timestamp = sprintf( @@ -173,7 +124,7 @@ method generate-post(Post:D $post, BlogMeta:D $meta) { my $head = generate-head($meta, $post.title, $post.description); my $body = body [ - self.site-header: $meta; + site-header $meta; article :class, [ self.post-header: $post; div :class, [ @@ -224,7 +175,7 @@ method generate-index($db) { my $head = generate-head($db.meta); my $body = body [ - self.site-header: $db.meta; + site-header $db.meta; div :class, [ h1 "Recent Posts" ], @most-recent; @@ -249,7 +200,7 @@ method generate-archive($db) { my $head = generate-head($db.meta); my $body = body [ - self.site-header: $db.meta; + site-header $db.meta; div :class, [ h1 "All Posts" ], @most-recent; @@ -307,7 +258,7 @@ method generate-tag-blurb($db, $tag, $limit?) { method generate-tags-page($db, @tags) { my $head = generate-head($db.meta); my $body = body [ - self.site-header: $db.meta; + site-header $db.meta; div :class, [ h1 "Tags"; ], @tags.map(-> $tag {self.generate-tag-blurb($db, $tag, 4)}); @@ -325,7 +276,7 @@ method generate-tags-page($db, @tags) { method generate-tag-page($db, $tag) { my $head = generate-head($db.meta); my $body = body [ - self.site-header: $db.meta; + site-header $db.meta; self.generate-tag-blurb($db, $tag, 4); ]; @@ -337,7 +288,3 @@ method generate-tag-page($db, $tag) { "$html" } - -sub icon($icon) { - i(:class("bx bx-$icon")) -} diff --git a/lib/Render/Head.rakumod b/lib/Render/Head.rakumod index a344911..e7eb435 100644 --- a/lib/Render/Head.rakumod +++ b/lib/Render/Head.rakumod @@ -40,3 +40,29 @@ sub generate-head(BlogMeta:D $meta, $title?, $description?) is export { :href; ] } + +sub site-header(BlogMeta:D $meta) is export { + sub header-link($name, $path, $icon) { + a :href("$path"), [ + icon $icon; + ' '; + span $name; + ] + } + header :class, [ + div :class, [ + # TODO: Use a real image here + $meta.title + ]; + div :class, [ + $meta.tagline + ]; + div :class, [ + header-link 'Index', '/index.html', 'home'; + header-link 'Archive', '/archive.html', 'archive'; + header-link 'Tags', '/tags.html', 'purchase-tag-alt'; + header-link 'About', '/about.html', 'info-circle'; + header-link 'Feed', '/atom.xml', 'rss'; + ]; + ] +} diff --git a/lib/Render/Util.rakumod b/lib/Render/Util.rakumod index 4cf7778..244b561 100644 --- a/lib/Render/Util.rakumod +++ b/lib/Render/Util.rakumod @@ -3,6 +3,8 @@ unit module Render::Util; use DB::Post; +use HTML::Functional; + sub opt($test, $item) is export { if $test { $item @@ -29,3 +31,7 @@ sub post-link(Int:D $id, Post:D $post --> Str:D) is export { "/posts/by-id/$id.html" } } + +sub icon($icon) is export { + i(:class("bx bx-$icon")) +}