Open graph tag generation for posts
This commit is contained in:
parent
585b2be5ab
commit
2862f45d77
5 changed files with 40 additions and 26 deletions
|
@ -2,25 +2,15 @@ use v6.e.PREVIEW;
|
||||||
|
|
||||||
use DB::Post;
|
use DB::Post;
|
||||||
use DB::BlogMeta;
|
use DB::BlogMeta;
|
||||||
|
use Render::Util;
|
||||||
|
|
||||||
use XML;
|
use XML;
|
||||||
|
|
||||||
unit module Atom;
|
unit module Atom;
|
||||||
|
|
||||||
# get the link for a post
|
|
||||||
sub post-link(BlogMeta:D $meta, Int:D $id, Post:D $post --> Str:D) {
|
|
||||||
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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#| Convert a single post to an atom item
|
#| Convert a single post to an atom item
|
||||||
sub post-to-item(BlogMeta:D $meta, Int:D $id, Post:D $post --> XML::Element) {
|
sub post-to-item(BlogMeta:D $meta, Int:D $id, Post:D $post --> XML::Element) {
|
||||||
my $link = post-link $meta, $id, $post;
|
my $link = post-link-abs $meta, $id, $post;
|
||||||
my $desc = $post.description;
|
my $desc = $post.description;
|
||||||
my $xml = XML::Element.new(:name<entry>);
|
my $xml = XML::Element.new(:name<entry>);
|
||||||
$xml.append:
|
$xml.append:
|
||||||
|
|
|
@ -13,7 +13,18 @@ unit class Config;
|
||||||
method generate-post(Int:D $id, Post:D $post, $db) {
|
method generate-post(Int:D $id, Post:D $post, $db) {
|
||||||
my $meta = $db.meta;
|
my $meta = $db.meta;
|
||||||
my $content = $post.render-html;
|
my $content = $post.render-html;
|
||||||
my $head = generate-head($meta, $post.title, $post.description);
|
my $head =
|
||||||
|
head [
|
||||||
|
generate-head($meta, $post.title, $post.description);
|
||||||
|
meta :property<og:title>, :content($post.title);
|
||||||
|
meta :property<og:url>, :content(post-link-abs $db.meta, $id, $post);
|
||||||
|
meta :property<og:site_name>, :content($db.meta.title);
|
||||||
|
meta :property<og:type>, :content<article>;
|
||||||
|
meta :property<article:published_time>, :content($post.posted-at);
|
||||||
|
$post.tags.map(-> $tag {
|
||||||
|
meta :property<article:tag>, :content($tag)
|
||||||
|
});
|
||||||
|
];
|
||||||
my $body =
|
my $body =
|
||||||
body [
|
body [
|
||||||
site-header $meta;
|
site-header $meta;
|
||||||
|
@ -45,7 +56,7 @@ method generate-index($db) {
|
||||||
generate-blurb $pair.key, $db
|
generate-blurb $pair.key, $db
|
||||||
});
|
});
|
||||||
|
|
||||||
my $head = generate-head($db.meta);
|
my $head = head [generate-head($db.meta);];
|
||||||
my $body = body [
|
my $body = body [
|
||||||
site-header $db.meta;
|
site-header $db.meta;
|
||||||
div :class<post-blurbs>, [
|
div :class<post-blurbs>, [
|
||||||
|
@ -70,7 +81,7 @@ method generate-archive($db) {
|
||||||
generate-blurb $pair.key, $db
|
generate-blurb $pair.key, $db
|
||||||
});
|
});
|
||||||
|
|
||||||
my $head = generate-head($db.meta);
|
my $head = head [generate-head($db.meta);];
|
||||||
my $body = body [
|
my $body = body [
|
||||||
site-header $db.meta;
|
site-header $db.meta;
|
||||||
div :class<post-blurbs>, [
|
div :class<post-blurbs>, [
|
||||||
|
@ -128,7 +139,7 @@ method generate-tag-blurb($db, $tag, $limit?) {
|
||||||
}
|
}
|
||||||
|
|
||||||
method generate-tags-page($db, @tags) {
|
method generate-tags-page($db, @tags) {
|
||||||
my $head = generate-head($db.meta);
|
my $head = head [generate-head($db.meta);];
|
||||||
my $body = body [
|
my $body = body [
|
||||||
site-header $db.meta;
|
site-header $db.meta;
|
||||||
div :class<tags>, [
|
div :class<tags>, [
|
||||||
|
@ -146,7 +157,7 @@ method generate-tags-page($db, @tags) {
|
||||||
}
|
}
|
||||||
|
|
||||||
method generate-tag-page($db, $tag) {
|
method generate-tag-page($db, $tag) {
|
||||||
my $head = generate-head($db.meta);
|
my $head = head [generate-head($db.meta);];
|
||||||
my $body = body [
|
my $body = body [
|
||||||
site-header $db.meta;
|
site-header $db.meta;
|
||||||
self.generate-tag-blurb($db, $tag, 4);
|
self.generate-tag-blurb($db, $tag, 4);
|
||||||
|
|
|
@ -7,17 +7,18 @@ use Render::Util;
|
||||||
use DB::BlogMeta;
|
use DB::BlogMeta;
|
||||||
|
|
||||||
sub generate-head(BlogMeta:D $meta, $title?, $description?) is export {
|
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 :charset<utf-8>;
|
||||||
meta :name<viewport>, :content<width=device-width, initial-scale=1>;
|
meta :name<viewport>, :content<width=device-width, initial-scale=1>;
|
||||||
meta :author :content<Nathan McCarty>;
|
meta :author :content<Nathan McCarty>;
|
||||||
do if $title ~~ Str:D {
|
title $final-title;
|
||||||
title "$title — {$meta.title}";
|
|
||||||
} else {
|
|
||||||
title $meta.title;
|
|
||||||
}
|
|
||||||
# Add description, if one exists
|
# 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
|
# Preconnect to all our resource sources
|
||||||
link :rel<preconnect> :href<https://static.stranger.systems>;
|
link :rel<preconnect> :href<https://static.stranger.systems>;
|
||||||
link :rel<preconnect> :href<https://fonts.googleapis.com>;
|
link :rel<preconnect> :href<https://fonts.googleapis.com>;
|
||||||
|
|
|
@ -85,7 +85,7 @@ sub series-header(Series:D $series, $db) is export {
|
||||||
sub series-page(Int:D $series-id, $db) is export {
|
sub series-page(Int:D $series-id, $db) is export {
|
||||||
my $meta = $db.meta;
|
my $meta = $db.meta;
|
||||||
my $series = $db.series{$series-id};
|
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 =
|
my $body =
|
||||||
body [
|
body [
|
||||||
site-header $meta;
|
site-header $meta;
|
||||||
|
@ -127,7 +127,7 @@ sub series-list-page($db) is export {
|
||||||
series-blurb $id, $series, $db;
|
series-blurb $id, $series, $db;
|
||||||
}
|
}
|
||||||
|
|
||||||
my $head = generate-head($db.meta);
|
my $head = head [generate-head($db.meta);];
|
||||||
my $body = body [
|
my $body = body [
|
||||||
site-header $db.meta;
|
site-header $db.meta;
|
||||||
div :class<series-list>, [
|
div :class<series-list>, [
|
||||||
|
|
|
@ -2,6 +2,7 @@ use v6.e.PREVIEW;
|
||||||
unit module Render::Util;
|
unit module Render::Util;
|
||||||
|
|
||||||
use DB::Post;
|
use DB::Post;
|
||||||
|
use DB::BlogMeta;
|
||||||
|
|
||||||
use HTML::Functional;
|
use HTML::Functional;
|
||||||
|
|
||||||
|
@ -68,3 +69,14 @@ sub intersperse (\element, +list) is export {
|
||||||
take slip element, $_;
|
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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue