From c79850fa53f3aead8fea625dbb2cb51a814ea035 Mon Sep 17 00:00:00 2001 From: mathieui Date: Sat, 17 Apr 2021 20:47:37 +0200 Subject: [PATCH] First version of the website, with most static pages --- README.rst | 12 + jabberfr/__init__.py | 0 jabberfr/asgi.py | 16 + jabberfr/hosts.py | 12 + jabberfr/settings.py | 116 +++++++ jabberfr/subsites/__init__.py | 0 jabberfr/subsites/chat_urls.py | 7 + jabberfr/subsites/irc_urls.py | 6 + jabberfr/templates/chat/index.html | 20 ++ jabberfr/templates/contact.html | 19 ++ jabberfr/templates/index.html | 29 ++ jabberfr/templates/irc/index.html | 12 + jabberfr/templates/legal.html | 11 + jabberfr/urls.py | 35 ++ jabberfr/views.py | 49 +++ jabberfr/wsgi.py | 16 + manage.py | 22 ++ poetry.lock | 301 +++++++++++++++++ pyproject.toml | 18 + static/default.css | 506 +++++++++++++++++++++++++++++ static/favicon.ico | Bin 0 -> 4286 bytes static/favicon.ico.gz | Bin 0 -> 1030 bytes static/favicon.svg | 15 + static/favicon.svg.gz | Bin 0 -> 1242 bytes static/img/annuaire.png | Bin 0 -> 8791 bytes static/img/chat.png | Bin 0 -> 4704 bytes static/img/forum.png | Bin 0 -> 5282 bytes static/img/news.png | Bin 0 -> 7295 bytes static/img/planet.png | Bin 0 -> 10635 bytes static/img/wiki.png | Bin 0 -> 10086 bytes static/logo.svg | 22 ++ templates/footer.html | 14 + templates/header.html | 36 ++ templates/page_model.html | 11 + 34 files changed, 1305 insertions(+) create mode 100644 README.rst create mode 100644 jabberfr/__init__.py create mode 100644 jabberfr/asgi.py create mode 100644 jabberfr/hosts.py create mode 100644 jabberfr/settings.py create mode 100644 jabberfr/subsites/__init__.py create mode 100644 jabberfr/subsites/chat_urls.py create mode 100644 jabberfr/subsites/irc_urls.py create mode 100644 jabberfr/templates/chat/index.html create mode 100644 jabberfr/templates/contact.html create mode 100644 jabberfr/templates/index.html create mode 100644 jabberfr/templates/irc/index.html create mode 100644 jabberfr/templates/legal.html create mode 100644 jabberfr/urls.py create mode 100644 jabberfr/views.py create mode 100644 jabberfr/wsgi.py create mode 100755 manage.py create mode 100644 poetry.lock create mode 100644 pyproject.toml create mode 100644 static/default.css create mode 100644 static/favicon.ico create mode 100644 static/favicon.ico.gz create mode 100644 static/favicon.svg create mode 100644 static/favicon.svg.gz create mode 100644 static/img/annuaire.png create mode 100644 static/img/chat.png create mode 100644 static/img/forum.png create mode 100644 static/img/news.png create mode 100644 static/img/planet.png create mode 100644 static/img/wiki.png create mode 100644 static/logo.svg create mode 100644 templates/footer.html create mode 100644 templates/header.html create mode 100644 templates/page_model.html diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..08b6533 --- /dev/null +++ b/README.rst @@ -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) diff --git a/jabberfr/__init__.py b/jabberfr/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jabberfr/asgi.py b/jabberfr/asgi.py new file mode 100644 index 0000000..a6497f3 --- /dev/null +++ b/jabberfr/asgi.py @@ -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() diff --git a/jabberfr/hosts.py b/jabberfr/hosts.py new file mode 100644 index 0000000..cfc119a --- /dev/null +++ b/jabberfr/hosts.py @@ -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') +) diff --git a/jabberfr/settings.py b/jabberfr/settings.py new file mode 100644 index 0000000..d412e93 --- /dev/null +++ b/jabberfr/settings.py @@ -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' +] diff --git a/jabberfr/subsites/__init__.py b/jabberfr/subsites/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jabberfr/subsites/chat_urls.py b/jabberfr/subsites/chat_urls.py new file mode 100644 index 0000000..78144f4 --- /dev/null +++ b/jabberfr/subsites/chat_urls.py @@ -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), +] diff --git a/jabberfr/subsites/irc_urls.py b/jabberfr/subsites/irc_urls.py new file mode 100644 index 0000000..8024bfe --- /dev/null +++ b/jabberfr/subsites/irc_urls.py @@ -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')) +] diff --git a/jabberfr/templates/chat/index.html b/jabberfr/templates/chat/index.html new file mode 100644 index 0000000..144c4b0 --- /dev/null +++ b/jabberfr/templates/chat/index.html @@ -0,0 +1,20 @@ +{% extends "page_model.html" %} + +{% block content %} + +
+

