Open graph tag generation for posts

This commit is contained in:
Nathan McCarty 2025-02-12 03:38:55 -05:00
parent 585b2be5ab
commit 2862f45d77
5 changed files with 40 additions and 26 deletions

View file

@ -7,17 +7,18 @@ use Render::Util;
use DB::BlogMeta;
sub generate-head(BlogMeta:D $meta, $title?, $description?) is export {
head [
my $final-title = do if $title ~~ Str:D {
"$title {$meta.title}"
} else {
$meta.title
};
[
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;
}
title $final-title;
# Add description, if one exists
optl $description ~~ Str:D, -> {meta :description :content($description)};
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>;

View file

@ -85,7 +85,7 @@ sub series-header(Series:D $series, $db) is export {
sub series-page(Int:D $series-id, $db) is export {
my $meta = $db.meta;
my $series = $db.series{$series-id};
my $head = generate-head($meta, $series.title, $series.desc);
my $head = head [generate-head($meta, $series.title, $series.desc);];
my $body =
body [
site-header $meta;
@ -127,7 +127,7 @@ sub series-list-page($db) is export {
series-blurb $id, $series, $db;
}
my $head = generate-head($db.meta);
my $head = head [generate-head($db.meta);];
my $body = body [
site-header $db.meta;
div :class<series-list>, [

View file

@ -2,6 +2,7 @@ use v6.e.PREVIEW;
unit module Render::Util;
use DB::Post;
use DB::BlogMeta;
use HTML::Functional;
@ -68,3 +69,14 @@ sub intersperse (\element, +list) is export {
take slip element, $_;
}
}
# get the link for a post
sub post-link-abs(BlogMeta:D $meta, Int:D $id, Post:D $post --> Str:D) is export {
my @slugs = $post.all-slugs;
my $base = $meta.get-base-url;
if @slugs.elems {
"$base/posts/by-slug/{@slugs[*-1]}.html"
} else {
"$base/posts/by-id/$id.html"
}
}