diff --git a/aurweb/defaults.py b/aurweb/defaults.py index 51072e8f..91ba367a 100644 --- a/aurweb/defaults.py +++ b/aurweb/defaults.py @@ -6,6 +6,9 @@ O = 0 # Default [P]er [P]age PP = 50 +# Default Comments Per Page +COMMENTS_PER_PAGE = 10 + # A whitelist of valid PP values PP_WHITELIST = {50, 100, 250} diff --git a/aurweb/pkgbase/util.py b/aurweb/pkgbase/util.py index 5a7d952a..5ffe490e 100644 --- a/aurweb/pkgbase/util.py +++ b/aurweb/pkgbase/util.py @@ -3,7 +3,7 @@ from typing import Any from fastapi import Request from sqlalchemy import and_ -from aurweb import config, db, l10n, util +from aurweb import config, db, defaults, l10n, util from aurweb.models import PackageBase, User from aurweb.models.package_comaintainer import PackageComaintainer from aurweb.models.package_comment import PackageComment @@ -31,6 +31,12 @@ def make_context(request: Request, pkgbase: PackageBase, if not context: context = _make_context(request, pkgbase.Name) + # Per page and offset. + offset, per_page = util.sanitize_params( + request.query_params.get("O", defaults.O), + request.query_params.get("PP", defaults.COMMENTS_PER_PAGE)) + context["O"] = offset + context["PP"] = per_page context["git_clone_uri_anon"] = config.get("options", "git_clone_uri_anon") context["git_clone_uri_priv"] = config.get("options", "git_clone_uri_priv") context["pkgbase"] = pkgbase @@ -44,9 +50,12 @@ def make_context(request: Request, pkgbase: PackageBase, context["packages_count"] = pkgbase.packages.count() context["keywords"] = pkgbase.keywords + context["comments_total"] = pkgbase.comments.order_by( + PackageComment.CommentTS.desc() + ).count() context["comments"] = pkgbase.comments.order_by( PackageComment.CommentTS.desc() - ) + ).limit(per_page).offset(offset) context["pinned_comments"] = pkgbase.comments.filter( PackageComment.PinnedTS != 0 ).order_by(PackageComment.CommentTS.desc()) diff --git a/templates/partials/packages/comments.html b/templates/partials/packages/comments.html index 6e6b9a47..9d49bc86 100644 --- a/templates/partials/packages/comments.html +++ b/templates/partials/packages/comments.html @@ -33,6 +33,14 @@ {{ "Latest Comments" | tr }} + {% set page = ((O / PP) | int) %} + {% set pages = ((comments_total / PP) | ceil) %} + + {% if pages > 1 %} +

+ {{ page | pager_nav(comments_total, prefix) | safe }} +

+ {% endif %} {% for comment in comments.all() %} {% include "partials/packages/comment.html" %}