Les salons les plus fréquentés

+ +{{ rooms | safe }} + +
+ +
+

Salons de discussion de JabberFR.org.

+

Ce service permet de discuter à plusieurs en utilisant un client Jabber. Pour ce faire, suivez les instructions du Wiki de JabberFR.

+

Vous pouvez aussi rejoindre directement un salon en cliquant sur la bulle dans la liste à droite.

+ +
+ + +{% endblock %} diff --git a/jabberfr/templates/contact.html b/jabberfr/templates/contact.html new file mode 100644 index 0000000..444313e --- /dev/null +++ b/jabberfr/templates/contact.html @@ -0,0 +1,19 @@ +{% extends "page_model.html" %} + +{% block content %} +
+

Nous contacter

+

Nous sommes disponibles sur Jabber bien sûr, notamment :

+ + +

Si vous devez contacter l’un des administrateurs en privé, voici qui nous sommes :

+ +
+{% endblock %} diff --git a/jabberfr/templates/index.html b/jabberfr/templates/index.html new file mode 100644 index 0000000..7438185 --- /dev/null +++ b/jabberfr/templates/index.html @@ -0,0 +1,29 @@ +{% extends "page_model.html" %} +{% load static %} + +{% block content %} + +
+ +
+ + +
+

Qu'est-ce que JabberFR ?

+

JabberFR est le site de la communauté francophone des utilisateurs de Jabber.
Ce site a pour but de regrouper tous les utilisateurs francophones de Jabber.
Plus d'informations sur JabberFR

+
+ + +
+

Nos salons les plus fréquentés

+ +{{ rooms | safe }} + +
+ +{% endblock %} diff --git a/jabberfr/templates/irc/index.html b/jabberfr/templates/irc/index.html new file mode 100644 index 0000000..6c2e514 --- /dev/null +++ b/jabberfr/templates/irc/index.html @@ -0,0 +1,12 @@ +{% extends "page_model.html" %} + +{% block content %} +

Passerelle IRC

+

+Passerelle IRC publique utilisant biboumi. +

+ +

+Pour rejoindre un canal IRC, rejoignez #le-canal%le-serveur-irc@irc.jabberfr.org avec votre client Jabber préféré comme tout autre salon de discussion. +

+{% endblock %} diff --git a/jabberfr/templates/legal.html b/jabberfr/templates/legal.html new file mode 100644 index 0000000..f1d1401 --- /dev/null +++ b/jabberfr/templates/legal.html @@ -0,0 +1,11 @@ +{% extends "page_model.html" %} + +{% block content %} + +

Informations légales

+ +

Les images du menu illustrant le wiki, le forum, le chat, les news et le planet sont dans le domaine public.

+

L'image illustrant l'annuaire est sous licence Creative Commons Attribution ShareAlike 2.5 issu du projet tango et légèrement modifié.

+

Le logo de JabberFR est sous licence Creative Commons Attribution ShareAlike 2.0, d’après un design de Maurice Svay.

+ +{% endblock %} diff --git a/jabberfr/urls.py b/jabberfr/urls.py new file mode 100644 index 0000000..054aa02 --- /dev/null +++ b/jabberfr/urls.py @@ -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 +] diff --git a/jabberfr/views.py b/jabberfr/views.py new file mode 100644 index 0000000..96bebdf --- /dev/null +++ b/jabberfr/views.py @@ -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 = """ + Voir plus… + + +""" + +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 = '

