1
0
Fork 0

Import hackit 16 website

This commit is contained in:
boyska 2016-12-20 18:25:04 +01:00
commit 244fb58c3a
10 changed files with 448 additions and 0 deletions

3
.agignore Normal file
View file

@ -0,0 +1,3 @@
*/*.min.css
*/*.min.js
themes/*/static/*/*.min.*

6
.gitignore vendored Normal file
View file

@ -0,0 +1,6 @@
output
.*.sw.
cache
*.pid
*.pyc
.*.swp

91
Makefile Normal file
View file

@ -0,0 +1,91 @@
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)
autopublish:
while true; do inotifywait -r content pelicanconf.py publishconf.py Makefile themes -e modify -e create -e delete; make clean publish; sleep 0.1; done
.PHONY: html help clean regenerate serve devserver publish ssh_upload rsync_upload dropbox_upload ftp_upload s3_upload cf_upload github

21
README.md Normal file
View file

@ -0,0 +1,21 @@
Hackmeeting 2017
==================
Sources for Italian Hackmeeting 0x14 (2016) website.
HowTo
-------
So you want to contribute, nice!
```
mkvirtualenv hackmeeting-website
pip install -r requirements.txt
make publish
firefox output/index.html
```
Also, `make help` is your friend.
**Morte ai nemici dell'UTF-8**

103
develop_server.sh Executable file
View file

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

74
pelicanconf.py Normal file
View file

@ -0,0 +1,74 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals
AUTHOR = u'Hackmeeting'
SITENAME = u'Hackmeeting 0x13'
CC_LICENSE = 'by-nc-sa'
# SITEURL = 'http://hackmeeting.org/hackit17'
PATH = 'content'
PAGE_PATHS = ['pages']
ARTICLE_PATHS = ['news']
STATIC_PATHS = ['images', 'talks', 'extra']
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
USE_OPEN_GRAPH = False #'COL CAZZO'
# Uncomment following line if you want document-relative URLs when developing
# RELATIVE_URLS = True
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'
#PAGE_BACKGROUND = 'images/background.jpg'
THEME = 'themes/pelican-bootstrap3/'
FONT_URL = 'https://fontlibrary.org/face/anka-coder-narrow'
# Custom css by dieco.
CUSTOM_CSS = 'theme/css/main.css' #'static/main.css'
EXTRA_PATH_METADATA = {
'extra/main.css': {'path': 'theme/css/main.css' },
'extra/favicon.png': {'path': 'images/favicon.png'}
}
# Pelican bootstrap 3 theme settings
BOOTSTRAP_THEME = 'cyborg'
HIDE_SIDEBAR = True
PLUGIN_PATHS = ['plugins']
PLUGINS = ['langmenu']
MD_EXTENSIONS = ['toc']
#TALKS = {
# u'1': { u'Speaker' : u'',
# u'Title': u'',
# u'Abstract': u'',
# u'Room': u'',
# u'Schedule': u'',
# u'Day':'',
# }
#}

42
plugins/langmenu.py Normal file
View file

@ -0,0 +1,42 @@
'''
This plugin attemps to create something similar to menuitems,
but more meaningful with respect to l10n
'''
from __future__ import print_function
from pelican import signals
def add_localmenuitems(generator):
menu = {} # lang: list of pages
for page in generator.context['pages']:
menu.setdefault(page.lang, [])
for tr in page.translations:
menu.setdefault(tr.lang, [])
print('we have langs ' + ','.join(menu.keys()))
for page in sorted(generator.context['pages'],
key=lambda x: x.navbar_sort):
defined_langs = []
menu[page.lang].append(page)
defined_langs.append(page.lang)
for tr in page.translations:
menu[tr.lang].append(tr)
defined_langs.append(tr.lang)
for lang in menu.keys():
if lang not in defined_langs:
menu[lang].append(page)
menuitems = {}
for lang in menu:
menuitems[lang] = []
for page in menu[lang]:
menuitems[lang].append((page.title, page.url))
print(menuitems['en'])
print(menuitems['it'])
generator.context['LOCALMENUITEMS'] = menuitems
def register():
signals.page_generator_finalized.connect(add_localmenuitems)
pass

21
publishconf.py Normal file
View file

@ -0,0 +1,21 @@
#!/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 = '/hackit17'
RELATIVE_URLS = True
# DELETE_OUTPUT_DIRECTORY = True
# Following items are often useful when publishing
#DISQUS_SITENAME = ""
#GOOGLE_ANALYTICS = ""

14
requirements.txt Normal file
View 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