Browse Source

rewrite pagination stuff to make use of the startkey parameter in

conjunction with a list function
pull/1/head
wes 7 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 enable blog.service")
sudo("systemctl restart blog.service")
sudo("systemctl restart memcached")
@task(default=True)
def build():

12
list.js

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

14
src/posts.py

@ -145,13 +145,19 @@ class Posts:
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(
"blogPosts/categories",
"blogPosts/format",
count=count,
skip=skip,
categories=dumps(categories))[1].get("results", [])
**args)[1].get("results", [])
posts = []
for categories, post in results:

5
src/scripts/browse.tag

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

2
src/scripts/categoryfilter.tag

@ -61,7 +61,7 @@
var self = this;
self.start = 0;
self.pagesize = 5;
self.pagesize = 10;
self.items = self.opts.items;
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.ext.cache import Cache
from urllib.parse import unquote
from urllib.parse import quote, unquote
from json import dumps, loads
from admin import Admin
@ -156,7 +155,7 @@ def NeverWhere(configfile=None):
@app.route("/blog/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",
page="browse",
start=start,
@ -164,7 +163,7 @@ def NeverWhere(configfile=None):
@app.route("/blog/browse/<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",
page="browse",
start=start,
@ -231,14 +230,14 @@ def NeverWhere(configfile=None):
author = request.form.get("author", "no author")
title = request.form.get("title", "no title")
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)
post = {
"author" : author,
"title" : title,
"content" : content,
"category" : category,
"categories" : category,
"_id" : postid
}
@ -255,14 +254,21 @@ def NeverWhere(configfile=None):
def projects():
return jsonify(loads(cacheit("projects", getProjects)))
@app.route("/blog/getbrowse/<start>")
def getbrowse(start):
return posts.browse(10, start*10, categories=[])
@app.route("/blog/getbrowse/<limit>")
def getbrowsefirst(limit):
return posts.browse(limit, False)
@app.route("/blog/getbrowse/<category>/<start>")
def getbycategory(category, start):
return posts.browse(10, start*10, categories=[category])
@app.route("/blog/getbrowselim/<limit>/<startkey>")
def getbrowse(limit, startkey):
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
app = NeverWhere()

Loading…
Cancel
Save