Impossible de récupérer la liste des salons !

' + context = { + 'rooms': rooms, + } + return render(request, 'index.html', context) + + +async def get_chat_index(request): + try: + rooms = await get_chatrooms() + except ClientError: + rooms = '

Impossible de récupérer la liste des salons !

' + context = { + 'title': 'Salons de discussion de JabberFR', + 'rooms': rooms, + } + + return render(request, 'chat/index.html', context=context) diff --git a/jabberfr/wsgi.py b/jabberfr/wsgi.py new file mode 100644 index 0000000..918de3e --- /dev/null +++ b/jabberfr/wsgi.py @@ -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() diff --git a/manage.py b/manage.py new file mode 100755 index 0000000..198a576 --- /dev/null +++ b/manage.py @@ -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() diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..4cf97be --- /dev/null +++ b/poetry.lock @@ -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"}, +] diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..6295c2c --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,18 @@ +[tool.poetry] +name = "jabberfr" +version = "0.1.0" +description = "Site de jabberfr" +authors = ["mathieui "] +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" diff --git a/static/default.css b/static/default.css new file mode 100644 index 0000000..5bbe4af --- /dev/null +++ b/static/default.css @@ -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; +} +*/ diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..acf51c025b54c6c7fdaf4f43826b0930f63d8320 GIT binary patch literal 4286 zcmeHKZA@Eb6n;zD5D7sHV3sVAVJd=7m&{~tKb%vNEouT0v&Hbo;15iU{ux`0$;J{t zMwV=eAAzVpFxxcR1bSN-4j8NG#35v|jmm;-D9Fgd1WKWdQTq72_x9SB-QI5PFB494 z?)!1xbDr~_^L|wb3xE0fLVm@!4+xPbgm{e1F7X^$_NzqMDkU2M<<(>@B&V-j5yG)I zIUC7nE9ZnzK(0;3O5(bTBZN;M9G?mSOX9W?(R6+;@zc^=0a;qDt}lf+l#+<0#B`Jo zByM5h85}-5B=dmG%$6o0nsbC`EMRG4Ts8~gdWNzRA)GI<{ldLtwPjHE720@<`iEH7 zlN~83&JmV!{#afP;^4tS)d$%Zhd&d-oqBhEG~Z9`AL7`<=%^o(_V4$o*lX6fkez)B z>(-q{K|u$KiaM9bzV++dWwtlMO(LaO%wk^GyF}P+;Laa`yOrXj=!Uks_4U!D_YN8}dx!hs31U9g2E5(_^m6@6k}_q* z+K~PA^&{XNGHQmudv~uKnlzogq3uQ8(B;csq^CE_`11{MC#9xpcMi`V96dUWV5~!o z20vl`Wey@q<{%bbzrKLHyjDN4`F^u!-H9%HoS9au^Bay)&*_qqpD{7PKpIfwS*wd( za92i7( z^#Cd>e_Jds|8DCYI1BI;ZW z>4xsDm~RYurcE$@S6OmxE8S%7F-Idy-f8m9=6J&#&qyloV@Ek{yhz`lXPxgVrC57s zwPZ7od@HQdY6Skj5zx;L@C^fbm+_9lObvNES#0N@oUB_yr18?W{(0}5M%^shcsM9% H*MR;7x8et@ literal 0 HcmV?d00001 diff --git a/static/favicon.ico.gz b/static/favicon.ico.gz new file mode 100644 index 0000000000000000000000000000000000000000..f7a0f6a87cccf40316e442ba90e476d2c412c007 GIT binary patch literal 1030 zcmV+h1o`_PiwFpH58zz_17=}%X=870E@@+L0PUA;NR(L=$Ir}I=8Bk$8bOe`Os3Tq z6twkWdlQP?1tp^hzbx*D7MA*wMJ$v-ZxR%2h0^W^quQkgbY3(|%_ggLHKjFkns6=K zF_W-##_?@(oPXz;JJa;?JkN}@BnzJ5%rnou-upY}+RqkLGx+(<}(sII@;ouo;sc7 zH=+aDPw4+4iJO*o4M&f*`{NK7S5Zb(o=8-h%1=GVWf_s>EAGo=d%xxP^%Lh*#q!uq zJjYKw{s2FVrPyn==FWis7$5gx|9(3{>!GTriL6nPvCBVW_Kk3JIvm50WX~R(|9#pt z3lb78WA^N;NKLIldV1{`t9#CzDrdmvIwHg8>TE*{`&%1i==Ilnb90-=cJFS(i4z^T zaG?uUYcFiJ0eC#)h(x?z-y0iQ{~;<%mShy>)AoKgMcuhlFTgz(-i~wU z90425Un}gb--GN88|uUQ=XwRqG6P8_Ah!V+@rL@8tmZWuD-PR`g86!Vjf)xiYW#Wgs@+OH2j}e?0#Yl0FD{F9=p6-qYzETUh8LsCF7r@?o@AhYBH#$WwQRc5&bu;YROB{*+ zew<6Y#CcF0x4p&9>wig&zjp0y*|E}b=oTplzqAW}$9pSvwiDRZqRcNSuzQ$MqsHI3 zv0iqp%_aN`p1tKYz<0NRmVThs3H7Hxh>0oph#KNUiHZ_; z4(A^nKi&bKO6on?F4o{}X;q2)vu7hnPOcml^_wAHp|*(A>CArwb8u$npXlk4Kg=UC z`Nh&LpLd6cy;!{Xx?7_$bMCV&jG)HJ(`rqUt^T|8{CNiqhHjLU{OjL8g@x_dx6h9J z{5Is}{q4!gxiiT3g=@u%y8eue+P;*O>b|6;E3VksiXo1rC*Y5d*;$d-A7$x0=3a!g zg_P5J*zQOCuOe7&Hv=Yj}k@mrLB81agFA&@jS;|AIay%*U)CcrM?gV065_v A8UO$Q literal 0 HcmV?d00001 diff --git a/static/favicon.svg b/static/favicon.svg new file mode 100644 index 0000000..0b01608 --- /dev/null +++ b/static/favicon.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/static/favicon.svg.gz b/static/favicon.svg.gz new file mode 100644 index 0000000000000000000000000000000000000000..e194c0e92acdf205e56332a9267bab984bf7d0a4 GIT binary patch literal 1242 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 N002ovPDHLkV1n3m@6-SQ literal 0 HcmV?d00001 diff --git a/static/img/chat.png b/static/img/chat.png new file mode 100644 index 0000000000000000000000000000000000000000..2af92c787a7cb31e6cbd6356537c6c7e39dc7a29 GIT binary patch literal 4704 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 VpH5ZS2K-crr;K_iUn*x7^gn!tX#4;G literal 0 HcmV?d00001 diff --git a/static/img/planet.png b/static/img/planet.png new file mode 100644 index 0000000000000000000000000000000000000000..26a046ae402ffad776fb2d7f859d1511a3ff0f9d GIT binary patch literal 10635 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 z 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 literal 0 HcmV?d00001 diff --git a/static/img/wiki.png b/static/img/wiki.png new file mode 100644 index 0000000000000000000000000000000000000000..82008db1daeb4b1ceb3390333e725d89b1362daa GIT binary patch literal 10086 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 IM6N<$f=S)V)Bpeg literal 0 HcmV?d00001 diff --git a/static/logo.svg b/static/logo.svg new file mode 100644 index 0000000..1e0ac96 --- /dev/null +++ b/static/logo.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/templates/footer.html b/templates/footer.html new file mode 100644 index 0000000..6c2ca5c --- /dev/null +++ b/templates/footer.html @@ -0,0 +1,14 @@ +

+ + diff --git a/templates/header.html b/templates/header.html new file mode 100644 index 0000000..91232be --- /dev/null +++ b/templates/header.html @@ -0,0 +1,36 @@ +{% load static %} + + {{ title | default:"JabberFR : informations et entraide francophone sur Jabber" }} + + + + + + + + + + + + + + diff --git a/templates/page_model.html b/templates/page_model.html new file mode 100644 index 0000000..f7ce653 --- /dev/null +++ b/templates/page_model.html @@ -0,0 +1,11 @@ + + +{% include "header.html" %} +
+
+ {% block content %} + {% endblock %} +
+
+{% include "footer.html" %} +