]> git.ipfire.org Git - pbs.git/commitdiff
builds: Add pagination
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 11 May 2023 14:06:42 +0000 (14:06 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 11 May 2023 14:06:42 +0000 (14:06 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/builds.py
src/templates/builds/index.html
src/web/builds.py

index 34870fa4038601a9352d0dd4e99d6d2e710d2f0a..b63bc7045a02db81bd1fa43d5cdcd3f1008bf20e 100644 (file)
@@ -90,7 +90,7 @@ class Builds(base.Object):
                        name,
                )
 
-       def get_recent(self, limit=None):
+       def get_recent(self, limit=None, offset=None):
                """
                        Returns the most recent (non-test) builds
                """
@@ -105,8 +105,11 @@ class Builds(base.Object):
                                test IS FALSE
                        ORDER BY
                                created_at DESC
-                       LIMIT %s""",
-                       limit,
+                       LIMIT
+                               %s
+                       OFFSET
+                               %s""",
+                       limit, offset,
                )
 
                return list(builds)
index 03519f2d775eab56920a6fd3722d481a6bd7fa4d..8f49d5e509ef707fec166f1467d0d29abf958f8c 100644 (file)
                                        {% module BuildsList(builds[date]) %}
                                </div>
                        {% end %}
+
+                       <div class="block">
+                               <nav class="pagination is-centered" role="navigation" aria-label="pagination">
+                                       <a class="pagination-previous {% if not offset %}is-disabled{% end %}"
+                                                       href="/builds?offset={{ offset - limit }}&limit={{ limit }}{% if user %}&user={{ user.name }}{% end %}">
+                                               {{ _("Previous Page") }}
+                                       </a>
+
+                                       <a class="pagination-next" href="/builds?offset={{ offset + limit }}&limit={{ limit }}{% if user %}&user={{ user.name }}{% end %}">
+                                               {{ _("Next Page") }}
+                                       </a>
+                               </nav>
+                       </div>
                </div>
        </section>
 {% end block %}
index 81b25bc875b9fb478bbd8a50294cfd02d2343f15..2d7c4b0fe45fd6a93439e05965d4ee7494dfef48 100644 (file)
@@ -63,19 +63,24 @@ class APIv1IndexHandler(base.APIMixin, base.BaseHandler):
 
 class IndexHandler(base.BaseHandler):
        def get(self):
+               # Pagination
+               offset = self.get_argument_int("offset", None) or 0
+               limit  = self.get_argument_int("limit", None) or 25
+
                # Filters
                user = self.get_argument_user("user", None)
 
                # Fetch the most recent builds
                if user:
-                       builds = self.backend.builds.get_by_user(user, limit=25)
+                       builds = self.backend.builds.get_by_user(user, limit=limit, offset=offset)
                else:
-                       builds = self.backend.builds.get_recent(limit=25)
+                       builds = self.backend.builds.get_recent(limit=limit, offset=offset)
 
                # Group builds by date
                builds = misc.group(builds, lambda build: build.created_at.date())
 
-               self.render("builds/index.html", builds=builds, user=user)
+               self.render("builds/index.html", builds=builds, user=user,
+                       limit=limit, offset=offset)
 
 
 class ShowHandler(base.BaseHandler):