Add theme

This commit is contained in:
Luke Murphy 2019-06-12 15:08:48 +02:00
parent b1f055efee
commit c1b4e35924
No known key found for this signature in database
GPG Key ID: 5E2EF5A63E3718CC
20 changed files with 1124 additions and 1 deletions

View File

@ -33,3 +33,5 @@ DEFAULT_PAGINATION = False
# Uncomment following line if you want document-relative URLs when developing
#RELATIVE_URLS = True
THEME = 'themes/homebrewtheme'

View File

@ -0,0 +1,374 @@
/*
2k18 Homebrewserver.club Pelican theme
---
Style sheet is ordered vertically, with declarations for the header on top and footer on the bottom.
With contributions by club members:
http://roelof.info
http://randomiser.info/
http://majesticmoo.se
*/
html {
font-size: 20px;
}
@font-face {
font-family:'OrkneyRegular';
src: url('../fonts/Orkney Regular.woff') format('truetype');
}
header {
width:100%;
}
#banner {
text-align: center;
font-size: 5rem;
padding-bottom: 0.5em;
padding-top: 1em;
background: #EAEAEA;
}
#sitename {
color:#0074D9;
text-decoration:none;
}
pre {
font-family: monospace;
}
#menu {
font-size:2.5rem;
margin-top:1.2em;
font-weight:bold;
text-align:center;
}
body {
line-height:1.6em;
color:#0074D9;
background-color:#f6f6f6;
font-family:'OrkneyRegular';
letter-spacing: 0.05em;
margin:0;
/*! padding: 1em; */
}
#index{
max-width:80%;
margin: auto;
}
a {
color:#FF4136;
}
#index{
/*! width:100%; */
padding-top:2em;
padding-bottom:1em;
}
#post-list {
padding-left:0px;
margin-top:0px;
}
h1{
font-size:2.5rem;
margin: 0;
padding: 0.5em;
padding-left: 0;
}
}
h2{
font-size:2rem;
padding: 1em;
margin: 0;
}
}
h3{
font-size:1.5rem;
text-decoration: underline;
padding: 1em;
margin: 0;
}
}
.summary p{
font-size:0.8rem;
text-align: left;
margin:0;
}
.hentry{
border-width: 1px;
border-color: #EAEAEA;
border-style: hidden hidden dashed hidden;
padding-top:2em;
padding-bottom:2em;
}
.entry-title{
font-size:3rem;
font-weight:bold;
line-height: 1.2em;
}
.entry-title span{
width:100%;
display:inline-block;
}
.toc{
font-size: 0.8em;
padding: 3em;
float: right;
line-height: 1.5em;
border: 1px solid;
margin: 1em;
}
.toc .toctitle {
font-size:1rem;
}
.toc ul{
/*list-style: none;*/
margin-top:0px;
}
.entry-content{
/*! margin:auto; */
padding-bottom:1em;
}
.entry-content pre{
font-size: 18px;
padding: 0.5em;
overflow: auto;
background-color: #EAEAEA;
line-height: 1.2em;
}
.codehilite {
max-width: 800px;
margin:1em auto;
}
code {
/*! font-size: 18px; */
padding: 0.5em;
background-color: #EAEAEA;
line-height: 1.2em;
}
.entry-content img{
max-height:100%;
max-width: 100%;
}
.entry-content ul{
line-height:1.5;
margin: auto;
max-width:800px;
}
.entry-content pre{
margin: auto;
}
.highlight{
margin: auto;
max-width:800px;
}
blockquote {
font-style:italic;
}
#content p{
line-height:1.6;
max-width:800px;
margin: 0 auto;
margin-bottom:1em;
}
#content .caption{
font-size:80%;
padding-top:0;
margin-top:0px;
}
#content p.img{
margin-bottom:0px;
}
.divider {
font-size:12px;
width:100%;
line-height:1em;
background-color:white;
}
.published{
font-size:smaller;
}
#categories {
font-size: 40px;
margin-top: 2em;
text-align: center;
}
#pertaining{
margin-top:2em;
text-align:center;
}
.footnote{
font-size:14px;
margin:auto;
max-width:800px;
}
.author{
font-size:smaller;
}
.post-info {
line-height: 1em;
margin-top:1em;
}
table{
margin: 1em auto;
max-width: 800px;
font-size:0.9em;
width: 100%;
border-collapse: collapse;
text-align: left;
border: 1px solid #0074D9;
}
table td, table th {
border: 1px dashed #EAEAEA;
padding-left:1em;
padding-top:0.2em;
}
table thead tr {
border-bottom: 1px solid #0074D9;
background: #EAEAEA;
}
table tr:nth-child(even) {
background: #EAEAEA;
}
/* some good ol' theft from https://codepo8.github.io/css-fork-on-github-ribbon/ */
#forkongithub a {
background:#FF4136;
color:#fff;
text-decoration:none;
/*! font-family:arial,sans-serif; */
text-align:right;
font-weight:bold;
padding:5px 40px;
font-size:1rem;
line-height:2rem;
position:relative;
transition:0.5s;
font-size: 14px;
}
#forkongithub a:hover{
background:#0074D9;
color:#fff;}
#forkongithub a::before,#forkongithub a::after{
content:"";
width:100%;
display:block;
position:absolute;
top:1px;
left:0;
height:1px;
background:#fff;
}
#forkongithub a::after{
bottom:1px;
top:auto;
}
@media screen and (min-width:800px){
#forkongithub{
position:fixed;
display:block;
top:0;
right:0;
width:200px;
overflow:hidden;
height:200px;
z-index:9999;
}
#forkongithub a{
width:210px;
position:absolute;
top:30px;
right:-60px;
transform:rotate(45deg);
-webkit-transform:rotate(45deg);
-ms-transform:rotate(45deg);
-moz-transform:rotate(45deg);
-o-transform:rotate(45deg);
box-shadow:4px 4px 10px rgba(0,0,0,0.8);
}
}
@media screen and (max-width:620px) {
html {font-size:16px;}
#banner{
font-size: 1rem;
line-height: 1rem;
word-wrap: break-word;
}
#menu{font-size:1rem}
#index{
max-width:100%;
}
#content{
padding:1em;
}
ul {
padding:0em;
}
article {
padding:1em;
}
blockquote{margin:1em;}
code{
font-size:90%;
padding:0.3em;
}
h1 {
font-size:2rem;
line-height:1em;
}
.entry-content pre {
font-size: 90%;
padding: 0.3em;
}
.footnote {
word-wrap: break-word;
}
.footnote ol{
padding-left:1.5em;
}

