First version of the website, with most static pages

This commit is contained in:
Mathieu Pasquet 2021-04-17 20:47:37 +02:00
parent 48e4ce112e
commit c79850fa53
34 changed files with 1305 additions and 0 deletions

12
README.rst Normal file
View File

@ -0,0 +1,12 @@
JabberFR
========
Ce package contient le site de JabberFR (WIP), avec plusieurs hôtes différents:
- jabberfr.org
- irc.jabberfr.org
- chat.jabberfr.org
(le package django-hosts est utilisé pour avoir des sites différents par hôte
en une seule application)

0
jabberfr/__init__.py Normal file
View File

16
jabberfr/asgi.py Normal file
View File

@ -0,0 +1,16 @@
"""
ASGI config for jabberfr project.
It exposes the ASGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/3.1/howto/deployment/asgi/
"""
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'jabberfr.settings')
application = get_asgi_application()

12
jabberfr/hosts.py Normal file
View File

@ -0,0 +1,12 @@
"""
Multi-hosts configuration
"""
from django.conf import settings
from django_hosts import patterns, host
host_patterns = patterns(
'',
host('', settings.ROOT_URLCONF, name='jabberfr'),
host('chat', 'jabberfr.subsites.chat_urls', name='chat'),
host('irc', 'jabberfr.subsites.irc_urls', name='irc')
)

116
jabberfr/settings.py Normal file
View File

@ -0,0 +1,116 @@
"""
Django settings for jabberfr project.
Generated by 'django-admin startproject' using Django 3.1.7.
For more information on this file, see
https://docs.djangoproject.com/en/3.1/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.1/ref/settings/
"""
from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '75w04*h42egcf0u7)n81)3z*n$3a_0vp=^&72+&egk$gbttv6f'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ROOT_DOMAIN = 'jabberfr.org'
ALLOWED_HOSTS = [
'jabberfr.org',
'irc.jabberfr.org',
'chat.jabberfr.org',
]
DEFAULT_HOST = 'jabberfr'
# Application definition
INSTALLED_APPS = [
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_hosts',
]
MIDDLEWARE = [
'django_hosts.middleware.HostsRequestMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django_hosts.middleware.HostsResponseMiddleware',
]
ROOT_URLCONF = 'jabberfr.urls'
ROOT_HOSTCONF = 'jabberfr.hosts'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
Path(BASE_DIR, 'templates'),
Path(BASE_DIR, 'jabberfr', 'templates'),
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'jabberfr.wsgi.application'
# Database
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
# Internationalization
# https://docs.djangoproject.com/en/3.1/topics/i18n/
LANGUAGE_CODE = 'fr-fr'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.1/howto/static-files/
STATIC_URL = '/static/'
STATICFILES_DIRS = [
BASE_DIR / 'static'
]

View File

View File

@ -0,0 +1,7 @@
from django.views.generic import TemplateView
from django.urls import path
from jabberfr.views import get_chat_index
urlpatterns = [
path('', get_chat_index),
]

View File

@ -0,0 +1,6 @@
from django.views.generic import TemplateView
from django.urls import path
urlpatterns = [
path('', TemplateView.as_view(template_name='irc/index.html'))
]

View File

@ -0,0 +1,20 @@
{% extends "page_model.html" %}
{% block content %}
<div id="liste">
<h2>Les salons les plus fréquentés</h2>
{{ rooms | safe }}
</div>
<div id="intro">
<h2>Salons de discussion de <a href="//jabberfr.org/">JabberFR.org</a>.</h2>
<p>Ce service permet de discuter à plusieurs en utilisant un client Jabber. Pour ce faire, suivez les instructions du <a href="//wiki.jabberfr.org/MUC">Wiki de JabberFR</a>.</p>
<p>Vous pouvez aussi rejoindre directement un salon en cliquant sur la bulle dans la liste à droite.</p>
<!--<p>L'<a href="logs/">historique des discussions est disponible</a> si vous l'avez configur&eacute; pour votre salle.</p>-->
</div>
{% endblock %}

View File

@ -0,0 +1,19 @@
{% extends "page_model.html" %}
{% block content %}
<div style="margin-left: 50px">
<h2>Nous contacter</h2>
<p>Nous sommes disponibles sur Jabber bien sûr, notamment:</p>
<ul style="margin-left: 30px; margin-top: 10px">
<li>pour toute question sur lassociation, <a href="xmpp:association@chat.jabberfr.org?join">association@chat.jabberfr.org</a> (<a href="https://candy.jabberfr.org/association@chat.jabberfr.org">web chat</a>);</li>
<li>pour les questions générales, <a href="xmpp:jabberfr@chat.jabberfr.org?join">jabberfr@chat.jabberfr.org</a> (<a href="https://candy.jabberfr.org/jabberfr@chat.jabberfr.org">web chat</a>);</li>
<li>si vous avez une question privée, notamment de sécurité, <a href="mailto:admins@jabberfr.org">admins@jabberfr.org</a>.</li>
</ul>
<p>Si vous devez contacter lun des administrateurs en privé, voici qui nous sommes:</p>
<ul style="margin-left: 30px; margin-top: 10px">
<li>Link Mauve (JID: <a href="xmpp:linkmauve@linkmauve.fr">linkmauve@linkmauve.fr</a>);</li>
<li>mathieui (JID: <a href="xmpp:mathieui@mathieui.net">mathieui@mathieui.net</a>).</li>
</ul>
</div>
{% endblock %}

View File

