From 33da375312e88a28bf43359c606992c60868fb6e Mon Sep 17 00:00:00 2001 From: boyska Date: Fri, 13 Mar 2015 12:58:31 +0100 Subject: [PATCH] First skeleton --- .gitignore | 5 + Makefile | 110 +++++ content/pages/dove.en.rst | 12 + content/pages/dove.rst | 10 + content/pages/index.en.rst | 9 + content/pages/index.rst | 8 + develop_server.sh | 103 +++++ fabfile.py | 73 ++++ pelicanconf.py | 44 ++ publishconf.py | 24 ++ requirements.txt | 14 + themes/hm15/static/css/main.css | 451 +++++++++++++++++++++ themes/hm15/static/css/pygment.css | 205 ++++++++++ themes/hm15/static/css/reset.css | 52 +++ themes/hm15/static/css/typogrify.css | 3 + themes/hm15/static/css/wide.css | 48 +++ themes/hm15/static/images/icons/rss.png | Bin 0 -> 879 bytes themes/hm15/templates/archives.html | 13 + themes/hm15/templates/article.html | 37 ++ themes/hm15/templates/article_infos.html | 23 ++ themes/hm15/templates/author.html | 2 + themes/hm15/templates/authors.html | 16 + themes/hm15/templates/base.html | 71 ++++ themes/hm15/templates/category.html | 2 + themes/hm15/templates/comments.html | 1 + themes/hm15/templates/index.html | 64 +++ themes/hm15/templates/page.html | 12 + themes/hm15/templates/period_archives.html | 13 + themes/hm15/templates/piwik.html | 19 + themes/hm15/templates/tag.html | 2 + themes/hm15/templates/taglist.html | 2 + themes/hm15/templates/tags.html | 16 + themes/hm15/templates/translations.html | 8 + themes/hm15/templates/twitter.html | 1 + 34 files changed, 1473 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 content/pages/dove.en.rst create mode 100644 content/pages/dove.rst create mode 100644 content/pages/index.en.rst create mode 100644 content/pages/index.rst create mode 100755 develop_server.sh create mode 100644 fabfile.py create mode 100644 pelicanconf.py create mode 100644 publishconf.py create mode 100644 requirements.txt create mode 100644 themes/hm15/static/css/main.css create mode 100644 themes/hm15/static/css/pygment.css create mode 100644 themes/hm15/static/css/reset.css create mode 100644 themes/hm15/static/css/typogrify.css create mode 100644 themes/hm15/static/css/wide.css create mode 100644 themes/hm15/static/images/icons/rss.png create mode 100644 themes/hm15/templates/archives.html create mode 100644 themes/hm15/templates/article.html create mode 100644 themes/hm15/templates/article_infos.html create mode 100644 themes/hm15/templates/author.html create mode 100644 themes/hm15/templates/authors.html create mode 100644 themes/hm15/templates/base.html create mode 100644 themes/hm15/templates/category.html create mode 100644 themes/hm15/templates/comments.html create mode 100644 themes/hm15/templates/index.html create mode 100644 themes/hm15/templates/page.html create mode 100644 themes/hm15/templates/period_archives.html create mode 100644 themes/hm15/templates/piwik.html create mode 100644 themes/hm15/templates/tag.html create mode 100644 themes/hm15/templates/taglist.html create mode 100644 themes/hm15/templates/tags.html create mode 100644 themes/hm15/templates/translations.html create mode 100644 themes/hm15/templates/twitter.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ccc0e83 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +output +.*.sw. +cache +*.pid +*.pyc diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..dc640c3 --- /dev/null +++ b/Makefile @@ -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 diff --git a/content/pages/dove.en.rst b/content/pages/dove.en.rst new file mode 100644 index 0000000..a302bb8 --- /dev/null +++ b/content/pages/dove.en.rst @@ -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" + + diff --git a/content/pages/dove.rst b/content/pages/dove.rst new file mode 100644 index 0000000..2147203 --- /dev/null +++ b/content/pages/dove.rst @@ -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. + diff --git a/content/pages/index.en.rst b/content/pages/index.en.rst new file mode 100644 index 0000000..0d4beee --- /dev/null +++ b/content/pages/index.en.rst @@ -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. + diff --git a/content/pages/index.rst b/content/pages/index.rst new file mode 100644 index 0000000..be7873f --- /dev/null +++ b/content/pages/index.rst @@ -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. diff --git a/develop_server.sh b/develop_server.sh new file mode 100755 index 0000000..8c2f27f --- /dev/null +++ b/develop_server.sh @@ -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 diff --git a/fabfile.py b/fabfile.py new file mode 100644 index 0000000..39dd7aa --- /dev/null +++ b/fabfile.py @@ -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', + ) diff --git a/pelicanconf.py b/pelicanconf.py new file mode 100644 index 0000000..992dbc1 --- /dev/null +++ b/pelicanconf.py @@ -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' diff --git a/publishconf.py b/publishconf.py new file mode 100644 index 0000000..a038a4b --- /dev/null +++ b/publishconf.py @@ -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 = "" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..12d13da --- /dev/null +++ b/requirements.txt @@ -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 diff --git a/themes/hm15/static/css/main.css b/themes/hm15/static/css/main.css new file mode 100644 index 0000000..2efb518 --- /dev/null +++ b/themes/hm15/static/css/main.css @@ -0,0 +1,451 @@ +/* + Name: Smashing HTML5 + Date: July 2009 + Description: Sample layout for HTML5 and CSS3 goodness. + Version: 1.0 + License: MIT + Licensed by: Smashing Media GmbH + Original author: Enrique Ramírez +*/ + +/* 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;} diff --git a/themes/hm15/static/css/pygment.css b/themes/hm15/static/css/pygment.css new file mode 100644 index 0000000..fdd056f --- /dev/null +++ b/themes/hm15/static/css/pygment.css @@ -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; +} diff --git a/themes/hm15/static/css/reset.css b/themes/hm15/static/css/reset.css new file mode 100644 index 0000000..1e21756 --- /dev/null +++ b/themes/hm15/static/css/reset.css @@ -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; +} \ No newline at end of file diff --git a/themes/hm15/static/css/typogrify.css b/themes/hm15/static/css/typogrify.css new file mode 100644 index 0000000..c9b34dc --- /dev/null +++ b/themes/hm15/static/css/typogrify.css @@ -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;} diff --git a/themes/hm15/static/css/wide.css b/themes/hm15/static/css/wide.css new file mode 100644 index 0000000..88fd59c --- /dev/null +++ b/themes/hm15/static/css/wide.css @@ -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; +} diff --git a/themes/hm15/static/images/icons/rss.png b/themes/hm15/static/images/icons/rss.png new file mode 100644 index 0000000000000000000000000000000000000000..7862c65afeb66ba9cc7e9576a3a62b850b2e184d GIT binary patch literal 879 zcmV-#1CacQP)6?8>dbVG7wVRUJ4ZXi@?ZDjy5FfTVRFgbe517iRH0?0{3 zK~y*q1;I;*Rb>DG;O{@@%$+f3oY85tfwDo(q6wk`giZ?x7RltmpuHqGE2Ov7S;O>W=fV^3Ed_|@k1wcyde_(#VU$5hJ){~SMM3vE z`3mV6d6!6h_{5>K{^g_nAzb{##4h4Atz`x+@?|HbY`2^q;2h6QShC{*2hvJjfj zNk-Xd(Y{3MG9@ZB0^>WVP_!vG5J*O7R18<ow5~Ea&x6M(ayp9?tF$h&c7>5K z>WU;q03evmbXTSntIWQ`uA?F#fQoNl=Fcyg9w7z*62w8B*nHn@<2%JaJ`lfonhURq zw=ar_Ql9;S2M)3^Bp^gWR2P)>#BvgiT$A6V8ZiBc(EeWde4lt`PTaT(96Za+Zi+q; zA*lPr#_VFEx7t*!3sdtvev(6%g(JTUw-+U69u>2XEnzC(V_9^w`BzdLGqpGA|C0Rn+wz0^j?cy_E@k(x(WUQW7?tE3Zi_R5k zBQ;EBj2p9AqRn)QGiEcNEFEUOzK+@qNX}oQZ9LjYXYiQ|zvZ2|*AlVi;?O z>etgdlS{`I>%1>i)A}(L@>OH~L>+3$+*Z|kU%u8eI?)iaRKKkJyErh|edyx=<#)&5 zPOhE&aPSXGvdN%`K^<$I9%YX#r5d4( +

