diff options
-rw-r--r-- | app/blueprints/packages/packages.py | 14 | ||||
-rw-r--r-- | app/templates/macros/pagination.html | 29 | ||||
-rw-r--r-- | app/templates/packages/list.html | 20 |
3 files changed, 40 insertions, 23 deletions
diff --git a/app/blueprints/packages/packages.py b/app/blueprints/packages/packages.py index 0e1aeaa..0ee4656 100644 --- a/app/blueprints/packages/packages.py +++ b/app/blueprints/packages/packages.py @@ -65,11 +65,6 @@ def list_all(): search = request.args.get("q") type_name = request.args.get("type") - next_url = url_for("packages.list_all", type=type_name, q=search, page=query.next_num) \ - if query.has_next else None - prev_url = url_for("packages.list_all", type=type_name, q=search, page=query.prev_num) \ - if query.has_prev else None - authors = [] if search: authors = User.query \ @@ -83,12 +78,17 @@ def list_all(): qb.show_discarded = True topics = qb.buildTopicQuery().all() + def url_builder(page): + args = dict(request.args) + args["page"] = page + return url_for("packages.list_all", **args) + tags = Tag.query.all() return render_template("packages/list.html", \ title=title, packages=query.items, topics=topics, \ query=search, tags=tags, type=type_name, \ - authors = authors, \ - next_url=next_url, prev_url=prev_url, page=page, page_max=query.pages, packages_count=query.total) + authors=authors, packages_count=query.total, \ + pagination=query, url_builder=url_builder) def getReleases(package): diff --git a/app/templates/macros/pagination.html b/app/templates/macros/pagination.html new file mode 100644 index 0000000..acef4e7 --- /dev/null +++ b/app/templates/macros/pagination.html @@ -0,0 +1,29 @@ +{% macro render_pagination(pagination, url_builder) %} + <ul class="pagination mt-4"> + {% set prev_url = url_builder(pagination.prev_num) if pagination.has_prev %} + {% set next_url = url_builder(pagination.next_num) if pagination.has_next %} + + <li class="page-item {% if not prev_url %}disabled{% endif %}"> + <a class="page-link" {% if prev_url %}href="{{ prev_url }}"{% endif %}>«</a> + </li> + + {%- for page in pagination.iter_pages() %} + {% if page %} + <li class="page-item {% if page == pagination.page %}active{% endif %}"> + <a class="page-link" + href="{{ url_builder(page) }}"> + {{ page }} + </a> + </li> + {% else %} + <li class="page-item disabled"> + &ellipsis; + </li> + {% endif %} + {%- endfor %} + + <li class="page-item {% if not next_url %}disabled{% endif %}"> + <a class="page-link" {% if next_url %}href="{{ next_url }}"{% endif %}>»</a> + </li> + </div> +{% endmacro %} diff --git a/app/templates/packages/list.html b/app/templates/packages/list.html index 057fe22..8f3a595 100644 --- a/app/templates/packages/list.html +++ b/app/templates/packages/list.html @@ -23,22 +23,10 @@ {% from "macros/packagegridtile.html" import render_pkggrid %} {{ render_pkggrid(packages) }} - <ul class="pagination mt-4"> - <li class="page-item {% if not prev_url %}disabled{% endif %}"> - <a class="page-link" {% if prev_url %}href="{{ prev_url }}"{% endif %}>«</a> - </li> - {% for n in range(1, page_max+1) %} - <li class="page-item {% if n == page %}active{% endif %}"> - <a class="page-link" - href="{{ url_for('packages.list_all', type=type, q=query, page=n) }}"> - {{ n }} - </a> - </li> - {% endfor %} - <li class="page-item {% if not next_url %}disabled{% endif %}"> - <a class="page-link" {% if next_url %}href="{{ next_url }}"{% endif %}>»</a> - </li> - </ul> + + {% from "macros/pagination.html" import render_pagination %} + {{ render_pagination(pagination, url_builder) }} + {% if topics %} <h2 style="margin-top:2em;">More content from the forums</h2> |