aboutsummaryrefslogtreecommitdiff
path: root/templates/talkpost.rs.html
blob: 89d9f08da62eb1c42d41a0509532eed7016268be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
@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://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 Iaso",
         "alternateName": "Christine Dodrill"
         @},
     "publisher": @{
         "@@type": "Person",
         "name": "Xe Iaso",
         "alternateName": "Christine Dodrill"
         @}
     @}
</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 {}. 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>
}

<div data-ea-publisher="christinewebsite" data-ea-type="text"></div>

@body

<a href="@post.front_matter.slides_link.as_ref().unwrap()">Link to the slides</a>

<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()