@ -0,0 +1,29 @@
{% extends "page_model.html" %}
{% load static %}
{% block content %}
<div style="width:100%;margin-left:auto;margin-right:auto;">
<ul class="mainmenu">
<li><a href="//wiki.jabberfr.org/"><img src="{% static "/img/wiki.png" %}" alt="Wiki"/><br/> Un Wiki pour découvrir Jabber</a></li>
<li><a href="//chat.jabberfr.org/"><img src="{% static "/img/chat.png" %}" alt="Chat"/><br/> Un serveur de salons de discussion pour discuter à plusieurs.</a></li>
<li><a href="//news.jabberfr.org/"><img src="{% static "/img/news.png" %}" alt="News" /><br/>Un site de nouvelles sur Jabber</a></li>
<li><a href="//planet.jabberfr.org/"><img src="{% static "/img/planet.png" %}" alt="Planet" /><br/>Un agrégateur de blogs francophones sur Jabber</a></li>
</ul>
</div>
<div class="center" style="clear:both">
<h2>Qu'est-ce que JabberFR ?</h2>
<p>JabberFR est le site de la communauté francophone des utilisateurs de Jabber.<br/> Ce site a pour but de regrouper tous les utilisateurs francophones de Jabber.<br/><a href="//wiki.jabberfr.org/JabberFR">Plus d'informations sur JabberFR</a></p>
</div>
<div style="clear:both;" class="center" id="liste">
<h2>Nos salons les plus fréquentés</h2>
{{ rooms | safe }}
</div>
{% endblock %}

View File

@ -0,0 +1,12 @@
{% extends "page_model.html" %}
{% block content %}
<h2>Passerelle IRC</h2>
<p>
Passerelle IRC publique utilisant <a href="https://biboumi.louiz.org/">biboumi</a>.
</p>
<p>
Pour rejoindre un <a href="https://fr.wikipedia.org/wiki/Internet_Relay_Chat">canal IRC</a>, rejoignez #le-canal%le-serveur-irc@irc.jabberfr.org avec votre <a href="https://wiki.jabberfr.org/Clients">client Jabber</a> préféré comme tout autre <a href="https://wiki.jabberfr.org/MUC">salon de discussion</a>.
</p>
{% endblock %}

View File

@ -0,0 +1,11 @@
{% extends "page_model.html" %}
{% block content %}
<h2>Informations légales</h2>
<p>Les images du menu illustrant le wiki, le forum, le chat, les news et le planet sont dans le domaine public.</p>
<p>L'image illustrant l'annuaire est sous licence <a href="https://creativecommons.org/licenses/by-sa/2.5/deed.fr">Creative Commons Attribution ShareAlike 2.5</a> issu du <a href="http://tango-project.org">projet tango</a> et légèrement modifié.</p>
<p>Le logo de JabberFR est sous licence <a href="https://creativecommons.org/licenses/by-sa/2.0/fr/">Creative Commons Attribution ShareAlike 2.0</a>, daprès un design de <a href="https://svay.com/">Maurice Svay</a>.</p>
{% endblock %}

35
jabberfr/urls.py Normal file
View File

@ -0,0 +1,35 @@
"""jabberfr URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/3.1/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.urls import path
from django.views.generic import TemplateView
from jabberfr.views import get_root_index
PAGES = [
('legal', 'legal.html'),
('contact', 'contact.html'),
('inscription', 'inscription.html'),
]
urlpatterns = [
path('', get_root_index)
]
urlpatterns += [
path(url, TemplateView.as_view(template_name=template_name))
for url, template_name in PAGES
]

49
jabberfr/views.py Normal file
View File

@ -0,0 +1,49 @@
from aiohttp import ClientSession, ClientError, ClientTimeout
from django.shortcuts import render
BASE_MUC_URL = 'http://[::1]:5280/muc_list/?'
TABLE_END = """
<td colspan="5"><a href="//chat.jabberfr.org" style="display: table-cell; font-weight: bold; line-height: 2em">Voir plus</a></td>
</tr>
</table>
"""
async def get_chatrooms(*, limit: int = 25, order: str = 'users') -> str:
params = {
'limit': str(limit),
'order': order,
'class': 'lastposts',
}
params_str = ';'.join(f'{key}={value}' for key, value in params.items())
url = BASE_MUC_URL + params_str
async with ClientSession(raise_for_status=True, timeout=ClientTimeout(total=10)) as session:
async with session.get(url) as resp:
return await resp.text()
async def get_root_index(request):
try:
rooms = await get_chatrooms(limit=6)
rooms = rooms[:-9] + TABLE_END
except ClientError:
rooms = '<p>Impossible de récupérer la liste des salons!</p>'
context = {
'rooms': rooms,
}
return render(request, 'index.html', context)
async def get_chat_index(request):
try:
rooms = await get_chatrooms()
except ClientError:
rooms = '<p>Impossible de récupérer la liste des salons!</p>'
context = {
'title': 'Salons de discussion de JabberFR',
'rooms': rooms,
}
return render(request, 'chat/index.html', context=context)

16
jabberfr/wsgi.py Normal file
View File

@ -0,0 +1,16 @@
"""
WSGI config for jabberfr project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'jabberfr.settings')
application = get_wsgi_application()

22
manage.py Executable file
View File

@ -0,0 +1,22 @@
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'jabberfr.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()

301
poetry.lock generated Normal file
View File

