aboutsummaryrefslogtreecommitdiff
path: root/templates/talkpost.rs.html
blob: 8e30e7ec4403eb20ada6aafff6a04122aad2979b (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
@use super::{header_html, footer_html};
@use crate::{post::Post, tmpl::nag};

@(post: Post, body: impl ToHtml, referer: Option<String>)

@: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>

@Html(nag::referer(referer).0)

@Html(nag::prerelease(&post).0)

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