diff --git a/colloscope/models.py b/colloscope/models.py index 74ba3e8..dcfcb10 100644 --- a/colloscope/models.py +++ b/colloscope/models.py @@ -383,6 +383,9 @@ class Colle(models.Model): # func = async_to_sync(swap.notify) # func() + def week_number(self): + return self.slot.term.cls.week_number(self.datetime.date()) + def __str__(self): return f"Colle {self.slot.subject} ({self.slot.colleur}); {self.datetime} {self.slot.time} {self.slot.room}. Groupe(s) {{{'; '.join(str(groupe) for groupe in self.groups.all())}}}" diff --git a/colloscope/templates/dashboard.html b/colloscope/templates/dashboard.html index b6c9e7f..441b8db 100644 --- a/colloscope/templates/dashboard.html +++ b/colloscope/templates/dashboard.html @@ -13,30 +13,33 @@ Bienvenue {{ student }}. Votre lycée est {{ term.cls.school.description }}, et votre classe est {{ term.cls.description }}. </p> -<p>Période actuelle : {{ term }}. Votre groupe de colle est {{ group }}. <a href="table.html">Consulter le colloscope</a></p> +<p>Période actuelle : {{ term }}. Votre groupe de colle est {{ group }}. <a href="{% url "colloscope:table" %}">Consulter le colloscope</a></p> <h2>Mes colles</h2> <p><a href="{{ calendar_link }}"><i class="fa-regular fa-calendar"></i> Exporter en .ics (ceci est un permalien public)</a></p> - <p><a href="{% url "colloscope.marketplace" %}">Accéder au marketplace</a></p> + <p><a href="{% url "colloscope:marketplace" %}">Accéder au marketplace</a></p> {% for n, lundi, colles in colles_per_sem %} {% if colles %} -<h3 class="week">Semaine {{n}} ({{lundi}})</h3> + <h3 class="week" id="week-no-{{ n }}"> + <a href="#week-no-{{ n }}">Semaine {{n}} ({{lundi}})</a> + </h3> <div class="colle-wrapper"> {% for colle in colles %} <div class="colle"> - <span class="summary">{{ colle.slot.subject }} ({{ colle.slot.colleur }})</span> <ul> - <li><i class="fa-solid fa-clock"></i> Le {{ colle.datetime|date:"l" }} {{ colle.datetime|date:"DATETIME_FORMAT" }}</li> + <li><i class="fa-solid fa-graduation-cap"></i> {{ colle.slot.subject }}</li> + <li><i class="fa-solid fa-person-chalkboard"></i> {{ colle.slot.colleur }}</li> + <li><i class="fa-solid fa-clock"></i> {{ colle.datetime|date:"l"|title }} {{ colle.datetime|date:"DATETIME_FORMAT" }}</li> <li><i class="fa-solid fa-users"></i> {{ colle.groups.all | print_manager | safe }} ({{ colle.volume }} / {{ colle.slot.capacity }})</li> <li><i class="fa-solid fa-earth-americas"></i> {{ colle.slot.room }}</li> <li><i class="fa-solid fa-circle-exclamation"></i> <form - action="{% url "colloscope.withdraw" %}" + action="{% url "colloscope:withdraw" %}" method="POST" onsubmit="return confirm('Êtes-vous sûr de vouloir vous désinscrire de la colle {{ colle }} ');"> {% csrf_token %} diff --git a/colloscope/templates/marketplace.html b/colloscope/templates/marketplace.html index d830207..1cb10a1 100644 --- a/colloscope/templates/marketplace.html +++ b/colloscope/templates/marketplace.html @@ -15,13 +15,14 @@ <div class="colle-wrapper"> {% for colle in colles %} <div class="colle"> - <span class="summary">{{ colle.slot.subject }} ({{ colle.slot.colleur }})</span> <ul> - <li><i class="fa-solid fa-clock"></i> Le {{ colle.datetime|date:"l" }} {{ colle.datetime|date:"DATETIME_FORMAT" }}</li> + <li><i class="fa-solid fa-graduation-cap"></i> {{ colle.slot.subject }}</li> + <li><i class="fa-solid fa-person-chalkboard"></i> {{ colle.slot.colleur }}</li> + <li><i class="fa-solid fa-clock"></i> {{ colle.datetime|date:"l"|title }} {{ colle.datetime|date:"DATETIME_FORMAT" }}</li> <li><i class="fa-solid fa-users"></i> {{ colle.groups.all | print_manager | safe }} ({{ colle.volume }} / {{ colle.slot.capacity }})</li> <li><i class="fa-solid fa-earth-americas"></i> {{ colle.slot.room }}</li> <li><i class="fa-solid fa-circle-exclamation"></i> - <form action="{% url "colloscope.enroll" %}" + <form action="{% url "colloscope:enroll" %}" method="POST" onsubmit="return confirm('Êtes-vous sûr de vouloir vous inscrire à la colle {{ colle }} ');"> {% csrf_token %} diff --git a/colloscope/templates/table.html b/colloscope/templates/table.html index 3c617fc..76a2240 100644 --- a/colloscope/templates/table.html +++ b/colloscope/templates/table.html @@ -13,12 +13,12 @@ <h1>Colloscope</h1> <p> - Lycée : {{ term.cls.school.description }}. Classe : {{ term.cls.description }}. <a href="dashboard.html">Retour au tableau de bord</a> + Lycée : {{ term.cls.school.description }}. Classe : {{ term.cls.description }}. <a href="{% url "colloscope:table" %}">Retour au tableau de bord</a> </p> <h2>Colloscope : {{ term.description }}</h2> - <form method="get" action="{% url "colloscope.table" %}"> + <form method="get" action="{% url "colloscope:table" %}"> Changer de période : <select name="term" id="term"> {% for p in term.cls.term_set.all %} diff --git a/colloscope/urls.py b/colloscope/urls.py index 19cb5b1..ff9265e 100644 --- a/colloscope/urls.py +++ b/colloscope/urls.py @@ -1,14 +1,15 @@ from django.urls import path +from django.shortcuts import redirect from . import views urlpatterns = [ - path("", views.home_redirect, name="colloscope.home"), - path("table.html", views.colloscope, name="colloscope.table"), - path("dashboard.html", views.dashboard, name="colloscope.dashboard"), - path("export.pdf", views.export, name="colloscope.export"), - path("export/calendar/<str:key>/calendar.ics", views.icalendar, name="colloscope.calendar.ics"), - path("select_profile", views.select_profile, name="colloscope.select_profile"), - path("marketplace.html", views.marketplace, name="colloscope.marketplace"), - path("action/enroll", views.enroll, name="colloscope.enroll"), - path("action/withdraw", views.withdraw, name="colloscope.withdraw"), + path("", lambda req: redirect("colloscope:dashboard"), name="home"), + path("table", views.colloscope, name="table"), + path("dashboard", views.dashboard, name="dashboard"), + path("export.pdf", views.export, name="export"), + path("export/calendar/<str:key>/calendar.ics", views.icalendar, name="export-ics"), + path("select_profile", views.select_profile, name="select_profile"), + path("marketplace", views.marketplace, name="marketplace"), + path("action/enroll", views.enroll, name="enroll"), + path("action/withdraw", views.withdraw, name="withdraw"), ] diff --git a/colloscope/views.py b/colloscope/views.py index 67302fe..98c457f 100644 --- a/colloscope/views.py +++ b/colloscope/views.py @@ -6,6 +6,8 @@ from django.http import HttpResponse, HttpResponseRedirect from django.template import loader from django.views.decorators.http import require_POST from django.contrib.auth.decorators import login_required +from django.views.generic import ListView +from django.utils.translation import gettext_lazy as _ from colloscope.models import * from colloscope.pdfexport import handle @@ -13,13 +15,8 @@ from colloscope.icalexport import to_calendar def handler404(request): - template = loader.get_template("404.html") context = {} - return HttpResponse(template.render(context), status=404) - - -def home_redirect(request): - return redirect("/colloscope/dashboard.html") + return render(request, '404.html', context, status=404) @login_required @@ -35,10 +32,10 @@ def select_profile(request): if profile.student is not None and profile.colleur is None: session["profile"] = "student" - return redirect("/colloscope/") + return redirect("colloscope:home") elif profile.colleur is not None and profile.student is None: session["profile"] = "colleur" - return redirect("/colloscope/") + return redirect("colloscope:home") else: if profile.student is not None: template = loader.get_template("select_profile.html") @@ -51,16 +48,11 @@ def select_profile(request): return HttpResponse(template.render(context)) -def get_lien_calendrier(student, term): - try: - lien = CalendarLink.objects.get(student=student, term=term) - except CalendarLink.DoesNotExist: - key = uuid4().hex - lien = CalendarLink(key=key, student=student, term=term) - lien.save() - - return f"calendrier.ics?key={lien.key}" +class ColleListView(ListView): + model = Colle + def get_queryset(self): + pass @login_required def dashboard(request): @@ -72,7 +64,7 @@ def dashboard(request): .prefetch_related("student__cls__term_set")) ) except ValueError: - return redirect("colloscope.select_profile") + return redirect("colloscope:select_profile") if not isinstance(student, Student): return HttpResponse("pas encore supporté") @@ -124,10 +116,10 @@ def marketplace(request): .prefetch_related("student__cls__term_set")) ) except ValueError: - return redirect("colloscope.select_profile") + return redirect("colloscope:select_profile") if not isinstance(student, Student): - return HttpResponse("pas encore supporté") + return HttpResponse(_("Not supported yet.")) term = student.cls.current_term() colles = term.query_colles_not_full_excluding_student(student) diff --git a/front/__init__.py b/front/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/front/admin.py b/front/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/front/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/front/apps.py b/front/apps.py new file mode 100644 index 0000000..0ece654 --- /dev/null +++ b/front/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class FrontConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'front' diff --git a/front/migrations/__init__.py b/front/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/front/models.py b/front/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/front/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/front/templates/index.html b/front/templates/index.html new file mode 100644 index 0000000..d3515af --- /dev/null +++ b/front/templates/index.html @@ -0,0 +1,50 @@ +{% extends "base.html" %} +{% load i18n %} + +{% block title %}Accueil{% endblock %} + +{% block main %} + <h1>{% translate "Your colloscope. Online." %}</h1> + + <p> + Certifié le dernier colloscope dont vous aurez besoin. Avec ses fonctionalités de synchronisation, il reste + toujours à jour pour vous permettre d'aborder vos colles sereinement, si vous connaissez votre cours (apprentissage + du cours non fourni). + </p> + + <h2>Soyez le premier informé lors d'une modification</h2> + <p> + Lorsqu'une colle est modifiée, le modification se propage à l'ensemble des pages visibles par les utilisateurs. + Aucune excuse pour manquer sa colle. + </p> + + <h2>Échangez vos colles en toute confiance</h2> + <p> + Vous ne pouvez pas venir à une colle ? Aucun problème : il vous suffit de l'échanger ! + Le <em>Marketplace</em> intégré vous donne la possibilité de récupérer des colles disponibles. + </p> + + <h2>Un système interopérable</h2> + <p> + Vous pouvez synchroniser vos colles avec votre application de calendrier favorite. Il lui suffit de supporter + les liens iCalendar. C'est le cas de l'application Calendrier sur iOS, de OneCalendar sur Android et de + Mozilla Thunderbird sur GNU/Linux et macOS (et Microsoft Windows). + </p> + + <h2>Pensé par un nerd, pour les nerds.</h2> + <p> + Un système complet d'API REST vous permet d'intégrer ce colloscope à vos programmes tiers. + </p> + + <h2>Libre, pour toujours.</h2> + <p> + Colloscope est distribué avec la licence GNU Affero GPL. Cette licence garantit vos quatre libertés, à savoir : + </p> + <ol start=0> + <li>Exécutez le code librement ;</li> + <li>Modifiez le code librement ;</li> + <li>Distribuez le code librement ;</li> + <li>Distribuez librement des versions modifiées du code.</li> + </ol> + +{% endblock %} \ No newline at end of file diff --git a/front/tests.py b/front/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/front/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/front/urls.py b/front/urls.py new file mode 100644 index 0000000..94b69ef --- /dev/null +++ b/front/urls.py @@ -0,0 +1,8 @@ +from django.urls import path +from django.shortcuts import redirect + +from . import views + +urlpatterns = [ + path("", views.index, name="index"), +] \ No newline at end of file diff --git a/front/views.py b/front/views.py new file mode 100644 index 0000000..4a73a4a --- /dev/null +++ b/front/views.py @@ -0,0 +1,8 @@ +from django.shortcuts import render + + +# Create your views here. + +def index(request): + context = {} + return render(request, "index.html", context) diff --git a/kholles_web/settings.sample.py b/kholles_web/settings.sample.py index 886f28f..d83c8db 100644 --- a/kholles_web/settings.sample.py +++ b/kholles_web/settings.sample.py @@ -52,6 +52,7 @@ INSTALLED_APPS = [ "rest_framework", 'rest_framework_simplejwt', 'colloscope', + "front", "drf_spectacular", ] @@ -156,8 +157,8 @@ STATICFILES_FINDERS = [ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' LOGIN_URL = "/accounts/login" -LOGIN_REDIRECT_URL = "home" -LOGOUT_REDIRECT_URL = "home" +LOGIN_REDIRECT_URL = "colloscope:dashboard" +LOGOUT_REDIRECT_URL = "front:index" DISCORD_NOTIFY_WEBHOOK_URL = "https://discord.com/api/webhooks/YOUR_URL" DISCORD_NOTIFY_WEBHOOK_USERNAME = "Watchdog" diff --git a/kholles_web/urls.py b/kholles_web/urls.py index 2763065..135fb8b 100644 --- a/kholles_web/urls.py +++ b/kholles_web/urls.py @@ -23,9 +23,8 @@ from rest_framework_simplejwt.views import ( TokenObtainPairView, TokenRefreshView, ) -from drf_spectacular.views import SpectacularAPIView, SpectacularRedocView, SpectacularSwaggerView +from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView -from colloscope.views import home_redirect from colloscope.viewsets import * router = routers.SimpleRouter() @@ -43,7 +42,9 @@ router.register("calendarlink", CalendarLinkViewset, basename='calendarlink') urlpatterns = [ - path('', home_redirect, name="home"), + path('', include(("front.urls", "front"), namespace="front")), + + path("__debug__/", include("debug_toolbar.urls")), path('api-auth/', include('rest_framework.urls')), path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'), path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'), @@ -55,7 +56,7 @@ urlpatterns = [ path("oauth2/", include('oauth2_provider.urls', namespace='oauth2_provider')), path("favicon.ico", lambda req: vstatic.serve(req, "favicon.ico")), - path('colloscope/', include('colloscope.urls')), + path('colloscope/', include(('colloscope.urls', "colloscope"), namespace="colloscope")), path('admin/', admin.site.urls), path('accounts/', include("django.contrib.auth.urls")), ] diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po deleted file mode 100644 index 4ebe504..0000000 --- a/locale/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,1241 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-05-02 01:46+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: kholles_web/settings.py:129 -msgid "English" -msgstr "" - -#: kholles_web/settings.py:130 -msgid "French" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/contrib/messages/apps.py:16 -msgid "Messages" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/contrib/sitemaps/apps.py:8 -msgid "Site Maps" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/contrib/staticfiles/apps.py:9 -msgid "Static Files" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/contrib/syndication/apps.py:7 -msgid "Syndication" -msgstr "" - -#. Translators: String used to replace omitted page numbers in elided page -#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. -#: venv/lib/python3.12/site-packages/django/core/paginator.py:30 -msgid "…" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/core/paginator.py:32 -msgid "That page number is not an integer" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/core/paginator.py:33 -msgid "That page number is less than 1" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/core/paginator.py:34 -msgid "That page contains no results" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/core/validators.py:22 -msgid "Enter a valid value." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/core/validators.py:104 -#: venv/lib/python3.12/site-packages/django/forms/fields.py:760 -msgid "Enter a valid URL." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/core/validators.py:165 -msgid "Enter a valid integer." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/core/validators.py:176 -msgid "Enter a valid email address." -msgstr "" - -#. Translators: "letters" means latin letters: a-z and A-Z. -#: venv/lib/python3.12/site-packages/django/core/validators.py:259 -msgid "" -"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/core/validators.py:267 -msgid "" -"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " -"hyphens." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/core/validators.py:279 -#: venv/lib/python3.12/site-packages/django/core/validators.py:306 -msgid "Enter a valid IPv4 address." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/core/validators.py:286 -#: venv/lib/python3.12/site-packages/django/core/validators.py:307 -msgid "Enter a valid IPv6 address." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/core/validators.py:298 -#: venv/lib/python3.12/site-packages/django/core/validators.py:305 -msgid "Enter a valid IPv4 or IPv6 address." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/core/validators.py:341 -msgid "Enter only digits separated by commas." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/core/validators.py:347 -#, python-format -msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/core/validators.py:382 -#, python-format -msgid "Ensure this value is less than or equal to %(limit_value)s." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/core/validators.py:391 -#, python-format -msgid "Ensure this value is greater than or equal to %(limit_value)s." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/core/validators.py:400 -#, python-format -msgid "Ensure this value is a multiple of step size %(limit_value)s." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/core/validators.py:407 -#, python-format -msgid "" -"Ensure this value is a multiple of step size %(limit_value)s, starting from " -"%(offset)s, e.g. %(offset)s, %(valid_value1)s, %(valid_value2)s, and so on." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/core/validators.py:439 -#, python-format -msgid "" -"Ensure this value has at least %(limit_value)d character (it has " -"%(show_value)d)." -msgid_plural "" -"Ensure this value has at least %(limit_value)d characters (it has " -"%(show_value)d)." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.12/site-packages/django/core/validators.py:457 -#, python-format -msgid "" -"Ensure this value has at most %(limit_value)d character (it has " -"%(show_value)d)." -msgid_plural "" -"Ensure this value has at most %(limit_value)d characters (it has " -"%(show_value)d)." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.12/site-packages/django/core/validators.py:480 -#: venv/lib/python3.12/site-packages/django/forms/fields.py:355 -#: venv/lib/python3.12/site-packages/django/forms/fields.py:394 -msgid "Enter a number." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/core/validators.py:482 -#, python-format -msgid "Ensure that there are no more than %(max)s digit in total." -msgid_plural "Ensure that there are no more than %(max)s digits in total." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.12/site-packages/django/core/validators.py:487 -#, python-format -msgid "Ensure that there are no more than %(max)s decimal place." -msgid_plural "Ensure that there are no more than %(max)s decimal places." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.12/site-packages/django/core/validators.py:492 -#, python-format -msgid "" -"Ensure that there are no more than %(max)s digit before the decimal point." -msgid_plural "" -"Ensure that there are no more than %(max)s digits before the decimal point." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.12/site-packages/django/core/validators.py:563 -#, python-format -msgid "" -"File extension “%(extension)s” is not allowed. Allowed extensions are: " -"%(allowed_extensions)s." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/core/validators.py:624 -msgid "Null characters are not allowed." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/base.py:1473 -#: venv/lib/python3.12/site-packages/django/forms/models.py:906 -msgid "and" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/base.py:1475 -#, python-format -msgid "%(model_name)s with this %(field_labels)s already exists." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/constraints.py:20 -#, python-format -msgid "Constraint “%(name)s” is violated." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:133 -#, python-format -msgid "Value %(value)r is not a valid choice." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:134 -msgid "This field cannot be null." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:135 -msgid "This field cannot be blank." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:136 -#, python-format -msgid "%(model_name)s with this %(field_label)s already exists." -msgstr "" - -#. Translators: The 'lookup_type' is one of 'date', 'year' or -#. 'month'. Eg: "Title must be unique for pub_date year" -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:140 -#, python-format -msgid "" -"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:179 -#, python-format -msgid "Field of type: %(field_type)s" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1155 -#, python-format -msgid "“%(value)s” value must be either True or False." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1156 -#, python-format -msgid "“%(value)s” value must be either True, False, or None." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1158 -msgid "Boolean (Either True or False)" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1208 -#, python-format -msgid "String (up to %(max_length)s)" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1210 -msgid "String (unlimited)" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1314 -msgid "Comma-separated integers" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1415 -#, python-format -msgid "" -"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " -"format." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1419 -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1554 -#, python-format -msgid "" -"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " -"date." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1423 -msgid "Date (without time)" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1550 -#, python-format -msgid "" -"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." -"uuuuuu]][TZ] format." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1558 -#, python-format -msgid "" -"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" -"[TZ]) but it is an invalid date/time." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1563 -msgid "Date (with time)" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1690 -#, python-format -msgid "“%(value)s” value must be a decimal number." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1692 -msgid "Decimal number" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1853 -#, python-format -msgid "" -"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." -"uuuuuu] format." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1857 -msgid "Duration" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1909 -msgid "Email address" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1934 -msgid "File path" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2012 -#, python-format -msgid "“%(value)s” value must be a float." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2014 -msgid "Floating point number" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2054 -#, python-format -msgid "“%(value)s” value must be an integer." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2056 -msgid "Integer" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2152 -msgid "Big (8 byte) integer" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2169 -msgid "Small integer" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2177 -msgid "IPv4 address" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2208 -msgid "IP address" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2301 -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2302 -#, python-format -msgid "“%(value)s” value must be either None, True or False." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2304 -msgid "Boolean (Either True, False or None)" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2355 -msgid "Positive big integer" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2370 -msgid "Positive integer" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2385 -msgid "Positive small integer" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2401 -#, python-format -msgid "Slug (up to %(max_length)s)" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2437 -msgid "Text" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2512 -#, python-format -msgid "" -"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " -"format." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2516 -#, python-format -msgid "" -"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " -"invalid time." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2520 -msgid "Time" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2628 -msgid "URL" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2652 -msgid "Raw binary data" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2717 -#, python-format -msgid "“%(value)s” is not a valid UUID." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:2719 -msgid "Universally unique identifier" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/files.py:232 -msgid "File" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/files.py:393 -msgid "Image" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/json.py:26 -msgid "A JSON object" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/json.py:28 -msgid "Value must be valid JSON." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/related.py:939 -#, python-format -msgid "%(model)s instance with %(field)s %(value)r does not exist." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/related.py:941 -msgid "Foreign Key (type determined by related field)" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/related.py:1235 -msgid "One-to-one relationship" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/related.py:1292 -#, python-format -msgid "%(from)s-%(to)s relationship" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/related.py:1294 -#, python-format -msgid "%(from)s-%(to)s relationships" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/db/models/fields/related.py:1342 -msgid "Many-to-many relationship" -msgstr "" - -#. Translators: If found as last label character, these punctuation -#. characters will prevent the default label_suffix to be appended to the label -#: venv/lib/python3.12/site-packages/django/forms/boundfield.py:185 -msgid ":?.!" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/fields.py:95 -msgid "This field is required." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/fields.py:304 -msgid "Enter a whole number." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/fields.py:475 -#: venv/lib/python3.12/site-packages/django/forms/fields.py:1252 -msgid "Enter a valid date." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/fields.py:498 -#: venv/lib/python3.12/site-packages/django/forms/fields.py:1253 -msgid "Enter a valid time." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/fields.py:525 -msgid "Enter a valid date/time." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/fields.py:559 -msgid "Enter a valid duration." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/fields.py:560 -#, python-brace-format -msgid "The number of days must be between {min_days} and {max_days}." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/fields.py:629 -msgid "No file was submitted. Check the encoding type on the form." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/fields.py:630 -msgid "No file was submitted." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/fields.py:631 -msgid "The submitted file is empty." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/fields.py:633 -#, python-format -msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." -msgid_plural "" -"Ensure this filename has at most %(max)d characters (it has %(length)d)." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.12/site-packages/django/forms/fields.py:638 -msgid "Please either submit a file or check the clear checkbox, not both." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/fields.py:702 -msgid "" -"Upload a valid image. The file you uploaded was either not an image or a " -"corrupted image." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/fields.py:874 -#: venv/lib/python3.12/site-packages/django/forms/fields.py:960 -#: venv/lib/python3.12/site-packages/django/forms/models.py:1585 -#, python-format -msgid "Select a valid choice. %(value)s is not one of the available choices." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/fields.py:962 -#: venv/lib/python3.12/site-packages/django/forms/fields.py:1081 -#: venv/lib/python3.12/site-packages/django/forms/models.py:1583 -msgid "Enter a list of values." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/fields.py:1082 -msgid "Enter a complete value." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/fields.py:1321 -msgid "Enter a valid UUID." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/fields.py:1351 -msgid "Enter a valid JSON." -msgstr "" - -#. Translators: This is the default suffix added to form field labels -#: venv/lib/python3.12/site-packages/django/forms/forms.py:94 -msgid ":" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/forms.py:231 -#, python-format -msgid "(Hidden field %(name)s) %(error)s" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/formsets.py:61 -#, python-format -msgid "" -"ManagementForm data is missing or has been tampered with. Missing fields: " -"%(field_names)s. You may need to file a bug report if the issue persists." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/formsets.py:65 -#, python-format -msgid "Please submit at most %(num)d form." -msgid_plural "Please submit at most %(num)d forms." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.12/site-packages/django/forms/formsets.py:70 -#, python-format -msgid "Please submit at least %(num)d form." -msgid_plural "Please submit at least %(num)d forms." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.12/site-packages/django/forms/formsets.py:484 -#: venv/lib/python3.12/site-packages/django/forms/formsets.py:491 -msgid "Order" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/formsets.py:499 -msgid "Delete" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/models.py:899 -#, python-format -msgid "Please correct the duplicate data for %(field)s." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/models.py:904 -#, python-format -msgid "Please correct the duplicate data for %(field)s, which must be unique." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/models.py:911 -#, python-format -msgid "" -"Please correct the duplicate data for %(field_name)s which must be unique " -"for the %(lookup)s in %(date_field)s." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/models.py:920 -msgid "Please correct the duplicate values below." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/models.py:1357 -msgid "The inline value did not match the parent instance." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/models.py:1448 -msgid "Select a valid choice. That choice is not one of the available choices." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/models.py:1587 -#, python-format -msgid "“%(pk)s” is not a valid value." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/utils.py:227 -#, python-format -msgid "" -"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " -"may be ambiguous or it may not exist." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/widgets.py:461 -msgid "Clear" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/widgets.py:462 -msgid "Currently" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/widgets.py:463 -msgid "Change" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/widgets.py:800 -msgid "Unknown" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/widgets.py:801 -msgid "Yes" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/forms/widgets.py:802 -msgid "No" -msgstr "" - -#. Translators: Please do not add spaces around commas. -#: venv/lib/python3.12/site-packages/django/template/defaultfilters.py:876 -msgid "yes,no,maybe" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/template/defaultfilters.py:906 -#: venv/lib/python3.12/site-packages/django/template/defaultfilters.py:923 -#, python-format -msgid "%(size)d byte" -msgid_plural "%(size)d bytes" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.12/site-packages/django/template/defaultfilters.py:925 -#, python-format -msgid "%s KB" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/template/defaultfilters.py:927 -#, python-format -msgid "%s MB" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/template/defaultfilters.py:929 -#, python-format -msgid "%s GB" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/template/defaultfilters.py:931 -#, python-format -msgid "%s TB" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/template/defaultfilters.py:933 -#, python-format -msgid "%s PB" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dateformat.py:74 -msgid "p.m." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dateformat.py:75 -msgid "a.m." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dateformat.py:80 -msgid "PM" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dateformat.py:81 -msgid "AM" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dateformat.py:153 -msgid "midnight" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dateformat.py:155 -msgid "noon" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:7 -msgid "Monday" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:8 -msgid "Tuesday" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:9 -msgid "Wednesday" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:10 -msgid "Thursday" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:11 -msgid "Friday" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:12 -msgid "Saturday" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:13 -msgid "Sunday" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:16 -msgid "Mon" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:17 -msgid "Tue" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:18 -msgid "Wed" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:19 -msgid "Thu" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:20 -msgid "Fri" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:21 -msgid "Sat" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:22 -msgid "Sun" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:25 -msgid "January" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:26 -msgid "February" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:27 -msgid "March" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:28 -msgid "April" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:29 -msgid "May" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:30 -msgid "June" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:31 -msgid "July" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:32 -msgid "August" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:33 -msgid "September" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:34 -msgid "October" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:35 -msgid "November" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:36 -msgid "December" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:39 -msgid "jan" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:40 -msgid "feb" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:41 -msgid "mar" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:42 -msgid "apr" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:43 -msgid "may" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:44 -msgid "jun" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:45 -msgid "jul" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:46 -msgid "aug" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:47 -msgid "sep" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:48 -msgid "oct" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:49 -msgid "nov" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:50 -msgid "dec" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:53 -msgctxt "abbrev. month" -msgid "Jan." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:54 -msgctxt "abbrev. month" -msgid "Feb." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:55 -msgctxt "abbrev. month" -msgid "March" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:56 -msgctxt "abbrev. month" -msgid "April" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:57 -msgctxt "abbrev. month" -msgid "May" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:58 -msgctxt "abbrev. month" -msgid "June" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:59 -msgctxt "abbrev. month" -msgid "July" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:60 -msgctxt "abbrev. month" -msgid "Aug." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:61 -msgctxt "abbrev. month" -msgid "Sept." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:62 -msgctxt "abbrev. month" -msgid "Oct." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:63 -msgctxt "abbrev. month" -msgid "Nov." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:64 -msgctxt "abbrev. month" -msgid "Dec." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:67 -msgctxt "alt. month" -msgid "January" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:68 -msgctxt "alt. month" -msgid "February" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:69 -msgctxt "alt. month" -msgid "March" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:70 -msgctxt "alt. month" -msgid "April" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:71 -msgctxt "alt. month" -msgid "May" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:72 -msgctxt "alt. month" -msgid "June" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:73 -msgctxt "alt. month" -msgid "July" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:74 -msgctxt "alt. month" -msgid "August" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:75 -msgctxt "alt. month" -msgid "September" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:76 -msgctxt "alt. month" -msgid "October" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:77 -msgctxt "alt. month" -msgid "November" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/dates.py:78 -msgctxt "alt. month" -msgid "December" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/ipv6.py:8 -msgid "This is not a valid IPv6 address." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/text.py:123 -#, python-format -msgctxt "String to return when truncating text" -msgid "%(truncated_text)s…" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/text.py:323 -msgid "or" -msgstr "" - -#. Translators: This string is used as a separator between list elements -#: venv/lib/python3.12/site-packages/django/utils/text.py:342 -#: venv/lib/python3.12/site-packages/django/utils/timesince.py:135 -msgid ", " -msgstr "" - -#: venv/lib/python3.12/site-packages/django/utils/timesince.py:8 -#, python-format -msgid "%(num)d year" -msgid_plural "%(num)d years" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.12/site-packages/django/utils/timesince.py:9 -#, python-format -msgid "%(num)d month" -msgid_plural "%(num)d months" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.12/site-packages/django/utils/timesince.py:10 -#, python-format -msgid "%(num)d week" -msgid_plural "%(num)d weeks" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.12/site-packages/django/utils/timesince.py:11 -#, python-format -msgid "%(num)d day" -msgid_plural "%(num)d days" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.12/site-packages/django/utils/timesince.py:12 -#, python-format -msgid "%(num)d hour" -msgid_plural "%(num)d hours" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.12/site-packages/django/utils/timesince.py:13 -#, python-format -msgid "%(num)d minute" -msgid_plural "%(num)d minutes" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.12/site-packages/django/views/csrf.py:29 -msgid "Forbidden" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/csrf.py:30 -msgid "CSRF verification failed. Request aborted." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/csrf.py:34 -msgid "" -"You are seeing this message because this HTTPS site requires a “Referer " -"header” to be sent by your web browser, but none was sent. This header is " -"required for security reasons, to ensure that your browser is not being " -"hijacked by third parties." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/csrf.py:40 -msgid "" -"If you have configured your browser to disable “Referer” headers, please re-" -"enable them, at least for this site, or for HTTPS connections, or for “same-" -"origin” requests." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/csrf.py:45 -msgid "" -"If you are using the <meta name=\"referrer\" content=\"no-referrer\"> tag or " -"including the “Referrer-Policy: no-referrer” header, please remove them. The " -"CSRF protection requires the “Referer” header to do strict referer checking. " -"If you’re concerned about privacy, use alternatives like <a " -"rel=\"noreferrer\" …> for links to third-party sites." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/csrf.py:54 -msgid "" -"You are seeing this message because this site requires a CSRF cookie when " -"submitting forms. This cookie is required for security reasons, to ensure " -"that your browser is not being hijacked by third parties." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/csrf.py:60 -msgid "" -"If you have configured your browser to disable cookies, please re-enable " -"them, at least for this site, or for “same-origin” requests." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/csrf.py:66 -msgid "More information is available with DEBUG=True." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/generic/dates.py:44 -msgid "No year specified" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/generic/dates.py:64 -#: venv/lib/python3.12/site-packages/django/views/generic/dates.py:115 -#: venv/lib/python3.12/site-packages/django/views/generic/dates.py:214 -msgid "Date out of range" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/generic/dates.py:94 -msgid "No month specified" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/generic/dates.py:147 -msgid "No day specified" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/generic/dates.py:194 -msgid "No week specified" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/generic/dates.py:349 -#: venv/lib/python3.12/site-packages/django/views/generic/dates.py:380 -#, python-format -msgid "No %(verbose_name_plural)s available" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/generic/dates.py:652 -#, python-format -msgid "" -"Future %(verbose_name_plural)s not available because %(class_name)s." -"allow_future is False." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/generic/dates.py:692 -#, python-format -msgid "Invalid date string “%(datestr)s” given format “%(format)s”" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/generic/detail.py:56 -#, python-format -msgid "No %(verbose_name)s found matching the query" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/generic/list.py:70 -msgid "Page is not “last”, nor can it be converted to an int." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/generic/list.py:77 -#, python-format -msgid "Invalid page (%(page_number)s): %(message)s" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/generic/list.py:169 -#, python-format -msgid "Empty list and “%(class_name)s.allow_empty” is False." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/static.py:49 -msgid "Directory indexes are not allowed here." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/static.py:51 -#, python-format -msgid "“%(path)s” does not exist" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/static.py:68 -#: venv/lib/python3.12/site-packages/django/views/templates/directory_index.html:8 -#: venv/lib/python3.12/site-packages/django/views/templates/directory_index.html:11 -#, python-format -msgid "Index of %(directory)s" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/templates/default_urlconf.html:7 -#: venv/lib/python3.12/site-packages/django/views/templates/default_urlconf.html:220 -msgid "The install worked successfully! Congratulations!" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/templates/default_urlconf.html:206 -#, python-format -msgid "" -"View <a href=\"https://docs.djangoproject.com/en/%(version)s/releases/\" " -"target=\"_blank\" rel=\"noopener\">release notes</a> for Django %(version)s" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/templates/default_urlconf.html:221 -#, python-format -msgid "" -"You are seeing this page because <a href=\"https://docs.djangoproject.com/en/" -"%(version)s/ref/settings/#debug\" target=\"_blank\" " -"rel=\"noopener\">DEBUG=True</a> is in your settings file and you have not " -"configured any URLs." -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/templates/default_urlconf.html:229 -msgid "Django Documentation" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/templates/default_urlconf.html:230 -msgid "Topics, references, & how-to’s" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/templates/default_urlconf.html:238 -msgid "Tutorial: A Polling App" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/templates/default_urlconf.html:239 -msgid "Get started with Django" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/templates/default_urlconf.html:247 -msgid "Django Community" -msgstr "" - -#: venv/lib/python3.12/site-packages/django/views/templates/default_urlconf.html:248 -msgid "Connect, get help, or contribute" -msgstr "" diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 492c8dd..08f1560 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -1239,3 +1239,13 @@ msgstr "" #: venv/lib/python3.12/site-packages/django/views/templates/default_urlconf.html:248 msgid "Connect, get help, or contribute" msgstr "" + + +#: colloscope/views.py:122 +msgid "Not supported yet." +msgstr "Pas encore supporté." + + +#: front/templates/index.html:7 +msgid "Your colloscope. Online." +msgstr "Votre colloscope. En ligne." \ No newline at end of file diff --git a/static/main.css b/static/main.css index 51623c1..94fdc45 100644 --- a/static/main.css +++ b/static/main.css @@ -7,6 +7,15 @@ body { margin: 0; } +a:link, a:visited { + color: blue; + text-decoration: underline; +} + +a:link:active, a:visited:active { + color: darkblue; +} + header .bandeau { display: block; background-color: #333; @@ -129,7 +138,11 @@ nav.semaine .select, nav.semaine .label { text-align: center; } -nav.semaine .select { background-color: dodgerblue; color: white; width: 1em; } +nav.semaine .select { + background-color: dodgerblue; + color: white; + width: 1em; +} nav.semaine .select:hover { background-color: #0077ea; } nav.semaine .label:hover { @@ -151,7 +164,19 @@ footer { .week { background-color: dodgerblue; color: white; - padding: 5px; + padding: 5px 10px; + border-radius: 5px; + + transition: background-color 200ms; +} + +.week a, .week a:hover, .week a:active { + color: white; + text-decoration: none; +} + +.week:hover { + background-color: #0077ea; } .week.empty { @@ -160,7 +185,7 @@ footer { .colle-wrapper { display: grid; - gap: 10px; + gap: 15px; } @media screen and (min-width: 400px) @@ -171,8 +196,16 @@ footer { } .colle { - border: 1px solid black; - padding: 10px; + padding: 15px; + border-radius: 8px; + box-shadow: 0 3px 6px rgba(0,0,0,0.04),0 3px 6px rgba(0,0,0,0.0575); + + transition: transform 200ms, background-color 200ms; +} + +.colle:hover { + background-color: #fafafa; + transform: rotate(1deg); } .colle span { @@ -181,6 +214,7 @@ footer { .colle ul { padding: 0; + margin: 0; } .colle li { diff --git a/static/unified-navigator b/static/unified-navigator index 9e2427d..811b224 160000 --- a/static/unified-navigator +++ b/static/unified-navigator @@ -1 +1 @@ -Subproject commit 9e2427d5ae8e7fafef9fe001394e9566e181f217 +Subproject commit 811b224d6a8a644dffd6c34cb54acbbd1a0f4db0 diff --git a/templates/base.html b/templates/base.html index 1d2d92d..240bbc9 100644 --- a/templates/base.html +++ b/templates/base.html @@ -25,27 +25,34 @@ <div class="link"><a href="https://mp2i-vms.fr/pages.html"><i class="fa-solid fa-house"></i> Pages personnelles</a></div> <div class="link"><a href="https://git.mp2i-vms.fr"><i class="fa-brands fa-git-alt"></i> Git</a></div> <div class="link"><a href="https://play.mp2i-vms.fr"><i class="fa-solid fa-cubes"></i> Minecraft</a></div> - <div class="link"><a href="{% url "home" %}"><i class="fa-solid fa-book"></i> Colles</a></div> + <div class="link"><a href="{% url "front:index" %}"><i class="fa-solid fa-book"></i> Colles</a></div> </div> </div> </div> <div class="navbar"> <div class="block"> + <a href="{% url "front:index" %}"> + <div class="link"><i class="fa-solid fa-home"></i> Accueil</div> + </a> {% if request.user.is_authenticated %} - <a href="{% url "colloscope.dashboard" %}"> + <a href="{% url "colloscope:dashboard" %}"> <div class="link"><i class="fa-solid fa-rocket"></i> Tableau de bord</div> </a> - <a href="{% url "colloscope.table" %}"> + <a href="{% url "colloscope:table" %}"> <div class="link"><i class="fa-solid fa-calendar"></i> Colloscope</div> </a> - <a href="{% url "colloscope.marketplace" %}"> + <a href="{% url "colloscope:marketplace" %}"> <div class="link"><i class="fa-solid fa-shop"></i> Marketplace</div> </a> {% endif %} </div> <div class="block"> {% if request.user.is_authenticated %} + <div class="link"> + <i class="fa-solid fa-user"></i> {{ user.username }} ({{ request.session.profile }}) + </div> + <form action="{% url 'logout' %}" method="post"> {% csrf_token %} <button class="link" type="submit" href="{% url "login" %}"> @@ -66,6 +73,6 @@ {% block main %}{% endblock main %} </main> <footer> - {% block footer %}© colles.mp2i-vms.fr 2024 - <a href="https://git.mp2i-vms.fr/mp2i-vms/kholles-web" target="_blank">Code source</a> - <a href="https://www.gnu.org/licenses/agpl-3.0.html" target="_blank">Licence GNU AGPL v3 or later</a>{% endblock footer %} + {% block footer %}© colles.mp2i-vms.fr 2024 - <a href="https://git.mp2i-vms.fr/mp2i-vms/colles.mp2i-vms.fr" target="_blank">Code source</a> - <a href="https://www.gnu.org/licenses/agpl-3.0.html" target="_blank">Licence GNU AGPL v3 or later</a>{% endblock footer %} </footer> </body>