Browse Source

Import hackit 16 website

boyska 7 years ago
commit
244fb58c3a
10 changed files with 448 additions and 0 deletions
  1. 3 0
      .agignore
  2. 6 0
      .gitignore
  3. 91 0
      Makefile
  4. 21 0
      README.md
  5. 103 0
      develop_server.sh
  6. 73 0
      fabfile.py
  7. 74 0
      pelicanconf.py
  8. 42 0
      plugins/langmenu.py
  9. 21 0
      publishconf.py
  10. 14 0
      requirements.txt

+ 3 - 0
.agignore

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

+ 6 - 0
.gitignore

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

+ 91 - 0
Makefile

@@ -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 - 0
README.md

@@ -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 - 0
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

+ 73 - 0
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',
+    )

+ 74 - 0
pelicanconf.py

@@ -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 - 0
plugins/langmenu.py

@@ -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 - 0
publishconf.py

@@ -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 - 0
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