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 53bd3b0b..0cb9b35a 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 da0d80ca..1cddcd47 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 cc338b4b..38f7ccc7 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: