prima versione del sito in pelican

This commit is contained in:
putro 2019-03-23 22:29:32 +01:00
commit ceacdb8ccf
34 changed files with 1207 additions and 0 deletions

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
__pycache__/
cache/
output/
*.pyc
pelican.pid

87
LEGGIMI.md Normal file
View File

@ -0,0 +1,87 @@
# PELICAN WEBSITE HOWTO
## pelicanconf.py:
in questo file si definiscono un tot di cose, tra cui:
i contenuti stanno nella cartella "content", vengono scritti in markdown e sono di due tipi:
- pagine statiche (nella sottocartella "pages")
- articoli tipo blog (nella sottocartella "blog")
una volta elaborati sono salvati nella cartella "output" che e' quella
che conterrà i files .html del sito vero e proprio
in testa ai files .md devono essere definiti dei metadati:
per le pagine statiche:
- Title (il titolo che poi compare a video nella pagina finale html)
- Slug (il nome con cui la pagina sara' salvata nella cartella output)
per gli articoli ad es.:
- Title: Comunicato Unit hacklab su annuncio sgombero Macao
- Author: Unit
- Category: comunicato
- Date: 2018-09-26
- Tags: sgombero
nella cartella output le pagine sono salvate nella sottocartella pages
(direttiva PAGE_SAVE_AS)
e gli articoli nella cartella blog (direttiva ARTICLE_SAVE_AS)
gli articoli finiscono nel feed rss, le pagine no, quindi se si crea una pagina
e' bene fare anche un articolo che la "presenti".
il tema usato e' "minimo" di dan (ho fatto solo una piccola modifica per includere il logo di unit in tutte le pagine (vedi templates/base.html))
in realta' andrebbe modificato il css in modo che se e' definito ad esempio SITE_LOGO in pelicanconf.py, compaia il logo di fianco a Unit,
e non sotto
(per come fare vedi ad es.
> https://github.com/sQu4rks/crowsfoot/blob/30509fc0cf6d4c29f2d1d9ec87783340a7158538/templates/base.html
> https://github.com/nairobilug/pelican-alchemy/blob/f235c81bf323e6134b01915fc9a46b5e89ac238b/alchemy/templates/base.html
altra cosa che si potrebbe fare: usare il tema come submodulo git del sito, in modo che siano due cose separate, ma al momento minimo non e' in git come se fosse solo un tema (cioe' solo le cartelle templates e static)
c'e' anche altro intorno, andrebbe sistemato.
in cima alla pagina c'e' un piccolo menu con poche voci:
- HOME (index)
- BLOG (lista degli articoli con anteprima (articles.html), volendo ci sarebbe anche la pagina archives.html che contiene la lista degli articoli ma senza anteprima.
- CATEGORIE (lista delle categorie degli articoli, cliccabile)
- TAG (lista dei tag degli articoli, cliccabile)
- CONTATTI (pagina che riporta i contatti)
- RSS (link al feed rss (atom))
ci sono due cartelle statiche:
- media (che contiene i materiali delle pagine, pdf, immagini etc.)
- images (che contiene le immagini della struttura del sito, al momento solo il logo))
## publishconf.py
questo file definisce solo il SITEURL in produzione e l'indirizzo dei feed rss e atom creati
(quando sostituiremo il sito perderemo tutti i feed precedenti, a meno di creare degli articoli nel blog,
pero' poi mi sa che chi ha sottoscritto il feed li ricevera' di nuovo.... ?
per or
## Makefile
e' il makefile standard con le istruzioni per SSH per caricare il sito
e un nuovo comando "production" per copiare il sito al suo posto
(ma funziona solo se viene lanciato da zaphoda)
TODO:
il sito ora e' visibile su https://unit.abbiamoundominio.org/tmp/,
visto che sta in una sottocartella, in produzione per i menuitems andra' aggiunto un / prima di ogni pagina
stessa cosa per il tema, e l'immagine del logo dovra' avere uno / prima del path
(questo perche' senno' se sei nella cartella /categories/qualcosa poi non funzionano piu' i link, se sono relativi)
valutare magari di mettere una pagina 404 (o meglio ancora 40x) da configurare in nginx.

92
Makefile Normal file
View File

@ -0,0 +1,92 @@
PY?=python3
PELICAN?=pelican
PELICANOPTS=
BASEDIR=$(CURDIR)
INPUTDIR=$(BASEDIR)/content
OUTPUTDIR=$(BASEDIR)/output
CONFFILE=$(BASEDIR)/pelicanconf.py
PUBLISHCONF=$(BASEDIR)/publishconf.py
SSH_HOST=abbiamoundominio.org
SSH_PORT=22
SSH_USER=${USER}
SSH_TARGET_DIR=/var/www/unit.abbiamoundominio.org/tmp/
DEBUG ?= 0
ifeq ($(DEBUG), 1)
PELICANOPTS += -D
endif
RELATIVE ?= 0
ifeq ($(RELATIVE), 1)
PELICANOPTS += --relative-urls
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] serve and regenerate together '
@echo ' make ssh_upload upload the web site via SSH '
@echo ' make rsync_upload upload the web site via rsync+ssh '
@echo ' make production copy the site locally '
@echo ' '
@echo 'Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html '
@echo 'Set the RELATIVE variable to 1 to enable relative urls '
@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
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT)
else
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
endif
serve-global:
ifdef SERVER
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT) -b $(SERVER)
else
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT) -b 0.0.0.0
endif
devserver:
ifdef PORT
$(PELICAN) -lr $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT)
else
$(PELICAN) -lr $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
endif
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 --cvs-exclude --delete $(OUTPUTDIR)/ $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR)
production: publish
ifeq "$(HOSTNAME)" "zaphoda"
cp -R $(OUTPUTDIR)/* $(SSH_TARGET_DIR)/
else
echo "devi essere su zaphoda per lanciare questo comando"
endif
.PHONY: html help clean regenerate serve serve-global devserver stopserver publish ssh_upload rsync_upload

BIN
content/images/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
content/media/nolike.pdf Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

View File

@ -0,0 +1,43 @@
Title: Comunicato Unit hacklab su annuncio sgombero Macao
Category: comunicato
Date: 2018-09-26
Tags: sgombero
Contesto: Milano 2018. Atmosfera di intolleranza civile.
Unit hacklab e' un laboratorio autogestito di
sperimentazione tecnica e politica, le nostre attivita'
comprendono dai corsi gratuiti di elettronica e
informatica alla divulgazione delle pratiche di gestione
della privacy sotto forma di incontri e convegni.
il Comune di Milano, zelante, anticipa l'editto di
Matteo Salvini e comunica il prossimo sgombero di Macao,
lo spazio culturale eterogeneo dal respiro
internazionale situato in Viale Molise 68 a Milano nella
palazzina inutilizzata della Borsa della carne, liberato
nel 2012, al cui interno dal 2016 ci siamo anche noi di
Unit hacklab.
Lo sgombero e' funzionale alla vendita delle palazzine
di Viale Molise e viene annunciato accusando problemi di
bilancio mentre in realta' il Comune sta parlando di
trasferire Citta' studi, di riaprire i navigli e
addirittura di fare le olimpiadi invernali. I soldi non
sono il problema. Il problema e' politico, rispetto
all'autogestione. Ricordiamo che i luoghi liberati
dall'inutilizzo e autogestiti, non sono riconducibili
solo a spazi di aggregazione per i giovani. Sono luoghi
di sperimentazione e produzione politica e culturale,
naturalmente liberi dalle dinamiche commerciali e a
pensiero unico che caratterizzano gli spazi offerti
dalle autorita'.
Il Comune di Milano ha proposto uno sgombero "soft",
ricambiamo con un anatema commisurato: Possa il vostro
winzozz computer farvi BEEP, e non potete uscire.
Noi di Unit hacklab, per nostra natura, non sappiamo
come sparire cosi' facilmente.
eof

View File

@ -0,0 +1,9 @@
Title: Benvenuto pellicano
Category: news
Date: 2019-03-22
Tags: pelican
Il sito e' stato convertito a pelican, un software
per generare siti statici in html.

13
content/pages/c2c.md Normal file
View File

@ -0,0 +1,13 @@
Title: Cheeck2Cheeck
Slug: c2c
La scatoletta con wifi sconnesso da internet collega le persone vicine per fare chat e
condivisione documenti.
c2c e' un social network libero, mobile ed estemporaneo che non ha bisogno di registrazione.
Ispirato dalle radio pirata e dal movimento della cultura libera, cheek2cheek e'
un'implementazione di Unit hacklab della [PirateBOX](https://www.piratebox.cc/faq).
![c2c screenshot mobile](media/c2c-screenshot-mobile.jpg)

View File

@ -0,0 +1,8 @@
Title: contatti
Slug: contatti
puoi scriverci all'indirizzo mail: _unit at paranoici dot org_
ci trovi su IRC nel canale _#unit_ del server <a href="https://www.autistici.org/docs/irc/">irc.autistici.org</a>
o puoi passare a trovarci il mercoledi sera presso <a href="https://www.openstreetmap.org/node/2709091290">Macao, in via Molise 68 a Milano</a>

View File

@ -0,0 +1,31 @@
Title: Criptolibretto
Slug: criptolibretto
Un criptolibretto in puro testo con formattazione markdown, convertibile in PDF via pandoc
e stampabile in formato pieghevole. Con documentazione.
Il criptolibretto e' in continuo divenire, qui si trova la piu' recente versione approvata,
nel formato pieghevole croccante stampabile A5 e nel classico formato A4. Per la versione unstable, seguire il git.
[Criptolibretto pieghevole Pdf da stampa](https://unit.abbiamoundominio.org/criptolibretto/book-a5-signature.pdf)
24 gennaio 2019
SHA256(book-a5-signature.pdf)= 5c3b861708e05d9adac0fcbaab2771bec718239a043883556bdf63e158e5be10
[Criptolibretto Pdf](https://unit.abbiamoundominio.org/criptolibretto/book-a4.pdf)
24 gennaio 2019
SHA256(book-a4.pdf)= 84c059584de8bc98628ce22de0eb57af7d49afa692df974795f551c02ab42549
Sorgente disponibile al [repositorio git](https://git.abbiamoundominio.org/unit/criptolibretto)

67
content/pages/faq.md Normal file
View File

@ -0,0 +1,67 @@
Title: FAQ
Slug: faq
Questa e' la nostra pagina delle F.A.Q.
le Frequented Asked Questions, le Domande Poste di Frequente.
== Cosa e' Unit? ==
E' un hacklab.
== Perche' il nome Unit? ==
E' il nome della tupla vuota di haskell.
[https://en.wikipedia.org/wiki/Tuple](https://en.wikipedia.org/wiki/Tuple)
[https://en.wikipedia.org/wiki/Haskell_(programming_language)](https://en.wikipedia.org/wiki/Haskell_(programming_language))
Qui trovi delucidazioni sul logo.
[http://stackoverflow.com/questions/16892570/what-is-in-haskell-exactly](http://stackoverflow.com/questions/16892570/what-is-in-haskell-exactly)
== Cos'e' un hackerspace? ==
Guarda il video: hackerspace design patterns by Mitch
[https://www.youtube.com/watch?v=zr76In2h0fE](https://www.youtube.com/watch?v=zr76In2h0fE)
Piu' sul come che sul cosa, qui ci sono delle slide.
[https://wiki.hackerspaces.org/images/8/8e/Hacker-Space-Design-Patterns.pdf](https://wiki.hackerspaces.org/images/8/8e/Hacker-Space-Design-Patterns.pdf)
== Cos'e' un hacklab? ==
Un hackerspace in movimento.
Unit hacklab e' un laboratorio autogestito di sperimentazione tecnica
e politica, le nostre attivita' comprendono corsi gratuiti di
elettronica e informatica e divulgazione delle pratiche di gestione
della privacy sotto forma di incontri e convegni. Ci occupiamo non
solo di tecnica, ma anche di politica in quanto la tecnologia non e'
neutra.
== Chi e' un hacker? ==
Colei, colui o colacaso che gode dello spirito dell'intelligenza giocosa.
== Come posso incontrarvi? ==
Chiedi a chi ti ha mandato a questo sito di accompagnarti al prossimo
incontro.
== Come posso contattarvi? ==
Puoi mandarci una mail a unit [at] paranoici [dot] org o join sul
network IRC Autistici/Inventati il canale #unit.
== Non voglio incontrarvi, voglio solo delle risorse su che software usare ==
Ne trovi qui:
[https://prism-break.org/it/](https://prism-break.org/it/)

View File

@ -0,0 +1,93 @@
Title: Linee guida mailing list
Slug: howto_mailinglist
# Linee guida: Mailing list
## Non usare HTML
Il testo semplice è buono. Tutti lo leggono, sempre, con piacere.
Meglio scrivere in formato testo semplice. Alcuni programmi di default compongono le email in HTML.
Frugare tra le impostazioni ci permetterà di impostare la modalità testo semplice.
Nota che l'HTML viene inviato nelle email sotto forma di allegato, ma non è la email.
## Non mandare allegati enormi
L'allegato mandato per e-mail viene copiato per ogni iscritto alla lista, intasando il provider,
e ci si tiene a non intasarlo, specie se è autogestito.
Inoltre potrebbe generare acidità in chi avesse una connessione che paga a consumo.
Per evitare di mandare allegati pesanti in lista è bene usare un servizio esterno e mandare il link nella mail.
Unit ha un servizio di storage cloud e dovresti sapere come accedere. Altrimenti dovresti chiederlo in mailing list.
## Oggetto delle e-mail
Usa un oggetto sensato, che predica il contenuto della mail.
Serve a farsi leggere e anche a ritrovare la mail in futuro.
Esempio bene - Subject: i miei 2c sulla questione manifesto
Esempio male - Subject: ciao
## Porta rispetto per il thread
Quando rispondi a una mail, attieniti all'oggetto.
In questo modo si può seguire il filo del discorso (che chiamiamo thread) e nessuno ti accuserà mai di
fare thread-hijacking, cioè di mischiare argomenti.
Se si devono dire cose nuove e non inerenti a un thread, meglio mandare una mail nuova con un subject nuovo.
Diventa così facile cercare tra le vecchie discussioni.
Nota che non basta cancellare un subject e scriverne un altro al suo posto per creare un nuovo thread,
per creare un nuovo thread devi mandare una nuova mail alla lista. Se rispondi a un thread già esistente,
pure che cambi il subject, resta lo stesso thread.
## Quotare
Quotare significa riportare parti della e-mail a cui stai rispondendo in modo da dare maggiore contesto alla tua risposta.
Una riga quotata è preceduta dal simbolo di maggiore: >.
> appuntamento mercoledì sera alle 8
Ci sono, ma arriverò alle 21
Quota soltanto ciò che serve. Non quotare intere e-mail per rispondere soltanto: "Ok".
(A meno che non rispondi a una mail formattata con indici nel qual caso considera di lasciare anche un riferimento agli argomenti,
che pure non citi, ma non cancelli per gli altri dal thread.)
Il contenuto della mail a cui si risponde (il quote) si quota sopra (e non sotto) la tua risposta.
## Evitare il top-posting
Risposta: Perché confonde l'ordine con il quale si legge il testo
Domanda: Perché il Top-posting non si fa?
Risposta: Il Top-Posting
Domanda: Qual'è la cosa più noiosa delle email?
Top-posting significa scrivere sopra il quote. Ottiene l'effetto indesiderato di invertire la cronologia del discorso
e rende difficile continuare la discussione.
Esempio in top-posting:
io certo che vengo, ci vediamo davanti. Olivia
> io non ce la faccio proprio. Minnie
>> ciao, stasera venite a ballare al Calypso? Popeye
Esempio in down-posting:
>> ciao, stasera venite a ballare al Calypso? Popeye
> io non ce la faccio proprio. Minnie
io certo che vengo, ci vediamo davanti. Olivia
* * *
_[Unit hacklab](http://unit.abbiamoundominio.org), 4 ottobre 2016_

22
content/pages/index.md Normal file
View File

@ -0,0 +1,22 @@
Title: unit state of mind
Slug: index
[manifesto](manifesto.html) | [faq](faq.html) | [newsletter](https://noise.autistici.org/mailman/listinfo/unit-news)
[wiki](https://wiki.unit.abbiamoundominio.org/) | [git](https://git.abbiamoundominio.org/)
[pmomp](pmomp.html) | [criptolibretto](criptolibretto.html) | [cheek2cheek](c2c.html) | [lost](http://lost.abbiamoundominio.org/)
[comunicati](comunicati/index.html) | [nolike](nolike.html)
* * *
mercoledi pomeriggio: [laboratorio di elettronica](https://wiki.unit.abbiamoundominio.org/LaboratorioElettronica)
venerdi sera: [free hacking friday](https://wiki.unit.abbiamoundominio.org/FHF)
_Se hai pensato che c'era un modo migliore, avevi ragione._

View File

@ -0,0 +1,52 @@
Title: Manifesto
Slug: manifesto
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
__ _ _ _ _ __
/ _| | | | |_____|_| |_ |_ \
| | | | | | _ | | _| | |
| |_ | |_| | | | | | |_ _| |
\__| |_____|_| |_|_|___| |__/
| manifesto |
----[ 1 ]----------------------------------------------------------------------
Noi unitariani veniamo relativamente in pace.
Siamo multigenere e multiforma.
Condividiamo l'idea di condividere la condivisione con di voi.
----[ 1.1 ]--------------------------------------------------------------------
Pensiamo che la tecnologia non sia neutra, che Internet possa diventare anche
un formidabile strumento di oppressione, che l'informazione e il software
debbano essere liberi, e che le conoscenze non siano merce, che il codice sia
l'espressione poetica dei misconosciuti legislatori del mondo e che legale non
significhi giusto.
Siamo antifascisti, antisessisti e antirazzisti.
Vogliamo creare spazi liberi da gerarchie e discriminazioni dove studiare e
divulgare quello che ci piace.
Siamo mossi dal desiderio, non crediamo ai confini.
Ci aggreghiamo per affinita', prendiamo decisioni con il metodo del consenso,
il nostro spazio e' una Zona Autonoma, condivideremo saperi senza fondare poteri.
----[ 1.2 ]--------------------------------------------------------------------
Noi abbiamo sempre nutrito il sogno di una cosa,
ma oggi abbiamo scelto di diventare coscienti.
Non vogliamo tutto e subito e non abbiamo fretta,
ma aspettiamo una risposta per domani mattina.
----[ 2 - Domande ]------------------------------------------------------------
Hai delle domande? E noi abbiamo delle FAQ:
http://unit.abbiamoundominio.org/faq.html
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

127
content/pages/nolike.md Normal file

File diff suppressed because one or more lines are too long

20
content/pages/pmomp.md Normal file
View File

@ -0,0 +1,20 @@
Title: Privacy Matters On My Phone
Slug: pmomp
Category: pmomp
Tags: pmomp
**Percorso in cinque passi per entrare in possesso del proprio smartphone dopo averlo comperato.**
L'obiettivo di questo progetto e' di raccogliere e divulgare strumenti e conoscenze per utilizzare
uno smartphone Android senza cedere la propria privacy. Il progetto e' strutturato in cinque livelli,
dal piu' facile fino al livello piu' radicale senza compromessi.
Vogliamo rompere la sacralita' nell'utilizzo dello smartphone, il telefono intelligente (detto anche furbo)
e' un computer con il quale abbiamo un rapporto di intimita' e sul quale si possono e si devono mettere sopra le mani.
Si deve poter essere liberi sul proprio dispositivo.
Per il sorgente del libretto e slide, seguire il [git](https://git.abbiamoundominio.org/unit/pmomp)
![pmomp flyer](media/pmomp-flyer.png)
[Audio podcast](https://lost.abbiamoundominio.org/2019/03/privacy-matters-on-my-phone-2/)

75
pelicanconf.py Normal file
View File

@ -0,0 +1,75 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals
AUTHOR = u'Unit'
SITENAME = u'unit'
# SITEURL = 'https://unit.abbiamoundominio.org'
SITEURL = ''
# SITESUBTITLE = ''
PATH = 'content'
PAGE_PATHS = ['pages']
ARTICLE_PATHS = ['blog']
STATIC_PATHS = ['images', 'media']
TIMEZONE = 'Europe/Rome'
DEFAULT_LANG = u'it'
DEFAULT_PAGINATION = 3
DEFAULT_DATE = 'fs'
DEFAULT_DATE_FORMAT = '%d %B %Y'
RSS_FEED_SUMMARY_ONLY = True
# Feed generation is usually not desired when developing
FEED_ALL_ATOM = None
FEED_ALL_RSS = None
CATEGORY_FEED_ATOM = None
TRANSLATION_FEED_ATOM = None
AUTHOR_FEED_ATOM = None
AUTHOR_FEED_RSS = None
LINKS = None
SOCIAL = None
DEFAULT_PAGINATION = False
DEFAULT_METADATA = {'unit hacklab': 'This is a Game Planet'}
# Uncomment following line if you want document-relative URLs when developing
# RELATIVE_URLS = True
MARKDOWN = {
'extension_configs': {
'markdown.extensions.codehilite': {'css_class': 'highlight'},
'markdown.extensions.extra': {},
'markdown.extensions.meta': {},
},
'output_format': 'html5',
}
WITH_FUTURE_DATES = False
THEME = 'themes/minimo'
PAGE_URL = '{slug}.html'
PAGE_SAVE_AS = '{slug}.html'
ARTICLE_URL = 'blog/{date:%Y-%m-%d}-{slug}.html'
ARTICLE_SAVE_AS = 'blog/{date:%Y-%m-%d}-{slug}.html'
INDEX_SAVE_AS = 'articles.html'
USE_FOLDER_AS_CATEGORY = True
DISPLAY_PAGES_ON_MENU = False
DISPLAY_CATEGORIES_ON_MENU = False
MENUITEMS = (('HOME |', 'index.html'),
('NEWS |', 'articles.html'),
('CATEGORIE |', 'categories.html'),
('TAG |', 'tags.html'),
('CONTATTI |', 'contatti.html'),
('RSS', 'feeds/all.atom.xml'),)

25
publishconf.py Normal file
View File

@ -0,0 +1,25 @@
#!/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 *
# If your site is available via HTTPS, make sure SITEURL begins with https://
SITEURL = 'https://unit.abbiamoundominio.org/tmp/'
RELATIVE_URLS = False
FEED_ALL_ATOM = 'feeds.atom.xml'
FEED_ALL_RSS = 'feeds.xml'
DELETE_OUTPUT_DIRECTORY = True
# Following items are often useful when publishing
#DISQUS_SITENAME = ""
#GOOGLE_ANALYTICS = ""

80
tasks.py Normal file
View File

@ -0,0 +1,80 @@
# -*- coding: utf-8 -*-
import os
import shutil
import sys
import datetime
from invoke import task
from invoke.util import cd
from pelican.server import ComplexHTTPRequestHandler, RootedHTTPServer
CONFIG = {
# Local path configuration (can be absolute or relative to tasks.py)
'deploy_path': 'output',
# Remote server configuration
'production': 'root@abbiamoundominio.org:22',
'dest_path': '/var/www/unit.abbiamoundominio.org/',
# Port for `serve`
'port': 8000,
}
@task
def clean(c):
"""Remove generated files"""
if os.path.isdir(CONFIG['deploy_path']):
shutil.rmtree(CONFIG['deploy_path'])
os.makedirs(CONFIG['deploy_path'])
@task
def build(c):
"""Build local version of site"""
c.run('pelican -s pelicanconf.py')
@task
def rebuild(c):
"""`build` with the delete switch"""
c.run('pelican -d -s pelicanconf.py')
@task
def regenerate(c):
"""Automatically regenerate site upon file modification"""
c.run('pelican -r -s pelicanconf.py')
@task
def serve(c):
"""Serve site at http://localhost:8000/"""
class AddressReuseTCPServer(RootedHTTPServer):
allow_reuse_address = True
server = AddressReuseTCPServer(
CONFIG['deploy_path'],
('', CONFIG['port']),
ComplexHTTPRequestHandler)
sys.stderr.write('Serving on port {port} ...\n'.format(**CONFIG))
server.serve_forever()
@task
def reserve(c):
"""`build`, then `serve`"""
build(c)
serve(c)
@task
def preview(c):
"""Build production version of site"""
c.run('pelican -s publishconf.py')
@task
def publish(c):
"""Publish to production via rsync"""
c.run('pelican -s publishconf.py')
c.run(
'rsync --delete --exclude ".DS_Store" -pthrvz -c '
'{} {production}:{dest_path}'.format(
CONFIG['deploy_path'].rstrip('/') + '/',
**CONFIG))

View File

@ -0,0 +1,37 @@
body {
font-family: "Courier New", Courier, monospace
font-size: 100%;
background-color: #F4F4E8;
color: #333333;
min-width: 400px;
min-height: 200px;
margin: 2% 2%;
padding:0;
height:98%;;
margin-left: 33%;
margin-right: 33%;
}
a:link { color: #003399; text-decoration: none; }
a:visited { color: #336699; text-decoration: none; }
a:hover { color: #003399; background: #ff8c19; text-decoration: none; }
h1 a { color: inherit !important }
h2 a { color: inherit !important }
h3 a { color: inherit !important }
h4 a { color: inherit !important }
h5 a { color: inherit !important }
h6 a { color: inherit !important }
#menu li {
display: inline;
}
#post-list {
margin-bottom: 1em;
margin-top: 1em;
}
pre {
margin: 2em 1em 2em 4em;
}

View File

@ -0,0 +1,42 @@
{% extends "index.html" %}
{% block title %}Archivio {{ SITENAME }}{% endblock %}
{% block ogtitle %}Archivio {{ SITENAME }}{% endblock %}
{% block ogurl %}{{ SITEURL }}/archives.html{%endblock%}
{% block canonicalurl %}{{ SITEURL }}/archives.html{%endblock%}
{% block content %}
<div class="span9">
<section>
<h1>{% block content_title %}Archivio per data{% endblock %}</h1>
{% for article in dates %}
{% set this_year = article.date.strftime('%Y') %}
{% if this_year != prev_year %}
<div class="row-fluid archive_row">
<div class="span1 archive_year">{{ this_year }}</div>
</div>
{% endif %}
{% if this_year != prev_year or this_month != prev_month %}
<div class="row-fluid archive_row">
<div class="offset1 span1 archive_month">{{ this_month }}</div>
</div>
{% endif %}
<div class="row-fluid archive_row">
{% if this_month != prev_month or this_day != prev_day %}
<div class="offset1 span1 archive_day">
{{ this_day }}
</div>
{% endif %}
<div class="{% if this_year == prev_year and this_month == prev_month and this_day == prev_day %}offset2 {% endif %}span10">
<dd><a href="{{ SITEURL }}/{{ article.url }}">{{ article.title }}</a> <small>{{ article.category }}</small></dd>
</div>
</div>
{% set prev_year = this_year %}
{% set prev_month = this_month %}
{% set prev_day = this_day %}
{% endfor %}
</section>
</div>
{% endblock %}

View File

@ -0,0 +1,28 @@
{% extends "base.html" %}
{% block title %}{{ article.title|striptags }} | {{ SITENAME }}{% endblock %}
{% block ogtitle %}{{ article.title|striptags }}{% endblock %}
{% block ogurl %}{{ SITEURL }}/{{ article.url }}{%endblock%}
{% block ogtype %}article{%endblock%}
{% block canonicalurl %}{{ SITEURL }}/{{ article.url }}{%endblock%}
{% block content %}
<div class="span10 offset1">
<section>
<article>
<header>
<h1 class="entry-title">
<a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark"
title="Permalink a {{ article.title|striptags }}">{{ article.title}}</a></h1>
</header>
<div class="entry-content">
{% include 'article_infos.html' %}
{{ article.content }}
</div>
</article>
</section>
</div>
{% endblock %}

View File

@ -0,0 +1,25 @@
<footer class="post-info">
{% if article.author %}
<address class="vcard author">
<a class="url fn" href="{{ SITEURL }}/{{ article.author.url }}">{{ article.author }}</a>
</address>
{% endif %}
data: {{ article.date.strftime('%d %B %Y') }}
<br>
categoria: <a href="{{ SITEURL }}/{{ article.category.url }}">{{ article.category }}</a>
<br>
{% if article.tags %}
tag: {% for tag in article.tags %}
<a href="{{ SITEURL }}/{{ tag.url }}">{{ tag }}</a>
{% endfor %}
{% endif %}
{% import 'translations.html' as translations with context %}
{{ translations.translations_for(article) }}
</footer>

View File

@ -0,0 +1,5 @@
{% extends "index.html" %}
{% block title %}{{ SITENAME }} - {{ author }} | {{ SITENAME }}{% endblock %}
{% block ogtitle %}{{ SITENAME }} - {{ author }}{% endblock %}
{% block ogurl %}{{ SITEURL }}/{{ author.url }}{%endblock%}
{% block canonicalurl %}{{ SITEURL }}/{{ author.url }}{%endblock%}

View File

@ -0,0 +1,72 @@
<!DOCTYPE html>
<html lang="{{ DEFAULT_LANG }}">
<head>
{% block head %}
<title>{% block title %}{{ SITENAME }}{% endblock title %}</title>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="{{ SITEURL }}/theme/css/style.css" />
{% if FEED_ALL_ATOM %}
<link href="{{ FEED_DOMAIN }}/{{ FEED_ALL_ATOM }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Full Atom Feed" />
{% endif %}
{% if FEED_ALL_RSS %}
<link href="{{ FEED_DOMAIN }}/{{ FEED_ALL_RSS }}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} Full RSS Feed" />
{% endif %}
{% if FEED_ATOM %}
<link href="{{ FEED_DOMAIN }}/{{ FEED_ATOM }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Atom Feed" />
{% endif %}
{% if FEED_RSS %}
<link href="{{ FEED_DOMAIN }}/{{ FEED_RSS }}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} RSS Feed" />
{% endif %}
{% if CATEGORY_FEED_ATOM and category %}
<link href="{{ FEED_DOMAIN }}/{{ CATEGORY_FEED_ATOM|format(category.slug) }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Categories Atom Feed" />
{% endif %}
{% if CATEGORY_FEED_RSS and category %}
<link href="{{ FEED_DOMAIN }}/{{ CATEGORY_FEED_RSS|format(category.slug) }}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} Categories RSS Feed" />
{% endif %}
{% if TAG_FEED_ATOM and tag %}
<link href="{{ FEED_DOMAIN }}/{{ TAG_FEED_ATOM|format(tag.slug) }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Tags Atom Feed" />
{% endif %}
{% if TAG_FEED_RSS and tag %}
<link href="{{ FEED_DOMAIN }}/{{ TAG_FEED_RSS|format(tag.slug) }}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} Tags RSS Feed" />
{% endif %}
{% endblock head %}
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="{{ SITEURL }}/">{{ SITENAME }} <strong>{{ SITESUBTITLE }}</strong></a></h1>
<img src="images/logo.png" alt="logo" width="85" height="85" border="0">
</header><!-- /#banner -->
<nav id="menu"><ul>
{% for title, link in MENUITEMS %}
<li><a href="{{ link }}">{{ title }}</a></li>
{% endfor %}
{% if DISPLAY_PAGES_ON_MENU %}
{% for p in pages %}
<li{% if p == page %} class="active"{% endif %}><a href="{{ SITEURL }}/{{ p.url }}">{{ p.title }}</a></li>
{% endfor %}
{% else %}
{% 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 %}
{% endif %}
</ul></nav><!-- /#menu -->
{% block content %}
{% endblock %}
<footer id="contentinfo" class="body">
<hr>
<address id="about" class="vcard body">
<small>
unit hacklab 2019 - Alimentato da
<a href="http://python.org">Python</a> e
<a href="http://getpelican.com/">Pelican</a>, tema
<a href="https://git.abbiamoundominio.org/dan/minimo">minimo</a>
</small>
</address><!-- /#about -->
</footer><!-- /#contentinfo -->
</body>
</html>

View File

@ -0,0 +1,19 @@
{% extends "index.html" %}
{% block title %}Categorie di {{ SITENAME }}{% endblock %}
{% block ogtitle %}Categorie di {{ SITENAME }}{% endblock %}
{% block ogurl %}{{ SITEURL }}/categories.html{%endblock%}
{% block canonicalurl %}{{ SITEURL }}/categories.html{%endblock%}
{% block content %}
<div class="span9">
<section>
<h1>{% block content_title %}Categorie {% endblock %}</h1>
<dl>
{% for category, articles in categories %}
<dd><a href="{{ SITEURL }}/{{ category.url }}">{{ category }} ({{ articles|count }})</a></dd>
{% endfor %}
</dl>
</section>
</div>
{% endblock %}

View File

@ -0,0 +1,6 @@
{% extends "archives.html" %}
{% block title %}{{ SITENAME }} - {{ category }}{% endblock %}
{% block content_title %} Ricerca per categoria: {{ category }}{% endblock %}
{% block ogtitle %}{{ SITENAME }} - {{ category }}{% endblock %}
{% block ogurl %}{{ SITEURL }}/{{ category.url }}{%endblock%}
{% block canonicalurl %}{{ SITEURL }}/{{ category.url }}{%endblock%}

View File

@ -0,0 +1,74 @@
{% extends "base.html" %}
{% block content_title %}{% endblock %}
{% block ogtitle %}{{ SITENAME }}{% endblock %}
{% block ogurl %}{{ SITEURL }}{%endblock%}
{% block canonicalurl %}{{ SITEURL }}{%endblock%}
{% block content %}
<div class="span9">
{% if articles %}
{% for article in articles_page.object_list %}
{% if loop.length > 0 %}
{% if loop.first %}
<section>
<ol id="posts-list" class="hfeed" start="{{ articles_paginator.per_page -1 }}">
{% endif %}
<article>
<header>
<h1 class="entry-title">
<a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark" title="Permalink: {{ article.title|striptags }}">
{{ article.title }}
</a>
</h1>
</header>
<div class="entry-content">
{% include 'article_infos.html' %}
{{ article.summary }}
<p class="readmore">
<a class="btn btn-small btn-info" href="{{ SITEURL }}/{{ article.url }}">continua..</a>
</p>
</div>
<hr/>
</article>
{% if loop.last %}
</ol><!-- /#posts-list -->
{% if loop.last and (articles_page.has_previous()
or not articles_page.has_previous() and loop.length > 1) %}
{% include 'pagination.html' %}
{% endif %}
</section><!-- /#content -->
{% endif %}
{% endif %}
{% endfor %}
{% else %}
<section>
<h2>Pages</h2>
{% for page in PAGES %}
<li><a href="{{ SITEURL }}/{{ page.url }}">{{ page.title }}</a></li>
{% endfor %}
</section>
{% endif %}
</div>
{% endblock content %}
{% if LINKS %}
<div>
<h2>Links</h2>
<ul>
{% for name, link in LINKS %}
<li><a href="{{ link }}">{{ name }}</a></li>
{% endfor %}
</ul>
</div><!-- /.Links -->
{% endif %}
{% if TAG_CLOUD_STEPS %}
<div>
<h2>Tags</h2>
<ul id="cloud">
{% for tag in tag_cloud %}
<li class="tag-{{ tag.1 }}"><a href="{{ SITEURL }}/{{ tag.0.url }}">{{ tag.0 }}</a></li>
{% endfor %}
</ul>
</div>
{% endif %}<!-- /.Tags -->
</div>

View File

@ -0,0 +1,15 @@
{% extends "base.html" %}
{% block title %}{{ page.title }} | {{ SITENAME }}{% endblock %}
{% block ogtitle %}{{ page.title|striptags }}{% endblock %}
{% block ogurl %}{{ SITEURL }}/{{ page.url }}{%endblock%}%}
{% block canonicalurl %}{{ SITEURL }}/{{ page.url }}{%endblock%}
{% block content %}
<section >
<h1 class="entry-title">{{ page.title }}</h1>
{% import 'translations.html' as translations with context %}
{{ translations.translations_for(page) }}
{{ page.content }}
</section>
{% endblock %}

View File

@ -0,0 +1,6 @@
{% extends "archives.html" %}
{% block title %}{{ SITENAME }} - {{ tag }} | {{ SITENAME }}{% endblock %}
{% block content_title %}Ricerca per tag: "{{ tag }}"{% endblock %}
{% block ogtitle %}{{ SITENAME }} - {{ tag }}{% endblock %}
{% block ogurl %}{{ SITEURL }}/{{ tag.url }}{%endblock%}
{% block canonicalurl %}{{ SITEURL }}/{{ tag.url }}{%endblock%}

View File

@ -0,0 +1,19 @@
{% extends "index.html" %}
{% block title %}Tags in {{ SITENAME }}{% endblock %}
{% block ogtitle %}Tags in {{ SITENAME }}{% endblock %}
{% block ogurl %}{{ SITEURL }}/tags.html{%endblock%}%}
{% block canonicalurl %}{{ SITEURL }}/tags.html{%endblock%}
{% block content %}
<div class="span9">
<section>
<h1>{% block content_title %}Tags{% endblock %}</h1>
<dl>
{% for tag, articles in tags|sort %}
<dd><a href="{{ SITEURL }}/{{ tag.url }}">{{ tag }} ({{ articles|count }})</a></dd>
{% endfor %}
</dl>
</section>
</div>
{% endblock %}

View File

@ -0,0 +1,10 @@
{% macro translations_for(article) %}
{% if article.translations %}
<br>
Translations:
{% for translation in article.translations %}
<a href="{{ SITEURL }}/{{ translation.url }}">{{ translation.lang }}</a>
{% endfor %}
{% endif %}
{% endmacro %}