website/lib/Render/Head.rakumod

68 lines
2.4 KiB
Raku

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>;
]
}
sub site-header(BlogMeta:D $meta) is export {
sub header-link($name, $path, $icon) {
a :href("$path"), [
icon $icon;
'&nbsp;';
span $name;
]
}
header :class<site-header>, [
div :class<site-logo>, [
# TODO: Use a real image here
$meta.title
];
div :class<site-tagline>, [
$meta.tagline
];
div :class<header-links>, [
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';
];
]
}