From f1d842b527dcc820ec3191922c2637dc001192df Mon Sep 17 00:00:00 2001
From: AAA3A <89632044+AAA3A-AAA3A@users.noreply.github.com>
Date: Mon, 20 May 2024 16:49:01 +0200
Subject: [PATCH] Improve the `Pagination` system.
---
reddash/__init__.py | 2 +-
reddash/app/pagination.py | 63 +++++++++++++++++++++-
reddash/app/templates/pages/dashboard.html | 47 +---------------
reddash/app/third_parties/routes.py | 52 +-----------------
4 files changed, 65 insertions(+), 99 deletions(-)
diff --git a/reddash/__init__.py b/reddash/__init__.py
index c1142e8..7f4c984 100644
--- a/reddash/__init__.py
+++ b/reddash/__init__.py
@@ -4,7 +4,7 @@
Copyright (c) 2020 - present Neuro Assassin (https://github.com/Cog-Creators/Red-Dashboard)
"""
-__version__ = "1.6.1"
+__version__ = "1.6.2"
__authos__ = ["Neuro Assassin", "AAA3A"]
from .app import FlaskApp
diff --git a/reddash/app/pagination.py b/reddash/app/pagination.py
index a60ab36..b8b57a8 100644
--- a/reddash/app/pagination.py
+++ b/reddash/app/pagination.py
@@ -1,16 +1,21 @@
import typing # isort:skip
+from markupsafe import Markup
+
class Pagination(typing.List):
"""Pagination class for lists."""
- DEFAULT_PER_PAGE = 20
+ DEFAULT_PER_PAGE: int = 20
+ DEFAULT_PAGE: int = 1
def __init__(self, *args, **kwargs) -> None:
self.total: int = kwargs.pop("total", None)
self.per_page: int = kwargs.pop("per_page", None)
self.pages: int = kwargs.pop("pages", None)
self.page: int = kwargs.pop("page", None)
+ self.default_per_page: int = kwargs.pop("default_per_page", self.DEFAULT_PER_PAGE)
+ self.default_page: int = kwargs.pop("default_page", 1)
super().__init__(*args, **kwargs)
def to_dict(self) -> typing.Dict[str, typing.Any]:
@@ -20,6 +25,8 @@ def to_dict(self) -> typing.Dict[str, typing.Any]:
"per_page": self.per_page,
"pages": self.pages,
"page": self.page,
+ "default_per_page": self.default_per_page,
+ "default_page": self.default_page,
}
def __repr__(self) -> str:
@@ -46,7 +53,7 @@ def from_list(
per_page: typing.Optional[typing.Union[int, str]] = None,
page: typing.Optional[typing.Union[int, str]] = None,
default_per_page: int = DEFAULT_PER_PAGE,
- default_page: int = 1,
+ default_page: int = DEFAULT_PAGE,
) -> typing.Any:
per_page = (
default_per_page
@@ -74,3 +81,55 @@ def from_list(
pages=pages,
page=page,
)
+
+ def to_html(self, KEY: str = "pagination", render_template_string: bool = True) -> Markup:
+ html = """
+