Factor out generate-head
This commit is contained in:
parent
9a87e7825a
commit
68e20af5d7
3 changed files with 67 additions and 44 deletions
|
@ -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<utf-8>;
|
||||
meta :name<viewport>, :content<width=device-width, initial-scale=1>;
|
||||
meta :author :content<Nathan McCarty>;
|
||||
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<preconnect> :href<https://static.stranger.systems>;
|
||||
link :rel<preconnect> :href<https://fonts.googleapis.com>;
|
||||
link :rel<preconnect> :href<https://fonts.gstatic.com> :crossorigin;
|
||||
link :rel<preconnect> :href<https://unpkg.com>;
|
||||
# Load fonts, Iosevka for code, Open Sans for content, and boxicons for
|
||||
# icons
|
||||
link :rel<stylesheet>,
|
||||
:href<https://static.stranger.systems/fonts/Iosevka/Iosevka.css>;
|
||||
link :rel<stylesheet>,
|
||||
:href<https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap>;
|
||||
link :rel<stylesheet>,
|
||||
:href<https://unpkg.com/boxicons@2.1.4/css/boxicons.min.css>;
|
||||
# Link our style sheets
|
||||
link :rel<stylesheet>,
|
||||
:href</resources/colors.css>;
|
||||
link :rel<stylesheet>,
|
||||
:href</resources/main.css>;
|
||||
link :rel<stylesheet>,
|
||||
:href</resources/code.css>;
|
||||
];
|
||||
}
|
||||
|
||||
method site-header(BlogMeta:D $meta) {
|
||||
header :class<site-header>, [
|
||||
div :class<site-logo>, [
|
||||
|
@ -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<post-blurbs>, [
|
||||
|
@ -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<post-blurbs>, [
|
||||
|
@ -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<tags>, [
|
||||
|
@ -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);
|
||||
|
|
42
lib/Render/Head.rakumod
Normal file
42
lib/Render/Head.rakumod
Normal file
|
@ -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<utf-8>;
|
||||
meta :name<viewport>, :content<width=device-width, initial-scale=1>;
|
||||
meta :author :content<Nathan McCarty>;
|
||||
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<preconnect> :href<https://static.stranger.systems>;
|
||||
link :rel<preconnect> :href<https://fonts.googleapis.com>;
|
||||
link :rel<preconnect> :href<https://fonts.gstatic.com> :crossorigin;
|
||||
link :rel<preconnect> :href<https://unpkg.com>;
|
||||
# Load fonts, Iosevka for code, Open Sans for content, and boxicons for
|
||||
# icons
|
||||
link :rel<stylesheet>,
|
||||
:href<https://static.stranger.systems/fonts/Iosevka/Iosevka.css>;
|
||||
link :rel<stylesheet>,
|
||||
:href<https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap>;
|
||||
link :rel<stylesheet>,
|
||||
:href<https://unpkg.com/boxicons@2.1.4/css/boxicons.min.css>;
|
||||
# Link our style sheets
|
||||
link :rel<stylesheet>,
|
||||
:href</resources/colors.css>;
|
||||
link :rel<stylesheet>,
|
||||
:href</resources/main.css>;
|
||||
link :rel<stylesheet>,
|
||||
:href</resources/code.css>;
|
||||
]
|
||||
}
|
18
lib/Render/Util.rakumod
Normal file
18
lib/Render/Util.rakumod
Normal file
|
@ -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 {
|
||||
[]
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue