From b6752614b63408d0c069df21f3eb63d1fd8dc39e Mon Sep 17 00:00:00 2001 From: Cameron Kilgore Date: Tue, 15 Jul 2014 21:34:26 -0400 Subject: [PATCH 01/10] #1 Initial addition of pagination service --- kremlin/core.py | 3 --- kremlin/forms.py | 32 +++++++++++++++++++++++++++++++ kremlin/static/javascripts/app.js | 2 +- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/kremlin/core.py b/kremlin/core.py index 0aa5693..63dd30b 100644 --- a/kremlin/core.py +++ b/kremlin/core.py @@ -17,11 +17,8 @@ from werkzeug import secure_filename - from kremlin import app, db, dbmodel, forms, imgutils, uploaded_images - - @app.route('/') def home_index(): """ Display the glasnost logo, attempt to replicate old behavior """ diff --git a/kremlin/forms.py b/kremlin/forms.py index dad8aef..ebceae6 100644 --- a/kremlin/forms.py +++ b/kremlin/forms.py @@ -17,6 +17,8 @@ from kremlin import uploaded_images +from math import ceil + class NewPostForm(Form): """ Post Form """ name = TextField(u'Name', validators=[validators.required()]) @@ -70,3 +72,33 @@ class RegisterForm(Form): confirm = PasswordField(u'Repeat Password') # accept_tos = BooleanField(u'I accept the TOS', # validators=[validators.Required()]) + +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 \ No newline at end of file diff --git a/kremlin/static/javascripts/app.js b/kremlin/static/javascripts/app.js index ea87d67..6b49054 100644 --- a/kremlin/static/javascripts/app.js +++ b/kremlin/static/javascripts/app.js @@ -44,5 +44,5 @@ }, 0); }); } - + })(jQuery, this); From 382d41731218109c760c02da32fb64536a83aee9 Mon Sep 17 00:00:00 2001 From: Cameron Kilgore Date: Wed, 16 Jul 2014 09:12:06 -0400 Subject: [PATCH 02/10] #1 Additional changes --- kremlin/core.py | 22 ++++++++++++++++++---- kremlin/forms.py | 4 ++-- kremlin/templates/board.html | 21 +++++++++++++++++++-- kremlin/templates/layout.html | 2 +- 4 files changed, 40 insertions(+), 9 deletions(-) diff --git a/kremlin/core.py b/kremlin/core.py index 63dd30b..b74eee7 100644 --- a/kremlin/core.py +++ b/kremlin/core.py @@ -24,13 +24,27 @@ def home_index(): """ Display the glasnost logo, attempt to replicate old behavior """ return render_template('home.html') -@app.route('/images') -def entries_index(): +@app.route('/images', defaults={'page': 1}) +@app.route('/images/page/') +def entries_index(page): """ Show an index of image thumbnails """ - #FIXME: limit with pagination posts = dbmodel.Post.query.all() + pagination = Pagination(page, 20, posts) return render_template('board.html', form=forms.NewPostForm(), - posts=posts) + posts=posts, pagination=pagination) + +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 + +#def entries_index(): +# """ Show an index of image thumbnails """ +# #FIXME: limit with pagination +# posts = dbmodel.Post.query.all() +# return render_template('board.html', form=forms.NewPostForm(), +# posts=posts) @app.route('/logs') def logs_index(): diff --git a/kremlin/forms.py b/kremlin/forms.py index ebceae6..06f5fbc 100644 --- a/kremlin/forms.py +++ b/kremlin/forms.py @@ -73,7 +73,7 @@ class RegisterForm(Form): # accept_tos = BooleanField(u'I accept the TOS', # validators=[validators.Required()]) -class Pagination(object) : +class Pagination(object): def __init__(self, page, per_page, total_count): self.page = page self.per_page = per_page @@ -91,7 +91,7 @@ def has_prev(self): 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): + 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 \ diff --git a/kremlin/templates/board.html b/kremlin/templates/board.html index 6026c3e..46736ca 100644 --- a/kremlin/templates/board.html +++ b/kremlin/templates/board.html @@ -13,8 +13,25 @@
- {# TODO: Paginate like a motherfucker #} - Hi this is where pagination will go + {% macro render_pagination(pagination) %} + + {% endmacro %}
{% for post in posts %} diff --git a/kremlin/templates/layout.html b/kremlin/templates/layout.html index 46c263e..aeea76c 100644 --- a/kremlin/templates/layout.html +++ b/kremlin/templates/layout.html @@ -72,7 +72,7 @@
Magical Everything System - Prototype