First skeleton
This commit is contained in:
commit
33da375312
34 changed files with 1473 additions and 0 deletions
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
output
|
||||
.*.sw.
|
||||
cache
|
||||
*.pid
|
||||
*.pyc
|
110
Makefile
Normal file
110
Makefile
Normal file
|
@ -0,0 +1,110 @@
|
|||
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=localhost
|
||||
SSH_PORT=22
|
||||
SSH_USER=root
|
||||
SSH_TARGET_DIR=/var/www
|
||||
|
||||
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
|
||||
|
||||
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 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 ' '
|
||||
|
||||
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
|
||||
|
||||
devserver:
|
||||
ifdef PORT
|
||||
$(BASEDIR)/develop_server.sh restart $(PORT)
|
||||
else
|
||||
$(BASEDIR)/develop_server.sh restart
|
||||
endif
|
||||
|
||||
stopserver:
|
||||
kill -9 `cat pelican.pid`
|
||||
kill -9 `cat srv.pid`
|
||||
@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
|
||||
|
||||
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 devserver publish ssh_upload rsync_upload dropbox_upload ftp_upload s3_upload cf_upload github
|
12
content/pages/dove.en.rst
Normal file
12
content/pages/dove.en.rst
Normal file
|
@ -0,0 +1,12 @@
|
|||
Come arrivare
|
||||
###################
|
||||
|
||||
:date: 2015-03-13 12:00
|
||||
:slug: where
|
||||
:navbar_sort: 2
|
||||
:lang: en
|
||||
|
||||
Hackmeeting 2015 will be at Mensa Occupata, an occupied space in the real
|
||||
centre of Naples. The address is "via Mezzocannone"
|
||||
|
||||
|
10
content/pages/dove.rst
Normal file
10
content/pages/dove.rst
Normal file
|
@ -0,0 +1,10 @@
|
|||
Come arrivare
|
||||
###################
|
||||
|
||||
:date: 2015-03-13 12:00
|
||||
:slug: where
|
||||
:navbar_sort: 2
|
||||
|
||||
L'Hackmeeting del 2015 si terrà alla Mensa Occupata di via Mezzocannone. La via
|
||||
è situata nel pieno centro di Napoli.
|
||||
|
9
content/pages/index.en.rst
Normal file
9
content/pages/index.en.rst
Normal file
|
@ -0,0 +1,9 @@
|
|||
Home
|
||||
###################
|
||||
|
||||
:slug: index
|
||||
:navbar_sort: 1
|
||||
:lang: en
|
||||
|
||||
Hackmeeting 2015 will be held in Naples. The date will soon be defined.
|
||||
|
8
content/pages/index.rst
Normal file
8
content/pages/index.rst
Normal file
|
@ -0,0 +1,8 @@
|
|||
Home
|
||||
###################
|
||||
|
||||
:save_as: index.html
|
||||
:slug: index
|
||||
:navbar_sort: 1
|
||||
|
||||
L'hackmeeting del 2015 si terrà a Napoli. La data verrà decisa a breve.
|
103
develop_server.sh
Executable file
103
develop_server.sh
Executable 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
|
||||
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
|
73
fabfile.py
vendored
Normal file
73
fabfile.py
vendored
Normal file
|
@ -0,0 +1,73 @@
|
|||
from fabric.api import *
|
||||
import fabric.contrib.project as project
|
||||
import os
|
||||
import sys
|
||||
import SimpleHTTPServer
|
||||
import SocketServer
|
||||
|
||||
# Local path configuration (can be absolute or relative to fabfile)
|
||||
env.deploy_path = 'output'
|
||||
DEPLOY_PATH = env.deploy_path
|
||||
|
||||
# Remote server configuration
|
||||
production = 'root@localhost:22'
|
||||
dest_path = '/var/www'
|
||||
|
||||
# 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'
|
||||
|
||||
|
||||
def clean():
|
||||
if os.path.isdir(DEPLOY_PATH):
|
||||
local('rm -rf {deploy_path}'.format(**env))
|
||||
local('mkdir {deploy_path}'.format(**env))
|
||||
|
||||
def build():
|
||||
local('pelican -s pelicanconf.py')
|
||||
|
||||
def rebuild():
|
||||
clean()
|
||||
build()
|
||||
|
||||
def regenerate():
|
||||
local('pelican -r -s pelicanconf.py')
|
||||
|
||||
def serve():
|
||||
os.chdir(env.deploy_path)
|
||||
|
||||
PORT = 8000
|
||||
class AddressReuseTCPServer(SocketServer.TCPServer):
|
||||
allow_reuse_address = True
|
||||
|
||||
server = AddressReuseTCPServer(('', PORT), SimpleHTTPServer.SimpleHTTPRequestHandler)
|
||||
|
||||
sys.stderr.write('Serving on port {0} ...\n'.format(PORT))
|
||||
server.serve_forever()
|
||||
|
||||
def reserve():
|
||||
build()
|
||||
serve()
|
||||
|
||||
def preview():
|
||||
local('pelican -s publishconf.py')
|
||||
|
||||
def cf_upload():
|
||||
rebuild()
|
||||
local('cd {deploy_path} && '
|
||||
'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():
|
||||
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',
|
||||
)
|
44
pelicanconf.py
Normal file
44
pelicanconf.py
Normal file
|
@ -0,0 +1,44 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*- #
|
||||
from __future__ import unicode_literals
|
||||
|
||||
AUTHOR = u'Hackmeeting'
|
||||
SITENAME = u'Hackmeeting 0x11'
|
||||
# SITEURL = 'http://hackmeeting.org/hackit15'
|
||||
|
||||
PATH = 'content'
|
||||
PAGE_PATHS = ['pages']
|
||||
ARTICLE_PATHS = ['news']
|
||||
|
||||
TIMEZONE = 'Europe/Paris'
|
||||
|
||||
DEFAULT_LANG = u'it'
|
||||
|
||||
# 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 = None
|
||||
# Social widget
|
||||
SOCIAL = None
|
||||
DEFAULT_PAGINATION = 10
|
||||
|
||||
# Uncomment following line if you want document-relative URLs when developing
|
||||
#RELATIVE_URLS = True
|
||||
|
||||
DISPLAY_CATEGORIES_ON_MENU = False
|
||||
DEFAULT_DATE = (2015, 3, 1)
|
||||
TYPOGRIFY = True
|
||||
|
||||
PAGE_ORDER_BY = 'navbar_sort'
|
||||
|
||||
PAGE_URL = '{slug}.html'
|
||||
PAGE_SAVE_AS = '{slug}.html'
|
||||
PAGE_LANG_URL = '{slug}.{lang}.html'
|
||||
PAGE_LANG_SAVE_AS = '{slug}.{lang}.html'
|
||||
|
||||
THEME = 'themes/hm15'
|
24
publishconf.py
Normal file
24
publishconf.py
Normal 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 = '/hackit15'
|
||||
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 = ""
|
14
requirements.txt
Normal file
14
requirements.txt
Normal file
|
@ -0,0 +1,14 @@
|
|||
blinker==1.3
|
||||
docutils==0.12
|
||||
feedgenerator==1.7
|
||||
Jinja2==2.7.3
|
||||
Markdown==2.6.1
|
||||
MarkupSafe==0.23
|
||||
pelican==3.5.0
|
||||
Pygments==2.0.2
|
||||
python-dateutil==2.4.1
|
||||
pytz==2014.10
|
||||
six==1.9.0
|
||||
smartypants==1.8.6
|
||||
typogrify==2.0.7
|
||||
Unidecode==0.4.17
|
451
themes/hm15/static/css/main.css
Normal file
451
themes/hm15/static/css/main.css
Normal file
|
@ -0,0 +1,451 @@
|
|||
/*
|
||||
Name: Smashing HTML5
|
||||
Date: July 2009
|
||||
Description: Sample layout for HTML5 and CSS3 goodness.
|
||||
Version: 1.0
|
||||
License: MIT <http://opensource.org/licenses/MIT>
|
||||
Licensed by: Smashing Media GmbH <http://www.smashingmagazine.com/>
|
||||
Original author: Enrique Ramírez <http://enrique-ramirez.com/>
|
||||
*/
|
||||
|
||||
/* Imports */
|
||||
@import url("reset.css");
|
||||
@import url("pygment.css");
|
||||
@import url("typogrify.css");
|
||||
@import url(//fonts.googleapis.com/css?family=Yanone+Kaffeesatz&subset=latin);
|
||||
|
||||
/***** Global *****/
|
||||
/* Body */
|
||||
body {
|
||||
background: #F5F4EF;
|
||||
color: #000305;
|
||||
font-size: 87.5%; /* Base font size: 14px */
|
||||
font-family: 'Trebuchet MS', Trebuchet, 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
|
||||
line-height: 1.429;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
/* Headings */
|
||||
h1 {font-size: 2em }
|
||||
h2 {font-size: 1.571em} /* 22px */
|
||||
h3 {font-size: 1.429em} /* 20px */
|
||||
h4 {font-size: 1.286em} /* 18px */
|
||||
h5 {font-size: 1.143em} /* 16px */
|
||||
h6 {font-size: 1em} /* 14px */
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-weight: 400;
|
||||
line-height: 1.1;
|
||||
margin-bottom: .8em;
|
||||
font-family: 'Yanone Kaffeesatz', arial, serif;
|
||||
}
|
||||
|
||||
h3, h4, h5, h6 { margin-top: .8em; }
|
||||
|
||||
hr { border: 2px solid #EEEEEE; }
|
||||
|
||||
/* Anchors */
|
||||
a {outline: 0;}
|
||||
a img {border: 0px; text-decoration: none;}
|
||||
a:link, a:visited {
|
||||
color: #C74350;
|
||||
padding: 0 1px;
|
||||
text-decoration: underline;
|
||||
}
|
||||
a:hover, a:active {
|
||||
background-color: #C74350;
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
text-shadow: 1px 1px 1px #333;
|
||||
}
|
||||
|
||||
h1 a:hover {
|
||||
background-color: inherit
|
||||
}
|
||||
|
||||
/* Paragraphs */
|
||||
div.line-block,
|
||||
p { margin-top: 1em;
|
||||
margin-bottom: 1em;}
|
||||
|
||||
strong, b {font-weight: bold;}
|
||||
em, i {font-style: italic;}
|
||||
|
||||
/* Lists */
|
||||
ul {
|
||||
list-style: outside disc;
|
||||
margin: 0em 0 0 1.5em;
|
||||
}
|
||||
|
||||
ol {
|
||||
list-style: outside decimal;
|
||||
margin: 0em 0 0 1.5em;
|
||||
}
|
||||
|
||||
li { margin-top: 0.5em;}
|
||||
|
||||
.post-info {
|
||||
float:right;
|
||||
margin:10px;
|
||||
padding:5px;
|
||||
}
|
||||
|
||||
.post-info p{
|
||||
margin-top: 1px;
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
|
||||
.readmore { float: right }
|
||||
|
||||
dl {margin: 0 0 1.5em 0;}
|
||||
dt {font-weight: bold;}
|
||||
dd {margin-left: 1.5em;}
|
||||
|
||||
pre{background-color: rgb(238, 238, 238); padding: 10px; margin: 10px; overflow: auto;}
|
||||
|
||||
/* Quotes */
|
||||
blockquote {
|
||||
margin: 20px;
|
||||
font-style: italic;
|
||||
}
|
||||
cite {}
|
||||
|
||||
q {}
|
||||
|
||||
div.note {
|
||||
float: right;
|
||||
margin: 5px;
|
||||
font-size: 85%;
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
/* Tables */
|
||||
table {margin: .5em auto 1.5em auto; width: 98%;}
|
||||
|
||||
/* Thead */
|
||||
thead th {padding: .5em .4em; text-align: left;}
|
||||
thead td {}
|
||||
|
||||
/* Tbody */
|
||||
tbody td {padding: .5em .4em;}
|
||||
tbody th {}
|
||||
|
||||
tbody .alt td {}
|
||||
tbody .alt th {}
|
||||
|
||||
/* Tfoot */
|
||||
tfoot th {}
|
||||
tfoot td {}
|
||||
|
||||
/* HTML5 tags */
|
||||
header, section, footer,
|
||||
aside, nav, article, figure {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/***** Layout *****/
|
||||
.body {clear: both; margin: 0 auto; width: 800px;}
|
||||
img.right, figure.right {float: right; margin: 0 0 2em 2em;}
|
||||
img.left, figure.left {float: left; margin: 0 2em 2em 0;}
|
||||
|
||||
/*
|
||||
Header
|
||||
*****************/
|
||||
#banner {
|
||||
margin: 0 auto;
|
||||
padding: 2.5em 0 0 0;
|
||||
}
|
||||
|
||||
/* Banner */
|
||||
#banner h1 {font-size: 3.571em; line-height: 0;}
|
||||
#banner h1 a:link, #banner h1 a:visited {
|
||||
color: #000305;
|
||||
display: block;
|
||||
font-weight: bold;
|
||||
margin: 0 0 .6em .2em;
|
||||
text-decoration: none;
|
||||
}
|
||||
#banner h1 a:hover, #banner h1 a:active {
|
||||
background: none;
|
||||
color: #C74350;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
#banner h1 strong {font-size: 0.36em; font-weight: normal;}
|
||||
|
||||
/* Main Nav */
|
||||
#banner nav {
|
||||
background: #000305;
|
||||
font-size: 1.143em;
|
||||
height: 40px;
|
||||
line-height: 30px;
|
||||
margin: 0 auto 2em auto;
|
||||
padding: 0;
|
||||
text-align: center;
|
||||
width: 800px;
|
||||
|
||||
border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
-webkit-border-radius: 5px;
|
||||
}
|
||||
|
||||
#banner nav ul {list-style: none; margin: 0 auto; width: 800px;}
|
||||
#banner nav li {float: left; display: inline; margin: 0;}
|
||||
|
||||
#banner nav a:link, #banner nav a:visited {
|
||||
color: #fff;
|
||||
display: inline-block;
|
||||
height: 30px;
|
||||
padding: 5px 1.5em;
|
||||
text-decoration: none;
|
||||
}
|
||||
#banner nav a:hover, #banner nav a:active,
|
||||
#banner nav .active a:link, #banner nav .active a:visited {
|
||||
background: #C74451;
|
||||
color: #fff;
|
||||
text-shadow: none !important;
|
||||
}
|
||||
|
||||
#banner nav li:first-child a {
|
||||
border-top-left-radius: 5px;
|
||||
-moz-border-radius-topleft: 5px;
|
||||
-webkit-border-top-left-radius: 5px;
|
||||
|
||||
border-bottom-left-radius: 5px;
|
||||
-moz-border-radius-bottomleft: 5px;
|
||||
-webkit-border-bottom-left-radius: 5px;
|
||||
}
|
||||
|
||||
/*
|
||||
Featured
|
||||
*****************/
|
||||
#featured {
|
||||
background: #fff;
|
||||
margin-bottom: 2em;
|
||||
overflow: hidden;
|
||||
padding: 20px;
|
||||
width: 760px;
|
||||
|
||||
border-radius: 10px;
|
||||
-moz-border-radius: 10px;
|
||||
-webkit-border-radius: 10px;
|
||||
}
|
||||
|
||||
#featured figure {
|
||||
border: 2px solid #eee;
|
||||
float: right;
|
||||
margin: 0.786em 2em 0 5em;
|
||||
width: 248px;
|
||||
}
|
||||
#featured figure img {display: block; float: right;}
|
||||
|
||||
#featured h2 {color: #C74451; font-size: 1.714em; margin-bottom: 0.333em;}
|
||||
#featured h3 {font-size: 1.429em; margin-bottom: .5em;}
|
||||
|
||||
#featured h3 a:link, #featured h3 a:visited {color: #000305; text-decoration: none;}
|
||||
#featured h3 a:hover, #featured h3 a:active {color: #fff;}
|
||||
|
||||
/*
|
||||
Body
|
||||
*****************/
|
||||
#content {
|
||||
background: #fff;
|
||||
margin-bottom: 2em;
|
||||
overflow: hidden;
|
||||
padding: 20px 20px;
|
||||
width: 760px;
|
||||
|
||||
border-radius: 10px;
|
||||
-moz-border-radius: 10px;
|
||||
-webkit-border-radius: 10px;
|
||||
}
|
||||
|
||||
/*
|
||||
Extras
|
||||
*****************/
|
||||
#extras {margin: 0 auto 3em auto; overflow: hidden;}
|
||||
|
||||
#extras ul {list-style: none; margin: 0;}
|
||||
#extras li {border-bottom: 1px solid #fff;}
|
||||
#extras h2 {
|
||||
color: #C74350;
|
||||
font-size: 1.429em;
|
||||
margin-bottom: .25em;
|
||||
padding: 0 3px;
|
||||
}
|
||||
|
||||
#extras a:link, #extras a:visited {
|
||||
color: #444;
|
||||
display: block;
|
||||
border-bottom: 1px solid #F4E3E3;
|
||||
text-decoration: none;
|
||||
padding: .3em .25em;
|
||||
}
|
||||
|
||||
#extras a:hover, #extras a:active {color: #fff;}
|
||||
|
||||
/* Blogroll */
|
||||
#extras .blogroll {
|
||||
float: left;
|
||||
width: 615px;
|
||||
}
|
||||
|
||||
#extras .blogroll li {float: left; margin: 0 20px 0 0; width: 185px;}
|
||||
|
||||
/* Social */
|
||||
#extras .social {
|
||||
float: right;
|
||||
width: 175px;
|
||||
}
|
||||
|
||||
#extras div[class='social'] a {
|
||||
background-repeat: no-repeat;
|
||||
background-position: 3px 6px;
|
||||
padding-left: 25px;
|
||||
}
|
||||
|
||||
/* Icons */
|
||||
.social a[href*='about.me'] {background-image: url('../images/icons/aboutme.png');}
|
||||
.social a[href*='bitbucket.org'] {background-image: url('../images/icons/bitbucket.png');}
|
||||
.social a[href*='delicious.com'] {background-image: url('../images/icons/delicious.png');}
|
||||
.social a[href*='digg.com'] {background-image: url('../images/icons/digg.png');}
|
||||
.social a[href*='facebook.com'] {background-image: url('../images/icons/facebook.png');}
|
||||
.social a[href*='gitorious.org'] {background-image: url('../images/icons/gitorious.png');}
|
||||
.social a[href*='github.com'],
|
||||
.social a[href*='git.io'] {
|
||||
background-image: url('../images/icons/github.png');
|
||||
background-size: 16px 16px;
|
||||
}
|
||||
.social a[href*='gittip.com'] {background-image: url('../images/icons/gittip.png');}
|
||||
.social a[href*='plus.google.com'] {background-image: url('../images/icons/google-plus.png');}
|
||||
.social a[href*='groups.google.com'] {background-image: url('../images/icons/google-groups.png');}
|
||||
.social a[href*='news.ycombinator.com'],
|
||||
.social a[href*='hackernewsers.com'] {background-image: url('../images/icons/hackernews.png');}
|
||||
.social a[href*='last.fm'], .social a[href*='lastfm.'] {background-image: url('../images/icons/lastfm.png');}
|
||||
.social a[href*='linkedin.com'] {background-image: url('../images/icons/linkedin.png');}
|
||||
.social a[href*='reddit.com'] {background-image: url('../images/icons/reddit.png');}
|
||||
.social a[type$='atom+xml'], .social a[type$='rss+xml'] {background-image: url('../images/icons/rss.png');}
|
||||
.social a[href*='slideshare.net'] {background-image: url('../images/icons/slideshare.png');}
|
||||
.social a[href*='speakerdeck.com'] {background-image: url('../images/icons/speakerdeck.png');}
|
||||
.social a[href*='stackoverflow.com'] {background-image: url('../images/icons/stackoverflow.png');}
|
||||
.social a[href*='twitter.com'] {background-image: url('../images/icons/twitter.png');}
|
||||
.social a[href*='vimeo.com'] {background-image: url('../images/icons/vimeo.png');}
|
||||
.social a[href*='youtube.com'] {background-image: url('../images/icons/youtube.png');}
|
||||
|
||||
/*
|
||||
About
|
||||
*****************/
|
||||
#about {
|
||||
background: #fff;
|
||||
font-style: normal;
|
||||
margin-bottom: 2em;
|
||||
overflow: hidden;
|
||||
padding: 20px;
|
||||
text-align: left;
|
||||
width: 760px;
|
||||
|
||||
border-radius: 10px;
|
||||
-moz-border-radius: 10px;
|
||||
-webkit-border-radius: 10px;
|
||||
}
|
||||
|
||||
#about .primary {float: left; width: 165px;}
|
||||
#about .primary strong {color: #C64350; display: block; font-size: 1.286em;}
|
||||
#about .photo {float: left; margin: 5px 20px;}
|
||||
|
||||
#about .url:link, #about .url:visited {text-decoration: none;}
|
||||
|
||||
#about .bio {float: right; width: 500px;}
|
||||
|
||||
/*
|
||||
Footer
|
||||
*****************/
|
||||
#contentinfo {padding-bottom: 2em; text-align: right;}
|
||||
|
||||
/***** Sections *****/
|
||||
/* Blog */
|
||||
.hentry {
|
||||
display: block;
|
||||
clear: both;
|
||||
border-bottom: 1px solid #eee;
|
||||
padding: 1.5em 0;
|
||||
}
|
||||
li:last-child .hentry, #content > .hentry {border: 0; margin: 0;}
|
||||
#content > .hentry {padding: 1em 0;}
|
||||
.hentry img{display : none ;}
|
||||
.entry-title {font-size: 3em; margin-bottom: 10px; margin-top: 0;}
|
||||
.entry-title a:link, .entry-title a:visited {text-decoration: none; color: #333;}
|
||||
.entry-title a:visited {background-color: #fff;}
|
||||
|
||||
.hentry .post-info * {font-style: normal;}
|
||||
|
||||
/* Content */
|
||||
.hentry footer {margin-bottom: 2em;}
|
||||
.hentry footer address {display: inline;}
|
||||
#posts-list footer address {display: block;}
|
||||
|
||||
/* Blog Index */
|
||||
#posts-list {list-style: none; margin: 0;}
|
||||
#posts-list .hentry {padding-left: 10px; position: relative;}
|
||||
|
||||
#posts-list footer {
|
||||
left: 10px;
|
||||
position: relative;
|
||||
float: left;
|
||||
top: 0.5em;
|
||||
width: 190px;
|
||||
}
|
||||
|
||||
/* About the Author */
|
||||
#about-author {
|
||||
background: #f9f9f9;
|
||||
clear: both;
|
||||
font-style: normal;
|
||||
margin: 2em 0;
|
||||
padding: 10px 20px 15px 20px;
|
||||
|
||||
border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
-webkit-border-radius: 5px;
|
||||
}
|
||||
|
||||
#about-author strong {
|
||||
color: #C64350;
|
||||
clear: both;
|
||||
display: block;
|
||||
font-size: 1.429em;
|
||||
}
|
||||
|
||||
#about-author .photo {border: 1px solid #ddd; float: left; margin: 5px 1em 0 0;}
|
||||
|
||||
/* Comments */
|
||||
#comments-list {list-style: none; margin: 0 1em;}
|
||||
#comments-list blockquote {
|
||||
background: #f8f8f8;
|
||||
clear: both;
|
||||
font-style: normal;
|
||||
margin: 0;
|
||||
padding: 15px 20px;
|
||||
|
||||
border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
-webkit-border-radius: 5px;
|
||||
}
|
||||
#comments-list footer {color: #888; padding: .5em 1em 0 0; text-align: right;}
|
||||
|
||||
#comments-list li:nth-child(2n) blockquote {background: #F5f5f5;}
|
||||
|
||||
/* Add a Comment */
|
||||
#add-comment label {clear: left; float: left; text-align: left; width: 150px;}
|
||||
#add-comment input[type='text'],
|
||||
#add-comment input[type='email'],
|
||||
#add-comment input[type='url'] {float: left; width: 200px;}
|
||||
|
||||
#add-comment textarea {float: left; height: 150px; width: 495px;}
|
||||
|
||||
#add-comment p.req {clear: both; margin: 0 .5em 1em 0; text-align: right;}
|
||||
|
||||
#add-comment input[type='submit'] {float: right; margin: 0 .5em;}
|
||||
#add-comment * {margin-bottom: .5em;}
|
205
themes/hm15/static/css/pygment.css
Normal file
205
themes/hm15/static/css/pygment.css
Normal file
|
@ -0,0 +1,205 @@
|
|||
.hll {
|
||||
background-color:#eee;
|
||||
}
|
||||
.c {
|
||||
color:#408090;
|
||||
font-style:italic;
|
||||
}
|
||||
.err {
|
||||
border:1px solid #FF0000;
|
||||
}
|
||||
.k {
|
||||
color:#007020;
|
||||
font-weight:bold;
|
||||
}
|
||||
.o {
|
||||
color:#666666;
|
||||
}
|
||||
.cm {
|
||||
color:#408090;
|
||||
font-style:italic;
|
||||
}
|
||||
.cp {
|
||||
color:#007020;
|
||||
}
|
||||
.c1 {
|
||||
color:#408090;
|
||||
font-style:italic;
|
||||
}
|
||||
.cs {
|
||||
background-color:#FFF0F0;
|
||||
color:#408090;
|
||||
}
|
||||
.gd {
|
||||
color:#A00000;
|
||||
}
|
||||
.ge {
|
||||
font-style:italic;
|
||||
}
|
||||
.gr {
|
||||
color:#FF0000;
|
||||
}
|
||||
.gh {
|
||||
color:#000080;
|
||||
font-weight:bold;
|
||||
}
|
||||
.gi {
|
||||
color:#00A000;
|
||||
}
|
||||
.go {
|
||||
color:#303030;
|
||||
}
|
||||
.gp {
|
||||
color:#C65D09;
|
||||
font-weight:bold;
|
||||
}
|
||||
.gs {
|
||||
font-weight:bold;
|
||||
}
|
||||
.gu {
|
||||
color:#800080;
|
||||
font-weight:bold;
|
||||
}
|
||||
.gt {
|
||||
color:#0040D0;
|
||||
}
|
||||
.kc {
|
||||
color:#007020;
|
||||
font-weight:bold;
|
||||
}
|
||||
.kd {
|
||||
color:#007020;
|
||||
font-weight:bold;
|
||||
}
|
||||
.kn {
|
||||
color:#007020;
|
||||
font-weight:bold;
|
||||
}
|
||||
.kp {
|
||||
color:#007020;
|
||||
}
|
||||
.kr {
|
||||
color:#007020;
|
||||
font-weight:bold;
|
||||
}
|
||||
.kt {
|
||||
color:#902000;
|
||||
}
|
||||
.m {
|
||||
color:#208050;
|
||||
}
|
||||
.s {
|
||||
color:#4070A0;
|
||||
}
|
||||
.na {
|
||||
color:#4070A0;
|
||||
}
|
||||
.nb {
|
||||
color:#007020;
|
||||
}
|
||||
.nc {
|
||||
color:#0E84B5;
|
||||
font-weight:bold;
|
||||
}
|
||||
.no {
|
||||
color:#60ADD5;
|
||||
}
|
||||
.nd {
|
||||
color:#555555;
|
||||
font-weight:bold;
|
||||
}
|
||||
.ni {
|
||||
color:#D55537;
|
||||
font-weight:bold;
|
||||
}
|
||||
.ne {
|
||||
color:#007020;
|
||||
}
|
||||
.nf {
|
||||
color:#06287E;
|
||||
}
|
||||
.nl {
|
||||
color:#002070;
|
||||
font-weight:bold;
|
||||
}
|
||||
.nn {
|
||||
color:#0E84B5;
|
||||
font-weight:bold;
|
||||
}
|
||||
.nt {
|
||||
color:#062873;
|
||||
font-weight:bold;
|
||||
}
|
||||
.nv {
|
||||
color:#BB60D5;
|
||||
}
|
||||
.ow {
|
||||
color:#007020;
|
||||
font-weight:bold;
|
||||
}
|
||||
.w {
|
||||
color:#BBBBBB;
|
||||
}
|
||||
.mf {
|
||||
color:#208050;
|
||||
}
|
||||
.mh {
|
||||
color:#208050;
|
||||
}
|
||||
.mi {
|
||||
color:#208050;
|
||||
}
|
||||
.mo {
|
||||
color:#208050;
|
||||
}
|
||||
.sb {
|
||||
color:#4070A0;
|
||||
}
|
||||
.sc {
|
||||
color:#4070A0;
|
||||
}
|
||||
.sd {
|
||||
color:#4070A0;
|
||||
font-style:italic;
|
||||
}
|
||||
.s2 {
|
||||
color:#4070A0;
|
||||
}
|
||||
.se {
|
||||
color:#4070A0;
|
||||
font-weight:bold;
|
||||
}
|
||||
.sh {
|
||||
color:#4070A0;
|
||||
}
|
||||
.si {
|
||||
color:#70A0D0;
|
||||
font-style:italic;
|
||||
}
|
||||
.sx {
|
||||
color:#C65D09;
|
||||
}
|
||||
.sr {
|
||||
color:#235388;
|
||||
}
|
||||
.s1 {
|
||||
color:#4070A0;
|
||||
}
|
||||
.ss {
|
||||
color:#517918;
|
||||
}
|
||||
.bp {
|
||||
color:#007020;
|
||||
}
|
||||
.vc {
|
||||
color:#BB60D5;
|
||||
}
|
||||
.vg {
|
||||
color:#BB60D5;
|
||||
}
|
||||
.vi {
|
||||
color:#BB60D5;
|
||||
}
|
||||
.il {
|
||||
color:#208050;
|
||||
}
|
52
themes/hm15/static/css/reset.css
Normal file
52
themes/hm15/static/css/reset.css
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
Name: Reset Stylesheet
|
||||
Description: Resets browser's default CSS
|
||||
Author: Eric Meyer
|
||||
Author URI: http://meyerweb.com/eric/tools/css/reset/
|
||||
*/
|
||||
|
||||
/* v1.0 | 20080212 */
|
||||
html, body, div, span, applet, object, iframe,
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||
a, abbr, acronym, address, big, cite, code,
|
||||
del, dfn, em, font, img, ins, kbd, q, s, samp,
|
||||
small, strike, strong, sub, sup, tt, var,
|
||||
b, u, i, center,
|
||||
dl, dt, dd, ol, ul, li,
|
||||
fieldset, form, label, legend,
|
||||
table, caption, tbody, tfoot, thead, tr, th, td {
|
||||
background: transparent;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
margin: 0;
|
||||
outline: 0;
|
||||
padding: 0;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
body {line-height: 1;}
|
||||
|
||||
ol, ul {list-style: none;}
|
||||
|
||||
blockquote, q {quotes: none;}
|
||||
|
||||
blockquote:before, blockquote:after,
|
||||
q:before, q:after {
|
||||
content: '';
|
||||
content: none;
|
||||
}
|
||||
|
||||
/* remember to define focus styles! */
|
||||
:focus {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
/* remember to highlight inserts somehow! */
|
||||
ins {text-decoration: none;}
|
||||
del {text-decoration: line-through;}
|
||||
|
||||
/* tables still need 'cellspacing="0"' in the markup */
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
3
themes/hm15/static/css/typogrify.css
Normal file
3
themes/hm15/static/css/typogrify.css
Normal file
|
@ -0,0 +1,3 @@
|
|||
.caps {font-size:.92em;}
|
||||
.amp {color:#666; font-size:1.05em;font-family:"Warnock Pro", "Goudy Old Style","Palatino","Book Antiqua",serif; font-style:italic;}
|
||||
.dquo {margin-left:-.38em;}
|
48
themes/hm15/static/css/wide.css
Normal file
48
themes/hm15/static/css/wide.css
Normal file
|
@ -0,0 +1,48 @@
|
|||
@import url("main.css");
|
||||
|
||||
body {
|
||||
font:1.3em/1.3 "Hoefler Text","Georgia",Georgia,serif,sans-serif;
|
||||
}
|
||||
|
||||
.post-info{
|
||||
display: none;
|
||||
}
|
||||
|
||||
#banner nav {
|
||||
display: none;
|
||||
-moz-border-radius: 0px;
|
||||
margin-bottom: 20px;
|
||||
overflow: hidden;
|
||||
font-size: 1em;
|
||||
background: #F5F4EF;
|
||||
}
|
||||
|
||||
#banner nav ul{
|
||||
padding-right: 50px;
|
||||
}
|
||||
|
||||
#banner nav li{
|
||||
float: right;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
#banner nav li a {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
#banner h1 {
|
||||
margin-bottom: -18px;
|
||||
}
|
||||
|
||||
#featured, #extras {
|
||||
padding: 50px;
|
||||
}
|
||||
|
||||
#featured {
|
||||
padding-top: 20px;
|
||||
}
|
||||
|
||||
#extras {
|
||||
padding-top: 0px;
|
||||
padding-bottom: 0px;
|
||||
}
|
BIN
themes/hm15/static/images/icons/rss.png
Normal file
BIN
themes/hm15/static/images/icons/rss.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 879 B |
13
themes/hm15/templates/archives.html
Normal file
13
themes/hm15/templates/archives.html
Normal file
|
@ -0,0 +1,13 @@
|
|||
{% extends "base.html" %}
|
||||
{% block content %}
|
||||
<section id="content" class="body">
|
||||
<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>
|
||||
</section>
|
||||
{% endblock %}
|
37
themes/hm15/templates/article.html
Normal file
37
themes/hm15/templates/article.html
Normal file
|
@ -0,0 +1,37 @@
|
|||
{% extends "base.html" %}
|
||||
{% block title %}{{ article.title|striptags }}{% endblock %}
|
||||
{% block content %}
|
||||
<section id="content" class="body">
|
||||
<article>
|
||||
<header>
|
||||
<h1 class="entry-title">
|
||||
<a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark"
|
||||
title="Permalink to {{ article.title|striptags }}">{{ article.title }}</a></h1>
|
||||
{% include 'twitter.html' %}
|
||||
</header>
|
||||
|
||||
<div class="entry-content">
|
||||
{% include 'article_infos.html' %}
|
||||
{{ article.content }}
|
||||
</div><!-- /.entry-content -->
|
||||
{% if DISQUS_SITENAME and SITEURL and article.status != "draft" %}
|
||||
<div class="comments">
|
||||
<h2>Comments !</h2>
|
||||
<div id="disqus_thread"></div>
|
||||
<script type="text/javascript">
|
||||
var disqus_shortname = '{{ DISQUS_SITENAME }}';
|
||||
var disqus_identifier = '{{ article.url }}';
|
||||
var disqus_url = '{{ SITEURL }}/{{ article.url }}';
|
||||
(function() {
|
||||
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
|
||||
dsq.src = '//{{ DISQUS_SITENAME }}.disqus.com/embed.js';
|
||||
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
|
||||
})();
|
||||
</script>
|
||||
<noscript>Please enable JavaScript to view the comments.</noscript>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
</article>
|
||||
</section>
|
||||
{% endblock %}
|
23
themes/hm15/templates/article_infos.html
Normal file
23
themes/hm15/templates/article_infos.html
Normal file
|
@ -0,0 +1,23 @@
|
|||
<footer class="post-info">
|
||||
<abbr class="published" title="{{ article.date.isoformat() }}">
|
||||
Published: {{ article.locale_date }}
|
||||
</abbr>
|
||||
{% if article.modified %}
|
||||
<br />
|
||||
<abbr class="modified" title="{{ article.modified.isoformat() }}">
|
||||
Updated: {{ article.locale_modified }}
|
||||
</abbr>
|
||||
{% 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 %}
|
||||
<p>In <a href="{{ SITEURL }}/{{ article.category.url }}">{{ article.category }}</a>. {% if PDF_PROCESSOR %}<a href="{{ SITEURL }}/pdf/{{ article.slug }}.pdf">get the pdf</a>{% endif %}</p>
|
||||
{% include 'taglist.html' %}
|
||||
{% import 'translations.html' as translations with context %}
|
||||
{{ translations.translations_for(article) }}
|
||||
</footer><!-- /.post-info -->
|
2
themes/hm15/templates/author.html
Normal file
2
themes/hm15/templates/author.html
Normal file
|
@ -0,0 +1,2 @@
|
|||
{% extends "index.html" %}
|
||||
{% block title %}{{ SITENAME }} - {{ author }}{% endblock %}
|
16
themes/hm15/templates/authors.html
Normal file
16
themes/hm15/templates/authors.html
Normal file
|
@ -0,0 +1,16 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}{{ SITENAME }} - Authors{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<section id="content" class="body">
|
||||
<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>
|
||||
</section>
|
||||
|
||||
{% endblock %}
|
71
themes/hm15/templates/base.html
Normal file
71
themes/hm15/templates/base.html
Normal file
|
@ -0,0 +1,71 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="{{ DEFAULT_LANG }}">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>{% block title %}{{ SITENAME }}{%endblock%}</title>
|
||||
<link rel="stylesheet" href="{{ SITEURL }}/{{ THEME_STATIC_DIR }}/css/{{ CSS_FILE }}" />
|
||||
{% if FEED_ALL_ATOM %}
|
||||
<link href="{{ FEED_DOMAIN }}/{{ FEED_ALL_ATOM }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Atom Feed" />
|
||||
{% endif %}
|
||||
{% if FEED_ALL_RSS %}
|
||||
<link href="{{ FEED_DOMAIN }}/{{ FEED_ALL_RSS }}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} RSS Feed" />
|
||||
{% endif %}
|
||||
|
||||
<!--[if IE]>
|
||||
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
|
||||
<body id="index" class="home">
|
||||
<header id="banner" class="body">
|
||||
<h1><a href="{{ SITEURL }}/">{{ SITENAME }} {% if SITESUBTITLE %} <strong>{{ SITESUBTITLE }}</strong>{% endif %}</a></h1>
|
||||
<nav><ul>
|
||||
{% for title, link in MENUITEMS %}
|
||||
<li><a href="{{ link }}">{{ title }}</a></li>
|
||||
{% endfor %}
|
||||
{% if DISPLAY_PAGES_ON_MENU -%}
|
||||
{% for pg in PAGES %}
|
||||
<li{% if pg == page %} class="active"{% endif %}><a href="{{ SITEURL }}/{{ pg.url }}">{{ pg.title }}</a></li>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% 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 %}
|
||||
</ul></nav>
|
||||
</header><!-- /#banner -->
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
<section id="extras" class="body">
|
||||
{% if LINKS %}
|
||||
<div class="blogroll">
|
||||
<h2>blogroll</h2>
|
||||
<ul>
|
||||
{% for name, link in LINKS %}
|
||||
<li><a href="{{ link }}">{{ name }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div><!-- /.blogroll -->
|
||||
{% endif %}
|
||||
{% if SOCIAL or FEED_ALL_ATOM or FEED_ALL_RSS %}
|
||||
<div class="social">
|
||||
<h2>social</h2>
|
||||
<ul>
|
||||
{% if FEED_ALL_ATOM %}
|
||||
<li><a href="{{ FEED_DOMAIN }}/{{ FEED_ALL_ATOM }}" type="application/atom+xml" rel="alternate">atom feed</a></li>
|
||||
{% endif %}
|
||||
{% if FEED_ALL_RSS %}
|
||||
<li><a href="{{ FEED_DOMAIN }}/{{ FEED_ALL_RSS }}" type="application/rss+xml" rel="alternate">rss feed</a></li>
|
||||
{% endif %}
|
||||
|
||||
{% for name, link in SOCIAL %}
|
||||
<li><a href="{{ link }}">{{ name }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div><!-- /.social -->
|
||||
{% endif %}
|
||||
</section><!-- /#extras -->
|
||||
|
||||
</body>
|
||||
</html>
|
2
themes/hm15/templates/category.html
Normal file
2
themes/hm15/templates/category.html
Normal file
|
@ -0,0 +1,2 @@
|
|||
{% extends "index.html" %}
|
||||
{% block title %}{{ SITENAME }} - {{ category }}{% endblock %}
|
1
themes/hm15/templates/comments.html
Normal file
1
themes/hm15/templates/comments.html
Normal file
|
@ -0,0 +1 @@
|
|||
{% if DISQUS_SITENAME %}<p>There are <a href="{{ SITEURL }}/{{ article.url }}#disqus_thread">comments</a>.</p>{% endif %}
|
64
themes/hm15/templates/index.html
Normal file
64
themes/hm15/templates/index.html
Normal file
|
@ -0,0 +1,64 @@
|
|||
{% extends "base.html" %}
|
||||
{% block content_title %}{% endblock %}
|
||||
{% block content %}
|
||||
{% if articles %}
|
||||
{% for article in articles_page.object_list %}
|
||||
|
||||
{# First item #}
|
||||
{% if loop.first and not articles_page.has_previous() %}
|
||||
<aside id="featured" class="body">
|
||||
<article>
|
||||
<h1 class="entry-title"><a href="{{ SITEURL }}/{{ article.url }}">{{ article.title }}</a></h1>
|
||||
{% include 'article_infos.html' %}{{ article.content }}{% include 'comments.html' %}
|
||||
</article>
|
||||
{% if loop.length == 1 %}
|
||||
{% include 'pagination.html' %}
|
||||
{% endif %}
|
||||
</aside><!-- /#featured -->
|
||||
{% if loop.length > 1 %}
|
||||
<section id="content" class="body">
|
||||
<h1>Other articles</h1>
|
||||
<hr />
|
||||
<ol id="posts-list" class="hfeed">
|
||||
{% endif %}
|
||||
{# other items #}
|
||||
{% else %}
|
||||
{% if loop.first and articles_page.has_previous %}
|
||||
<section id="content" class="body">
|
||||
<ol id="posts-list" class="hfeed" start="{{ articles_paginator.per_page -1 }}">
|
||||
{% endif %}
|
||||
<li><article class="hentry">
|
||||
<header>
|
||||
<h1><a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark"
|
||||
title="Permalink to {{ article.title|striptags }}">{{ article.title }}</a></h1>
|
||||
</header>
|
||||
|
||||
<div class="entry-content">
|
||||
{% include 'article_infos.html' %}
|
||||
{{ article.summary }}
|
||||
<a class="readmore" href="{{ SITEURL }}/{{ article.url }}">read more</a>
|
||||
{% include 'comments.html' %}
|
||||
</div><!-- /.entry-content -->
|
||||
</article></li>
|
||||
{% endif %}
|
||||
{% if loop.last %}
|
||||
{% if loop.length > 1 %}
|
||||
</ol><!-- /#posts-list -->
|
||||
{% endif %}
|
||||
{% if articles_page.has_previous() or loop.length > 1 %}
|
||||
{% include 'pagination.html' %}
|
||||
{% endif %}
|
||||
{% if loop.length > 1 %}
|
||||
</section><!-- /#content -->
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<section id="content" class="body">
|
||||
<h2>Pages</h2>
|
||||
{% for page in PAGES %}
|
||||
<li><a href="{{ SITEURL }}/{{ page.url }}">{{ page.title }}</a></li>
|
||||
{% endfor %}
|
||||
</section>
|
||||
{% endif %}
|
||||
{% endblock content %}
|
12
themes/hm15/templates/page.html
Normal file
12
themes/hm15/templates/page.html
Normal file
|
@ -0,0 +1,12 @@
|
|||
{% extends "base.html" %}
|
||||
{% block title %}{{ page.title }}{% endblock %}
|
||||
{% block content %}
|
||||
<section id="content" class="body">
|
||||
<h1 class="entry-title">{{ page.title }}</h1>
|
||||
{% import 'translations.html' as translations with context %}
|
||||
{{ translations.translations_for(page) }}
|
||||
{% if PDF_PROCESSOR %}<a href="{{ SITEURL }}/pdf/{{ page.slug }}.pdf">get
|
||||
the pdf</a>{% endif %}
|
||||
{{ page.content }}
|
||||
</section>
|
||||
{% endblock %}
|
13
themes/hm15/templates/period_archives.html
Normal file
13
themes/hm15/templates/period_archives.html
Normal file
|
@ -0,0 +1,13 @@
|
|||
{% extends "base.html" %}
|
||||
{% block content %}
|
||||
<section id="content" class="body">
|
||||
<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>
|
||||
</section>
|
||||
{% endblock %}
|
19
themes/hm15/templates/piwik.html
Normal file
19
themes/hm15/templates/piwik.html
Normal file
|
@ -0,0 +1,19 @@
|
|||
{% if PIWIK_URL and PIWIK_SITE_ID %}
|
||||
<script type="text/javascript">
|
||||
{% if PIWIK_SSL_URL %}
|
||||
var pkBaseURL = "{{ PIWIK_SSL_URL }}";
|
||||
{% else %}
|
||||
var pkBaseURL = "{{ PIWIK_URL }}";
|
||||
{% endif %}
|
||||
var _paq = _paq || [];
|
||||
_paq.push(["trackPageView"]);
|
||||
_paq.push(["enableLinkTracking"]);
|
||||
(function() {
|
||||
var u=(("https:" == document.location.protocol) ? "https" : "http")+"://"+pkBaseURL+"/";
|
||||
_paq.push(["setTrackerUrl", u+"piwik.php"]);
|
||||
_paq.push(["setSiteId", "{{ PIWIK_SITE_ID }}"]);
|
||||
var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0]; g.type="text/javascript";
|
||||
g.defer=true; g.async=true; g.src=u+"piwik.js"; s.parentNode.insertBefore(g,s);
|
||||
})();
|
||||
</script>
|
||||
{% endif %}
|
2
themes/hm15/templates/tag.html
Normal file
2
themes/hm15/templates/tag.html
Normal file
|
@ -0,0 +1,2 @@
|
|||
{% extends "index.html" %}
|
||||
{% block title %}{{ SITENAME }} - {{ tag }}{% endblock %}
|
2
themes/hm15/templates/taglist.html
Normal file
2
themes/hm15/templates/taglist.html
Normal file
|
@ -0,0 +1,2 @@
|
|||
{% if article.tags %}<p>tags: {% for tag in article.tags %}<a href="{{ SITEURL }}/{{ tag.url }}">{{ tag | escape }}</a> {% endfor %}</p>{% endif %}
|
||||
{% if PDF_PROCESSOR %}<p><a href="{{ SITEURL }}/pdf/{{ article.slug }}.pdf">get the pdf</a></p>{% endif %}
|
16
themes/hm15/templates/tags.html
Normal file
16
themes/hm15/templates/tags.html
Normal file
|
@ -0,0 +1,16 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}{{ SITENAME }} - Tags{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<section id="content" class="body">
|
||||
<h1>Tags for {{ SITENAME }}</h1>
|
||||
<ul>
|
||||
{% for tag, articles in tags|sort %}
|
||||
<li><a href="{{ SITEURL }}/{{ tag.url }}">{{ tag }}</a> ({{ articles|count }})</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
{% endblock %}
|
8
themes/hm15/templates/translations.html
Normal file
8
themes/hm15/templates/translations.html
Normal file
|
@ -0,0 +1,8 @@
|
|||
{% macro translations_for(article) %}
|
||||
{% if article.translations %}
|
||||
Translations:
|
||||
{% for translation in article.translations %}
|
||||
<a href="{{ SITEURL }}/{{ translation.url }}">{{ translation.lang }}</a>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endmacro %}
|
1
themes/hm15/templates/twitter.html
Normal file
1
themes/hm15/templates/twitter.html
Normal file
|
@ -0,0 +1 @@
|
|||
|
Loading…
Reference in a new issue