Archives for {{ SITENAME }}

+ +
+{% for article in dates %} +
{{ article.locale_date }}
+
{{ article.title }}
+{% endfor %} +
+ +{% endblock %} diff --git a/themes/hm15/templates/article.html b/themes/hm15/templates/article.html new file mode 100644 index 0000000..06110b4 --- /dev/null +++ b/themes/hm15/templates/article.html @@ -0,0 +1,37 @@ +{% extends "base.html" %} +{% block title %}{{ article.title|striptags }}{% endblock %} +{% block content %} +
+
+
+

+ {{ article.title }}

+ {% include 'twitter.html' %} +
+ +
+ {% include 'article_infos.html' %} + {{ article.content }} +
+ {% if DISQUS_SITENAME and SITEURL and article.status != "draft" %} +
+

Comments !

+
+ + +
+ {% endif %} + +
+
+{% endblock %} diff --git a/themes/hm15/templates/article_infos.html b/themes/hm15/templates/article_infos.html new file mode 100644 index 0000000..718967e --- /dev/null +++ b/themes/hm15/templates/article_infos.html @@ -0,0 +1,23 @@ +
+ + Published: {{ article.locale_date }} + + {% if article.modified %} +
+ + Updated: {{ article.locale_modified }} + + {% endif %} + + {% if article.authors %} +
+ By {% for author in article.authors %} + {{ author }} + {% endfor %} +
+ {% endif %} +