@ -0,0 +1,301 @@
[[package]]
name = "aiohttp"
version = "3.7.4.post0"
description = "Async http client/server framework (asyncio)"
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
async-timeout = ">=3.0,<4.0"
attrs = ">=17.3.0"
chardet = ">=2.0,<5.0"
multidict = ">=4.5,<7.0"
typing-extensions = ">=3.6.5"
yarl = ">=1.0,<2.0"
[package.extras]
speedups = ["aiodns", "brotlipy", "cchardet"]
[[package]]
name = "asgiref"
version = "3.3.4"
description = "ASGI specs, helper code, and adapters"
category = "main"
optional = false
python-versions = ">=3.6"
[package.extras]
tests = ["pytest", "pytest-asyncio", "mypy (>=0.800)"]
[[package]]
name = "async-timeout"
version = "3.0.1"
description = "Timeout context manager for asyncio programs"
category = "main"
optional = false
python-versions = ">=3.5.3"
[[package]]
name = "attrs"
version = "20.3.0"
description = "Classes Without Boilerplate"
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[package.extras]
dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "furo", "sphinx", "pre-commit"]
docs = ["furo", "sphinx", "zope.interface"]
tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"]
tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"]
[[package]]
name = "chardet"
version = "4.0.0"
description = "Universal encoding detector for Python 2 and 3"
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "django"
version = "3.2"
description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design."
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
asgiref = ">=3.3.2,<4"
pytz = "*"
sqlparse = ">=0.2.2"
[package.extras]
argon2 = ["argon2-cffi (>=19.1.0)"]
bcrypt = ["bcrypt"]
[[package]]
name = "django-hosts"
version = "4.0"
description = "Dynamic and static host resolving for Django. Maps hostnames to URLconfs."
category = "main"
optional = false
python-versions = ">=3.5"
[[package]]
name = "idna"
version = "3.1"
description = "Internationalized Domain Names in Applications (IDNA)"
category = "main"
optional = false
python-versions = ">=3.4"
[[package]]
name = "multidict"
version = "5.1.0"
description = "multidict implementation"
category = "main"
optional = false
python-versions = ">=3.6"
[[package]]
name = "pytz"
version = "2021.1"
description = "World timezone definitions, modern and historical"
category = "main"
optional = false
python-versions = "*"
[[package]]
name = "sqlparse"
version = "0.4.1"
description = "A non-validating SQL parser."
category = "main"
optional = false
python-versions = ">=3.5"
[[package]]
name = "typing-extensions"
version = "3.7.4.3"
description = "Backported and Experimental Type Hints for Python 3.5+"
category = "main"
optional = false
python-versions = "*"
[[package]]
name = "yarl"
version = "1.6.3"
description = "Yet another URL library"
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
idna = ">=2.0"
multidict = ">=4.0"
[metadata]
lock-version = "1.1"
python-versions = "^3.9"
content-hash = "6bca8de172437c18c63f1d86e85165c736cd120b4cb2ffc7c20874106a85db98"
[metadata.files]
aiohttp = [
{file = "aiohttp-3.7.4.post0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:3cf75f7cdc2397ed4442594b935a11ed5569961333d49b7539ea741be2cc79d5"},
{file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:4b302b45040890cea949ad092479e01ba25911a15e648429c7c5aae9650c67a8"},
{file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:fe60131d21b31fd1a14bd43e6bb88256f69dfc3188b3a89d736d6c71ed43ec95"},
{file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:393f389841e8f2dfc86f774ad22f00923fdee66d238af89b70ea314c4aefd290"},
{file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:c6e9dcb4cb338d91a73f178d866d051efe7c62a7166653a91e7d9fb18274058f"},
{file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:5df68496d19f849921f05f14f31bd6ef53ad4b00245da3195048c69934521809"},
{file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:0563c1b3826945eecd62186f3f5c7d31abb7391fedc893b7e2b26303b5a9f3fe"},
{file = "aiohttp-3.7.4.post0-cp36-cp36m-win32.whl", hash = "sha256:3d78619672183be860b96ed96f533046ec97ca067fd46ac1f6a09cd9b7484287"},
{file = "aiohttp-3.7.4.post0-cp36-cp36m-win_amd64.whl", hash = "sha256:f705e12750171c0ab4ef2a3c76b9a4024a62c4103e3a55dd6f99265b9bc6fcfc"},
{file = "aiohttp-3.7.4.post0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:230a8f7e24298dea47659251abc0fd8b3c4e38a664c59d4b89cca7f6c09c9e87"},
{file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2e19413bf84934d651344783c9f5e22dee452e251cfd220ebadbed2d9931dbf0"},
{file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:e4b2b334e68b18ac9817d828ba44d8fcb391f6acb398bcc5062b14b2cbeac970"},
{file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:d012ad7911653a906425d8473a1465caa9f8dea7fcf07b6d870397b774ea7c0f"},
{file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:40eced07f07a9e60e825554a31f923e8d3997cfc7fb31dbc1328c70826e04cde"},
{file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:209b4a8ee987eccc91e2bd3ac36adee0e53a5970b8ac52c273f7f8fd4872c94c"},
{file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:14762875b22d0055f05d12abc7f7d61d5fd4fe4642ce1a249abdf8c700bf1fd8"},
{file = "aiohttp-3.7.4.post0-cp37-cp37m-win32.whl", hash = "sha256:7615dab56bb07bff74bc865307aeb89a8bfd9941d2ef9d817b9436da3a0ea54f"},
{file = "aiohttp-3.7.4.post0-cp37-cp37m-win_amd64.whl", hash = "sha256:d9e13b33afd39ddeb377eff2c1c4f00544e191e1d1dee5b6c51ddee8ea6f0cf5"},
{file = "aiohttp-3.7.4.post0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:547da6cacac20666422d4882cfcd51298d45f7ccb60a04ec27424d2f36ba3eaf"},
{file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:af9aa9ef5ba1fd5b8c948bb11f44891968ab30356d65fd0cc6707d989cd521df"},
{file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:64322071e046020e8797117b3658b9c2f80e3267daec409b350b6a7a05041213"},
{file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:bb437315738aa441251214dad17428cafda9cdc9729499f1d6001748e1d432f4"},
{file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:e54962802d4b8b18b6207d4a927032826af39395a3bd9196a5af43fc4e60b009"},
{file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:a00bb73540af068ca7390e636c01cbc4f644961896fa9363154ff43fd37af2f5"},
{file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:79ebfc238612123a713a457d92afb4096e2148be17df6c50fb9bf7a81c2f8013"},
{file = "aiohttp-3.7.4.post0-cp38-cp38-win32.whl", hash = "sha256:515dfef7f869a0feb2afee66b957cc7bbe9ad0cdee45aec7fdc623f4ecd4fb16"},
{file = "aiohttp-3.7.4.post0-cp38-cp38-win_amd64.whl", hash = "sha256:114b281e4d68302a324dd33abb04778e8557d88947875cbf4e842c2c01a030c5"},
{file = "aiohttp-3.7.4.post0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:7b18b97cf8ee5452fa5f4e3af95d01d84d86d32c5e2bfa260cf041749d66360b"},
{file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:15492a6368d985b76a2a5fdd2166cddfea5d24e69eefed4630cbaae5c81d89bd"},
{file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bdb230b4943891321e06fc7def63c7aace16095be7d9cf3b1e01be2f10fba439"},
{file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:cffe3ab27871bc3ea47df5d8f7013945712c46a3cc5a95b6bee15887f1675c22"},
{file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:f881853d2643a29e643609da57b96d5f9c9b93f62429dcc1cbb413c7d07f0e1a"},
{file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:a5ca29ee66f8343ed336816c553e82d6cade48a3ad702b9ffa6125d187e2dedb"},
{file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:17c073de315745a1510393a96e680d20af8e67e324f70b42accbd4cb3315c9fb"},
{file = "aiohttp-3.7.4.post0-cp39-cp39-win32.whl", hash = "sha256:932bb1ea39a54e9ea27fc9232163059a0b8855256f4052e776357ad9add6f1c9"},
{file = "aiohttp-3.7.4.post0-cp39-cp39-win_amd64.whl", hash = "sha256:02f46fc0e3c5ac58b80d4d56eb0a7c7d97fcef69ace9326289fb9f1955e65cfe"},
{file = "aiohttp-3.7.4.post0.tar.gz", hash = "sha256:493d3299ebe5f5a7c66b9819eacdcfbbaaf1a8e84911ddffcdc48888497afecf"},
]
asgiref = [
{file = "asgiref-3.3.4-py3-none-any.whl", hash = "sha256:92906c611ce6c967347bbfea733f13d6313901d54dcca88195eaeb52b2a8e8ee"},
{file = "asgiref-3.3.4.tar.gz", hash = "sha256:d1216dfbdfb63826470995d31caed36225dcaf34f182e0fa257a4dd9e86f1b78"},
]
async-timeout = [
{file = "async-timeout-3.0.1.tar.gz", hash = "sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f"},
{file = "async_timeout-3.0.1-py3-none-any.whl", hash = "sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3"},
]
attrs = [
{file = "attrs-20.3.0-py2.py3-none-any.whl", hash = "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6"},
{file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"},
]
chardet = [
{file = "chardet-4.0.0-py2.py3-none-any.whl", hash = "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5"},
{file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"},
]
django = [
{file = "Django-3.2-py3-none-any.whl", hash = "sha256:0604e84c4fb698a5e53e5857b5aea945b2f19a18f25f10b8748dbdf935788927"},
{file = "Django-3.2.tar.gz", hash = "sha256:21f0f9643722675976004eb683c55d33c05486f94506672df3d6a141546f389d"},
]
django-hosts = [
{file = "django-hosts-4.0.tar.gz", hash = "sha256:59a870d453f113c889a7888bae5408888870350e83e362740f382dad569c2281"},
{file = "django_hosts-4.0-py2.py3-none-any.whl", hash = "sha256:136ac225f34e7f2c007294441a38663ec2bba9637d870ad001def81bca87e390"},
]
idna = [
{file = "idna-3.1-py3-none-any.whl", hash = "sha256:5205d03e7bcbb919cc9c19885f9920d622ca52448306f2377daede5cf3faac16"},
{file = "idna-3.1.tar.gz", hash = "sha256:c5b02147e01ea9920e6b0a3f1f7bb833612d507592c837a6c49552768f4054e1"},
]
multidict = [
{file = "multidict-5.1.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:b7993704f1a4b204e71debe6095150d43b2ee6150fa4f44d6d966ec356a8d61f"},
{file = "multidict-5.1.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:9dd6e9b1a913d096ac95d0399bd737e00f2af1e1594a787e00f7975778c8b2bf"},
{file = "multidict-5.1.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:f21756997ad8ef815d8ef3d34edd98804ab5ea337feedcd62fb52d22bf531281"},
{file = "multidict-5.1.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:1ab820665e67373de5802acae069a6a05567ae234ddb129f31d290fc3d1aa56d"},
{file = "multidict-5.1.0-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:9436dc58c123f07b230383083855593550c4d301d2532045a17ccf6eca505f6d"},
{file = "multidict-5.1.0-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:830f57206cc96ed0ccf68304141fec9481a096c4d2e2831f311bde1c404401da"},
{file = "multidict-5.1.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:2e68965192c4ea61fff1b81c14ff712fc7dc15d2bd120602e4a3494ea6584224"},
{file = "multidict-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:2f1a132f1c88724674271d636e6b7351477c27722f2ed789f719f9e3545a3d26"},
{file = "multidict-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:3a4f32116f8f72ecf2a29dabfb27b23ab7cdc0ba807e8459e59a93a9be9506f6"},
{file = "multidict-5.1.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:46c73e09ad374a6d876c599f2328161bcd95e280f84d2060cf57991dec5cfe76"},
{file = "multidict-5.1.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:018132dbd8688c7a69ad89c4a3f39ea2f9f33302ebe567a879da8f4ca73f0d0a"},
{file = "multidict-5.1.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:4b186eb7d6ae7c06eb4392411189469e6a820da81447f46c0072a41c748ab73f"},
{file = "multidict-5.1.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:3a041b76d13706b7fff23b9fc83117c7b8fe8d5fe9e6be45eee72b9baa75f348"},
{file = "multidict-5.1.0-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:051012ccee979b2b06be928a6150d237aec75dd6bf2d1eeeb190baf2b05abc93"},
{file = "multidict-5.1.0-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:6a4d5ce640e37b0efcc8441caeea8f43a06addace2335bd11151bc02d2ee31f9"},
{file = "multidict-5.1.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:5cf3443199b83ed9e955f511b5b241fd3ae004e3cb81c58ec10f4fe47c7dce37"},
{file = "multidict-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:f200755768dc19c6f4e2b672421e0ebb3dd54c38d5a4f262b872d8cfcc9e93b5"},
{file = "multidict-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:05c20b68e512166fddba59a918773ba002fdd77800cad9f55b59790030bab632"},
{file = "multidict-5.1.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:54fd1e83a184e19c598d5e70ba508196fd0bbdd676ce159feb412a4a6664f952"},
{file = "multidict-5.1.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:0e3c84e6c67eba89c2dbcee08504ba8644ab4284863452450520dad8f1e89b79"},
{file = "multidict-5.1.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:dc862056f76443a0db4509116c5cd480fe1b6a2d45512a653f9a855cc0517456"},
{file = "multidict-5.1.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:0e929169f9c090dae0646a011c8b058e5e5fb391466016b39d21745b48817fd7"},
{file = "multidict-5.1.0-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:d81eddcb12d608cc08081fa88d046c78afb1bf8107e6feab5d43503fea74a635"},
{file = "multidict-5.1.0-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:585fd452dd7782130d112f7ddf3473ffdd521414674c33876187e101b588738a"},
{file = "multidict-5.1.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:37e5438e1c78931df5d3c0c78ae049092877e5e9c02dd1ff5abb9cf27a5914ea"},
{file = "multidict-5.1.0-cp38-cp38-win32.whl", hash = "sha256:07b42215124aedecc6083f1ce6b7e5ec5b50047afa701f3442054373a6deb656"},
{file = "multidict-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:929006d3c2d923788ba153ad0de8ed2e5ed39fdbe8e7be21e2f22ed06c6783d3"},
{file = "multidict-5.1.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:b797515be8743b771aa868f83563f789bbd4b236659ba52243b735d80b29ed93"},
{file = "multidict-5.1.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d5c65bdf4484872c4af3150aeebe101ba560dcfb34488d9a8ff8dbcd21079647"},
{file = "multidict-5.1.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b47a43177a5e65b771b80db71e7be76c0ba23cc8aa73eeeb089ed5219cdbe27d"},
{file = "multidict-5.1.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:806068d4f86cb06af37cd65821554f98240a19ce646d3cd24e1c33587f313eb8"},
{file = "multidict-5.1.0-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:46dd362c2f045095c920162e9307de5ffd0a1bfbba0a6e990b344366f55a30c1"},
{file = "multidict-5.1.0-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:ace010325c787c378afd7f7c1ac66b26313b3344628652eacd149bdd23c68841"},
{file = "multidict-5.1.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:ecc771ab628ea281517e24fd2c52e8f31c41e66652d07599ad8818abaad38cda"},
{file = "multidict-5.1.0-cp39-cp39-win32.whl", hash = "sha256:fc13a9524bc18b6fb6e0dbec3533ba0496bbed167c56d0aabefd965584557d80"},
{file = "multidict-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:7df80d07818b385f3129180369079bd6934cf70469f99daaebfac89dca288359"},
{file = "multidict-5.1.0.tar.gz", hash = "sha256:25b4e5f22d3a37ddf3effc0710ba692cfc792c2b9edfb9c05aefe823256e84d5"},
]
pytz = [
{file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"},
{file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"},
]
sqlparse = [
{file = "sqlparse-0.4.1-py3-none-any.whl", hash = "sha256:017cde379adbd6a1f15a61873f43e8274179378e95ef3fede90b5aa64d304ed0"},
{file = "sqlparse-0.4.1.tar.gz", hash = "sha256:0f91fd2e829c44362cbcfab3e9ae12e22badaa8a29ad5ff599f9ec109f0454e8"},
]
typing-extensions = [
{file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"},
{file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"},
{file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"},
]
yarl = [
{file = "yarl-1.6.3-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:0355a701b3998dcd832d0dc47cc5dedf3874f966ac7f870e0f3a6788d802d434"},
{file = "yarl-1.6.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:bafb450deef6861815ed579c7a6113a879a6ef58aed4c3a4be54400ae8871478"},
{file = "yarl-1.6.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:547f7665ad50fa8563150ed079f8e805e63dd85def6674c97efd78eed6c224a6"},
{file = "yarl-1.6.3-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:63f90b20ca654b3ecc7a8d62c03ffa46999595f0167d6450fa8383bab252987e"},
{file = "yarl-1.6.3-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:97b5bdc450d63c3ba30a127d018b866ea94e65655efaf889ebeabc20f7d12406"},
{file = "yarl-1.6.3-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:d8d07d102f17b68966e2de0e07bfd6e139c7c02ef06d3a0f8d2f0f055e13bb76"},
{file = "yarl-1.6.3-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:15263c3b0b47968c1d90daa89f21fcc889bb4b1aac5555580d74565de6836366"},
{file = "yarl-1.6.3-cp36-cp36m-win32.whl", hash = "sha256:b5dfc9a40c198334f4f3f55880ecf910adebdcb2a0b9a9c23c9345faa9185721"},
{file = "yarl-1.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:b2e9a456c121e26d13c29251f8267541bd75e6a1ccf9e859179701c36a078643"},
{file = "yarl-1.6.3-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:ce3beb46a72d9f2190f9e1027886bfc513702d748047b548b05dab7dfb584d2e"},
{file = "yarl-1.6.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2ce4c621d21326a4a5500c25031e102af589edb50c09b321049e388b3934eec3"},
{file = "yarl-1.6.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d26608cf178efb8faa5ff0f2d2e77c208f471c5a3709e577a7b3fd0445703ac8"},
{file = "yarl-1.6.3-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:4c5bcfc3ed226bf6419f7a33982fb4b8ec2e45785a0561eb99274ebbf09fdd6a"},
{file = "yarl-1.6.3-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:4736eaee5626db8d9cda9eb5282028cc834e2aeb194e0d8b50217d707e98bb5c"},
{file = "yarl-1.6.3-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:68dc568889b1c13f1e4745c96b931cc94fdd0defe92a72c2b8ce01091b22e35f"},
{file = "yarl-1.6.3-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:7356644cbed76119d0b6bd32ffba704d30d747e0c217109d7979a7bc36c4d970"},
{file = "yarl-1.6.3-cp37-cp37m-win32.whl", hash = "sha256:00d7ad91b6583602eb9c1d085a2cf281ada267e9a197e8b7cae487dadbfa293e"},
{file = "yarl-1.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:69ee97c71fee1f63d04c945f56d5d726483c4762845400a6795a3b75d56b6c50"},
{file = "yarl-1.6.3-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:e46fba844f4895b36f4c398c5af062a9808d1f26b2999c58909517384d5deda2"},
{file = "yarl-1.6.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:31ede6e8c4329fb81c86706ba8f6bf661a924b53ba191b27aa5fcee5714d18ec"},
{file = "yarl-1.6.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fcbb48a93e8699eae920f8d92f7160c03567b421bc17362a9ffbbd706a816f71"},
{file = "yarl-1.6.3-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:72a660bdd24497e3e84f5519e57a9ee9220b6f3ac4d45056961bf22838ce20cc"},
{file = "yarl-1.6.3-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:324ba3d3c6fee56e2e0b0d09bf5c73824b9f08234339d2b788af65e60040c959"},
{file = "yarl-1.6.3-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:e6b5460dc5ad42ad2b36cca524491dfcaffbfd9c8df50508bddc354e787b8dc2"},
{file = "yarl-1.6.3-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:6d6283d8e0631b617edf0fd726353cb76630b83a089a40933043894e7f6721e2"},
{file = "yarl-1.6.3-cp38-cp38-win32.whl", hash = "sha256:9ede61b0854e267fd565e7527e2f2eb3ef8858b301319be0604177690e1a3896"},
{file = "yarl-1.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:f0b059678fd549c66b89bed03efcabb009075bd131c248ecdf087bdb6faba24a"},
{file = "yarl-1.6.3-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:329412812ecfc94a57cd37c9d547579510a9e83c516bc069470db5f75684629e"},
{file = "yarl-1.6.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:c49ff66d479d38ab863c50f7bb27dee97c6627c5fe60697de15529da9c3de724"},
{file = "yarl-1.6.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f040bcc6725c821a4c0665f3aa96a4d0805a7aaf2caf266d256b8ed71b9f041c"},
{file = "yarl-1.6.3-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:d5c32c82990e4ac4d8150fd7652b972216b204de4e83a122546dce571c1bdf25"},
{file = "yarl-1.6.3-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:d597767fcd2c3dc49d6eea360c458b65643d1e4dbed91361cf5e36e53c1f8c96"},
{file = "yarl-1.6.3-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:8aa3decd5e0e852dc68335abf5478a518b41bf2ab2f330fe44916399efedfae0"},
{file = "yarl-1.6.3-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:73494d5b71099ae8cb8754f1df131c11d433b387efab7b51849e7e1e851f07a4"},
{file = "yarl-1.6.3-cp39-cp39-win32.whl", hash = "sha256:5b883e458058f8d6099e4420f0cc2567989032b5f34b271c0827de9f1079a424"},
{file = "yarl-1.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:4953fb0b4fdb7e08b2f3b3be80a00d28c5c8a2056bb066169de00e6501b986b6"},
{file = "yarl-1.6.3.tar.gz", hash = "sha256:8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b426bf10"},
]

18
pyproject.toml Normal file
View File

@ -0,0 +1,18 @@
[tool.poetry]
name = "jabberfr"
version = "0.1.0"
description = "Site de jabberfr"
authors = ["mathieui <mathieui@mathieui.net>"]
license = "MPL-2.0"
[tool.poetry.dependencies]
python = "^3.9"
Django = "^3.2"
django-hosts = "^4.0"
aiohttp = "^3.7.4"
[tool.poetry.dev-dependencies]
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

506
static/default.css Normal file
View File

@ -0,0 +1,506 @@
:root {
--body-background: #fbfbfb;
--body-color: black;
--content-border: 1px #CCC solid;
--content-color: white;
--header-color: var(--link);
--header-footer: #f0f0f0;
--header-footer-link: #696969;
--leftcontent-link-hover: white;
--mainmenu: inherit;
--mainmenu-hover: #eeeee2;
--footer-link: #8e8e8e;
--link: #c26a00;
--link-decoration: none;
--link-hover: #e07f0b;
--link-hover-decoration: none;
--table-header: #ffffd1;
--table-body: #fffff2;
--table-outline: 1px solid black;
--table-separator: 1px dotted black;
--dl-background: lavender;
--submit-color: #eee;
}
@media (prefers-color-scheme: dark) {
:root {
--body-background: #161616;
--body-color: #ccc;
--content-border: 1px #282828 solid;
--content-background: #1c1c1c;
--header-color: white;
--header-footer: #161616;
--header-footer-link: #ffb015;
--leftcontent-link-hover: black;
--mainmenu: #282828;
--mainmenu-hover: #333333;
--footer-link: #ffb015;
--link: #ffb015;
--link-decoration: none;
--link-hover: #ffb015;
--link-hover-decoration: underline;
--table-header: #282828;
--table-body: #282828;
--table-outline: 1px solid #282828;
--table-separator: 1px dotted #444;
--dl-background: #282828;
--submit-color: #282828;
}
}
* {
border: 0;
margin: 0;
padding: 0;
font-family: "DejaVu sans", Verdana, sans-serif;
font-size: 1.0em;
background: transparent;
}
code {
font-family: monospace;
}
.center {
text-align: center;
}
ul.mainmenu {
border:0px;
margin-bottom:50px;
}
ul.mainmenu {
list-style-type: none;
max-width: 800px;
margin: auto;
}
ul.mainmenu li{
float:left;
margin: 1ex;
width: 15em;
height: 29ex;
position:relative;
text-align: center;
font-family: sans-serif;
font-size: 75%;
background-color: var(--mainmenu);
padding: 1ex;
}
ul.mainmenu li a {
padding-top:2ex;
display: block;
text-decoration: var(--link-decoration);
height: 27ex;
}
ul.mainmenu li a:hover {
background-color: var(--mainmenu-hover);
}
@font-face {
font-family: CantaReg;
src: url('Cantarell-Regular.otf');
}
body {
background-color: var(--body-background);
color: var(--body-color);
display: grid;
grid-template-columns: 200px 1fr;
grid-template-rows: min-content 1fr min-content;
}
a:link, a:visited {
color: var(--link);
background: transparent;
text-decoration: var(--link-decoration);
}
a:hover {
color: var(--link-hover);
background: transparent;
text-decoration: var(--link-hover-decoration);
}
#header {
grid-column: 1 / span 2;
grid-row: 1;
padding-right: 10px;
background-color: var(--header-footer);
border-bottom: var(--content-border);
}
#header img {
position: absolute;
width: 170px;
margin-left: 30px;
margin-top: 10px;
margin-bottom: 5px;
}
#header h1 {
position: relative;
margin-left: 220px;
padding-top: 12px;/*15*/
color: var(--link);
text-align: center;
font-family: "CantaReg", "Cantarell";
font-size: 1.7em;
}
#header ul {
float: right;
list-style-image: none;
list-style-type: none;
margin-right: 30px;
}
#header ul li {
float: left;
}
#header ul li a {
line-height: 48px;
font-size: 0.88em;
font-weight: bold;
letter-spacing: -1px;
text-decoration: var(--link-decoration);
color: var(--link);
text-shadow: var(--header-footer) 0px 0px 10px;
-moz-transition: color 250ms ease-out;
transition: color 250ms ease-out;
padding-left: 20px;
}
#header ul li a:hover {
color: var(--link-hover);
}
#header h1 {
/*width: 500px;*/
}
#leftcontent {
grid-column: 1;
grid-row: 2;
padding-top: 20px;
border-bottom: var(--content-border);
}
#leftcontent ul {
padding-bottom: 20px;
list-style-image: none;
list-style-type: none;
margin-left: 25px;
}
#leftcontent ul li a {
display: block;
padding-top: 7px;
padding-bottom: 7px;
padding-left: 7px;
color: var(--header-footer-link);
font-size: 0.9em;
}
#leftcontent ul li a:hover {
color: var(--leftcontent-link-hover);
background-color: var(--header-footer-link);
}
#content {
grid-column: 2;
grid-row: 2;
border-left: var(--content-border);
border-bottom: var(--content-border);
position: relative;
min-height: 400px;
background-color: var(--content-background);
}
#content .palette {
height: 1px;
width: auto;
}
#content #page {
/*margin-top: 10px;*/
padding-top: 20px;
margin-left: 15px;
margin-right: 15px;
padding-bottom: 20px;
font-size: 0.95em;
}
#content ul {
padding-top: 10px;
padding-left: 48px;
}
h1 {
color: #B00000;
margin-left: 10px;
font-weight: bold;
margin-bottom: 10px;
font-size: 1.2em;
}
h2 {
color: var(--link);
margin-left: 5px;
font-weight: bold;
margin: 30px;
font-size: 1.05em;
}
p {
margin-top: 10px;
}
#footer {
grid-column: 1 / span 2;
grid-row: 3;
width: 100%;
padding-bottom: 20px;
background-color: var(--header-footer);
padding-top: 10px;
}
#footer h1 {
font-size: 1.2em;
color: #363636;
}
#footer ul {
list-style-image: none;
list-style-type: none;
text-align: center;
}
#footer ul li {
display: inline;
}
#footer ul li a {
font-size: 0.88em;
letter-spacing: -1px;
text-decoration: var(--link-decoration);
color: var(--footer-link);
margin-right: 20px;
}
#footer ul li a:hover {
color: var(--header-footer-link);
}
#footer img {
float: right;
padding-right: 10px;
}
table.lastposts {
border: var(--table-outline);
margin-top: 5px;
margin-left: auto;
margin-right: auto;
text-align: center;
border-collapse: collapse;
}
table.lastposts td {
border: var(--table-separator);
padding: 1px 10px 1px 10px;
}
table.lastposts td a {
text-decoration: var(--link-decoration);
}
table.lastposts td a:hover {
text-decoration: underline;
}
table {
background-color: var(--table-body);
border: var(--table-outline);
margin-top: 5px;
margin-left: auto;
margin-right: auto;
text-align: center;
border-collapse: collapse;
}
table th {
border: var(--table-separator);
padding: 2px 5px 2px 5px;
background-color: var(--table-header);
}
table td {
border: var(--table-separator);
padding: 2px 5px 2px 5px;
}
div.rows {
margin: 20px 20px 20px 20px;
padding: 10px 10px 10px 10px;
display: flex;
flex-flow: column nowrap;
align-items: center;
}
div.row {
margin: 20px 20px 20px 20px;
padding: 10px 10px 10px 10px;
}
div.row .hash {
word-wrap: break-word;
overflow-wrap: break-word;
font-family: mono;
/* color: black; */
}
figure {
width: 60vw;
}
figcaption {
display: block;
/* background-color: lavender; */
}
dl {
background-color: var(--dl-background);
}
dt {
font-weight: bold;
}
dd {
margin-top: .5em;
margin-bottom: 1em;
}
p.error {
border: 2px var(--link) solid;
margin-top: 20px;
margin-bottom: 20px;
width: 500px;
display: block;
margin-left: auto;
margin-right: auto;
text-align: center;
padding: 20px;
}
form {
margin: 10px;
padding: 10px;
max-width: 800px;
background-color: var(--table-body);
border: var(--table-outline);
}
label {
width: 14em;
display: inline-block;
font-weight: bold;
}
input, select {
border: 1px var(--link) solid;
padding: 5px;
color: var(--body-color);
}
input[type="submit"] {
background-color: var(--link);
color: var(--submit-color);
}
textarea {
border: var(--table-outline);
color: var(--body-color);
background-color: var(--table-body);
border: 1px solid black;
margin-top: 5px;
width: 100%;
height: 100px;
}
@media (max-width: 800px) {
body {
grid-template-columns: 1fr;
grid-template-rows: min-content 1fr min-content min-content;
}
#header > a {
margin-left: auto;
margin-right: auto;
}
#header img {
position: inherit;
}
#header h1 {
margin-left: inherit;
padding-top: inherit;
}
#leftcontent {
grid-column: 1;
grid-row: 3;
padding-top: 20px;
}
#content {
grid-column: 1;
grid-row: 2;
}
#content img {
width: 40px;
height: 40px;
}
#footer {
grid-row: 4;
}
}
@media (max-width: 640px) {
#liste > table tr > td:nth-child(3),
#liste > table tr > th:nth-child(2) {
display: none;
}
}
@media (max-width: 440px) {
#liste > table tr > td:nth-child(4),
#liste > table tr > th:nth-child(3) {
display: none;
}
}
/*
h1 {
color: #B00000;
}
#footer h1 {
color: #363636;
}
input {
color: #B00000;
}
*/

