diff --git a/list.js b/list.js index cd60a8f..9adc594 100644 --- a/list.js +++ b/list.js @@ -2,13 +2,27 @@ function(head, req) { var row, results; var results = []; var categories = (req.query.categories !== undefined ? JSON.parse(req.query.categories) : []); - var num = req.query.num; + var num = parseInt(req.query.num, 10); + var getlast = req.query.getlast; + var full_results; - while (results.length < num && (row = getRow())) { - if (categories.length == 0 || - categories.some(function(c) { return row.value.categories.indexOf(c) !== -1; })) { - results.push([row.value.categories, row.value]); + if (getlast == undefined) { + while (results.length < num && (row = getRow())) { + if (categories.length == 0 || + categories.some(function(c) { return row.value.categories.indexOf(c) !== -1; })) { + results.push([row.value.categories, row.value]); + } } + full_results = results; } - return JSON.stringify({q : req.query.categories, results : results}); + else { + while (row = getRow()) { + if (categories.length == 0 || + categories.some(function(c) { return row.value.categories.indexOf(c) !== -1; })) { + results.push([row.value.categories, row.value]); + } + } + full_results = results.slice(results.length-(num+1), results.length-1); + } + return JSON.stringify({q : req.query.categories, results : full_results}); } diff --git a/src/posts.py b/src/posts.py index eeeac88..8d59f1c 100644 --- a/src/posts.py +++ b/src/posts.py @@ -138,6 +138,7 @@ class Posts: c["key"][1] for c in self.db.view("blogPosts/categories", startkey=["categories"], + startkey_docid=["categories"], endkey=["categories", {}], inclusive_end=False, reduce=True, @@ -145,14 +146,25 @@ class Posts: group=True) ]))) - def browse(self, limit, startkey, categories=[], json=True, backwards=False): + def browse(self, + limit, + startkey=False, + endkey=False, + categories=[], + json=True): + args = { "num" : limit, "categories" : dumps(categories) } if startkey: - args["endkey" if backwards else "startkey"] = startkey + args["startkey"] = startkey + args["startkey_docid"] = startkey + + if endkey: + args["endkey"] = endkey + args["getlast"] = "true" results = self.db.list( "blogPosts/categories", diff --git a/src/scripts/browse.tag b/src/scripts/browse.tag index 7bbccac..dcb3018 100644 --- a/src/scripts/browse.tag +++ b/src/scripts/browse.tag @@ -169,7 +169,7 @@ self.getNext = (startkey) => { window.cached(endpoint) .then((resp) => { return resp.json() }) .then((results) => { - self.opts.state.results = results.slice(1, results.length); + self.opts.state.results = results; self.update({ "loading" : false }); diff --git a/src/website.py b/src/website.py index d889756..6423bba 100755 --- a/src/website.py +++ b/src/website.py @@ -146,7 +146,7 @@ def NeverWhere(configfile=None): @app.route("/blog/browse/") def browse_root(): - results = posts.browse(4, False, json=False) + results = posts.browse(4, json=False) return render_template("index.html", page="browse", results=dumps(results)) @@ -156,7 +156,7 @@ def NeverWhere(configfile=None): """ Get the first page of categories """ - results = posts.browse(4, False, categories=[category], json=False) + results = posts.browse(4, categories=[category], json=False) return render_template("index.html", page="browse", category_filter=dumps([category]), @@ -233,6 +233,7 @@ def NeverWhere(configfile=None): "_id" : postid } + memcache.clear() return posts.savepost(**post) @app.route("/blog/glinks/", methods=("GET",)) @@ -248,29 +249,29 @@ def NeverWhere(configfile=None): @app.route("/blog/getbrowse/") def getbrowsefirst(limit): - return posts.browse(limit, False) + return posts.browse(limit) @app.route("/blog/getbrowselim//") def getbrowse(limit, startkey): - return posts.browse(limit, startkey) + return posts.browse(limit, startkey=startkey) # forwards pagination @app.route("/blog/getbrowse///") def getbycategory(category, limit, startkey): - return posts.browse(limit, startkey, categories=[category]) + return posts.browse(limit, startkey=startkey, categories=[category]) @app.route("/blog/getbrowse///") def getbycategoryinitial(category, limit): - return posts.browse(limit, False, categories=[category]) + return posts.browse(limit, categories=[category]) # backwards pagination - @app.route("/blog/prevbrowse//") + @app.route("/blog/prevbrowse///") def prevbrowse(limit, endkey): - return posts.browse(limit, endkey, backwards=True) + return posts.browse(limit, endkey=endkey) - @app.route("/blog/prevbrowse///") + @app.route("/blog/prevbrowse////") def prevbycategory(category, limit, endkey): - return posts.browse(limit, endkey, categories=[category], backwards=True) + return posts.browse(limit, endkey=endkey, categories=[category]) return app