Browse Source

basic filtering works :-]

pull/1/head
wes 7 years ago
parent
commit
95ec88b448
  1. 13
      src/posts.py
  2. 19
      src/scripts/post.tag
  3. 22
      src/scripts/sidebar.tag
  4. 18
      src/website.py

13
src/posts.py

@ -17,12 +17,13 @@ class Posts:
self.db = self.client["blog"]
def savepost(self, title="", content="", author="", _id=False):
def savepost(self, title="", content="", author="", category="programming", _id=False):
if _id:
doc = self.db[_id]
doc["title"] = title
doc["content"] = content
doc["author"] = author
doc["category"] = category
else:
doc = {
"title" : title,
@ -34,15 +35,15 @@ class Posts:
print("post was saved %s" % doc)
return jsonify(self.db.save(doc))
def getpost(self, _id):
results = self.db.iterview("blogPosts/blog-posts", 1, include_docs=True, key=_id)
def getpost(self, _id, category="programming"):
results = self.db.iterview("blogPosts/blog-posts", 1, include_docs=True, startkey=[category, _id])
return jsonify([result.doc for result in results][0])
def iterpost(self, endkey=False, startkey=False):
def iterpost(self, endkey=False, startkey=False, category="programming"):
if startkey and not endkey:
results = self.db.iterview("blogPosts/blog-posts", 2, include_docs=True, startkey=startkey)
results = self.db.iterview("blogPosts/blog-posts", 2, include_docs=True, startkey=[category, startkey])
elif endkey and not startkey:
results = self.db.iterview("blogPosts/blog-posts", 1, include_docs=True, endkey=endkey)
results = self.db.iterview("blogPosts/blog-posts", 1, include_docs=True, endkey=[category, endkey])
else:
results = self.db.iterview("blogPosts/blog-posts", 2, include_docs=True)

19
src/scripts/post.tag

@ -54,6 +54,7 @@ var self = this;
self.route = route;
self.category = "programming";
self._id = "";
self.author = "";
self.title = "";
@ -64,6 +65,12 @@ self.content = "";
self.swipe = false;
self.loading = self.opts.state.loaded;
RiotControl.on("filtercategory",
(ev) => {
let category = ev.category.toLowerCase();
self.update({"category" : category});
});
self.start = false;
self.end = false;
@ -76,7 +83,7 @@ prev(ev) {
return;
}
self.prevloading = " loader-branded";
self.prevPost(self._id, "fadeIn");
self.prevPost(self._id);
}
next(ev) {
@ -86,7 +93,7 @@ next(ev) {
return;
}
self.nextloading = " loader-branded";
self.nextPost(self._id, "fadeIn");
self.nextPost(self._id);
}
toTop() {
@ -135,7 +142,7 @@ updatePost(postcontent) {
nextPost(_id) {
self.update({"loading" : true});
self.opts.cached(`/blog/switchpost/${_id.slice(-hashLength)}`)
self.opts.cached(`/blog/switchpost/${_id.slice(-hashLength)}/${self.category}`)
.then((resp) => resp.text())
.then((resp) => {
var content = JSON.parse(resp);
@ -155,7 +162,7 @@ nextPost(_id) {
prevPost(_id) {
self.update({"loading" : true});
self.opts.cached(`/blog/prevpost/${_id.slice(-hashLength)}`)
self.opts.cached(`/blog/prevpost/${_id.slice(-hashLength)}/${self.category}`)
.then((resp) => resp.text())
.then((resp) => {
self.updatePost(JSON.parse(resp))
@ -166,7 +173,7 @@ getPost(_id) {
self.update({"loading" : true});
var url;
if (_id !== undefined && _id) {
url = `/blog/getpost/${_id.slice(-hashLength)}`;
url = `/blog/getpost/${_id.slice(-hashLength)}/${self.category}`;
}
else {
url = "/blog/switchpost/";
@ -176,7 +183,7 @@ getPost(_id) {
.then((resp) => { self.updatePost(JSON.parse(resp)) })
}
self.getPost(self.opts.state._id, "fadeIn");
self.getPost(self.opts.state._id);
</script>
</post>

22
src/scripts/sidebar.tag

@ -32,14 +32,23 @@
<div style={merge(panelStyles, nobg)} class="panel-body">
<ul style={nobg} class="menu">
<li style={merge(nobg, subtitle)} class="divider sidebar-divider" data-content="Categories">
<li
style={merge(nobg, subtitle)}
class="divider sidebar-divider"
data-content="Categories"
>
</li>
<li style={merge(menuStyles, nobg)} each={item in opts.items} class="menu-item">
<li
style={merge(menuStyles, nobg)}
each={item in opts.items}
class="menu-item"
>
<a
style={nobg}
class="btn btn-primary sidebar-button"
href="#"
onclick={filterCategory(item)}
>
{ item }
</a>
@ -104,7 +113,7 @@ self.styles = (() => {
"box-shadow" : "6px 8px 16px -4px rgba(0,0,0,0.75)",
"-webkit-box-shadow" : "6px 8px 16px -4px rgba(0,0,0,0.75)",
"-moz-box-shadow" : "6px 8px 16px -4px rgba(0,0,0,0.75)",
"height": "80%",
"height": "100%",
"width": "250px",
"position": "fixed",
"z-index": "1",
@ -153,5 +162,12 @@ self.one("updated",
});
});
filterCategory(item) {
return ((ev) => {
ev.preventDefault();
RiotControl.trigger("filtercategory", {"category" : item });
});
}
</script>
</sidebar>

18
src/website.py

@ -86,9 +86,9 @@ def NeverWhere(configfile=None):
return send_from_directory("/srv/http/riotblog/styles", filename)
# get the next post
@app.route("/blog/switchpost/<pid>")
def getpostid(pid):
return posts.iterpost(startkey=pid)
@app.route("/blog/switchpost/<pid>/<category>")
def getpostid(pid, category):
return posts.iterpost(startkey=pid, category=category)
# get the first post
@app.route("/blog/switchpost/")
@ -96,14 +96,14 @@ def NeverWhere(configfile=None):
return posts.iterpost()
# get the post previous to this one
@app.route("/blog/prevpost/<pid>")
def prevpost(pid):
return posts.iterpost(endkey=pid)
@app.route("/blog/prevpost/<pid>/<category>")
def prevpost(pid, category):
return posts.iterpost(endkey=pid, category=category)
# get the contents of any post
@app.route("/blog/getpost/<_id>")
def getpost(_id):
return posts.getpost(_id)
@app.route("/blog/getpost/<_id>/<category>")
def getpost(_id, category):
return posts.getpost(_id, category=category)
# get the id of every post
@app.route("/blog/allposts")

Loading…
Cancel
Save