From ae4352068ef6f3e014be6695cbddcf914013fd1b Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Sun, 12 Jul 2020 20:10:19 +0100 Subject: [PATCH] Add tag filter list to package page --- app/blueprints/packages/packages.py | 13 +++++--- app/templates/packages/list.html | 48 +++++++++++++++++++++++------ app/utils.py | 24 +++++++++++++-- 3 files changed, 67 insertions(+), 18 deletions(-) diff --git a/app/blueprints/packages/packages.py b/app/blueprints/packages/packages.py index 53bd3b0..0cb9b35 100644 --- a/app/blueprints/packages/packages.py +++ b/app/blueprints/packages/packages.py @@ -80,12 +80,15 @@ def list_all(): qb.show_discarded = True topics = qb.buildTopicQuery().all() - tags = Tag.query.all() + tags = db.session.query(func.count(Tags.c.tag_id), Tag) \ + .select_from(Tag).outerjoin(Tags).group_by(Tag.id).order_by(db.asc(Tag.title)) + + selected_tags = set(qb.tags) + return render_template("packages/list.html", \ - title=title, packages=query.items, topics=topics, \ - query=search, tags=tags, type=type_name, \ - authors=authors, packages_count=query.total, \ - pagination=query) + title=title, packages=query.items, pagination=query, \ + query=search, tags=tags, selected_tags=selected_tags, type=type_name, \ + authors=authors, packages_count=query.total, topics=topics) def getReleases(package): diff --git a/app/templates/packages/list.html b/app/templates/packages/list.html index da0d80c..1cddcd4 100644 --- a/app/templates/packages/list.html +++ b/app/templates/packages/list.html @@ -19,20 +19,48 @@

{% endif %} - - {% from "macros/packagegridtile.html" import render_pkggrid %} - {{ render_pkggrid(packages) }} +
+
+ {% from "macros/packagegridtile.html" import render_pkggrid %} + {{ render_pkggrid(packages) }} - {% from "macros/pagination.html" import render_pagination %} - {{ render_pagination(pagination, url_set_query) }} + {% from "macros/pagination.html" import render_pagination %} + {{ render_pagination(pagination, url_set_query) }} - {% if topics %} -

More content from the forums

+ {% if topics %} +

More content from the forums

- {% from "macros/topics.html" import render_topics %} - {{ render_topics(topics, current_user) }} - {% endif %} + {% from "macros/topics.html" import render_topics %} + {{ render_topics(topics, current_user) }} + {% endif %} +
+ + +
{% endblock %} diff --git a/app/utils.py b/app/utils.py index cc338b4..38f7ccc 100644 --- a/app/utils.py +++ b/app/utils.py @@ -22,6 +22,7 @@ from .models import * from . import app import random, string, os, imghdr from urllib.parse import urljoin +from werkzeug.datastructures import MultiDict # These are given to Jinja in template_filters.py @@ -33,9 +34,26 @@ def abs_url(path): return urljoin(app.config["BASE_URL"], path) def url_set_query(**kwargs): - args = dict(request.args) - args.update(kwargs) - return url_for(request.endpoint, **args) + args = MultiDict(request.args) + + for key, value in kwargs.items(): + if key == "_add": + for key2, value_to_add in value.items(): + values = set(args.getlist(key2)) + values.add(value_to_add) + args.setlist(key2, list(values)) + elif key == "_remove": + for key2, value_to_remove in value.items(): + values = set(args.getlist(key2)) + values.discard(value_to_remove) + args.setlist(key2, list(values)) + else: + args.setlist(key, [ value ]) + + + dargs = dict(args.lists()) + + return url_for(request.endpoint, **dargs) def get_int_or_abort(v, default=None): if v is None: