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

65
src/scripts/browse.tag

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

13
src/website.py

@ -163,7 +163,7 @@ def NeverWhere(configfile=None):
@app.route("/blog/browse/<category>/<start>") @app.route("/blog/browse/<category>/<start>")
def browse_categories(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", return render_template("index.html",
page="browse", page="browse",
start=start, start=start,
@ -262,6 +262,7 @@ def NeverWhere(configfile=None):
def getbrowse(limit, startkey): def getbrowse(limit, startkey):
return posts.browse(limit, startkey) return posts.browse(limit, startkey)
# 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, categories=[category])
@ -269,6 +270,16 @@ def NeverWhere(configfile=None):
@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, 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 return app
app = NeverWhere() app = NeverWhere()

Loading…
Cancel
Save