132 lines
5.2 KiB
HTML
132 lines
5.2 KiB
HTML
@use super::{header_html, footer_html, mara};
|
|
@use crate::post::Post;
|
|
@use chrono::prelude::*;
|
|
|
|
@(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 Iaso" />
|
|
|
|
<link rel="canonical" href="https://xeiaso.net/@post.link" />
|
|
|
|
<script type="application/ld+json">
|
|
@{
|
|
"@@context": "http://schema.org",
|
|
"@@type": "Article",
|
|
"headline": "@post.front_matter.title",
|
|
"image": "https://xeiaso.net/static/img/avatar.png",
|
|
"url": "https://xeiaso.net/@post.link",
|
|
"datePublished": "@post.date.format("%Y-%m-%d")",
|
|
"mainEntityOfPage": @{
|
|
"@@type": "WebPage",
|
|
"@@id": "https://xeiaso.net/@post.link"
|
|
@},
|
|
"author": @{
|
|
"@@type": "Person",
|
|
"name": "Xe Iaso"
|
|
@},
|
|
"publisher": @{
|
|
"@@type": "Person",
|
|
"name": "Xe Iaso"
|
|
@}
|
|
@}
|
|
</script>
|
|
|
|
@if Utc::today().num_days_from_ce() < post.date.num_days_from_ce() {
|
|
<div class="warning">
|
|
@:mara("hacker", "Mara", Html(format!(r#"Hey, this post is set to go live to the public on {} UTC. Right now you are reading a pre-publication version of this post. Please do not share this on social media. This post will automatically go live for everyone on the intended publication date. If you want access to these posts, please join the <a href="https://patreon.com/cadey">Patreon</a>. It helps me afford the copyeditor that I contract for the technical content I write."#, post.detri())))
|
|
</div>
|
|
} else {
|
|
<script async src="https://media.ethicalads.io/media/client/ethicalads.min.js"></script>
|
|
}
|
|
|
|
@body
|
|
|
|
<a href="@post.front_matter.slides_link.as_ref().unwrap()">Link to the slides</a>
|
|
|
|
<div data-ea-publisher="christinewebsite" data-ea-type="text"></div>
|
|
|
|
<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>
|
|
}
|
|
|
|
<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 = "#talk";
|
|
|
|
@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>
|
|
|
|
@:footer_html()
|