In {{ article.category }}. {% if PDF_PROCESSOR %}get the pdf{% endif %}

+{% include 'taglist.html' %} +{% import 'translations.html' as translations with context %} +{{ translations.translations_for(article) }} +
diff --git a/themes/hm15/templates/author.html b/themes/hm15/templates/author.html new file mode 100644 index 0000000..0b37290 --- /dev/null +++ b/themes/hm15/templates/author.html @@ -0,0 +1,2 @@ +{% extends "index.html" %} +{% block title %}{{ SITENAME }} - {{ author }}{% endblock %} diff --git a/themes/hm15/templates/authors.html b/themes/hm15/templates/authors.html new file mode 100644 index 0000000..e61a332 --- /dev/null +++ b/themes/hm15/templates/authors.html @@ -0,0 +1,16 @@ +{% extends "base.html" %} + +{% block title %}{{ SITENAME }} - Authors{% endblock %} + +{% block content %} + +
+

Authors on {{ SITENAME }}

+
    + {% for author, articles in authors|sort %} +
  • {{ author }} ({{ articles|count }})
  • + {% endfor %} +
+
+ +{% endblock %} diff --git a/themes/hm15/templates/base.html b/themes/hm15/templates/base.html new file mode 100644 index 0000000..3f51b97 --- /dev/null +++ b/themes/hm15/templates/base.html @@ -0,0 +1,71 @@ + + + + + {% block title %}{{ SITENAME }}{%endblock%} + + {% if FEED_ALL_ATOM %} + + {% endif %} + {% if FEED_ALL_RSS %} + + {% endif %} + + + + + + + {% block content %} + {% endblock %} +
+ {% if LINKS %} +
+

blogroll

+
    + {% for name, link in LINKS %} +
  • {{ name }}
  • + {% endfor %} +
+
+ {% endif %} + {% if SOCIAL or FEED_ALL_ATOM or FEED_ALL_RSS %} + + {% endif %} +
+ + + diff --git a/themes/hm15/templates/category.html b/themes/hm15/templates/category.html new file mode 100644 index 0000000..56f8e93 --- /dev/null +++ b/themes/hm15/templates/category.html @@ -0,0 +1,2 @@ +{% extends "index.html" %} +{% block title %}{{ SITENAME }} - {{ category }}{% endblock %} diff --git a/themes/hm15/templates/comments.html b/themes/hm15/templates/comments.html new file mode 100644 index 0000000..bb033c0 --- /dev/null +++ b/themes/hm15/templates/comments.html @@ -0,0 +1 @@ +{% if DISQUS_SITENAME %}

There are comments.

{% endif %} diff --git a/themes/hm15/templates/index.html b/themes/hm15/templates/index.html new file mode 100644 index 0000000..c898247 --- /dev/null +++ b/themes/hm15/templates/index.html @@ -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() %} + + {% if loop.length > 1 %} +
+

Other articles

