From 088f088bfb2a75a6554bad42c1a4b635a0779ff7 Mon Sep 17 00:00:00 2001 From: wes Date: Wed, 30 Aug 2017 15:48:52 -0400 Subject: [PATCH] rewrite pagination stuff to make use of the startkey parameter in conjunction with a list function --- fabfile.py | 1 + list.js | 12 +++++++----- src/posts.py | 14 ++++++++++---- src/scripts/browse.tag | 5 +++-- src/scripts/categoryfilter.tag | 2 +- src/website.py | 28 +++++++++++++++++----------- 6 files changed, 39 insertions(+), 23 deletions(-) diff --git a/fabfile.py b/fabfile.py index ae5e279..e70742e 100644 --- a/fabfile.py +++ b/fabfile.py @@ -54,6 +54,7 @@ def serveUp(): sudo("systemctl daemon-reload") sudo("systemctl enable blog.service") sudo("systemctl restart blog.service") + sudo("systemctl restart memcached") @task(default=True) def build(): diff --git a/list.js b/list.js index b88bd6d..cd60a8f 100644 --- a/list.js +++ b/list.js @@ -1,11 +1,13 @@ function(head, req) { var row, results; - results = []; - categories = (req.query.categories !== undefined ? JSON.parse(req.query.categories) : []); - while (row = getRow()) { + var results = []; + var categories = (req.query.categories !== undefined ? JSON.parse(req.query.categories) : []); + var num = req.query.num; + + while (results.length < num && (row = getRow())) { if (categories.length == 0 || - categories.some(function(c) { return row.key.indexOf(c) !== -1; })) { - results.push([row.key, row.value]); + categories.some(function(c) { return row.value.categories.indexOf(c) !== -1; })) { + results.push([row.value.categories, row.value]); } } return JSON.stringify({q : req.query.categories, results : results}); diff --git a/src/posts.py b/src/posts.py index 42b6e2e..1305c72 100644 --- a/src/posts.py +++ b/src/posts.py @@ -145,13 +145,19 @@ class Posts: group=True) ]))) - def browse(self, count, skip, categories=[], json=True): + def browse(self, limit, startkey, categories=[], json=True): + args = { + "num" : limit, + "categories" : dumps(categories) + } + + if startkey: + args["startkey"] = startkey + results = self.db.list( "blogPosts/categories", "blogPosts/format", - count=count, - skip=skip, - categories=dumps(categories))[1].get("results", []) + **args)[1].get("results", []) posts = [] for categories, post in results: diff --git a/src/scripts/browse.tag b/src/scripts/browse.tag index 486182c..54bdf56 100644 --- a/src/scripts/browse.tag +++ b/src/scripts/browse.tag @@ -47,6 +47,7 @@ import { default as showdown } from 'showdown'; var self = this; +self.pagenum = 0; self.route = route; self.loading = false; self.category = self.opts.state.category_filter; @@ -79,7 +80,7 @@ self.filterCategories = (category) => { }); self.opts.state.category_filter = category; - window.cached(`/blog/getbrowse/${category}/0`) + window.cached(`/blog/getbrowse/${category}/5/${self.lastkey}`) .then((resp) => { return resp.json() }) .then((results) => { self.opts.state.results = results; @@ -92,7 +93,7 @@ self.filterCategories = (category) => { self.getInitial = () => { self.update({"loading" : true}); - window.cached(`/blog/getbrowse/0`) + window.cached(`/blog/getbrowse/5/${self.lastkey}`) .then((resp) => { return resp.json() }) .then((results) => { self.opts.state.results = results; diff --git a/src/scripts/categoryfilter.tag b/src/scripts/categoryfilter.tag index 964b2b4..e96ac5f 100644 --- a/src/scripts/categoryfilter.tag +++ b/src/scripts/categoryfilter.tag @@ -61,7 +61,7 @@ var self = this; self.start = 0; -self.pagesize = 5; +self.pagesize = 10; self.items = self.opts.items; preventDefault(ev) { diff --git a/src/website.py b/src/website.py index 5f91653..5fddb5b 100755 --- a/src/website.py +++ b/src/website.py @@ -10,7 +10,6 @@ from flask_login import LoginManager, login_required, login_user from flask_wtf.csrf import CSRFProtect from flask.ext.cache import Cache -from urllib.parse import unquote from urllib.parse import quote, unquote from json import dumps, loads from admin import Admin @@ -156,7 +155,7 @@ def NeverWhere(configfile=None): @app.route("/blog/browse/") def browse(start): - results = posts.browse(10, start*10, categories=[], json=False) + results = posts.browse(4, start*4, categories=[], json=False) return render_template("index.html", page="browse", start=start, @@ -164,7 +163,7 @@ def NeverWhere(configfile=None): @app.route("/blog/browse//") def browse_categories(category, start): - results = posts.browse(10, start*10, categories=[category], json=False) + results = posts.browse(4, start*4, categories=[category], json=False) return render_template("index.html", page="browse", start=start, @@ -231,14 +230,14 @@ def NeverWhere(configfile=None): author = request.form.get("author", "no author") title = request.form.get("title", "no title") content = request.form.get("content", "no content") - category = request.form.get("category", "programming") + category = request.form.get("categories", ["programming"]) postid = request.form.get("_id", False) post = { "author" : author, "title" : title, "content" : content, - "category" : category, + "categories" : category, "_id" : postid } @@ -255,14 +254,21 @@ def NeverWhere(configfile=None): def projects(): return jsonify(loads(cacheit("projects", getProjects))) - @app.route("/blog/getbrowse/") - def getbrowse(start): - return posts.browse(10, start*10, categories=[]) + @app.route("/blog/getbrowse/") + def getbrowsefirst(limit): + return posts.browse(limit, False) - @app.route("/blog/getbrowse//") - def getbycategory(category, start): - return posts.browse(10, start*10, categories=[category]) + @app.route("/blog/getbrowselim//") + def getbrowse(limit, startkey): + return posts.browse(limit, startkey) + @app.route("/blog/getbrowse///") + def getbycategory(category, limit, startkey): + return posts.browse(limit, startkey, categories=[category]) + + @app.route("/blog/getbrowsecat//") + def getbycategoryinitial(category, limit): + return posts.browse(limit, False, categories=[category]) return app app = NeverWhere()