initial commit

This commit is contained in:
r 2017-07-06 14:28:42 +02:00
commit 65de0a5f8c
31 changed files with 1414 additions and 0 deletions

124
Makefile Normal file
View File

@ -0,0 +1,124 @@
PY?=python
PELICAN?=pelican
PELICANOPTS=
BASEDIR=$(CURDIR)
INPUTDIR=$(BASEDIR)/content
OUTPUTDIR=$(BASEDIR)/output
CONFFILE=$(BASEDIR)/pelicanconf.py
PUBLISHCONF=$(BASEDIR)/publishconf.py
FTP_HOST=localhost
FTP_USER=anonymous
FTP_TARGET_DIR=/
SSH_HOST=roelof.info
SSH_PORT=8282
SSH_USER=r
SSH_TARGET_DIR=/opt/wisselwerking
S3_BUCKET=my_s3_bucket
CLOUDFILES_USERNAME=my_rackspace_username
CLOUDFILES_API_KEY=my_rackspace_api_key
CLOUDFILES_CONTAINER=my_cloudfiles_container
DROPBOX_DIR=~/Dropbox/Public/
GITHUB_PAGES_BRANCH=gh-pages
DEBUG ?= 0
ifeq ($(DEBUG), 1)
PELICANOPTS += -D
endif
RELATIVE ?= 0
ifeq ($(RELATIVE), 1)
PELICANOPTS += --relative-urls
endif
help:
@echo 'Makefile for a pelican Web site '
@echo ' '
@echo 'Usage: '
@echo ' make html (re)generate the web site '
@echo ' make clean remove the generated files '
@echo ' make regenerate regenerate files upon modification '
@echo ' make publish generate using production settings '
@echo ' make serve [PORT=8000] serve site at http://localhost:8000'
@echo ' make serve-global [SERVER=0.0.0.0] serve (as root) to $(SERVER):80 '
@echo ' make devserver [PORT=8000] start/restart develop_server.sh '
@echo ' make stopserver stop local server '
@echo ' make ssh_upload upload the web site via SSH '
@echo ' make rsync_upload upload the web site via rsync+ssh '
@echo ' make dropbox_upload upload the web site via Dropbox '
@echo ' make ftp_upload upload the web site via FTP '
@echo ' make s3_upload upload the web site via S3 '
@echo ' make cf_upload upload the web site via Cloud Files'
@echo ' make github upload the web site via gh-pages '
@echo ' '
@echo 'Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html '
@echo 'Set the RELATIVE variable to 1 to enable relative urls '
@echo ' '
html:
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
clean:
[ ! -d $(OUTPUTDIR) ] || rm -rf $(OUTPUTDIR)
regenerate:
$(PELICAN) -r $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
serve:
ifdef PORT
cd $(OUTPUTDIR) && $(PY) -m pelican.server $(PORT)
else
cd $(OUTPUTDIR) && $(PY) -m pelican.server
endif
serve-global:
ifdef SERVER
cd $(OUTPUTDIR) && $(PY) -m pelican.server 80 $(SERVER)
else
cd $(OUTPUTDIR) && $(PY) -m pelican.server 80 0.0.0.0
endif
devserver:
ifdef PORT
$(BASEDIR)/develop_server.sh restart $(PORT)
else
$(BASEDIR)/develop_server.sh restart
endif
stopserver:
$(BASEDIR)/develop_server.sh stop
@echo 'Stopped Pelican and SimpleHTTPServer processes running in background.'
publish:
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(PUBLISHCONF) $(PELICANOPTS)
ssh_upload: publish
scp -P $(SSH_PORT) -r $(OUTPUTDIR)/* $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR)
rsync_upload: publish
rsync -e "ssh -p $(SSH_PORT)" -P -rvzc --delete $(OUTPUTDIR)/ $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) --cvs-exclude
dropbox_upload: publish
cp -r $(OUTPUTDIR)/* $(DROPBOX_DIR)
ftp_upload: publish
lftp ftp://$(FTP_USER)@$(FTP_HOST) -e "mirror -R $(OUTPUTDIR) $(FTP_TARGET_DIR) ; quit"
s3_upload: publish
s3cmd sync $(OUTPUTDIR)/ s3://$(S3_BUCKET) --acl-public --delete-removed --guess-mime-type --no-mime-magic --no-preserve
cf_upload: publish
cd $(OUTPUTDIR) && swift -v -A https://auth.api.rackspacecloud.com/v1.0 -U $(CLOUDFILES_USERNAME) -K $(CLOUDFILES_API_KEY) upload -c $(CLOUDFILES_CONTAINER) .
github: publish
ghp-import -m "Generate Pelican site" -b $(GITHUB_PAGES_BRANCH) $(OUTPUTDIR)
git push origin $(GITHUB_PAGES_BRANCH)
.PHONY: html help clean regenerate serve serve-global devserver stopserver publish ssh_upload rsync_upload dropbox_upload ftp_upload s3_upload cf_upload github

5
content/first_post.md Normal file
View File

@ -0,0 +1,5 @@
Title: first_post
Date: 2014-12-13 18:32
Category: Test
Hello world from Pelican!

103
develop_server.sh Executable file
View File

@ -0,0 +1,103 @@
#!/usr/bin/env bash
##
# This section should match your Makefile
##
PY=${PY:-python}
PELICAN=${PELICAN:-pelican}
PELICANOPTS=
BASEDIR=$(pwd)
INPUTDIR=$BASEDIR/content
OUTPUTDIR=$BASEDIR/output
CONFFILE=$BASEDIR/pelicanconf.py
###
# Don't change stuff below here unless you are sure
###
SRV_PID=$BASEDIR/srv.pid
PELICAN_PID=$BASEDIR/pelican.pid
function usage(){
echo "usage: $0 (stop) (start) (restart) [port]"
echo "This starts Pelican in debug and reload mode and then launches"
echo "an HTTP server to help site development. It doesn't read"
echo "your Pelican settings, so if you edit any paths in your Makefile"
echo "you will need to edit your settings as well."
exit 3
}
function alive() {
kill -0 $1 >/dev/null 2>&1
}
function shut_down(){
PID=$(cat $SRV_PID)
if [[ $? -eq 0 ]]; then
if alive $PID; then
echo "Stopping HTTP server"
kill $PID
else
echo "Stale PID, deleting"
fi
rm $SRV_PID
else
echo "HTTP server PIDFile not found"
fi
PID=$(cat $PELICAN_PID)
if [[ $? -eq 0 ]]; then
if alive $PID; then
echo "Killing Pelican"
kill $PID
else
echo "Stale PID, deleting"
fi
rm $PELICAN_PID
else
echo "Pelican PIDFile not found"
fi
}
function start_up(){
local port=$1
echo "Starting up Pelican and HTTP server"
shift
$PELICAN --debug --autoreload -r $INPUTDIR -o $OUTPUTDIR -s $CONFFILE $PELICANOPTS &
pelican_pid=$!
echo $pelican_pid > $PELICAN_PID
mkdir -p $OUTPUTDIR && cd $OUTPUTDIR
$PY -m pelican.server $port &
srv_pid=$!
echo $srv_pid > $SRV_PID
cd $BASEDIR
sleep 1
if ! alive $pelican_pid ; then
echo "Pelican didn't start. Is the Pelican package installed?"
return 1
elif ! alive $srv_pid ; then
echo "The HTTP server didn't start. Is there another service using port" $port "?"
return 1
fi
echo 'Pelican and HTTP server processes now running in background.'
}
###
# MAIN
###
[[ ($# -eq 0) || ($# -gt 2) ]] && usage
port=''
[[ $# -eq 2 ]] && port=$2
if [[ $1 == "stop" ]]; then
shut_down
elif [[ $1 == "restart" ]]; then
shut_down
start_up $port
elif [[ $1 == "start" ]]; then
if ! start_up $port; then
shut_down
fi
else
usage
fi

92
fabfile.py vendored Normal file
View File

@ -0,0 +1,92 @@
from fabric.api import *
import fabric.contrib.project as project
import os
import shutil
import sys
import SocketServer
from pelican.server import ComplexHTTPRequestHandler
# Local path configuration (can be absolute or relative to fabfile)
env.deploy_path = 'output'
DEPLOY_PATH = env.deploy_path
# Remote server configuration
production = 'r@roelof.info:8282'
dest_path = '/opt/wisselwerking'
# Rackspace Cloud Files configuration settings
env.cloudfiles_username = 'my_rackspace_username'
env.cloudfiles_api_key = 'my_rackspace_api_key'
env.cloudfiles_container = 'my_cloudfiles_container'
# Github Pages configuration
env.github_pages_branch = "gh-pages"
# Port for `serve`
PORT = 8000
def clean():
"""Remove generated files"""
if os.path.isdir(DEPLOY_PATH):
shutil.rmtree(DEPLOY_PATH)
os.makedirs(DEPLOY_PATH)
def build():
"""Build local version of site"""
local('pelican -s pelicanconf.py')
def rebuild():
"""`build` with the delete switch"""
local('pelican -d -s pelicanconf.py')
def regenerate():
"""Automatically regenerate site upon file modification"""
local('pelican -r -s pelicanconf.py')
def serve():
"""Serve site at http://localhost:8000/"""
os.chdir(env.deploy_path)
class AddressReuseTCPServer(SocketServer.TCPServer):
allow_reuse_address = True
server = AddressReuseTCPServer(('', PORT), ComplexHTTPRequestHandler)
sys.stderr.write('Serving on port {0} ...\n'.format(PORT))
server.serve_forever()
def reserve():
"""`build`, then `serve`"""
build()
serve()
def preview():
"""Build production version of site"""
local('pelican -s publishconf.py')
def cf_upload():
"""Publish to Rackspace Cloud Files"""
rebuild()
with lcd(DEPLOY_PATH):
local('swift -v -A https://auth.api.rackspacecloud.com/v1.0 '
'-U {cloudfiles_username} '
'-K {cloudfiles_api_key} '
'upload -c {cloudfiles_container} .'.format(**env))
@hosts(production)
def publish():
"""Publish to production via rsync"""
local('pelican -s publishconf.py')
project.rsync_project(
remote_dir=dest_path,
exclude=".DS_Store",
local_dir=DEPLOY_PATH.rstrip('/') + '/',
delete=True,
extra_opts='-c',
)
def gh_pages():
"""Publish to GitHub Pages"""
rebuild()
local("ghp-import -b {github_pages_branch} {deploy_path} -p".format(**env))

54
pelicanconf.py Normal file
View File

@ -0,0 +1,54 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals
AUTHOR = u'team'
SITENAME = u'Centrum Alledaagse Tecnologie'
SITEURL = ''
PATH = 'content'
TIMEZONE = 'Europe/Amsterdam'
DEFAULT_LANG = u'nl'
# Feed generation is usually not desired when developing
FEED_ALL_ATOM = None
CATEGORY_FEED_ATOM = None
TRANSLATION_FEED_ATOM = None
AUTHOR_FEED_ATOM = None
AUTHOR_FEED_RSS = None
# Blogroll
#LINKS = (('Pelican', 'http://getpelican.com/'),
# ('Python.org', 'http://python.org/'),
# ('Jinja2', 'http://jinja.pocoo.org/'),
# ('You can modify those links in your config file', '#'),)
# Social widget
#SOCIAL = (('You can add links in your config file', '#'),
('Another social link', '#'),)
DEFAULT_PAGINATION = 5
# Uncomment following line if you want document-relative URLs when developing
#RELATIVE_URLS = True
PLUGIN_PATHS = ['./plugins']
PLUGINS = ['extract_toc']
MD_EXTENSIONS = ['codehilite','extra','smarty', 'toc']
STATIC_PATHS = ['extra', 'images', 'pdfs']
EXTRA_PATH_METADATA = {
'extra/robots.txt': {'path': 'robots.txt'},
'extra/favicon.ico': {'path': 'favicon.ico'},
'extra/htaccess': {'path': '.htaccess'}
}
MENUITEMS=(
# adds extra menu items, the others are automatically generated as pages
('home', '/'),
)
THEME = 'themes/wisselwerking'

24
publishconf.py Normal file
View File

@ -0,0 +1,24 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals
# This file is only used if you use `make publish` or
# explicitly specify it as your config file.
import os
import sys
sys.path.append(os.curdir)
from pelicanconf import *
SITEURL = ''
RELATIVE_URLS = False
FEED_ALL_ATOM = 'feeds/all.atom.xml'
CATEGORY_FEED_ATOM = 'feeds/%s.atom.xml'
DELETE_OUTPUT_DIRECTORY = True
# Following items are often useful when publishing
#DISQUS_SITENAME = ""
#GOOGLE_ANALYTICS = ""

View File

@ -0,0 +1,228 @@
/*
2k17 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
*/
@font-face {
font-family: 'NowBlack';
src: url('../fonts/Now-Black.otf') format('opentype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'NowBold';
src: url('../fonts/Now-Bold.otf') format('opentype');
font-weight: bold;
font-style: normal;
}
@font-face {
font-family: 'NowLight';
src: url('../fonts/Now-Light.otf') format('opentype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'NowMedium';
src: url('../fonts/Now-Medium.otf') format('opentype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'NowRegular';
src: url('../fonts/Now-Regular.otf') format('opentype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'NowThin';
src: url('../fonts/Now-Thin.otf') format('opentype');
font-weight: normal;
font-style: normal;
}
header {
width:100%;
}
#banner {
margin-top:1em;
font-size: 60px;
transform: rotate(5deg);
}
hr {
background-color: #06061e;
color: #06061e;
height: 5px;
}
pre {
}
#menu{
font-size:40px;
font-weight:bold;
margin-top: 1em;
text-align:center;
}
body {
line-height:1.5em;
background-color: #06061e;
font-size: 16px;
margin: 0 auto;
width: 900px;
color:white;
font-family:"NowRegular";
font-style: normal;
}
a {
color:LimeGreen;
font-weight: bold;
}
.paginator{
float:right;
margin:0px;
}
#index{
}
#post-list {
padding-left:0px;
margin-top:0px;
}
ul {
padding-left:0px;
}
.hentry{
/*margin-top:2em;*/
border-width: 1px;
border-color: #444;
}
.article-info{
clear: right;
display: inline;
float: left;
margin-bottom: 5em;
max-width: 150px;
padding-right: em;
transform: rotate(-3deg);
}
.entry-title span{
width:100%;
display:inline-block;
}
.entry-content{
display: inline;
float: right;
margin-bottom: 2.5em;
max-width: 700px;
padding-right: 1em;
}
.entry-content pre{
font-size:20px;
padding-left:1em;
overflow: auto;
background-color: #F8F8F8;
line-height:1.2em;
}
.entry-content img{
max-width:100%;
border: 2px solid white;
}
p:nth-child(odd){
-ms-transform: rotate(1deg);
-webkit-transform: rotate(1deg);
transform: rotate(1deg);
}
p:nth-child(even){
-ms-transform: rotate(-1deg);
-webkit-transform: rotate(-1deg);
transform: rotate(-1deg);
}
.entry-content ul {
font-size:20px;
line-height:1.5;
margin: auto;
max-width:800px;
}
.highlight{
margin: auto;
max-width:800px;
}
#page-content img{
max-width:100%;
}
blockquote {
font-style:italic;
}
#content{
margin:auto;
}
.divider {
font-size:12px;
width:100%;
line-height:1em;
background-color:white;
}
.published{
font-size:smaller;
}
.article_tags{
font-size:smaller;
}
#categories {
font-size: 40px;
margin-top: 2em;
text-align: center;
}
#pertaining{
margin-top:2em;
text-align:center;
}
.simple-footnotes{
font-size:14px;
margin:auto;
max-width:800px;
}
.author{
font-size:smaller;
}

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.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,27 @@
// stars.js
// Random Stars
var generateStars = function(){
var $galaxy = $(".galaxy");
var iterator = 0;
while (iterator <= 100){
var xposition = Math.random();
var yposition = Math.random();
var star_type = Math.floor((Math.random() * 3) + 1);
var position = {
"x" : $galaxy.width() * xposition,
"y" : $galaxy.height() * yposition,
};
$('<div class="star star-type' + star_type + '"></div>').appendTo($galaxy).css({
"top" : position.y,
"left" : position.x
});
iterator++;
}
};
generateStars();

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 %}
<div class="file type_folder">
<a title="../" href="/log/" id="link0" class="type_folder"><img alt="../" src="/icons/back.png" class="type_folder"></a>
</br>
<span class="filename">../</span>
{% block content %}
<section id="content" class="body">
<div class="article-info">
<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) }}
<div class="post-info">
<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>
</div>
<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,69 @@
<!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(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(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(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(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 id="index" class="home">
<div class="galaxy"></div>
<header id="banner">
SPACEKEET
<span id="subtitle">{{ SITESUBTITLE }}</span>
</header><!-- /#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><hr></nav><!-- /#menu -->
{% block content %}
{% endblock %}
</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,14 @@
{% if GOSQUARED_SITENAME %}
<script type="text/javascript">
var GoSquared={};
GoSquared.acct = "{{ GOSQUARED_SITENAME }}";
(function(w){
function gs(){
w._gstc_lt=+(new Date); var d=document;
var g = d.createElement("script"); g.type = "text/javascript"; g.async = true; g.src = "https://d1l6p2sc9645hc.cloudfront.net/tracker.js";
var s = d.getElementsByTagName("script")[0]; s.parentNode.insertBefore(g, s);
}
w.addEventListener?w.addEventListener("load",gs,false):w.attachEvent("onload",gs);
})(window);
</script>
{% endif %}

View File

@ -0,0 +1,29 @@
{% extends "base.html" %}
{% block content %}
<section id="content">
{% block content_title %}
{% endblock %}
{% if articles_page.has_other_pages() %}
{% include 'pagination.html' %}
{% endif %}
<div id="post-list">
{% for article in articles_page.object_list %}
<article class="hentry">
<div class="article-info"> <span class="entry-title"><a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark" title="Permalink to {{ article.title|striptags }}">{{ article.title }}</a></span>
<div class="post-info">
<time class="published" datetime="{{ article.date.isoformat() }}"> <sup>{{ article.locale_date }}</sup> </time>
<div class ='article_tags'>
{%- for tag in article.tags %}
{{ tag }}
{% endfor %}
</div>
</div></div><!-- /.post-info -->
<div class="entry-content"> {{ article.content }}
<div class="separator"><hr></div>
</div><!-- /.entry-content -->
</article>
{% endfor %}
</div><!-- /#posts-list -->
</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,57 @@
{#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 = 'https://keet.space/images/keet.jpg' %}
{% 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 property="og:image:secure_url" 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="the spacekeet is a DIY satellite observatory trying to map out man-made space from the Utrecht Science Park">
<meta name="twitter:description" content="the spacekeet is a DIY satellite observatory trying to map out man-made psace from the Utrecht Science Park">
<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 %}