this removes Flask, reworks a number of library methods accordingly, and adds generators and build commands to process the instance directory (largely unchanged, except config.py is now config.json) and spit out files suitable to be served by a web server such as Nginx. there are probably some rough edges here, but overall this works. also note, as this is no longer server software on a network, the license has changed from AGPLv3 to GPLv3, and the "or any later version" allowance has been removed Signed-off-by: Brian S. Stephan <bss@incorporeal.org>
95 lines
3.5 KiB
HTML
95 lines
3.5 KiB
HTML
<!doctype html>{#
|
|
SPDX-FileCopyrightText: © 2020 Brian S. Stephan <bss@incorporeal.org>
|
|
SPDX-License-Identifier: GPL-3.0-only
|
|
#}
|
|
<html lang="en">
|
|
<title>{{ title }}</title>
|
|
<meta charset="utf-8">
|
|
{% if title %}<meta property="og:title" content="{{ title }}">{% endif %}
|
|
{% if description %}<meta property="og:description" content="{{ description }}">{% endif %}
|
|
<meta property="og:url" content="{{ base_url }}">
|
|
{% if image %}<meta property="og:image" content="{{ image }}">{% endif %}
|
|
<meta name="twitter:card" content="summary_large_image">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<link rel="stylesheet" type="text/css" title="{{ config.DEFAULT_PAGE_STYLE }}" href="{{ config.PAGE_STYLES[config.DEFAULT_PAGE_STYLE] }}">
|
|
{% for style, stylesheet in config.PAGE_STYLES.items() %}
|
|
<link rel="alternate stylesheet" type="text/css" title="{{ style }}" href="{{ stylesheet }}">
|
|
{% endfor %}
|
|
<link rel="icon" href="{{ config.FAVICON }}">
|
|
<link rel="alternate" type="application/atom+xml" href="/feed/atom">
|
|
<link rel="alternate" type="application/rss+xml" href="/feed/rss">
|
|
<script type="text/javascript">
|
|
// loathe as I am to use JavaScript, this style selection is one of my favorite parts
|
|
// of my CMS, so I want to keep it around even in the static site
|
|
function applyStyle(styleName) {
|
|
// disable all stylesheets except the one to apply, the user style
|
|
var i, link_tag;
|
|
for (i = 0, link_tag = document.getElementsByTagName("link"); i < link_tag.length; i++ ) {
|
|
// find the stylesheets with titles, meaning they can be disabled/enabled
|
|
if ((link_tag[i].rel.indexOf("stylesheet") != -1) && link_tag[i].title) {
|
|
alert(link_tag[i].title);
|
|
link_tag[i].disabled = true;
|
|
if (link_tag[i].title == styleName) {
|
|
link_tag[i].disabled = false ;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function setStyle(styleName) {
|
|
document.cookie = "user-style=" + encodeURIComponent(styleName) + "; max-age=31536000";
|
|
applyStyle(styleName);
|
|
}
|
|
|
|
|
|
function applyStyleFromCookie() {
|
|
// get the user style cookie and set that specified style as the active one
|
|
var styleName = getCookie("user-style");
|
|
alert(styleName);
|
|
if (styleName) {
|
|
applyStyle(styleName);
|
|
}
|
|
}
|
|
|
|
function getCookie(cookieName) {
|
|
// find the desired cookie from the document's cookie(s) string
|
|
let matches = document.cookie.match(new RegExp(
|
|
"(?:^|; )" + cookieName.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
|
|
));
|
|
alert(matches);
|
|
return matches ? decodeURIComponent(matches[1]) : undefined;
|
|
}
|
|
|
|
applyStyleFromCookie();
|
|
</script>
|
|
|
|
<div {% block site_class %}class="site-wrap site-wrap-normal-width"{% endblock %}>
|
|
{% block header %}
|
|
<div class="header">
|
|
<div class="nav">
|
|
{% for nav in navs %}
|
|
<a href="{{ nav.1 }}">{{ nav.0 }}</a>
|
|
{% if not loop.last %} » {% endif %}
|
|
{% endfor %}
|
|
</div>
|
|
{% if page_styles %}
|
|
<div class="styles">
|
|
{% for style in page_styles %}
|
|
<a href="#" onclick="setStyle('{{ style }}'); return false;">[{{ style }}]</a>
|
|
{% endfor %}
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
{% endblock %}
|
|
{% block body %}
|
|
<div class="content">
|
|
{{ content }}
|
|
</div>
|
|
<footer>
|
|
{% if extra_footer %}<div class="extra-footer"><i>{{ extra_footer|safe }}</i></div>{% endif %}
|
|
<div class="footer"><i>Last modified: {{ mtime }}</i></div>
|
|
</footer>
|
|
{% endblock %}
|
|
</div>
|
|
</html>
|