@ -0,0 +1,6 @@
|
||||
.git |
||||
.DS_Store |
||||
*.pyc |
||||
output/* |
||||
themes/* |
||||
cache |
@ -0,0 +1,119 @@
|
||||
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 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 ' '
|
||||
|
||||
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: |
||||
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 serve-global devserver publish ssh_upload rsync_upload dropbox_upload ftp_upload s3_upload cf_upload github |
@ -0,0 +1,10 @@
|
||||
title: Projects |
||||
date: Jan 29, 2015 |
||||
|
||||
The things we're doing: |
||||
|
||||
||| |
||||
-|-|- |
||||
![#ShowtimesTH](http://zzyzx.co/static/showtimes-logo-144.png) | [#ShowtimesTH](http://showtimes.everyday.in.th/) | [![Play Store](http://zzyzx.co/static/en_generic_rgb_wo_45.png)](https://play.google.com/store/apps/details?id=co.zzyzx.showtimes.android) |
||||
![Expensy](http://getexpensy.com/static/images/logo_144.png) | [Expensy](http://getexpensy.com) | [![Play Store](http://zzyzx.co/static/en_generic_rgb_wo_45.png)](https://play.google.com/store/apps/details?id=co.zzyzx.expensy) |
||||
| |
@ -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 |
@ -0,0 +1,104 @@
|
||||
from fabric.api import * |
||||
import fabric.contrib.project as project |
||||
import os |
||||
import shutil |
||||
import sys |
||||
import SimpleHTTPServer |
||||
import SocketServer |
||||
|
||||
|
||||
theme_path = '/Volumes/momentus-xt/home/sipp11/dev/pelican-themes/twenty-html5up/' |
||||
# 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' |
||||
|
||||
# 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(): |
||||
"""`clean` then `build`""" |
||||
clean() |
||||
build() |
||||
|
||||
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), SimpleHTTPServer.SimpleHTTPRequestHandler) |
||||
|
||||
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}".format(**env)) |
||||
local("git push origin {github_pages_branch}".format(**env)) |
||||
|
||||
|
||||
def collectstatic(): |
||||
if os.path.isdir(DEPLOY_PATH): |
||||
local('mkdir -p {deploy_path}/css/ {deploy_path}/js/ {deploy_path}/fonts/ {deploy_path}/images/'.format(**env)) |
||||
local('cp -rf {theme_path}/twenty/static/css/* {deploy_path}/css/'.format(**env)) |
||||
local('cp -rf {theme_path}/twenty/static/js/* {deploy_path}/js/'.format(**env)) |
||||
local('cp -rf {theme_path}/twenty/static/fonts/* {deploy_path}/fonts/'.format(**env)) |
||||
local('cp -rf {theme_path}/twenty/static/images/* {deploy_path}/images/'.format(**env)) |
@ -0,0 +1,23 @@
|
||||
from jinja2.utils import Markup |
||||
from jinja2._compat import text_type |
||||
import re |
||||
|
||||
|
||||
def do_stringtags_and_img(value): |
||||
""" |
||||
Strip SGML/XML tags and replace adjacent whitespace by one space. |
||||
""" |
||||
if hasattr(value, '__html__'): |
||||
value = value.__html__() |
||||
no_img_part = re.sub(r'<img(.?)*src=\"(.?)*[\"\s\/>]+?', "", value) |
||||
return Markup(text_type(no_img_part)).striptags() |
||||
|
||||
|
||||
def sidebar(value): |
||||
value = '%s' % value |
||||
if value.startswith('archives') or value.startswith('category'): |
||||
return 'right-sidebar' |
||||
elif value == 'index': |
||||
return 'index' |
||||
else: |
||||
return 'no-sidebar' |
@ -0,0 +1,68 @@
|
||||
#!/usr/bin/env python |
||||
# -*- coding: utf-8 -*- # |
||||
from __future__ import unicode_literals |
||||
|
||||
AUTHOR = u'sipp11' |
||||
SITENAME = u'everyday' |
||||
SITEURL = 'http://everyday.in.th' |
||||
|
||||
PATH = 'content' |
||||
|
||||
TIMEZONE = 'Asia/Bangkok' |
||||
|
||||
DEFAULT_LANG = u'th' |
||||
PDF_GENERATOR = True |
||||
DISQUS_SITENAME = 'everyday-in-th' |
||||
GOOGLE_ANALYTICS = 'UA-34877059-5' |
||||
# 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 |
||||
|
||||
ARTICLE_PATHS = ['blog', 'tech'] |
||||
ARTICLE_SAVE_AS = '{date:%Y}/{date:%m}/{slug}/index.html' |
||||
ARTICLE_URL = '{date:%Y}/{date:%m}/{slug}/' |
||||
|
||||
PAGE_URL = 'pages/{slug}/' |
||||
PAGE_SAVE_AS = 'pages/{slug}/index.html' |
||||
|
||||
CATEGORY_URL = 'category/{slug}/' |
||||
CATEGORY_SAVE_AS = 'category/{slug}/index.html' |
||||
|
||||
TAG_URL = 'tag/{slug}/' |
||||
TAG_SAVE_AS = 'tag/{slug}/index.html' |
||||
|
||||
DISPLAY_PAGES_ON_MENU = True |
||||
|
||||
TYPOGRIFY = True |
||||
|
||||
# Blogroll |
||||
LINKS = ( |
||||
# ('Pelican', 'http://getpelican.com/'), |
||||
# ('Python.org', 'http://python.org/'), |
||||
# ('Jinja2', 'http://jinja.pocoo.org/'), |
||||
) |
||||
|
||||
# Social widget |
||||
SOCIAL = ( |
||||
) |
||||
|
||||
AUTHORS = { |
||||
u'sipp11': '/about.html', |
||||
} |
||||
DEFAULT_PAGINATION = 10 |
||||
|
||||
# Uncomment following line if you want document-relative URLs when developing |
||||
RELATIVE_URLS = True |
||||
THEME = 'themes/notmyideaever' |
||||
# THEME = 'themes/chameleon' |
||||
|
||||
import sys |
||||
sys.path.append('.') |
||||
from filters import sidebar, do_stringtags_and_img |
||||
JINJA_FILTERS = { |
||||
'sidebar': sidebar, |
||||
'stringtags_and_img': do_stringtags_and_img, |
||||
} |
@ -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,454 @@
|
||||
/* |
||||
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; } |
||||
|
||||
p>img { width: 100%; } |
||||
.muted { color: #aaa; } |
||||
|
||||
/* 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;} |
@ -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; |
||||
} |
@ -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; |
||||
} |
@ -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;} |
@ -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; |
||||
} |
After Width: | Height: | Size: 751 B |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 958 B |
After Width: | Height: | Size: 202 B |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 227 B |
After Width: | Height: | Size: 487 B |
After Width: | Height: | Size: 803 B |
After Width: | Height: | Size: 527 B |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 975 B |
After Width: | Height: | Size: 896 B |
After Width: | Height: | Size: 693 B |
After Width: | Height: | Size: 879 B |
After Width: | Height: | Size: 535 B |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 916 B |
After Width: | Height: | Size: 830 B |
After Width: | Height: | Size: 544 B |
After Width: | Height: | Size: 458 B |
@ -0,0 +1,46 @@
|
||||
{% if GOOGLE_ANALYTICS %} |
||||
<script type="text/javascript"> |
||||
var _gaq = _gaq || []; |
||||
_gaq.push(['_setAccount', '{{GOOGLE_ANALYTICS}}']); |
||||
_gaq.push(['_trackPageview']); |
||||
(function() { |
||||
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; |
||||
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; |
||||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); |
||||
})(); |
||||
</script> |
||||
{% endif %} |
||||
{% if GAUGES %} |
||||
<script type="text/javascript"> |
||||
var _gauges = _gauges || []; |
||||
(function() { |
||||
var t = document.createElement('script'); |
||||
t.type = 'text/javascript'; |
||||
t.async = true; |
||||
t.id = 'gauges-tracker'; |
||||
t.setAttribute('data-site-id', '{{GAUGES}}'); |
||||
t.src = '//secure.gaug.es/track.js'; |
||||
var s = document.getElementsByTagName('script')[0]; |
||||
s.parentNode.insertBefore(t, s); |
||||
})(); |
||||
</script> |
||||
{% endif %} |
||||
{% 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 %} |
@ -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 %} |
@ -0,0 +1,41 @@
|
||||
{% 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 --> |
||||
|
||||
{% include 'most_recent.html' %} |
||||
<br/><br/> |
||||
|
||||
{% 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 %} |
@ -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 --> |
@ -0,0 +1,2 @@
|
||||
{% extends "index.html" %} |
||||
{% block title %}{{ SITENAME }} - {{ author }}{% endblock %} |
@ -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 %} |
@ -0,0 +1,82 @@
|
||||
<!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"> |
||||
{% include 'github.html' %} |
||||
<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 --> |
||||
|
||||
<footer id="contentinfo" class="body"> |
||||
<address id="about" class="vcard body"> |
||||
Proudly powered by <a href="http://getpelican.com/">Pelican</a>, which takes great advantage of <a href="http://python.org">Python</a>. |
||||
</address><!-- /#about --> |
||||
|
||||
<p>The theme is by <a href="http://coding.smashingmagazine.com/2009/08/04/designing-a-html-5-layout-from-scratch/">Smashing Magazine</a>, thanks!</p> |
||||
</footer><!-- /#contentinfo --> |
||||
|
||||
{% include 'analytics.html' %} |
||||
{% include 'disqus_script.html' %} |
||||
</body> |
||||
</html> |
@ -0,0 +1,2 @@
|
||||
{% extends "index.html" %} |
||||
{% block title %}{{ SITENAME }} - {{ category }}{% endblock %} |
@ -0,0 +1 @@
|
||||
{% if DISQUS_SITENAME %}<p>There are <a href="{{ SITEURL }}/{{ article.url }}#disqus_thread">comments</a>.</p>{% endif %} |
@ -0,0 +1,11 @@
|
||||
{% if DISQUS_SITENAME %} |
||||
<script type="text/javascript"> |
||||
var disqus_shortname = '{{ DISQUS_SITENAME }}'; |
||||
(function () { |
||||
var s = document.createElement('script'); s.async = true; |
||||
s.type = 'text/javascript'; |
||||
s.src = '//' + disqus_shortname + '.disqus.com/count.js'; |
||||
(document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s); |
||||
}()); |
||||
</script> |
||||
{% endif %} |
@ -0,0 +1,9 @@
|
||||
{% if GITHUB_URL %} |
||||
<a href="{{ GITHUB_URL }}"> |
||||
{% if GITHUB_POSITION != "left" %} |
||||
<img style="position: absolute; top: 0; right: 0; border: 0;" src="http://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub" /> |
||||
{% else %} |
||||
<img style="position: absolute; top: 0; left: 0; border: 0;" src="http://s3.amazonaws.com/github/ribbons/forkme_left_white_ffffff.png" alt="Fork me on GitHub" /> |
||||
{% endif %} |
||||
</a> |
||||
{% endif %} |
@ -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 %} |
@ -0,0 +1,14 @@
|
||||
<section class="wrapper style1 container special"> |
||||
<br/> |
||||
<h2>Most Recents</h2> |
||||
<div class="row"> |
||||
<ul> |
||||
{% for article in articles[:3] %} |
||||
<li> |
||||
<a href="{{ SITEURL }}/{{ article.url }}" rel='bookmark'>{{ article.title }}</a> |
||||
{{ article.content[:196]|stringtags_and_img }} <span class="muted">{{ article.locale_date }}</span> |
||||
</li> |
||||
{% endfor %} |
||||
</ul> |
||||
</div> |
||||
</section> |
@ -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 %} |
@ -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 %} |
@ -0,0 +1,2 @@
|
||||
{% extends "index.html" %} |
||||
{% block title %}{{ SITENAME }} - {{ tag }}{% endblock %} |
@ -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 %} |
@ -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 %} |
@ -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 %} |
@ -0,0 +1,3 @@
|
||||
{% if TWITTER_USERNAME %} |
||||
<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="{{TWITTER_USERNAME}}">Tweet</a><script type="text/javascript" src="//platform.twitter.com/widgets.js"></script> |
||||
{% endif %} |