2021-06-14 11:00:05 +01:00
|
|
|
from flask import request, url_for
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_page_from_request():
|
2023-08-25 09:12:23 -07:00
|
|
|
if "page" in request.args:
|
2021-06-14 11:00:05 +01:00
|
|
|
try:
|
2023-08-25 09:12:23 -07:00
|
|
|
return int(request.args["page"])
|
2021-06-14 11:00:05 +01:00
|
|
|
except ValueError:
|
|
|
|
|
return None
|
|
|
|
|
else:
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def generate_previous_dict(view, service_id, page, url_args=None):
|
2023-08-25 09:12:23 -07:00
|
|
|
return generate_previous_next_dict(
|
|
|
|
|
view, service_id, page - 1, "Previous page", url_args or {}
|
|
|
|
|
)
|
2021-06-14 11:00:05 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def generate_next_dict(view, service_id, page, url_args=None):
|
2023-08-25 09:12:23 -07:00
|
|
|
return generate_previous_next_dict(
|
|
|
|
|
view, service_id, page + 1, "Next page", url_args or {}
|
|
|
|
|
)
|
2021-06-14 11:00:05 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def generate_previous_next_dict(view, service_id, page, title, url_args):
|
|
|
|
|
return {
|
2023-08-25 09:12:23 -07:00
|
|
|
"url": url_for(view, service_id=service_id, page=page, **url_args),
|
|
|
|
|
"title": title,
|
|
|
|
|
"label": "page {}".format(page),
|
2021-06-14 11:00:05 +01:00
|
|
|
}
|
2024-07-18 15:57:29 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def generate_pagination_pages(total_items, page_size, current_page):
|
|
|
|
|
total_pages = (total_items + page_size - 1) // page_size
|
2024-07-25 11:59:42 -07:00
|
|
|
pagination = {"current": current_page, "pages": [], "last": total_pages}
|
2024-07-25 17:09:17 -07:00
|
|
|
if total_pages <= 9:
|
2024-07-25 11:59:42 -07:00
|
|
|
pagination["pages"] = list(range(1, total_pages + 1))
|
2024-07-18 15:57:29 -07:00
|
|
|
else:
|
2024-07-25 17:09:17 -07:00
|
|
|
start_page = max(1, min(current_page - 4, total_pages - 8))
|
|
|
|
|
end_page = min(start_page + 8, total_pages)
|
|
|
|
|
pagination["pages"] = list(range(start_page, end_page + 1))
|
2024-07-18 15:57:29 -07:00
|
|
|
return pagination
|