From 31b7881c90fb9f3e40d4b77d39b4f668896d9e2b Mon Sep 17 00:00:00 2001 From: Jean-Marie Favreau Date: Tue, 16 Jan 2024 21:41:39 +0100 Subject: [PATCH] =?UTF-8?q?On=20permet=20=C3=A0=20l'utilisateur=20de=20s?= =?UTF-8?q?=C3=A9lectionner=20des=20tags=20en=20n=C3=A9gatif=20Fix=20#69?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- src/agenda_culturel/static/style.scss | 4 ++++ .../templates/agenda_culturel/filter-inc.html | 3 +++ src/agenda_culturel/templatetags/tag_extra.py | 12 +++++++--- src/agenda_culturel/views.py | 22 ++++++++++++++----- 5 files changed, 33 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index b8b0579..548b8c2 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ L'agenda culturel est un projet django créé à partir de [Django Docker Quickstard](https://github.com/godd0t/django-docker-quickstart/) pour faciliter son développemnt et déploiement. Il est distribué sous licence AGPL. -Une instance de démonstration est disponible à l'adresse https://agenda-culturel.lecridelagirafe.org/. +Une instance de démonstration est disponible à l'adresse https://pommesdelune.fr/. ## Installation diff --git a/src/agenda_culturel/static/style.scss b/src/agenda_culturel/static/style.scss index 202edd8..8bac42e 100644 --- a/src/agenda_culturel/static/style.scss +++ b/src/agenda_culturel/static/style.scss @@ -770,4 +770,8 @@ article>article { line-height: 2em; margin-right: 1em; } +} + +.strike { + text-decoration: line-through; } \ No newline at end of file diff --git a/src/agenda_culturel/templates/agenda_culturel/filter-inc.html b/src/agenda_culturel/templates/agenda_culturel/filter-inc.html index 837ba65..c812b1b 100644 --- a/src/agenda_culturel/templates/agenda_culturel/filter-inc.html +++ b/src/agenda_culturel/templates/agenda_culturel/filter-inc.html @@ -12,6 +12,9 @@ {% for t in filter.get_tags %} {{ t | tag_button }} {% endfor %} + {% for t in filter.get_exclude_tags %} + {{ t | tag_button_strike }} + {% endfor %} {% else %} Filtrer {% endif %} diff --git a/src/agenda_culturel/templatetags/tag_extra.py b/src/agenda_culturel/templatetags/tag_extra.py index 336ea17..0ad73eb 100644 --- a/src/agenda_culturel/templatetags/tag_extra.py +++ b/src/agenda_culturel/templatetags/tag_extra.py @@ -5,8 +5,14 @@ from django.urls import reverse_lazy register = template.Library() @register.filter -def tag_button(tag, link=False): +def tag_button(tag, link=False, strike=False): + strike_class = " strike" if strike else "" if link: - return mark_safe('' + tag + '') + return mark_safe('' + tag + '') else: - return mark_safe('' + tag + '') \ No newline at end of file + return mark_safe('' + tag + '') + + +@register.filter +def tag_button_strike(tag, link=False): + return tag_button(tag, link, strike=True) \ No newline at end of file diff --git a/src/agenda_culturel/views.py b/src/agenda_culturel/views.py index 7b2ee6f..02656ba 100644 --- a/src/agenda_culturel/views.py +++ b/src/agenda_culturel/views.py @@ -59,14 +59,21 @@ class TagCheckboxSelectMultiple(forms.CheckboxSelectMultiple): class EventFilter(django_filters.FilterSet): - tags = django_filters.MultipleChoiceFilter(label="Étiquettes", - choices=[(t, t) for t in Event.get_all_tags()], - lookup_expr='icontains', + exclude_tags = django_filters.MultipleChoiceFilter(label="Exclure les étiquettes", + choices=[(t, t) for t in Event.get_all_tags()], + lookup_expr='icontains', + field_name="tags", + exclude=True, + widget=TagCheckboxSelectMultiple) + + tags = django_filters.MultipleChoiceFilter(label="Filtrer par étiquettes", + choices=[(t, t) for t in Event.get_all_tags()], + lookup_expr='icontains', field_name="tags", widget=TagCheckboxSelectMultiple) - category = django_filters.ModelMultipleChoiceFilter(label="Catégories", + category = django_filters.ModelMultipleChoiceFilter(label="Filtrer par catégories", field_name="category__id", to_field_name='id', queryset=Category.objects.all(), @@ -75,7 +82,7 @@ class EventFilter(django_filters.FilterSet): class Meta: model = Event - fields = ["category", "tags"] + fields = ["category", "tags", "exclude_tags"] def get_url(self): if isinstance(self.form.data, QueryDict): @@ -93,11 +100,14 @@ class EventFilter(django_filters.FilterSet): def get_tags(self): return self.form.cleaned_data["tags"] + def get_exclude_tags(self): + return self.form.cleaned_data["exclude_tags"] + def is_active(self, only_categories=False): if only_categories: return len(self.form.cleaned_data["category"]) != 0 else: - return len(self.form.cleaned_data["category"]) != 0 or len(self.form.cleaned_data["tags"]) != 0 + return len(self.form.cleaned_data["category"]) != 0 or len(self.form.cleaned_data["tags"]) != 0 or len(self.form.cleaned_data["exclude_tags"]) != 0 def is_selected(self, cat): return cat in self.form.cleaned_data["category"]