View File

@ -0,0 +1,437 @@
pre .hll {
background-color: #ffffcc;
}
pre .c {
color: #60a0b0;
font-style: italic;
}
pre .err {
border: 1px solid #ff0000;
}
pre .k {
color: #007020;
font-weight: bold;
}
pre .o {
color: #666666;
}
pre .ch {
color: #60a0b0;
font-style: italic;
}
pre .cm {
color: #60a0b0;
font-style: italic;
}
pre .cp {
color: #007020;
}
pre .cpf {
color: #60a0b0;
font-style: italic;
}
pre .c1 {
color: #60a0b0;
font-style: italic;
}
pre .cs {
background-color: #fff0f0;
color: #60a0b0;
}
pre .gd {
color: #a00000;
}
pre .ge {
font-style: italic;
}
pre .gr {
color: #ff0000;
}
pre .gh {
color: #000080;
font-weight: bold;
}
pre .gi {
color: #00a000;
}
pre .go {
color: #888888;
}
pre .gp {
color: #c65d09;
font-weight: bold;
}
pre .gs {
font-weight: bold;
}
pre .gu {
color: #800080;
font-weight: bold;
}
pre .gt {
color: #0044dd;
}
pre .kc {
color: #007020;
font-weight: bold;
}
pre .kd {
color: #007020;
font-weight: bold;
}
pre .kn {
color: #007020;
font-weight: bold;
}
pre .kp {
color: #007020;
}
pre .kr {
color: #007020;
font-weight: bold;
}
pre .kt {
color: #902000;
}
pre .m {
color: #40a070;
}
pre .s {
color: #4070a0;
}
pre .na {
color: #4070a0;
}
pre .nb {
color: #007020;
}
pre .nc {
color: #0e84b5;
font-weight: bold;
}
pre .no {
color: #60add5;
}
pre .nd {
color: #555555;
font-weight: bold;
}
pre .ni {
color: #d55537;
font-weight: bold;
}
pre .ne {
color: #007020;
}
pre .nf {
color: #06287e;
}
pre .nl {
color: #002070;
font-weight: bold;
}
pre .nn {
color: #0e84b5;
font-weight: bold;
}
pre .nt {
color: #062873;
font-weight: bold;
}
pre .nv {
color: #bb60d5;
}
pre .ow {
color: #007020;
font-weight: bold;
}
pre .w {
color: #bbbbbb;
}
pre .mb {
color: #40a070;
}
pre .mf {
color: #40a070;
}
pre .mh {
color: #40a070;
}
pre .mi {
color: #40a070;
}
pre .mo {
color: #40a070;
}
pre .sb {
color: #4070a0;
}
pre .sc {
color: #4070a0;
}
pre .sd {
color: #4070a0;
font-style: italic;
}
pre .s2 {
color: #4070a0;
}
pre .se {
color: #4070a0;
font-weight: bold;
}
pre .sh {
color: #4070a0;
}
pre .si {
color: #70a0d0;
font-style: italic;
}
pre .sx {
color: #c65d09;
}
pre .sr {
color: #235388;
}
pre .s1 {
color: #4070a0;
}
pre .ss {
color: #517918;
}
pre .bp {
color: #007020;
}
pre .vc {
color: #bb60d5;
}
pre .vg {
color: #bb60d5;
}
pre .vi {
color: #bb60d5;
}
pre .il {
color: #40a070;
}
.syntax pre .hll {
background-color: #ffffcc;
}
.syntax pre {
background: #f0f0f0 none repeat scroll 0 0;
}
.syntax pre .c {
color: #60a0b0;
font-style: italic;
}
.syntax pre .err {
border: 1px solid #ff0000;
}
.syntax pre .k {
color: #007020;
font-weight: bold;
}
.syntax pre .o {
color: #666666;
}
.syntax pre .ch {
color: #60a0b0;
font-style: italic;
}
.syntax pre .cm {
color: #60a0b0;
font-style: italic;
}
.syntax pre .cp {
color: #007020;
}
.syntax pre .cpf {
color: #60a0b0;
font-style: italic;
}
.syntax pre .c1 {
color: #60a0b0;
font-style: italic;
}
.syntax pre .cs {
background-color: #fff0f0;
color: #60a0b0;
}
.syntax pre .gd {
color: #a00000;
}
.syntax pre .ge {
font-style: italic;
}
.syntax pre .gr {
color: #ff0000;
}
.syntax pre .gh {
color: #000080;
font-weight: bold;
}
.syntax pre .gi {
color: #00a000;
}
.syntax pre .go {
color: #888888;
}
.syntax pre .gp {
color: #c65d09;
font-weight: bold;
}
.syntax pre .gs {
font-weight: bold;
}
.syntax pre .gu {
color: #800080;
font-weight: bold;
}
.syntax pre .gt {
color: #0044dd;
}
.syntax pre .kc {
color: #007020;
font-weight: bold;
}
.syntax pre .kd {
color: #007020;
font-weight: bold;
}
.syntax pre .kn {
color: #007020;
font-weight: bold;
}
.syntax pre .kp {
color: #007020;
}
.syntax pre .kr {
color: #007020;
font-weight: bold;
}
.syntax pre .kt {
color: #902000;
}
.syntax pre .m {
color: #40a070;
}
.syntax pre .s {
color: #4070a0;
}
.syntax pre .na {
color: #4070a0;
}
.syntax pre .nb {
color: #007020;
}
.syntax pre .nc {
color: #0e84b5;
font-weight: bold;
}
.syntax pre .no {
color: #60add5;
}
.syntax pre .nd {
color: #555555;
font-weight: bold;
}
.syntax pre .ni {
color: #d55537;
font-weight: bold;
}
.syntax pre .ne {
color: #007020;
}
.syntax pre .nf {
color: #06287e;
}
.syntax pre .nl {
color: #002070;
font-weight: bold;
}
.syntax pre .nn {
color: #0e84b5;
font-weight: bold;
}
.syntax pre .nt {
color: #062873;
font-weight: bold;
}
.syntax pre .nv {
color: #bb60d5;
}
.syntax pre .ow {
color: #007020;
font-weight: bold;
}
.syntax pre .w {
color: #bbbbbb;
}
.syntax pre .mb {
color: #40a070;
}
.syntax pre .mf {
color: #40a070;
}
.syntax pre .mh {
color: #40a070;
}
.syntax pre .mi {
color: #40a070;
}
.syntax pre .mo {
color: #40a070;
}
.syntax pre .sb {
color: #4070a0;
}
.syntax pre .sc {
color: #4070a0;
}
.syntax pre .sd {
color: #4070a0;
font-style: italic;
}
.syntax pre .s2 {
color: #4070a0;
}
.syntax pre .se {
color: #4070a0;
font-weight: bold;
}
.syntax pre .sh {
color: #4070a0;
}
.syntax pre .si {
color: #70a0d0;
font-style: italic;
}
.syntax pre .sx {
color: #c65d09;
}
.syntax pre .sr {
color: #235388;
}
.syntax pre .s1 {
color: #4070a0;
}
.syntax pre .ss {
color: #517918;
}
.syntax pre .bp {
color: #007020;
}
.syntax pre .vc {
color: #bb60d5;
}
.syntax pre .vg {
color: #bb60d5;
}
.syntax pre .vi {
color: #bb60d5;
}
.syntax pre .il {
color: #40a070;
}