BIN
static/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
static/favicon.ico.gz Normal file

Binary file not shown.

15
static/favicon.svg Normal file
View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="jabberfr" viewBox="205 -30 170 170">
<path fill="white" d="m225.48077 20.641025 12.17949 60.096154 37.5 12.98077 7.37179 15.544871 L300 95.961538 l48.55769 -6.891025 8.01282 -10.256411 3.04488 -50 -16.34616 -18.269231 -92.94872 -5.6089739 z"/>
<path fill="#b00000" d="M248.47266 0 222 19.40625 v53.882812 l20.04102 20.367188 29.60156 2.654297 -2.64281 32.105473 32.25781 -30.548832 39.66797 1.419921 L360.0293 83.5 364 27.248047 345.54492 4.2207031 Z m6.79492 8.6796875 86.45117 3.8886715 15.63236 18.08428 -3.7183 46.927439 -12.91797 10.572266 -40.24218 -1.417969 -17.17969 17.751955 2.4043 -18.123049 L249.5 82.951172 236.28711 68.691406 235.00781 23.5 Z"/>
<g fill="#ffb015">
<path d="m272.59358 59.371657 -6.48395 3.342246 3.47593 3.074867 4.54546 -4.411765 z"/>
<path d="m273.93048 38.114973 -6.48396 -2.473262 -0.6016 3.81016 6.21658 0.40107 z"/>
<path d="m286.1631 21.537433 -4.67914 -4.74599 -2.07219 2.339573 4.74598 3.275401 z"/>
<path d="m306.75134 19.398395 1.60428 -4.879679 3.20855 0.735294 -2.6738 4.946524 z"/>
<path d="m325.66845 30.561497 5.34759 -5.080214 2.27273 2.406417 -6.35027 4.411765 z"/>
<path d="m330.14706 50.681818 7.82086 0.467914 -1.3369 3.676471 -6.81819 -1.804813 z"/>
<path d="m321.99198 64.318181 5.08021 4.21123 -2.67379 2.740642 -3.74332 -5.213904 z"/>
<path d="M300.58398 28.605469 C296.45631 28.48849 292.04521 29.557904 287.83398 33.234375 C279.41152 40.587316 278.47637 53.021975 287.43359 61.578125 L287.57031 69.787109 289.93359 72.90625 C289.17732 80.752488 299.38589 84.628297 302.31641 75.269531 L306.19141 72.529297 309.40625 65.439453 309.18164 65.400391 C315.28389 61.897121 319.6569 53.927534 320.45508 48.074219 C321.25722 42.191866 317.78059 33.234741 311.63086 31.095703 C308.55599 30.026185 304.71166 28.722447 300.58398 28.605469 z M300.62109 34.353516 C300.98491 34.365037 301.3581 34.393497 301.73828 34.439453 C313.90405 35.910042 315.10635 39.518236 314.97266 45.667969 C314.83897 51.817702 311.49779 57.165734 305.88281 58.101562 C305.6394 58.142131 305.40074 58.171766 305.16211 58.203125 L302.13867 67.193359 298.5293 69.867188 295.85547 66.123047 295.85547 57.433594 C286.01255 49.792383 289.34279 33.996346 300.62109 34.353516 z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
static/favicon.svg.gz Normal file

