summaryrefslogtreecommitdiffstats
path: root/pagination.py
diff options
context:
space:
mode:
authorAlexander Sulfrian <alex@spline.inf.fu-berlin.de>2014-11-19 02:38:09 +0100
committerAlexander Sulfrian <alex@spline.inf.fu-berlin.de>2014-11-19 02:48:45 +0100
commitdacfc5fe13dc6b46fa90e5ef9fb07509afd5d777 (patch)
tree105012c6c041d9bc98045846dd82c6ab262875cd /pagination.py
parent2d04a1bd8efe3c440ecf66a22b3ae138ed8eaabe (diff)
downloadpadlite-teams-dacfc5fe13dc6b46fa90e5ef9fb07509afd5d777.tar.gz
padlite-teams-dacfc5fe13dc6b46fa90e5ef9fb07509afd5d777.tar.bz2
padlite-teams-dacfc5fe13dc6b46fa90e5ef9fb07509afd5d777.zip
templates/all: add paginated list of all browsable groups
Diffstat (limited to 'pagination.py')
-rw-r--r--pagination.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/pagination.py b/pagination.py
new file mode 100644
index 0000000..58fb869
--- /dev/null
+++ b/pagination.py
@@ -0,0 +1,40 @@
+from math import ceil
+from app import app
+from flask import url_for, request
+
+class Pagination(object):
+ def __init__(self, page, per_page, total_count):
+ self.page = page
+ self.per_page = per_page
+ self.total_count = total_count
+
+ @property
+ def pages(self):
+ return int(ceil(self.total_count / float(self.per_page)))
+
+ @property
+ def has_prev(self):
+ return self.page > 1
+
+ @property
+ def has_next(self):
+ return self.page < self.pages
+
+ def iter_pages(self, left_edge=2, left_current=2,
+ right_current=5, right_edge=2):
+ last = 0
+ for num in xrange(1, self.pages + 1):
+ if num <= left_edge or \
+ (num > self.page - left_current - 1 and \
+ num < self.page + right_current) or \
+ num > self.pages - right_edge:
+ if last + 1 != num:
+ yield None
+ yield num
+ last = num
+
+def url_for_other_page(page):
+ args = request.view_args.copy()
+ args['page'] = page
+ return url_for(request.endpoint, **args)
+app.jinja_env.globals['url_for_other_page'] = url_for_other_page