Browse Source

rewrite pagination stuff to make use of the startkey parameter in

conjunction with a list function
pull/1/head
wes 8 years ago
parent
commit
088f088bfb
  1. 1
      fabfile.py
  2. 12
      list.js
  3. 14
      src/posts.py
  4. 5
      src/scripts/browse.tag
  5. 2
      src/scripts/categoryfilter.tag
  6. 28
      src/website.py

1
fabfile.py

@ -54,6 +54,7 @@ def serveUp():
sudo("systemctl daemon-reload") sudo("systemctl daemon-reload")
sudo("systemctl enable blog.service") sudo("systemctl enable blog.service")
sudo("systemctl restart blog.service") sudo("systemctl restart blog.service")
sudo("systemctl restart memcached")
@task(default=True) @task(default=True)
def build(): def build():

12
list.js

@ -1,11 +1,13 @@
function(head, req) { function(head, req) {
var row, results; var row, results;
results = []; var results = [];
categories = (req.query.categories !== undefined ? JSON.parse(req.query.categories) : []); var categories = (req.query.categories !== undefined ? JSON.parse(req.query.categories) : []);
while (row = getRow()) { var num = req.query.num;
while (results.length < num && (row = getRow())) {
if (categories.length == 0 || if (categories.length == 0 ||
categories.some(function(c) { return row.key.indexOf(c) !== -1; })) { categories.some(function(c) { return row.value.categories.indexOf(c) !== -1; })) {
results.push([row.key, row.value]); results.push([row.value.categories, row.value]);
} }
} }
return JSON.stringify({q : req.query.categories, results : results}); return JSON.stringify({q : req.query.categories, results : results});

14
src/posts.py

@ -145,13 +145,19 @@ class Posts:
group=True) group=True)
]))) ])))
def browse(self, count, skip, categories=[], json=True): def browse(self, limit, startkey, categories=[], json=True):
args = {
"num" : limit,
"categories" : dumps(categories)
}
if startkey:
args["startkey"] = startkey
results = self.db.list( results = self.db.list(
"blogPosts/categories", "blogPosts/categories",
"blogPosts/format", "blogPosts/format",
count=count, **args)[1].get("results", [])
skip=skip,
categories=dumps(categories))[1].get("results", [])
posts = [] posts = []
for categories, post in results: for categories, post in results:

5
src/scripts/browse.tag

@ -47,6 +47,7 @@ import { default as showdown } from 'showdown';
var self = this; var self = this;
self.pagenum = 0;
self.route = route; self.route = route;
self.loading = false; self.loading = false;
self.category = self.opts.state.category_filter; self.category = self.opts.state.category_filter;
@ -79,7 +80,7 @@ self.filterCategories = (category) => {
}); });
self.opts.state.category_filter = category; self.opts.state.category_filter = category;
window.cached(`/blog/getbrowse/${category}/0`) window.cached(`/blog/getbrowse/${category}/5/${self.lastkey}`)
.then((resp) => { return resp.json() }) .then((resp) => { return resp.json() })
.then((results) => { .then((results) => {
self.opts.state.results = results; self.opts.state.results = results;
@ -92,7 +93,7 @@ self.filterCategories = (category) => {
self.getInitial = () => { self.getInitial = () => {
self.update({"loading" : true}); self.update({"loading" : true});
window.cached(`/blog/getbrowse/0`) window.cached(`/blog/getbrowse/5/${self.lastkey}`)
.then((resp) => { return resp.json() }) .then((resp) => { return resp.json() })
.then((results) => { .then((results) => {
self.opts.state.results = results; self.opts.state.results = results;

2
src/scripts/categoryfilter.tag

@ -61,7 +61,7 @@
var self = this; var self = this;
self.start = 0; self.start = 0;
self.pagesize = 5; self.pagesize = 10;
self.items = self.opts.items; self.items = self.opts.items;
preventDefault(ev) { preventDefault(ev) {

28
src/website.py

@ -10,7 +10,6 @@ from flask_login import LoginManager, login_required, login_user
from flask_wtf.csrf import CSRFProtect from flask_wtf.csrf import CSRFProtect
from flask.ext.cache import Cache from flask.ext.cache import Cache
from urllib.parse import unquote
from urllib.parse import quote, unquote from urllib.parse import quote, unquote
from json import dumps, loads from json import dumps, loads
from admin import Admin from admin import Admin
@ -156,7 +155,7 @@ def NeverWhere(configfile=None):
@app.route("/blog/browse/<start>") @app.route("/blog/browse/<start>")
def browse(start): def browse(start):
results = posts.browse(10, start*10, categories=[], json=False) results = posts.browse(4, start*4, categories=[], json=False)
return render_template("index.html", return render_template("index.html",
page="browse", page="browse",
start=start, start=start,
@ -164,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(10, start*10, 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,
@ -231,14 +230,14 @@ def NeverWhere(configfile=None):
author = request.form.get("author", "no author") author = request.form.get("author", "no author")
title = request.form.get("title", "no title") title = request.form.get("title", "no title")
content = request.form.get("content", "no content") content = request.form.get("content", "no content")
category = request.form.get("category", "programming") category = request.form.get("categories", ["programming"])
postid = request.form.get("_id", False) postid = request.form.get("_id", False)
post = { post = {
"author" : author, "author" : author,
"title" : title, "title" : title,
"content" : content, "content" : content,
"category" : category, "categories" : category,
"_id" : postid "_id" : postid
} }
@ -255,14 +254,21 @@ def NeverWhere(configfile=None):
def projects(): def projects():
return jsonify(loads(cacheit("projects", getProjects))) return jsonify(loads(cacheit("projects", getProjects)))
@app.route("/blog/getbrowse/<start>") @app.route("/blog/getbrowse/<limit>")
def getbrowse(start): def getbrowsefirst(limit):
return posts.browse(10, start*10, categories=[]) return posts.browse(limit, False)
@app.route("/blog/getbrowse/<category>/<start>") @app.route("/blog/getbrowselim/<limit>/<startkey>")
def getbycategory(category, start): def getbrowse(limit, startkey):
return posts.browse(10, start*10, categories=[category]) return posts.browse(limit, startkey)
@app.route("/blog/getbrowse/<category>/<limit>/<startkey>")
def getbycategory(category, limit, startkey):
return posts.browse(limit, startkey, categories=[category])
@app.route("/blog/getbrowsecat/<category>/<limit>")
def getbycategoryinitial(category, limit):
return posts.browse(limit, False, categories=[category])
return app return app
app = NeverWhere() app = NeverWhere()

Loading…
Cancel
Save