Binary file not shown.

View File

@ -0,0 +1,11 @@
{% extends "base.html" %}
{% block content %}
<h1>Archives for {{ SITENAME }}</h1>
<dl>
{% for article in dates %}
<dt>{{ article.locale_date }}</dt>
<dd><a href="{{ SITEURL }}/{{ article.url }}">{{ article.title }}</a></dd>
{% endfor %}
</dl>
{% endblock %}

View File

@ -0,0 +1,50 @@
{% extends "base.html" %}
{% block head %}
{{ super() }}
{% if article.description %}
<meta name="description" content="{{article.description}}" />
{% endif %}
{% if article.tags or article.category or article.keywords %}
<meta name="keywords" content="{{ [article.tags|join(', '), article.category, article.keywords]|join(', ') }}" />
{% endif %}
{% endblock %}
{% block content %}
<section id="content" class="body">
<header>
<div class="entry-title">
<a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark"
title="Permalink to {{ article.title|striptags }}">{{ article.title }}</a></div>
{% import 'translations.html' as translations with context %}
{{ translations.translations_for(article) }}
</header>
<div class="post-info">
<!-- <div class='summary'>{{ article.summary }}</div> -->
<time class="published" datetime="{{ article.date.isoformat() }}">
{{ article.locale_date }}
</time>
{% if article.modified %}
<time class="modified" datetime="{{ article.modified.isoformat() }}">
{{ article.locale_modified }}
</time>
{% endif %}
{% if article.authors %}
<address class="vcard author">
By {% for author in article.authors %}
<a class="url fn" href="{{ SITEURL }}/{{ author.url }}">{{ author }}</a>
{% endfor %}
</address>
{% endif %}
</div><!-- /.post-info -->
{% if article.toc %}
{{ article.toc }}
{% endif %}
<div class="entry-content">
{{ article.content }}
</div><!-- /.entry-content -->
</section>
{% endblock %}

