mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
feat(FastAPI): add templates/partials/widgets/pager.html
A pager that can be used for paginated result tables. Signed-off-by: Kevin Morris <kevr@0cost.org>
This commit is contained in:
parent
741cbfaa4e
commit
6298b1228a
2 changed files with 76 additions and 0 deletions
50
aurweb/filters.py
Normal file
50
aurweb/filters.py
Normal file
|
@ -0,0 +1,50 @@
|
|||
from typing import Any, Dict
|
||||
|
||||
import paginate
|
||||
|
||||
from jinja2 import pass_context
|
||||
|
||||
from aurweb import util
|
||||
from aurweb.templates import register_filter
|
||||
|
||||
|
||||
@register_filter("pager_nav")
|
||||
@pass_context
|
||||
def pager_nav(context: Dict[str, Any],
|
||||
page: int, total: int, prefix: str) -> str:
|
||||
page = int(page) # Make sure this is an int.
|
||||
|
||||
pp = context.get("PP", 50)
|
||||
|
||||
# Setup a local query string dict, optionally passed by caller.
|
||||
q = context.get("q", dict())
|
||||
|
||||
search_by = context.get("SeB", None)
|
||||
if search_by:
|
||||
q["SeB"] = search_by
|
||||
|
||||
sort_by = context.get("SB", None)
|
||||
if sort_by:
|
||||
q["SB"] = sort_by
|
||||
|
||||
def create_url(page: int):
|
||||
nonlocal q
|
||||
offset = max(page * pp - pp, 0)
|
||||
qs = util.to_qs(util.extend_query(q, ["O", offset]))
|
||||
return f"{prefix}?{qs}"
|
||||
|
||||
# Use the paginate module to produce our linkage.
|
||||
pager = paginate.Page([], page=page + 1,
|
||||
items_per_page=pp,
|
||||
item_count=total,
|
||||
url_maker=create_url)
|
||||
|
||||
return pager.pager(
|
||||
link_attr={"class": "page"},
|
||||
curpage_attr={"class": "page"},
|
||||
separator=" ",
|
||||
format="$link_first $link_previous ~5~ $link_next $link_last",
|
||||
symbol_first="« First",
|
||||
symbol_previous="‹ Previous",
|
||||
symbol_next="Next ›",
|
||||
symbol_last="Last »")
|
Loading…
Add table
Add a link
Reference in a new issue