From cece41b084efe3f8ce94097915501a4578b91959 Mon Sep 17 00:00:00 2001 From: Jean-Marie Favreau Date: Sat, 2 Nov 2024 11:50:29 +0100 Subject: [PATCH] On affiche les tags principaux en suggestion sur les filtres --- src/agenda_culturel/static/style.scss | 13 +++++++------ .../templates/agenda_culturel/filter-inc.html | 10 ++++++++-- src/agenda_culturel/templatetags/tag_extra.py | 19 +++++++++++++++++-- src/agenda_culturel/views.py | 15 ++++++++++++++- 4 files changed, 46 insertions(+), 11 deletions(-) diff --git a/src/agenda_culturel/static/style.scss b/src/agenda_culturel/static/style.scss index 47f3784..7640c1d 100644 --- a/src/agenda_culturel/static/style.scss +++ b/src/agenda_culturel/static/style.scss @@ -130,6 +130,9 @@ details[role="list"] summary + ul li.selected>a:hover { display: none; } } + .suggested-tags { + font-size: 80%; + } } @media (min-width: 992px) { @@ -138,6 +141,7 @@ details[role="list"] summary + ul li.selected>a:hover { } #filters .categories { width: 50%; + clear: both; float: left; text-align: left; line-height: 2em; @@ -145,20 +149,17 @@ details[role="list"] summary + ul li.selected>a:hover { display: block; } } - #filters details { - width: 25%; + #filters .filtres { + width: 50%; float: right; summary { padding: 0.2em 0.4em; } } - #filters details.active { - width: 50%; - } } -#filters details[open=""] { +#filters .filtres:has(details[open=""]) { width: 100%; transition: width 0.1s ease-in-out; display: block; diff --git a/src/agenda_culturel/templates/agenda_culturel/filter-inc.html b/src/agenda_culturel/templates/agenda_culturel/filter-inc.html index 573c32f..dce76ea 100644 --- a/src/agenda_culturel/templates/agenda_culturel/filter-inc.html +++ b/src/agenda_culturel/templates/agenda_culturel/filter-inc.html @@ -10,7 +10,8 @@ {% show_legend filter=filter %} -
+
+
{% if filter.is_active %} Filtres : @@ -64,8 +65,13 @@
-
+
+ {% show_suggested_tags filter=filter %}
+
+
+ + {% if noarticle == 0 %} diff --git a/src/agenda_culturel/templatetags/tag_extra.py b/src/agenda_culturel/templatetags/tag_extra.py index ea91e84..b666be4 100644 --- a/src/agenda_culturel/templatetags/tag_extra.py +++ b/src/agenda_culturel/templatetags/tag_extra.py @@ -1,11 +1,13 @@ from django import template from django.utils.safestring import mark_safe from django.urls import reverse_lazy +from agenda_culturel.models import Tag +from .utils_extra import * register = template.Library() -def t_button(tag, url, strike): +def t_button(tag, url, strike=False): strike_class = " strike" if strike else "" if not url is None: return mark_safe( @@ -41,4 +43,17 @@ def tag_button_link(tag): @register.filter def tag_not_in_db(tag, tags): - return len([t for t in tags if t.name == tag]) == 0 \ No newline at end of file + return len([t for t in tags if t.name == tag]) == 0 + + +@register.simple_tag +def show_suggested_tags(filter): + filter.form.full_clean() + tags = Tag.objects.all().filter(principal=True).order_by("name") + result = "Suggestion :" + + for t in tags: + if filter.tag_exists(t.name) and not filter.is_selected_tag(t.name): + result += ' ' + t_button(t.name, filter.get_url_add_tag(t.name)) + + return mark_safe(result) diff --git a/src/agenda_culturel/views.py b/src/agenda_culturel/views.py index 010b46f..391c23f 100644 --- a/src/agenda_culturel/views.py +++ b/src/agenda_culturel/views.py @@ -388,7 +388,20 @@ class EventFilter(django_filters.FilterSet): ) def is_selected(self, cat): - return cat in self.form.cleaned_data["category"] + return "category" in self.form.cleaned_data and cat in self.form.cleaned_data["category"] + + def is_selected_tag(self, tag): + return "tags" in self.form.cleaned_data and tag in self.form.cleaned_data["tags"] + + def get_url_add_tag(self, tag, full_path = None): + if full_path is None: + full_path = self.request.get_full_path() + + result = full_path + ('&' if '?' in full_path else '?') + 'tags=' + str(tag) + return result + + def tag_exists(self, tag): + return tag in [t[0] for t in self.form.fields["tags"].choices] def set_default_values(request): if request.user.is_authenticated: