diff options
| -rw-r--r-- | README.md | 31 | ||||
| -rwxr-xr-x | federana.py | 32 | ||||
| -rw-r--r-- | static/base.css | 108 | ||||
| -rw-r--r-- | templates/base.html | 37 | ||||
| -rw-r--r-- | templates/contato.html | 17 | ||||
| -rw-r--r-- | templates/erro.html | 37 | ||||
| -rw-r--r-- | templates/estatuto.html | 16 | ||||
| -rw-r--r-- | templates/index.html | 6 | ||||
| -rw-r--r-- | templates/regimento-interno.html | 10 | ||||
| -rwxr-xr-x | wsgi.py | 7 |
10 files changed, 301 insertions, 0 deletions
@@ -1 +1,32 @@ Repositório do site da Federação pela Soberania Digital do Brasil + +Este projeto depende de Flask, Jinja2 e Python. + +Instale todas as dependências no Trisquel usando: + + apt-get install python3-flask + +Isto vai baixar automaticamente as demais. + +# Contribuindo + +O repositório está em +https://git.brigadadigital.org.br/cgit/federana/website.git/. + +Para baixar e contribuir mesmo sem permissão de escrita, basta +clonar o repositório usando: + + git clone https://git.brigadadigital.org.br/cgit/federana/website.git/ + +Se você tem permissão de escrita, então clone usando: + + git clone ssh://federana@git.brigadadigital.org.br:22123/~/website.git + +Para saber quais partes conhecidas que precisam de correção, +faça o seguinte: + + git grep 'FIXME:' + +Ou, sem git: + + grep --exclude-dir='.git' -R 'FIXME:' diff --git a/federana.py b/federana.py new file mode 100755 index 0000000..34a6cd3 --- /dev/null +++ b/federana.py @@ -0,0 +1,32 @@ +#!/usr/bin/python3 + +import sys +import time +from flask import Flask, abort, render_template, redirect, url_for, request +from werkzeug.exceptions import default_exceptions +import jinja2.exceptions + +app = Flask(__name__) +app.jinja_env.auto_reload = True +app.config['TEMPLATES_AUTO_RELOAD'] = True + +@app.context_processor +def injetar_dados_basicos(): + return dict(organizacao = 'FederANA') + +def generic_handler(e): + return render_template('/erro.html', erro = e), getattr(e, 'code', 500) + +for codigo in default_exceptions: + app.errorhandler(codigo)(generic_handler) + +@app.route('/') +def index(): + return redirect('/index.html') + +@app.route('/<path:caminho>.html') +def ver_pagina(caminho): + try: + return render_template('/' + caminho + '.html') + except jinja2.exceptions.TemplateNotFound as e: + abort(404) diff --git a/static/base.css b/static/base.css new file mode 100644 index 0000000..cfc6a7c --- /dev/null +++ b/static/base.css @@ -0,0 +1,108 @@ +* { + font-size: 12pt; +} + +body { + counter-reset: h3; + display: flex; +} + +body > header { + border-right: solid; + padding-right: 2.5%; + margin-right: 2.5%; +} + +nav > ul { + list-style: none; +} + +body > header ~ div { + flex: 1; + display: flex; + flex-direction: column; +} + +main { + flex: 1; +} + +address, p { + line-height: 1.5; + text-align: justify; + text-indent: 1.25cm; +} + +pre { + white-space: pre-wrap; +} + +h1, h2, h3, h4 { + text-transform: uppercase; +} + +h1, h2, h3, h5 { + font-weight: bold; +} + +h4, h6 { + font-weight: normal; +} + +h1, h2 { + font-size: 14pt; + text-align: center; +} + +h3 { + counter-reset: h4; +} + +h4 { + counter-reset: h5; +} + +h5 { + counter-reset: h6; +} + +h3:before { + counter-increment: h3; + content: "Capítulo\0000a0" counter(h3) "\0000a0"; +} + +h4:before { + counter-increment: h4; + content: "Seção\0000a0" counter(h4) "\0000a0"; +} + +h5:before { + counter-increment: h5; + content: "Subseção\0000a0" counter(h5) "\0000a0"; +} + +h6:before { + counter-increment: h6; + content: "Subseção\0000a0" counter(h5) "." counter(h6) "\0000a0"; +} + +.nao-contar h3:before, h3.nao-contar:before, +.nao-contar h4:before, h4.nao-contar:before, +.nao-contar h5:before, h5.nao-contar:before, +.nao-contar h6:before, h6.nao-contar:before { + content: ""; + counter-increment: none; +} + +.centro { + display: block; + margin-left: auto; + margin-right: auto; + width: 50%; +} + +@media print { + body > header { + display: none; + } +} diff --git a/templates/base.html b/templates/base.html new file mode 100644 index 0000000..c25a275 --- /dev/null +++ b/templates/base.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<html lang="pt-br"> + <head> + {%- block cabeca %} + <meta charset="utf-8" /> + <link rel="stylesheet" href="{{ url_for('static', filename = 'base.css') }}" /> + {%- endblock %} + <title>{% block titulo required %}{% endblock %} — {{ organizacao }}</title> + </head> + <body> + <header> + <h1>{{ organizacao }}</h1> + <nav aria-label="Menu de navegação"> + {%- set navegacao = [ + ('/index.html', 'Sobre'), + ('/estatuto.html', 'Estatuto'), + ('/regimento-interno.html', 'Regimento Interno'), + ('/contato.html', 'Contato') + ] %} + <ul>{% for endereco, nome in navegacao %} + {%- if request.path is defined and request.path == endereco %} + <li><a aria-current="page" href="{{ endereco }}">{{ nome }}</a></li> + {%- else %} + <li><a href="{{ endereco }}">{{ nome }}</a></li> + {%- endif -%} + {% endfor -%}</ul> + </nav> + </header> + <div> + <main id="principal" aria-labelledby="titulo"> + <h2 id="titulo">{{ self.titulo() }}</h2> + {%- block principal required %}{% endblock -%} + {%- if self.extra() %}<section class="nao-contar">{%- block extra %}{% endblock -%}</section>{% endif -%} + </main> + </div> + </body> +</html> diff --git a/templates/contato.html b/templates/contato.html new file mode 100644 index 0000000..c4de814 --- /dev/null +++ b/templates/contato.html @@ -0,0 +1,17 @@ +{% extends 'base.html' %} +{% block titulo %}Contato{% endblock %} +{% block principal %} +<p>Seguem as formas de participar ou entrar em contato:</p> +<ul> + <li> + <p><a href="mailto:exemplo@email.tld">Envie um e-mail</a>.</p> + </li> + <li> + <p><a href="xmpp:federacao_soberana@grupos.brigadadigital.org.br?join">Entrando na sala XMPP</a>.</p> + <p>Não sabe o que é o XMPP, suas vantagens e como usar? <a href="https://forum.ayom.media/post/60917">Veja o tutorial feito por daltux</a> e também <a href="https://libreplanet.org/wiki/XMPP.pt">pelo LibrePlanet</a>.</p> + </li> + <li> + <p>Se você tiver permissão, <a href="{{ url_for('static', filename = 'tutorial_gobby.pdf') }}">contribua diretamente usando o Gobby</a>.</p> + </li> +</ul> +{% endblock %} diff --git a/templates/erro.html b/templates/erro.html new file mode 100644 index 0000000..230914a --- /dev/null +++ b/templates/erro.html @@ -0,0 +1,37 @@ +{% extends 'base.html' %} +{% block titulo %}Erro HTTP {{ erro['code'] }}{% endblock %} +{% block principal %} +{%- set traducoes = dict({ + 400: 'Requisição mal feita', + 401: 'Acesso não autorizado', + 403: 'Proibido para este usuário', + 404: 'Caminho ou arquivo não encontrado', + 405: 'Método de requisição não permitido', + 406: 'Critérios de requisição não aceitáveis', + 408: 'Tempo esgotado', + 409: 'Conflito com o estado do servidor', + 410: 'O caminho ou arquivo foi removido', + 411: 'É preciso informar o tamanho desejado', + 412: 'Nenhum resultado para as condicionantes informadas nos cabeçalhos da requisição', + 413: 'O conteúdo da requisição é muito grande', + 414: 'Caminho muito longo', + 415: 'Tipo de mídia ou conteúdo não suportado', + 416: 'O intervalo requerido para o arquivo não existe', + 417: 'Requisição grande não autorizada/esperada', + 418: 'Eu sou uma chaleira ou não aceito robôs', + 422: 'Erro de semântica ou dados inválidos', + 423: 'Arquivo Travado ou bloqueado', + 424: 'Dependência não cumprida', + 428: 'Condição requerida', + 429: 'Muitos pedidos ou requisições', + 431: 'Cabeçalhos muito grandes', + 451: 'Indisponível legalmente', + 500: 'Erro interno', + 501: 'Não implementado', + 502: 'Ponte de ligação ruim', + 503: 'Serviço indisponível', + 504: 'Tempo esgotado para a ponte de ligação', + 505: 'Versão HTTP não suportada' +}) %} +<p>{{ traducoes[erro['code']] }}</p> +{% endblock %} diff --git a/templates/estatuto.html b/templates/estatuto.html new file mode 100644 index 0000000..8348bac --- /dev/null +++ b/templates/estatuto.html @@ -0,0 +1,16 @@ +{% extends 'base.html' %} +{% block titulo %}Estatuto{% endblock %} +{% block principal %} +<p>Versão estática do Estatuto.</p> +<h3>Teste A</h3> +<p>A 1</p> +<h3>Teste B</h3> +<p>B 1</p> +<h4>Teste B B</h4> +<p>B B 1</p> +{% endblock %} +{% block extra %} +<h3>Sugerindo alterações</h3> +<p>Uma das formas de propor mudanças neste documento é <a href="">deixar uma mensagem no ActivityPub</a>.</p> +<p>Você também pode <a href="/contato.html">fazer um comentário ou entrar em contato de outras formas</a>.</p> +{% endblock %} diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..77beab4 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,6 @@ +{% extends 'base.html' %} +{% block titulo %}Sobre a {{ organizacao }}{% endblock %} +{% block principal %} +<p>A {{ organizacao }} tem como fins e objetivos a promoção da soberania digital do Brasil e de sua população. Para tanto, estamos construindo de forma colaborativa o Estatuuto, Regimento Interno e demais elementos.</p> +<p>Tem alguma sugestão? Quer participar? Veja as páginas no menu de navegação para saber como contribuir.</p> +{% endblock %} diff --git a/templates/regimento-interno.html b/templates/regimento-interno.html new file mode 100644 index 0000000..f8921c2 --- /dev/null +++ b/templates/regimento-interno.html @@ -0,0 +1,10 @@ +{% extends 'base.html' %} +{% block titulo %}Regimento Interno{% endblock %} +{% block principal %} +<p>Versão estática do Regimento Interno.</p> +{% endblock %} +{% block extra %} +<h3>Sugerindo alterações</h3> +<p>Uma das formas de propor mudanças neste documento é <a href="">deixar uma mensagem no ActivityPub</a>.</p> +<p>Você também pode <a href="/contato.html">fazer um comentário ou entrar em contato de outras formas</a>.</p> +{% endblock %} @@ -0,0 +1,7 @@ +#!/usr/bin/python3 + +from federana import app + +if __name__ == '__main__': + app.run() + |