View File

@ -0,0 +1,7 @@
{% extends "index.html" %}
{% block title %}{{ SITENAME }} - Articles by {{ author }}{% endblock %}
{% block content_title %}
<h2>Articles by {{ author }}</h2>
{% endblock %}

View File

@ -0,0 +1,13 @@
{% extends "base.html" %}
{% block title %}{{ SITENAME }} - Authors{% endblock %}
{% block content %}
<h1>Authors on {{ SITENAME }}</h1>
<ul>
{%- for author, articles in authors|sort %}
<li><a href="{{ SITEURL }}/{{ author.url }}">{{ author }}</a> ({{ articles|count }})</li>
{% endfor %}
</ul>
{% endblock %}

View File

@ -0,0 +1,5 @@
<pre>
┃ ┃┏━┃┏┏ ┏━┛┏━ ┏━┃┏━┛┃┃┃┏━┛┏━┛┏━┃┃ ┃┏━┛┏━┃ ┏━┛┃ ┃ ┃┏━
┏━┃┃ ┃┃┃┃┏━┛┏━┃┏┏┛┏━┛┃┃┃━━┃┏━┛┏┏┛┃ ┃┏━┛┏┏┛ ┃ ┃ ┃ ┃┏━┃
┛ ┛━━┛┛┛┛━━┛━━ ┛ ┛━━┛━━┛━━┛━━┛┛ ┛ ┛ ━━┛┛ ┛┛━━┛━━┛━━┛━━ ━ ━
</pre>

