xesite/templates/gallerypost.rs.html

125 lines
4.2 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 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>
<h1>@post.front_matter.title</h1>
@body
<center>
<img src="@post.front_matter.image.as_ref().unwrap()" />
</center>
<hr />
<!-- The button that should be clicked. -->
<button onclick="share_on_mastodon()">Share on Mastodon</button>
<p>This artwork was posted on @post.detri().</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 = "#art";
@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()