Binary file not shown.

BIN
static/img/annuaire.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

BIN
static/img/chat.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
static/img/forum.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
static/img/news.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

BIN
static/img/planet.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
static/img/wiki.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

22
static/logo.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 13 KiB

14
templates/footer.html Normal file
View File

@ -0,0 +1,14 @@
<footer id="footer">
<ul>
<li><a href="//jabberfr.org/legal">Mentions légales</a></li>
<li><a href="//wiki.jabberfr.org/CGU">Conditions Générales dUtilisation</a></li>
<li><a href="//jabberfr.org/contact/">Contact</a></li>
<li><a href="//statut.jabberfr.org">Statut</a></li>
<li><a href="//stats.jabberfr.org">Statistiques</a></li>
<li><a href="//jabberfr.org/certificats">Certificats</a></li>
<!--<li><a href="/privacy">Vie Privée</a></li>-->
<li><a href="https://www.chatons.org">CHATONS</a></li>
</ul>
</footer>
</body>

36
templates/header.html Normal file
View File

@ -0,0 +1,36 @@
{% load static %}
<head>
<title>{{ title | default:"JabberFR: informations et entraide francophone sur Jabber" }}</title>
<!-- Titre alternatif: « JabberFR, même Cédric a compris comment faire ! » -->
<meta name="keywords" content="jabber, xmpp, aide, francais, france, francophone"/>
<meta name="description" content="JabberFR: informations et entraide francophone sur Jabber"/>
<meta name="author" content="Erwan Briand"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<link href="{% static "/default.css" %}" rel="stylesheet" type="text/css" />
<link href="{% static "/favicon.ico" %}" rel="shortcut icon" />
</head>
<body>
<header id="header">
<a title="Accueil" href="//jabberfr.org"><img src="{% static "/logo.svg" %}" alt="JabberFR"/></a>
<h1>{{ title | default:"JabberFR: informations et entraide francophone sur Jabber" }}</h1>
</header>
<nav id="leftcontent">
<ul>
<li><a href="//jabberfr.org">Accueil</a></li>
<li><a href="//news.jabberfr.org">Actualités</a></li>
<li><a href="//planet.jabberfr.org">Agrégateur de blogs</a></li>
</ul>
<ul>
<li><a href="//wiki.jabberfr.org">Documentation</a></li>
<li><a href="//chat.jabberfr.org">Salons de discussion</a></li>
</ul>
<ul>
<li><a href="//wiki.jabberfr.org/JabberFR">L'association</a></li>
<li><a href="//jabberfr.org/adhesion/">Adhésion</a></li>
<li><a href="/inscription/">Inscription</a></li>
</ul>
</nav>

11
templates/page_model.html Normal file
View File

@ -0,0 +1,11 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr_FR" xml:lang="fr_FR">
{% include "header.html" %}
<article id="content">
<div id="page">
{% block content %}
{% endblock %}
</div>
</article>
{% include "footer.html" %}
</html>