View File

@ -0,0 +1,72 @@
<!DOCTYPE html>
<html lang="{{ DEFAULT_LANG }}">
<head>
{% block head %}
<title>{% block title %}{{ SITENAME }}{% endblock title %}</title>
<meta charset="utf-8" />
<link rel="icon" href="{{ SITEURL}}/favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="{{ SITEURL }}/favicon.ico" type="image/x-icon">
{% if FEED_ALL_ATOM %}
<link href="{{ FEED_DOMAIN }}/{{ FEED_ALL_ATOM }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Full Atom Feed" />
{% endif %}
{% if FEED_ALL_RSS %}
<link href="{{ FEED_DOMAIN }}/{{ FEED_ALL_RSS }}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} Full RSS Feed" />
{% endif %}
{% if FEED_ATOM %}
<link href="{{ FEED_DOMAIN }}/{{ FEED_ATOM }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Atom Feed" />
{% endif %}
{% if FEED_RSS %}
<link href="{{ FEED_DOMAIN }}/{{ FEED_RSS }}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} RSS Feed" />
{% endif %}
{% if CATEGORY_FEED_ATOM and category %}
<link href="{{ FEED_DOMAIN }}/{{ CATEGORY_FEED_ATOM|format(slug=category.slug) }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Categories Atom Feed" />
{% endif %}
{% if CATEGORY_FEED_RSS and category %}
<link href="{{ FEED_DOMAIN }}/{{ CATEGORY_FEED_RSS|format(slug=category.slug) }}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} Categories RSS Feed" />
{% endif %}
{% if TAG_FEED_ATOM and tag %}
<link href="{{ FEED_DOMAIN }}/{{ TAG_FEED_ATOM|format(slug=tag.slug) }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Tags Atom Feed" />
{% endif %}
{% if TAG_FEED_RSS and tag %}
<link href="{{ FEED_DOMAIN }}/{{ TAG_FEED_RSS|format(slug=tag.slug) }}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} Tags RSS Feed" />
{% endif %}
{% from 'syndication.html' import syndication with context %}
{{ syndication(article) }}
<link rel="stylesheet" type="text/css" href="{{ SITEURL }}/{{ THEME_STATIC_DIR }}/css/pygment.css" />
<link rel="stylesheet" type="text/css" href="{{ SITEURL }}/{{ THEME_STATIC_DIR }}/css/{{ CSS_FILE }}" />
{% endblock head %}
</head>
<body>
<header id="banner">
<a href="{{ SITEURL }}" id="sitename">{{ SITENAME }}</a>
<span id="subtitle">{{ SITESUBTITLE }}</span>
<!-- /#banner -->
<nav id="menu">
{% for title, link in MENUITEMS %}
<a class="menu-item" href="{{ link }}">{{ title }}</a>
{% endfor %}
{% if DISPLAY_PAGES_ON_MENU %}
{% for p in pages %}
<span {% if p == page %} class="active"{% endif %}><a href="{{ SITEURL }}/{{ p.url }}">{{ p.title }}</a></span>
{% endfor %}
{% else %}
{% if DISPLAY_CATEGORIES_ON_MENU %}
{% for cat, null in categories %}
<li{% if cat == category %} class="active"{% endif %}><a href="{{ SITEURL }}/{{ cat.url }}">{{ cat }}</a></li>
{% endfor %}
{% endif %}
{% endif %}
</ul></nav>
</header><!-- /#menu -->
<span id="forkongithub"><a href="xmpp:hbsc@muc.lurk.org?join">Yes We're Config!™</a></span>
<div id='index' class='home'>
{% block content %}
{% endblock %}
</div>
</body>
</html>

