summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md31
-rwxr-xr-xfederana.py32
-rw-r--r--static/base.css108
-rw-r--r--templates/base.html37
-rw-r--r--templates/contato.html17
-rw-r--r--templates/erro.html37
-rw-r--r--templates/estatuto.html16
-rw-r--r--templates/index.html6
-rw-r--r--templates/regimento-interno.html10
-rwxr-xr-xwsgi.py7
10 files changed, 301 insertions, 0 deletions
diff --git a/README.md b/README.md
index fe39a5e..04859b6 100644
--- a/README.md
+++ b/README.md
@@ -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 %}
diff --git a/wsgi.py b/wsgi.py
new file mode 100755
index 0000000..65256b7
--- /dev/null
+++ b/wsgi.py
@@ -0,0 +1,7 @@
+#!/usr/bin/python3
+
+from federana import app
+
+if __name__ == '__main__':
+ app.run()
+