ayakael.net/templates/page.tmpl

355 lines
15 KiB
Cheetah

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<TMPL_IF NAME="META"><TMPL_VAR META></TMPL_IF>
<TMPL_IF DYNAMIC>
<TMPL_IF FORCEBASEURL><base href="<TMPL_VAR FORCEBASEURL>" /><TMPL_ELSE>
<TMPL_IF BASEURL><base href="<TMPL_VAR BASEURL>" /></TMPL_IF>
</TMPL_IF>
</TMPL_IF>
<title><TMPL_VAR TITLE> - <TMPL_VAR WIKINAME></title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous" />
<!-- Custom styles for this template -->
<link href="/bootstrap.local.css" rel="stylesheet" />
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<!-- Custom styles for derivatives -->
<TMPL_IF LOCAL_CSS>
<link rel="stylesheet" href="/<TMPL_VAR LOCAL_CSS>" type="text/css" />
<TMPL_ELSE>
<link rel="stylesheet" href="/local.css" type="text/css" />
</TMPL_IF>
<TMPL_UNLESS DYNAMIC>
<TMPL_IF EDITURL>
<link rel="alternate" type="application/x-wiki" title="Edit this page" href="<TMPL_VAR EDITURL>" />
</TMPL_IF>
<TMPL_IF FEEDLINKS><TMPL_VAR FEEDLINKS></TMPL_IF>
<TMPL_IF RELVCS><TMPL_VAR RELVCS></TMPL_IF>
<TMPL_IF META><TMPL_VAR META></TMPL_IF>
<TMPL_LOOP TRAILLOOP>
<TMPL_IF PREVPAGE>
<link rel="prev" href="<TMPL_VAR PREVURL>" title="<TMPL_VAR PREVTITLE>" />
</TMPL_IF>
<link rel="up" href="<TMPL_VAR TRAILURL>" title="<TMPL_VAR TRAILTITLE>" />
<TMPL_IF NEXTPAGE>
<link rel="next" href="<TMPL_VAR NEXTURL>" title="<TMPL_VAR NEXTTITLE>" />
</TMPL_IF>
</TMPL_LOOP>
</TMPL_UNLESS>
</head>
<body>
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/">
<img alt="<TMPL_VAR WIKINAME>" src="/favicon.png" width="48" height="48" />
</a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<TMPL_IF SIDEBAR>
<TMPL_VAR SIDEBAR>
</TMPL_IF>
<ul class="nav navbar-nav">
<TMPL_LOOP BOOTMENU>
<TMPL_IF FIRSTNAV>
<li <TMPL_IF ACTIVE>class="active"</TMPL_IF>><a href="<TMPL_VAR URL>"><TMPL_VAR PAGE></a></li>
</TMPL_IF>
</TMPL_LOOP>
<div id="language-switcher-top">
<TMPL_IF OTHERLANGUAGES>
<nav class="language-switcher">
<div class="current-language"><TMPL_VAR LANG_NAME></div>
<ul class="other-languages">
<TMPL_LOOP OTHERLANGUAGES>
<li>
<a href="<TMPL_VAR URL>"><TMPL_VAR LANGUAGE></a>
</li>
</TMPL_LOOP>
<TMPL_IF HAVE_ACTIONS>
<li class="improve-translations">
<a href="<TMPL_VAR BASEURL>contribute/how/translate/" rel="nofollow">Improve translations</a>
</li>
</TMPL_IF>
</ul>
</nav>
</TMPL_IF>
</div>
</ul>
</div>
</div>
</nav>
<div class="container" id="content">
<header class="page-header">
<ol class="breadcrumb">
<TMPL_LOOP NAME="PARENTLINKS">
<TMPL_UNLESS NAME="DEPTH_0">
</TMPL_UNLESS>
</TMPL_LOOP>
</ol>
</header>
<TMPL_VAR CONTENT>
<TMPL_IF ENCLOSURE>
<TMPL_IF HTML5><section id="enclosure"><TMPL_ELSE><div id="enclosure"></TMPL_IF>
<a href="<TMPL_VAR ENCLOSURE>">Download</a>
<TMPL_IF HTML5></section><TMPL_ELSE></div></TMPL_IF>
</TMPL_IF>
<TMPL_IF TRAILS>
<TMPL_VAR TRAILS>
</TMPL_IF>
<TMPL_UNLESS DYNAMIC>
<!-- legacy Ikiwiki comments.pm section -->
<TMPL_IF COMMENTS>
<TMPL_IF HTML5><section id="comments"><TMPL_ELSE><div id="comments"></TMPL_IF>
<TMPL_VAR COMMENTS>
<TMPL_IF ADDCOMMENTURL>
<div class="addcomment">
<a href="<TMPL_VAR ADDCOMMENTURL>">Add a comment</a>
</div>
<TMPL_ELSE>
<TMPL_UNLESS mastodon_host>
<div class="addcomment">Comments on this page are closed.</div>
</TMPL_UNLESS>
</TMPL_IF>
<TMPL_IF HTML5></section><TMPL_ELSE></div></TMPL_IF>
</TMPL_IF>
<!-- Mastodon comments -->
<TMPL_IF mastodon_host>
<div class="mastodon-comments comments">
<p>You can use your Mastodon account to reply to this <a class="link" href="https://<TMPL_VAR mastodon_host>/@<TMPL_VAR mastodon_username>/<TMPL_VAR mastodon_post>">post</a>.</p>
<p id="mastodon-comments-list"><button id="load-comment">Load comments</button></p>
<noscript><p>You need JavaScript to view the comments.</p></noscript>
<script src="/assets/js/purify.min.js"></script>
<script type="text/javascript">
function escapeHtml(unsafe) {
return unsafe
.replace(/&/g, "&amp;")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;")
.replace(/"/g, "&quot;")
.replace(/'/g, "&#039;");
}
document.getElementById("load-comment").addEventListener("click", function() {
document.getElementById("load-comment").innerHTML = "Loading...";
fetch('https://<TMPL_VAR mastodon_host>/api/v1/statuses/<TMPL_VAR mastodon_post>/context')
.then(function(response) {
return response.json();
})
.then(function(data) {
if(data['descendants'] &&
Array.isArray(data['descendants']) &&
data['descendants'].length > 0) {
document.getElementById('mastodon-comments-list').innerHTML = "";
data['descendants'].forEach(function(reply) {
reply.account.display_name = escapeHtml(reply.account.display_name);
reply.account.emojis.forEach(emoji => {
reply.account.display_name = reply.account.display_name.replace(`:${emoji.shortcode}:`,
`<img src="${escapeHtml(emoji.static_url)}" alt="Emoji ${emoji.shortcode}" height="20" width="20" />`);
});
mastodonComment =
`<div class="mastodon-comment comment">
<div class="avatar">
<img src="${escapeHtml(reply.account.avatar_static)}" height=60 width=60 alt="">
</div>
<div class="content">
<div class="author">
<a href="${reply.account.url}" rel="nofollow">
<span>${reply.account.display_name}</span>
<span class="disabled">${escapeHtml(reply.account.acct)}</span>
</a>
<a class="post" href="${reply.uri}" rel="nofollow">
<time datetime="${reply.created_at}" pubdate="pubdate">
${reply.created_at.replace(/(T\d+:\d+):\d+(\.\d+)?(.*)/, "$1$3")}
</time>
</a>
</div>
<div class="mastodon-comment-content">${reply.content}</div>
</div>
</div>`;
document.getElementById('mastodon-comments-list').appendChild(DOMPurify.sanitize(mastodonComment, {'RETURN_DOM_FRAGMENT': true}));
});
} else {
document.getElementById('mastodon-comments-list').innerHTML = "<p>Not comments found</p>";
}
});
});
</script>
</div>
</TMPL_IF>
<div class="pagedate text-muted">
<span class="created">Created <TMPL_VAR CTIME>.</span>
<span class="edited">
<TMPL_IF HISTORYURL>
<a href="<TMPL_VAR HISTORYURL>">Edited <TMPL_VAR MTIME>.</a>
<TMPL_ELSE>
Edited <TMPL_VAR MTIME>.
</TMPL_IF>
</span>
</div>
<TMPL_IF HTML5><nav class="navbar navbar-default">
<TMPL_ELSE>
<div class="navbar navbar-default">
</TMPL_IF>
<div class="navbar-brand"><span class="glyphicon glyphicon-search" aria-hidden="true"></span></div>
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-footer" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div id="navbar-footer" class="collapse navbar-collapse">
<TMPL_IF SEARCHFORM>
<TMPL_VAR SEARCHFORM>
</TMPL_IF>
<ul class="nav navbar-nav navbar-right">
<TMPL_IF TAGS>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Tags <span class="caret"></span></a>
<ul class="dropdown-menu">
<TMPL_LOOP TAGS>
<li><TMPL_VAR LINK></li>
</TMPL_LOOP>
</ul>
</li>
</TMPL_IF>
<TMPL_IF BACKLINKS>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Links<span class="caret"></span></a>
<ul class="dropdown-menu">
<TMPL_LOOP BACKLINKS>
<li><a href="<TMPL_VAR URL>"><TMPL_VAR PAGE></a></li>
</TMPL_LOOP>
<TMPL_IF MORE_BACKLINKS>
<TMPL_LOOP MORE_BACKLINKS>
<li><a href="<TMPL_VAR URL>"><TMPL_VAR PAGE></a></li>
</TMPL_LOOP>
</TMPL_IF>
</ul>
</li>
</TMPL_IF>
<TMPL_IF HAVE_ACTIONS>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Meta<span class="caret"></span></a>
<ul class="dropdown-menu">
<TMPL_IF EDITURL>
<li><a href="<TMPL_VAR EDITURL>" rel="nofollow">Edit</a></li>
</TMPL_IF>
<TMPL_IF RECENTCHANGESURL>
<li><a href="<TMPL_VAR RECENTCHANGESURL>">Timeline</a></li>
</TMPL_IF>
<TMPL_IF HISTORYURL>
<li class="hidden-xs"><a href="<TMPL_VAR HISTORYURL>">History</a></li>
</TMPL_IF>
<TMPL_IF GETSOURCEURL>
<li class="hidden-xs hidden-sm"><a href="<TMPL_VAR GETSOURCEURL>">Source</a></li>
</TMPL_IF>
<TMPL_IF PREFSURL>
<li><a href="<TMPL_VAR PREFSURL>">Prefs</a></li>
</TMPL_IF>
<TMPL_IF ACTIONS>
<TMPL_LOOP ACTIONS>
<li class="hidden-xs"><TMPL_VAR ACTION></li>
</TMPL_LOOP>
</TMPL_IF>
<TMPL_IF COMMENTSLINK>
<li><TMPL_VAR COMMENTSLINK></li>
<TMPL_ELSE>
<TMPL_IF DISCUSSIONLINK>
<li><TMPL_VAR DISCUSSIONLINK></li>
</TMPL_IF>
</TMPL_IF>
</ul>
</li>
</TMPL_IF>
</ul>
</div>
</div>
<TMPL_IF HTML5></nav>
<TMPL_ELSE>
</div>
</TMPL_IF>
</TMPL_UNLESS>
</div> <!-- /container -->
<TMPL_IF HTML5><footer<TMPL_ELSE><div</TMPL_IF> class="footer" role="contentinfo">
<div class="container">
<TMPL_IF FOOTER>
<TMPL_VAR FOOTER>
</TMPL_IF>
</div>
<TMPL_IF HTML5></footer><TMPL_ELSE></div></TMPL_IF>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://code.jquery.com/jquery-3.2.1.min.js" crossorigin="anonymous" integrity="sha384-xBuQ/xzmlsLoJpyjoggmTEz8OWUFM0/RC5BsqQBDX2v5cMvDHcMakNTNrHIW2I5f"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" crossorigin="anonymous" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=<TMPL_VAR PAGE>&t=<TMPL_VAR TITLE ESCAPE=URL>" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>