+
+
    + {% endif %} + {# other items #} + {% else %} + {% if loop.first and articles_page.has_previous %} +
    +
      + {% endif %} +
    1. +
      +

      {{ article.title }}

      +
      + +
      + {% include 'article_infos.html' %} + {{ article.summary }} + read more + {% include 'comments.html' %} +
      +
    2. + {% endif %} + {% if loop.last %} + {% if loop.length > 1 %} +
    + {% endif %} + {% if articles_page.has_previous() or loop.length > 1 %} + {% include 'pagination.html' %} + {% endif %} + {% if loop.length > 1 %} +
    + {% endif %} + {% endif %} + {% endfor %} +{% else %} +
    +

    Pages

    + {% for page in PAGES %} +
  1. {{ page.title }}
  2. + {% endfor %} +
    +{% endif %} +{% endblock content %} diff --git a/themes/hm15/templates/page.html b/themes/hm15/templates/page.html new file mode 100644 index 0000000..5ac50b6 --- /dev/null +++ b/themes/hm15/templates/page.html @@ -0,0 +1,12 @@ +{% extends "base.html" %} +{% block title %}{{ page.title }}{% endblock %} +{% block content %} +
    +

    {{ page.title }}

    + {% import 'translations.html' as translations with context %} + {{ translations.translations_for(page) }} + {% if PDF_PROCESSOR %}get + the pdf{% endif %} + {{ page.content }} +
    +{% endblock %} diff --git a/themes/hm15/templates/period_archives.html b/themes/hm15/templates/period_archives.html new file mode 100644 index 0000000..252e002 --- /dev/null +++ b/themes/hm15/templates/period_archives.html @@ -0,0 +1,13 @@ +{% extends "base.html" %} +{% block content %} +
    +

    Archives for {{ period | reverse | join(' ') }}

    + +
    +{% for article in dates %} +
    {{ article.locale_date }}
    +
    {{ article.title }}
    +{% endfor %} +
    +
    +{% endblock %} diff --git a/themes/hm15/templates/piwik.html b/themes/hm15/templates/piwik.html new file mode 100644 index 0000000..f912626 --- /dev/null +++ b/themes/hm15/templates/piwik.html @@ -0,0 +1,19 @@ +{% if PIWIK_URL and PIWIK_SITE_ID %} + +{% endif %} diff --git a/themes/hm15/templates/tag.html b/themes/hm15/templates/tag.html new file mode 100644 index 0000000..68cdcba --- /dev/null +++ b/themes/hm15/templates/tag.html @@ -0,0 +1,2 @@ +{% extends "index.html" %} +{% block title %}{{ SITENAME }} - {{ tag }}{% endblock %} diff --git a/themes/hm15/templates/taglist.html b/themes/hm15/templates/taglist.html new file mode 100644 index 0000000..1e0b95a --- /dev/null +++ b/themes/hm15/templates/taglist.html @@ -0,0 +1,2 @@ +{% if article.tags %}

    tags: {% for tag in article.tags %}{{ tag | escape }} {% endfor %}

    {% endif %} +{% if PDF_PROCESSOR %}

    get the pdf

    {% endif %} diff --git a/themes/hm15/templates/tags.html b/themes/hm15/templates/tags.html new file mode 100644 index 0000000..fb09955 --- /dev/null +++ b/themes/hm15/templates/tags.html @@ -0,0 +1,16 @@ +{% extends "base.html" %} + +{% block title %}{{ SITENAME }} - Tags{% endblock %} + +{% block content %} + +
    +

    Tags for {{ SITENAME }}

    +
      + {% for tag, articles in tags|sort %} +
    • {{ tag }} ({{ articles|count }})
    • + {% endfor %} +
    +
    + +{% endblock %} diff --git a/themes/hm15/templates/translations.html b/themes/hm15/templates/translations.html new file mode 100644 index 0000000..7894bb0 --- /dev/null +++ b/themes/hm15/templates/translations.html @@ -0,0 +1,8 @@ +{% macro translations_for(article) %} +{% if article.translations %} +Translations: + {% for translation in article.translations %} + {{ translation.lang }} + {% endfor %} +{% endif %} +{% endmacro %} diff --git a/themes/hm15/templates/twitter.html b/themes/hm15/templates/twitter.html new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/themes/hm15/templates/twitter.html @@ -0,0 +1 @@ +