forked from cadey/xesite
153 lines
5.4 KiB
HTML
153 lines
5.4 KiB
HTML
@use super::{header_html, footer_html};
|
|
@use crate::post::Post;
|
|
|
|
@(post: Post, body: impl ToHtml)
|
|
|
|
@:header_html(Some(&post.front_matter.title.clone()), None)
|
|
|
|
<!-- Twitter -->
|
|
<meta name="twitter:card" content="summary" />
|
|
<meta name="twitter:site" content="@@theprincessxena" />
|
|
<meta name="twitter:title" content="@post.front_matter.title" />
|
|
<meta name="twitter:description" content="Posted on @post.date.format("%Y-%m-%d")" />
|
|
|
|
<!-- Facebook -->
|
|
<meta property="og:type" content="website" />
|
|
<meta property="og:title" content="@post.front_matter.title" />
|
|
<meta property="og:site_name" content="Xe's Blog" />
|
|
|
|
<!-- Description -->
|
|
<meta name="description" content="@post.front_matter.title - Xe's Blog" />
|
|
<meta name="author" content="Xe">
|
|
|
|
@if post.front_matter.redirect_to.is_none() {
|
|
<link rel="canonical" href="https://christine.website/@post.link">
|
|
}
|
|
|
|
<script type="application/ld+json">
|
|
@{
|
|
"@@context": "http://schema.org",
|
|
"@@type": "Article",
|
|
"headline": "@post.front_matter.title",
|
|
"image": "https://christine.website/static/img/avatar.png",
|
|
"url": "https://christine.website/@post.link",
|
|
"datePublished": "@post.date.format("%Y-%m-%d")",
|
|
"mainEntityOfPage": @{
|
|
"@@type": "WebPage",
|
|
"@@id": "https://christine.website/@post.link"
|
|
@},
|
|
"author": @{
|
|
"@@type": "Person",
|
|
"name": "Xe",
|
|
"alternateName": "Christine Dodrill"
|
|
@},
|
|
"publisher": @{
|
|
"@@type": "Person",
|
|
"name": "Xe",
|
|
"alternateName": "Christine Dodrill"
|
|
@}
|
|
@}
|
|
</script>
|
|
|
|
@if let Some(to) = post.front_matter.redirect_to.clone() {
|
|
<script>
|
|
window.location.replace("@to");
|
|
</script>
|
|
}
|
|
|
|
<h1>@post.front_matter.title</h1>
|
|
|
|
<small>A @post.read_time_estimate_minutes minute read.</small>
|
|
|
|
@body
|
|
|
|
<hr />
|
|
|
|
<!-- The button that should be clicked. -->
|
|
<button onclick="share_on_mastodon()">Share on Mastodon</button>
|
|
|
|
<p>This article was posted on @post.detri(). Facts and circumstances may have changed since publication. Please <a href="/contact">contact me</a> before jumping to conclusions if something seems wrong or unclear.</p>
|
|
|
|
@if post.front_matter.series.is_some() {
|
|
<p>Series: <a href="/blog/series/@post.front_matter.series.as_ref().unwrap()">@post.front_matter.series.as_ref().unwrap()</a></p>
|
|
}
|
|
|
|
@if post.front_matter.tags.is_some() {
|
|
<p>Tags: @for tag in post.front_matter.tags.as_ref().unwrap() { <code>@tag</code> }</p>
|
|
}
|
|
|
|
@if post.mentions.len() != 0 {
|
|
<p>This post was <a href="https://www.w3.org/TR/webmention/">WebMention</a>ed at the following URLs:
|
|
<ul>
|
|
@for mention in post.mentions {
|
|
<li><a href="@mention.source">@mention.title.unwrap_or(mention.source)</a></li>
|
|
}
|
|
</ul>
|
|
</p>
|
|
} else {
|
|
<p>This post was not <a href="https://www.w3.org/TR/webmention/">WebMention</a>ed yet. You could be the first!</p>
|
|
}
|
|
|
|
<p>The art for Mara was drawn by <a href="https://selic.re/">Selicre</a>.</p>
|
|
|
|
<p>The art for Cadey was drawn by <a href="https://artzorastudios.weebly.com/">ArtZora Studios</a>.</p>
|
|
|
|
<script>
|
|
// The actual function. Set this as an onclick function for your "Share on Mastodon" button
|
|
function share_on_mastodon() @{
|
|
// Prefill the form with the user's previously-specified Mastodon instance, if applicable
|
|
var default_url = localStorage['mastodon_instance'];
|
|
|
|
// If there is no cached instance/domain, then insert a "https://" with no domain at the start of the prompt.
|
|
if (!default_url)
|
|
default_url = "https://";
|
|
|
|
var instance = prompt("Enter your instance's address: (ex: https://linuxrocks.online)", default_url);
|
|
if (instance) @{
|
|
// Handle URL formats
|
|
if ( !instance.startsWith("https://") && !instance.startsWith("http://") )
|
|
instance = "https://" + instance;
|
|
|
|
// get the current page's url
|
|
var url = window.location.href;
|
|
|
|
// get the page title from the og:title meta tag, if it exists.
|
|
var title = document.querySelectorAll('meta[property="og:title"]')[0].getAttribute("content");
|
|
|
|
// Otherwise, use the <title> tag as the title
|
|
if (!title) var title = document.getElementsByTagName("title")[0].innerHTML;
|
|
|
|
// Handle slash
|
|
if ( !instance.endsWith("/") )
|
|
instance = instance + "/";
|
|
|
|
// Cache the instance/domain for future requests
|
|
localStorage['mastodon_instance'] = instance;
|
|
|
|
// Hashtags
|
|
var hashtags = "#blogpost";
|
|
|
|
@if post.front_matter.series.is_some() {
|
|
hashtags += "#@post.front_matter.series.as_ref().unwrap()";
|
|
}
|
|
|
|
@if post.front_matter.tags.is_some() {
|
|
hashtags += "@for tag in post.front_matter.tags.as_ref().unwrap() { #@tag }";
|
|
}
|
|
|
|
// Tagging users, such as offical accounts or the author of the post
|
|
var author = "@@cadey@@pony.social";
|
|
|
|
// Create the Share URL
|
|
// https://someinstance.tld/share?text=URL%20encoded%20text
|
|
mastodon_url = instance + "share?text=" + encodeURIComponent(title + "\n\n" + url + "\n\n" + hashtags + " " + author);
|
|
|
|
// Open a new window at the share location
|
|
window.open(mastodon_url, '_blank');
|
|
@}
|
|
@}
|
|
</script>
|
|
|
|
<script src="https://cdn.christine.website/file/christine-static/prism/prism.js"></script>
|
|
@:footer_html()
|