Browse Source

(hopefully) fix pagination

pull/1/head
wes 7 years ago
parent
commit
683f2e5ada
  1. 26
      list.js
  2. 16
      src/posts.py
  3. 2
      src/scripts/browse.tag
  4. 21
      src/website.py

26
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});
}

16
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",

2
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
});

21
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/<limit>")
def getbrowsefirst(limit):
return posts.browse(limit, False)
return posts.browse(limit)
@app.route("/blog/getbrowselim/<limit>/<startkey>")
def getbrowse(limit, startkey):
return posts.browse(limit, startkey)
return posts.browse(limit, startkey=startkey)
# forwards pagination
@app.route("/blog/getbrowse/<category>/<limit>/<startkey>")
def getbycategory(category, limit, startkey):
return posts.browse(limit, startkey, categories=[category])
return posts.browse(limit, startkey=startkey, categories=[category])
@app.route("/blog/getbrowse/<category>/<limit>/")
def getbycategoryinitial(category, limit):
return posts.browse(limit, False, categories=[category])
return posts.browse(limit, categories=[category])
# backwards pagination
@app.route("/blog/prevbrowse/<limit>/<endkey>")
@app.route("/blog/prevbrowse/<limit>/<endkey>/")
def prevbrowse(limit, endkey):
return posts.browse(limit, endkey, backwards=True)
return posts.browse(limit, endkey=endkey)
@app.route("/blog/prevbrowse/<category>/<limit>/<endkey>")
@app.route("/blog/prevbrowse/<category>/<limit>/<endkey>/")
def prevbycategory(category, limit, endkey):
return posts.browse(limit, endkey, categories=[category], backwards=True)
return posts.browse(limit, endkey=endkey, categories=[category])
return app

Loading…
Cancel
Save