From 68e20af5d7de3bd4edb1edec6f37008939ee0cdb Mon Sep 17 00:00:00 2001 From: Nathan McCarty Date: Fri, 7 Feb 2025 02:26:17 -0500 Subject: [PATCH] Factor out generate-head --- lib/Config.rakumod | 51 ++++++----------------------------------- lib/Render/Head.rakumod | 42 +++++++++++++++++++++++++++++++++ lib/Render/Util.rakumod | 18 +++++++++++++++ 3 files changed, 67 insertions(+), 44 deletions(-) create mode 100644 lib/Render/Head.rakumod create mode 100644 lib/Render/Util.rakumod diff --git a/lib/Config.rakumod b/lib/Config.rakumod index 6fd7525..838d8c0 100644 --- a/lib/Config.rakumod +++ b/lib/Config.rakumod @@ -1,50 +1,13 @@ use v6.e.PREVIEW; use HTML::Functional; + +use Render::Head; use DB::BlogMeta; use DB::Post; unit class Config; -method generate-head($title, BlogMeta:D $meta, $description?) { - head [ - meta :charset; - meta :name, :content; - meta :author :content; - do if $title ~~ Str:D { - title "$title — {$meta.title}"; - } else { - title $meta.title; - } - # Add description, if one exists - do if $description ~~ Str:D { - meta :description :content($description) - } else { - [] - } - # Preconnect to all our resource sources - link :rel :href; - link :rel :href; - link :rel :href :crossorigin; - link :rel :href; - # Load fonts, Iosevka for code, Open Sans for content, and boxicons for - # icons - link :rel, - :href; - link :rel, - :href; - link :rel, - :href; - # Link our style sheets - link :rel, - :href; - link :rel, - :href; - link :rel, - :href; - ]; -} - method site-header(BlogMeta:D $meta) { header :class, [ div :class, [ @@ -206,7 +169,7 @@ method post-header(Post:D $post) { # TODO: Support GFM admonitions method generate-post(Post:D $post, BlogMeta:D $meta) { my $content = $post.render-html; - my $head = self.generate-head($post.title, $meta, $post.description); + my $head = generate-head($meta, $post.title, $post.description); my $body = body [ self.site-header: $meta; @@ -264,7 +227,7 @@ method generate-index($db) { self.generate-blurb: $pair.key, $db }); - my $head = self.generate-head(Nil, $db.meta); + my $head = generate-head($db.meta); my $body = body [ self.site-header: $db.meta; div :class, [ @@ -289,7 +252,7 @@ method generate-archive($db) { self.generate-blurb: $pair.key, $db }); - my $head = self.generate-head(Nil, $db.meta); + my $head = generate-head($db.meta); my $body = body [ self.site-header: $db.meta; div :class, [ @@ -353,7 +316,7 @@ method generate-tag-blurb($db, $tag, $limit?) { } method generate-tags-page($db, @tags) { - my $head = self.generate-head(Nil, $db.meta); + my $head = generate-head($db.meta); my $body = body [ self.site-header: $db.meta; div :class, [ @@ -371,7 +334,7 @@ method generate-tags-page($db, @tags) { } method generate-tag-page($db, $tag) { - my $head = self.generate-head(Nil, $db.meta); + my $head = generate-head($db.meta); my $body = body [ self.site-header: $db.meta; self.generate-tag-blurb($db, $tag, 4); diff --git a/lib/Render/Head.rakumod b/lib/Render/Head.rakumod new file mode 100644 index 0000000..a344911 --- /dev/null +++ b/lib/Render/Head.rakumod @@ -0,0 +1,42 @@ +use v6.e.PREVIEW; +unit module Render::Head; + +use HTML::Functional; + +use Render::Util; +use DB::BlogMeta; + +sub generate-head(BlogMeta:D $meta, $title?, $description?) is export { + head [ + meta :charset; + meta :name, :content; + meta :author :content; + do if $title ~~ Str:D { + title "$title — {$meta.title}"; + } else { + title $meta.title; + } + # Add description, if one exists + optl $description ~~ Str:D, -> {meta :description :content($description)}; + # Preconnect to all our resource sources + link :rel :href; + link :rel :href; + link :rel :href :crossorigin; + link :rel :href; + # Load fonts, Iosevka for code, Open Sans for content, and boxicons for + # icons + link :rel, + :href; + link :rel, + :href; + link :rel, + :href; + # Link our style sheets + link :rel, + :href; + link :rel, + :href; + link :rel, + :href; + ] +} diff --git a/lib/Render/Util.rakumod b/lib/Render/Util.rakumod new file mode 100644 index 0000000..5a24dd6 --- /dev/null +++ b/lib/Render/Util.rakumod @@ -0,0 +1,18 @@ +use v6.e.PREVIEW; +unit module Render::Util; + +sub opt($test, $item) is export { + if $test { + $item + } else { + [] + } +} + +sub optl($test, &item) is export { + if $test { + item + } else { + [] + } +}