diff --git a/src/app/settings.py b/src/app/settings.py index dd6ea60..879214d 100644 --- a/src/app/settings.py +++ b/src/app/settings.py @@ -4,6 +4,7 @@ Django settings for the DGSI project. from pathlib import Path +from django.contrib.messages import constants as messages from loadcredential import Credentials credentials = Credentials(env_prefix="DGSI_") @@ -201,6 +202,18 @@ SASS_PROCESSOR_ENABLED = True DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" +## +# Messages configuration + +MESSAGE_TAGS = { + messages.DEBUG: "is-dark", + messages.INFO: "is-primary", + messages.SUCCESS: "is-success", + messages.WARNING: "is-warning", + messages.ERROR: "is-danger", +} + + ### # Extend settings when running in dev mode diff --git a/src/dgsi/views.py b/src/dgsi/views.py index 742da24..b4e73be 100644 --- a/src/dgsi/views.py +++ b/src/dgsi/views.py @@ -1,8 +1,10 @@ from asgiref.sync import async_to_sync from django.contrib.auth.mixins import LoginRequiredMixin +from django.contrib.messages.views import SuccessMessageMixin from django.core.mail import EmailMessage from django.template.loader import render_to_string from django.urls import reverse_lazy +from django.utils.translation import gettext_lazy as _ from django.views.generic import FormView, TemplateView from dgsi.forms import CreateKanidmAccountForm @@ -24,9 +26,10 @@ class ProfileView(LoginRequiredMixin, TemplateView): ) -class CreateKanidmAccountView(StaffRequiredMixin, FormView): +class CreateKanidmAccountView(StaffRequiredMixin, SuccessMessageMixin, FormView): form_class = CreateKanidmAccountForm template_name = "account/create_kanidm.html" + success_message = _("Compte DGNum pour %(displayname)s [%(name)s] créé.") success_url = reverse_lazy("dgsi:dgn-create_user") diff --git a/src/shared/static/bulma/bulma.scss b/src/shared/static/bulma/bulma.scss index 3321e66..8bcb9a5 100644 --- a/src/shared/static/bulma/bulma.scss +++ b/src/shared/static/bulma/bulma.scss @@ -16,3 +16,16 @@ body { flex-direction: column; justify-content: space-between; } + +#notifications { + margin-left: -0.75rem; + margin-right: -0.75rem; + position: sticky; + display: block; + inset: 1.5rem; + z-index: 500; +} + +.notification { + margin-bottom: var(--bulma-block-spacing); +} diff --git a/src/shared/static/js/dgsi.js b/src/shared/static/js/dgsi.js new file mode 100644 index 0000000..61f1234 --- /dev/null +++ b/src/shared/static/js/dgsi.js @@ -0,0 +1,11 @@ +document.addEventListener("DOMContentLoaded", () => { + (document.querySelectorAll(".notification .delete") || []).forEach( + ($delete) => { + const $notification = $delete.parentNode; + const dismiss = () => $notification.parentNode.removeChild($notification); + + $delete.addEventListener("click", dismiss); + setTimeout(dismiss, 15000); + }, + ); +}); diff --git a/src/shared/templates/_links.html b/src/shared/templates/_links.html index 14ee324..84065b7 100644 --- a/src/shared/templates/_links.html +++ b/src/shared/templates/_links.html @@ -10,3 +10,6 @@ + + + diff --git a/src/shared/templates/base.html b/src/shared/templates/base.html index 8f5d395..e535d9a 100644 --- a/src/shared/templates/base.html +++ b/src/shared/templates/base.html @@ -7,7 +7,8 @@ DGNum - {% block extra_head %}{% endblock extra_head %} + {% block extra_head %} + {% endblock extra_head %} {% include "_links.html" %} @@ -16,6 +17,15 @@ {% include "_hero.html" %}
+
+ {% for message in messages %} +
+ + {{ message|safe }} +
+ {% endfor %} +
+ {% block content %} {% endblock content %}