View File

@ -0,0 +1,8 @@
{% extends "base.html" %}
{% block content %}
<div id="categories">
{% for category, articles in categories %}
<a href="{{ SITEURL }}/{{ category.url }}">{{ category }}</a>
{% endfor %}
</div>
{% endblock %}

View File

@ -0,0 +1,5 @@
{% extends "index.html" %}
{% block content_title %}
<div id="pertaining">Everything pertaining to {{ category }}</div>
{% endblock %}

View File

@ -0,0 +1,26 @@
{% extends "base.html" %}
{% block content %}
<section id="content">
{% block content_title %}
{% endblock %}
<ol id="post-list">
{% for article in articles_page.object_list %}
<ul><article class="hentry">
<header>
<div class="entry-title"><a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark" title="Permalink to {{ article.title|striptags }}">{{ article.title }}</a></div>
</header>
<div class="post-info">
<time class="published" datetime="{{ article.date.isoformat() }}"> <sup>{{ article.locale_date }}</sup> </time>
</div><!-- /.post-info -->
<div class="entry-content"> {{ article.summary }}</div>
<!-- /.entry-content -->
<div id="moaaar"><a href="{{SITEURL}}/{{ article.url }}">moaaar</a></div>
</article></ul>
{% endfor %}
</ol><!-- /#posts-list -->
{% if articles_page.has_other_pages() %}
{% include 'pagination.html' %}
{% endif %}
</section><!-- /#content -->
{% endblock content %}

View File

@ -0,0 +1,16 @@
{% extends "base.html" %}
{% block title %}{{ page.title }}{%endblock%}
{% block content %}
{% import 'translations.html' as translations with context %}
{{ translations.translations_for(page) }}
<div id ="page-content">
{{ page.content }}
{% if page.modified %}
<p>
Last updated: {{ page.locale_modified }}
</p>
{% endif %}
</div>
{% endblock %}

View File

@ -0,0 +1,11 @@
{% if DEFAULT_PAGINATION %}
<p class="paginator">
{% if articles_page.has_previous() %}
<a href="{{ SITEURL }}/{{ articles_previous_page.url }}">&laquo;</a>
{% endif %}
Page {{ articles_page.number }} / {{ articles_paginator.num_pages }}
{% if articles_page.has_next() %}
<a href="{{ SITEURL }}/{{ articles_next_page.url }}">&raquo;</a>
{% endif %}
</p>
{% endif %}

View File

@ -0,0 +1,11 @@
{% extends "base.html" %}
{% block content %}
<h1>Archives for {{ period | reverse | join(' ') }}</h1>
<dl>
{% for article in dates %}
<dt>{{ article.locale_date }}</dt>
<dd><a href="{{ SITEURL }}/{{ article.url }}">{{ article.title }}</a></dd>
{% endfor %}
</dl>
{% endblock %}

