Browse Source

fix bugs with pagination

pull/1/head
wes 7 years ago
parent
commit
60a533f8d1
  1. 5
      src/posts.py
  2. 65
      src/scripts/browse.tag
  3. 13
      src/website.py

5
src/posts.py

@ -145,14 +145,14 @@ class Posts:
group=True)
])))
def browse(self, limit, startkey, categories=[], json=True):
def browse(self, limit, startkey, categories=[], json=True, backwards=False):
args = {
"num" : limit,
"categories" : dumps(categories)
}
if startkey:
args["startkey"] = startkey
args["endkey" if backwards else "startkey"] = startkey
results = self.db.list(
"blogPosts/categories",
@ -163,5 +163,4 @@ class Posts:
for categories, post in results:
post["content"] = markdown(post["content"])
posts.append([categories, post])
return jsonify(posts) if json else posts

65
src/scripts/browse.tag

@ -33,14 +33,27 @@
</a>
</div>
</div>
<div class="getmore">
<button
class="btn btn-primary branded"
if={opts.state.results.length == pagesize}
onclick={getmore}
>
Next
</button>
<div class="container">
<div class="columns">
<div class="col-6 getprev">
<button
if={pagenum > 0}
class="btn btn-primary branded"
onclick={getprev}
>
Previous
</button>
</div>
<div class="col-6 getmore">
<button
class="btn btn-primary branded"
if={opts.state.results.length == pagesize}
onclick={getmore}
>
Next
</button>
</div>
</div>
</div>
</div>
</div>
@ -62,7 +75,7 @@ self.loading = false;
self.category = self.opts.state.category_filter;
self.converter = new showdown.Converter();
self.lastkey = false;
self.pagesize = 5;
self.pagesize = 4;
self.openPost = (id) => {
return ((ev) => {
@ -91,7 +104,7 @@ self.filterCategories = (category) => {
});
self.opts.state.category_filter = category;
window.cached(`/blog/getbrowse/${category}/${self.pagesize}/${self.lastkey ? self.lastkey : ""}`)
window.cached(`/blog/getbrowse/${category}/${self.pagesize}/${self.startkey ? self.startkey : ""}`)
.then((resp) => { return resp.json() })
.then((results) => {
self.opts.state.results = results;
@ -102,12 +115,34 @@ self.filterCategories = (category) => {
})
}
self.getPrev = (endkey) => {
self.update({"loading" : true});
var endpoint;
if (self.category) {
endpoint = `/blog/prevbrowse/${self.opts.state.category_filter}/${self.pagesize}/${endkey}`;
}
else {
endpoint = `/blog/prevbrowse/${self.pagesize}/${endkey}`;
}
window.cached(endpoint)
.then((resp) => { return resp.json() })
.then((results) => {
self.opts.state.results = results;
self.update({
"loading" : false,
"pagenum" : self.pagenum-1
});
});
}
self.getNext = (startkey) => {
self.update({"loading" : true});
var endpoint;
if (self.category) {
endpoint = `/blog/getbrowse/${self.category}/${self.pagesize}/${startkey}`;
endpoint = `/blog/getbrowse/${self.opts.state.category_filter}/${self.pagesize}/${startkey}`;
}
else {
endpoint = `/blog/getbrowselim/${self.pagesize}/${startkey}`;
@ -118,7 +153,8 @@ self.getNext = (startkey) => {
.then((results) => {
self.opts.state.results = results.slice(1, results.length);
self.update({
"loading" : false
"loading" : false,
"pagenum" : self.pagenum+1
});
});
}
@ -140,6 +176,11 @@ self.getmore = (ev) => {
self.getNext(self.opts.state.results.slice(-1)[0][1].id)
}
self.getprev = (ev) => {
ev.preventDefault();
self.getPrev(self.opts.state.results[0][1].id)
}
self.on("mount", () => {
if (!self.opts.state.category_filter && !self.opts.state.category_tag) {
self.getInitial();

13
src/website.py

@ -163,7 +163,7 @@ def NeverWhere(configfile=None):
@app.route("/blog/browse/<category>/<start>")
def browse_categories(category, start):
results = posts.browse(5, start*5, categories=[category], json=False)
results = posts.browse(4, start*4, categories=[category], json=False)
return render_template("index.html",
page="browse",
start=start,
@ -262,6 +262,7 @@ def NeverWhere(configfile=None):
def getbrowse(limit, startkey):
return posts.browse(limit, startkey)
# forwards pagination
@app.route("/blog/getbrowse/<category>/<limit>/<startkey>")
def getbycategory(category, limit, startkey):
return posts.browse(limit, startkey, categories=[category])
@ -269,6 +270,16 @@ def NeverWhere(configfile=None):
@app.route("/blog/getbrowse/<category>/<limit>/")
def getbycategoryinitial(category, limit):
return posts.browse(limit, False, categories=[category])
# backwards pagination
@app.route("/blog/prevbrowse/<limit>/<endkey>")
def prevbrowse(limit, endkey):
return posts.browse(limit, endkey, backwards=True)
@app.route("/blog/prevbrowse/<category>/<limit>/<endkey>")
def prevbycategory(category, limit, endkey):
return posts.browse(limit, endkey, categories=[category], backwards=True)
return app
app = NeverWhere()

Loading…
Cancel
Save