forked from varia/varia.website
r
7 years ago
commit
65de0a5f8c
31 changed files with 1414 additions and 0 deletions
@ -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 |
@ -0,0 +1,5 @@ |
|||
Title: first_post |
|||
Date: 2014-12-13 18:32 |
|||
Category: Test |
|||
|
|||
Hello world from Pelican! |
@ -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 |
@ -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)) |
@ -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' |
|||
|
@ -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 = "" |
@ -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; |
|||
} |
|||
|
|||
|
@ -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.
@ -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(); |
@ -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 %} |
@ -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 %} |
@ -0,0 +1,7 @@ |
|||
{% extends "index.html" %} |
|||
|
|||
{% block title %}{{ SITENAME }} - Articles by {{ author }}{% endblock %} |
|||
{% block content_title %} |
|||
<h2>Articles by {{ author }}</h2> |
|||
{% endblock %} |
|||
|
@ -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 %} |
@ -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> |
@ -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 %} |
@ -0,0 +1,5 @@ |
|||
{% extends "index.html" %} |
|||
{% block content_title %} |
|||
<div id="pertaining">Everything pertaining to {{ category }}</div> |
|||
{% endblock %} |
|||
|
@ -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 %} |
@ -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 %} |
@ -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 %} |
@ -0,0 +1,11 @@ |
|||
{% if DEFAULT_PAGINATION %} |
|||
<p class="paginator"> |
|||
{% if articles_page.has_previous() %} |
|||
<a href="{{ SITEURL }}/{{ articles_previous_page.url }}">«</a> |
|||
{% endif %} |
|||
Page {{ articles_page.number }} / {{ articles_paginator.num_pages }} |
|||
{% if articles_page.has_next() %} |
|||
<a href="{{ SITEURL }}/{{ articles_next_page.url }}">»</a> |
|||
{% endif %} |
|||
</p> |
|||
{% endif %} |
@ -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 %} |
@ -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 %} |
|||
|
|||
|
@ -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 %} |
@ -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 %} |
|||
|
Loading…
Reference in new issue