View File

@ -0,0 +1,56 @@
{#This template is for syndicating across the fucked up part of the web. It implements Open Graph and Twitter Card metadata to display links to HBSC well on social media
# This code is mostly taken from Talha Mansoor's Elegant pelican theme https://github.com/talha131/pelican-elegant
#}
{# Thumbnail image to show when homepage is shared on social media. It also
serves as the default image for posts whose featured_image is not set. #}
{% if not FEATURED_IMAGE %}
{% set FEATURED_IMAGE = 'http://homebrewserver.club/extra/featured_image_blue.png' %}
{% else %}
{% set FEATURED_IMAGE = FEATURED_IMAGE %}
{% endif %}
{% macro syndication(article) %}
{% if article %}
<meta property="og:title" content="{{ article.title|striptags|e }} {%if article.subtitle %} - {{ article.subtitle|striptags|e }} {% endif %}"/>
<meta property="og:url" content="{{ SITEURL }}/{{ article.url }}" />
<meta property="og:description" content="{{article.description|striptags|e}}" />
<meta property="og:site_name" content="{{ SITENAME|striptags|e }}" />
<meta property="og:article:author" content="{{ article.author }}" />
{% if article.date %}
<meta property="og:article:published_time" content="{{ article.date.isoformat() }}" />
{% endif %}
{% if article.locale_modified and article.modified %}
<meta property="" content="{{ article.modified.isoformat() }}" />
{% endif %}
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="{{ article.title|striptags|e }} {%if article.subtitle %} - {{ article.subtitle|striptags|e }} {% endif %}">
<meta name="twitter:description" content="{{article.description|striptags|e}}">
{% if article.featured_image %}
<meta property="og:image" content="{{article.featured_image}}" />
<meta name="twitter:image" content="{{article.featured_image}}" >
{% else %}
{% if FEATURED_IMAGE %}
<meta property="og:image" content="{{FEATURED_IMAGE}}" />
<meta name="twitter:image" content="{{FEATURED_IMAGE}}" >
{% endif %}
{% endif %}
{% endif %}
{% if not article %}
<meta property="og:title" content="{{ SITENAME|striptags|e }}"/>
<meta name="twitter:title" content="{{ SITENAME|striptags|e }}">
<meta name="twitter:card" content="summary" />
<meta property="og:url" content="{{ SITEURL }}" />
<meta property="og:description" content="A monthly gathering for those who (wish to) host their own online services from home, rather than using commercial and privacy unfriendly alternatives.">
<meta name="twitter:description" content="A monthly gathering for those who (wish to) host their own online services from home, rather than using commercial and privacy unfriendly alternatives.">
<meta property="og:site_name" content="{{ SITENAME|striptags|e }}" />
<meta property="og:article:author" content="{{ AUTHOR }}" />
{% if FEATURED_IMAGE %}
<meta property="og:image" content="{{FEATURED_IMAGE}}" />
<meta name="twitter:image" content="{{FEATURED_IMAGE}}" >
{% endif %}
{% endif %}
{% endmacro %}

View File

View File

@ -0,0 +1,10 @@
{% extends "base.html" %}
{% block title %}{{ SITENAME }} - Tags{% endblock %}
{% block content %}
<h1>Tags for {{ SITENAME }}</h1>
{%- for tag, articles in tags|sort %}
<li><a href="{{ SITEURL }}/{{ tag.url }}">{{ tag }}</a> ({{ articles|count }})</li>
{% endfor %}
{% endblock %}

View File

@ -0,0 +1,9 @@
{% macro translations_for(article) %}
{% if article.translations %}
Translations:
{% for translation in article.translations %}
<a href="{{ SITEURL }}/{{ translation.url }}">{{ translation.lang }}</a>
{% endfor %}
{% endif %}
{% endmacro %}