Browse Source

(hopefully) fix pagination

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

18
list.js

@ -2,13 +2,27 @@ function(head, req) {
var row, results; var row, results;
var results = []; var results = [];
var categories = (req.query.categories !== undefined ? JSON.parse(req.query.categories) : []); 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;
if (getlast == undefined) {
while (results.length < num && (row = getRow())) { while (results.length < num && (row = getRow())) {
if (categories.length == 0 || if (categories.length == 0 ||
categories.some(function(c) { return row.value.categories.indexOf(c) !== -1; })) { categories.some(function(c) { return row.value.categories.indexOf(c) !== -1; })) {
results.push([row.value.categories, row.value]); results.push([row.value.categories, row.value]);
} }
} }
return JSON.stringify({q : req.query.categories, results : results}); full_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 c["key"][1] for c in
self.db.view("blogPosts/categories", self.db.view("blogPosts/categories",
startkey=["categories"], startkey=["categories"],
startkey_docid=["categories"],
endkey=["categories", {}], endkey=["categories", {}],
inclusive_end=False, inclusive_end=False,
reduce=True, reduce=True,
@ -145,14 +146,25 @@ class Posts:
group=True) group=True)
]))) ])))
def browse(self, limit, startkey, categories=[], json=True, backwards=False): def browse(self,
limit,
startkey=False,
endkey=False,
categories=[],
json=True):
args = { args = {
"num" : limit, "num" : limit,
"categories" : dumps(categories) "categories" : dumps(categories)
} }
if startkey: 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( results = self.db.list(
"blogPosts/categories", "blogPosts/categories",

2
src/scripts/browse.tag

@ -169,7 +169,7 @@ self.getNext = (startkey) => {
window.cached(endpoint) window.cached(endpoint)
.then((resp) => { return resp.json() }) .then((resp) => { return resp.json() })
.then((results) => { .then((results) => {
self.opts.state.results = results.slice(1, results.length); self.opts.state.results = results;
self.update({ self.update({
"loading" : false "loading" : false
}); });

21
src/website.py

@ -146,7 +146,7 @@ def NeverWhere(configfile=None):
@app.route("/blog/browse/") @app.route("/blog/browse/")
def browse_root(): def browse_root():
results = posts.browse(4, False, json=False) results = posts.browse(4, json=False)
return render_template("index.html", return render_template("index.html",
page="browse", page="browse",
results=dumps(results)) results=dumps(results))
@ -156,7 +156,7 @@ def NeverWhere(configfile=None):
""" """
Get the first page of categories 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", return render_template("index.html",
page="browse", page="browse",
category_filter=dumps([category]), category_filter=dumps([category]),
@ -233,6 +233,7 @@ def NeverWhere(configfile=None):
"_id" : postid "_id" : postid
} }
memcache.clear()
return posts.savepost(**post) return posts.savepost(**post)
@app.route("/blog/glinks/", methods=("GET",)) @app.route("/blog/glinks/", methods=("GET",))
@ -248,29 +249,29 @@ def NeverWhere(configfile=None):
@app.route("/blog/getbrowse/<limit>") @app.route("/blog/getbrowse/<limit>")
def getbrowsefirst(limit): def getbrowsefirst(limit):
return posts.browse(limit, False) return posts.browse(limit)
@app.route("/blog/getbrowselim/<limit>/<startkey>") @app.route("/blog/getbrowselim/<limit>/<startkey>")
def getbrowse(limit, startkey): def getbrowse(limit, startkey):
return posts.browse(limit, startkey) return posts.browse(limit, startkey=startkey)
# forwards pagination # forwards pagination
@app.route("/blog/getbrowse/<category>/<limit>/<startkey>") @app.route("/blog/getbrowse/<category>/<limit>/<startkey>")
def getbycategory(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>/") @app.route("/blog/getbrowse/<category>/<limit>/")
def getbycategoryinitial(category, limit): def getbycategoryinitial(category, limit):
return posts.browse(limit, False, categories=[category]) return posts.browse(limit, categories=[category])
# backwards pagination # backwards pagination
@app.route("/blog/prevbrowse/<limit>/<endkey>") @app.route("/blog/prevbrowse/<limit>/<endkey>/")
def 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): def prevbycategory(category, limit, endkey):
return posts.browse(limit, endkey, categories=[category], backwards=True) return posts.browse(limit, endkey=endkey, categories=[category])
return app return app

Loading…
Cancel
Save