From d4dbdc6478057b66722583ba40bb4b39ac783f1d Mon Sep 17 00:00:00 2001 From: zPlus Date: Mon, 23 Jul 2018 13:55:27 +0200 Subject: [PATCH] Fix pagination. modified: freepost/__init__.py modified: freepost/database.py modified: freepost/static/stylus/reset.styl modified: freepost/templates/homepage.html new file: freepost/templates/posts.html modified: freepost/templates/search.html --- freepost/__init__.py | 35 ++++++----- freepost/database.py | 19 +++--- freepost/static/stylus/reset.styl | 6 ++ freepost/templates/homepage.html | 90 ++------------------------- freepost/templates/posts.html | 100 ++++++++++++++++++++++++++++++ freepost/templates/search.html | 87 +++++++------------------- 6 files changed, 162 insertions(+), 175 deletions(-) create mode 100644 freepost/templates/posts.html diff --git a/freepost/__init__.py b/freepost/__init__.py index 060df8ce..6b15c499 100755 --- a/freepost/__init__.py +++ b/freepost/__init__.py @@ -127,11 +127,7 @@ def homepage (): else: posts = [] - return template ( - 'homepage.html', - page_number=page, - posts=posts, - sorting=sort) + return template ('homepage.html', posts=posts, sort=sort) # TODO implement this @get ('/topic/', name='topic') @@ -161,9 +157,7 @@ def topic (name): return template ( 'homepage.html', topic=name, - page_number=page, - posts=posts, - sorting=sort) + posts=posts) @get ('/about', name='about') def about (): @@ -789,17 +783,26 @@ def search (): # Get the search query query = request.query.get ('q') - # Results order - order = request.query.get ('order') - if order not in [ 'newest', 'points' ]: - order = 'newest' + # Get the offset + page = int (request.query.get ('page') or 0) - results = database.search (query, order=order) + if page < 0: + return "Page cannot be less than zero." + + # Page increment + if 'next' in request.query: + page += 1 + if 'previous' in request.query: + page -= 1 + + # Results order + sort = request.query.get ('sort') + if sort not in [ 'newest', 'points' ]: + sort = 'newest' - if not results: - results = [] + posts = database.search (query, sort=sort, page=page) or [] - return template ('search.html', results=results, query=query, order=order) + return template ('search.html', posts=posts) @get ('/rss') def rss_default (): diff --git a/freepost/database.py b/freepost/database.py index f81d8ea5..ed492177 100644 --- a/freepost/database.py +++ b/freepost/database.py @@ -589,22 +589,22 @@ def vote_comment (comment_id, user_id, vote): ) # Search posts -def search (query, page = 0, order = 'newest'): +def search (query, sort='newest', page=0): if not query: - return None + return [] # Remove multiple white spaces and replace with '|' (for query REGEXP) query = re.sub (' +', '|', query.strip ()) if len (query) == 0: - return None + return [] cursor = db.cursor (MySQLdb.cursors.DictCursor) - if order == 'newest': - order = 'P.created DESC' - if order == 'points': - order = 'P.vote DESC' + if sort == 'newest': + sort = 'P.created DESC' + if sort == 'points': + sort = 'P.vote DESC' cursor.execute ( """ @@ -612,12 +612,13 @@ def search (query, page = 0, order = 'newest'): FROM post AS P JOIN user AS U ON P.userId = U.id WHERE P.title REGEXP %(query)s - ORDER BY {order} + ORDER BY {sort} LIMIT %(limit)s OFFSET %(offset)s - """.format (order=order), + """.format (sort=sort), { 'query': query, + 'sort': sort, 'limit': settings['defaults']['search_results_per_page'], 'offset': page * settings['defaults']['search_results_per_page'] } diff --git a/freepost/static/stylus/reset.styl b/freepost/static/stylus/reset.styl index cafd0608..a195e69a 100755 --- a/freepost/static/stylus/reset.styl +++ b/freepost/static/stylus/reset.styl @@ -127,6 +127,12 @@ label textarea.form-control height 8rem +.pagination + > .page_number + font-size .7rem + font-weight bold + margin 0 1rem + /* When users vote, this