Browse Source

initial browse page working

pull/1/head
wes 8 years ago
parent
commit
0bbda72915
  1. 18
      src/posts.py
  2. 21
      src/scripts/app.tag
  3. 6
      src/scripts/browse.tag
  4. 3
      src/templates/index.html
  5. 30
      src/website.py

18
src/posts.py

@ -2,7 +2,7 @@
import couchdb import couchdb
import mistune import mistune
import json from json import dumps
from werkzeug.local import Local, LocalProxy, LocalManager from werkzeug.local import Local, LocalProxy, LocalManager
from couchdb.http import ResourceConflict, ResourceNotFound from couchdb.http import ResourceConflict, ResourceNotFound
@ -145,10 +145,12 @@ class Posts:
group=True) group=True)
]))) ])))
def browse(self, count, skip, categories=[]): def browse(self, count, skip, categories=[], json=True):
return jsonify(self.db.list( result = self.db.list(
"blogPosts/categories", "blogPosts/categories",
"blogPosts/format", "blogPosts/format",
count=count, count=count,
skip=skip, skip=skip,
categories=json.dumps(categories))[1].get("results", [])) categories=dumps(categories))[1].get("results", [])
return jsonify(result) if json else result

21
src/scripts/app.tag

@ -83,6 +83,11 @@
if={active.get("links")} if={active.get("links")}
> >
</links> </links>
<browse
state={state}
if={active.get("browse")}
>
</browse>
</div> </div>
</div> </div>
<script> <script>
@ -92,6 +97,7 @@ import './projectsview.tag';
import './postsview.tag'; import './postsview.tag';
import './about.tag'; import './about.tag';
import './links.tag'; import './links.tag';
import './browse.tag';
import route from 'riot-route'; import route from 'riot-route';
import lens from './lenses.js'; import lens from './lenses.js';
@ -107,6 +113,8 @@ self.riot = riot;
self.menuActive = false; self.menuActive = false;
self.currentPage = self.opts.title; self.currentPage = self.opts.title;
self.decode = (x) => JSON.parse(decodeURIComponent(x));
window.addEventListener("scroll", window.addEventListener("scroll",
throttle((ev) => { throttle((ev) => {
self.update({"showBorder" : window.pageYOffset != 0}); self.update({"showBorder" : window.pageYOffset != 0});
@ -133,20 +141,24 @@ RiotControl.on("postswitch",
self.state = { self.state = {
"page" : self.opts.page, "page" : self.opts.page,
"results" : self.decode(self.opts.results),
"start" : self.opts.start,
"category_filter" : self.decode(self.opts.category_filter),
"_id" : self.opts.postid.slice(-hashLength), "_id" : self.opts.postid.slice(-hashLength),
"author" : self.opts.author, "author" : self.opts.author,
"title" : self.opts.title, "title" : self.opts.title,
"loaded" : false, "loaded" : false,
"initial" : document.getElementsByTagName("noscript")[0].textContent, "initial" : document.getElementsByTagName("noscript")[0].textContent,
"links" : JSON.parse(decodeURIComponent(self.opts.links)), "links" : self.decode(self.opts.links),
"categories" : JSON.parse(decodeURIComponent(self.opts.categories)) "categories" : self.decode(self.opts.categories)
}; };
self.active = lens.actives({ self.active = lens.actives({
"projects" : false, "projects" : false,
"posts" : false, "posts" : false,
"links" : false, "links" : false,
"about" : false "about" : false,
"browse" : false
}); });
menuOn(ev) { menuOn(ev) {
@ -181,6 +193,7 @@ function activate(page) {
var projects = activate("projects"); var projects = activate("projects");
var about = activate("about"); var about = activate("about");
var links = activate("links"); var links = activate("links");
var browse = activate("browse");
function posts(_id) { function posts(_id) {
if (self.state._id != _id) { if (self.state._id != _id) {
@ -217,6 +230,8 @@ self.on("mount", () => {
self.route("projects", projects); self.route("projects", projects);
self.route("about", about); self.route("about", about);
self.route("links", links); self.route("links", links);
self.route("browse/*", browse);
self.route("browse/*/*", browse);
route.start(true); route.start(true);
}); });

6
src/scripts/browse.tag

@ -1,11 +1,15 @@
<browse> <browse>
<div> <div>
<ul>
<li each={result in opts.state.results}>
<h3>{ JSON.stringify(result) }</h3>
</li>
</ul>
</div> </div>
<script type="es6"> <script type="es6">
import route from 'riot-route'; import route from 'riot-route';
var self = this; var self = this;
</script> </script>
</browse> </browse>

3
src/templates/index.html

@ -23,6 +23,9 @@
window.addEventListener("load", function() { window.addEventListener("load", function() {
window.riot.mount("app", window.riot.mount("app",
{ {
category_filter: "{{ quote(category_filter) }}",
start: "{{ start }}",
results: "{{ quote(results) }}",
categories: "{{ quote(categories) }}", categories: "{{ quote(categories) }}",
links : "{{ quote(links) }}", links : "{{ quote(links) }}",
page : "{{ page }}", page : "{{ page }}",

30
src/website.py

@ -69,10 +69,13 @@ def NeverWhere(configfile=None):
postcontent["title"] = initial_post["title"] postcontent["title"] = initial_post["title"]
return { return {
"quote" : quote, "quote" : quote,
"start" : 0,
"results" : dumps([]),
"postid" : initial_post["_id"], "postid" : initial_post["_id"],
"postcontent" : postcontent, "postcontent" : postcontent,
"links" : dumps([]), "links" : dumps([]),
"projects" : dumps([]), "projects" : dumps([]),
"category_filter" : dumps([]),
"categories" : cacheit("categories", lambda : dumps(posts.categories())) "categories" : cacheit("categories", lambda : dumps(posts.categories()))
} }
@ -142,6 +145,23 @@ def NeverWhere(configfile=None):
postcontent=post_content) postcontent=post_content)
@app.route("/blog/browse/<start>")
def browse(start):
results = posts.browse(10, start*10, categories=[], json=False)
return render_template("index.html",
page="browse",
start=start,
results=dumps(results))
@app.route("/blog/browse/<category>/<start>")
def browse_categories(category, start):
results = posts.browse(10, start*10, categories=[category], json=False)
return render_template("index.html",
page="browse",
start=start,
category_filter=dumps([category]),
results=dumps(results))
@cache.cached(timeout=50) @cache.cached(timeout=50)
@app.route("/blog/switchpost/<pid>/<category>") @app.route("/blog/switchpost/<pid>/<category>")
def getpostid(pid, category): def getpostid(pid, category):
@ -168,7 +188,7 @@ def NeverWhere(configfile=None):
# get the first post of a given category # get the first post of a given category
@cache.cached(timeout=50) @cache.cached(timeout=50)
@app.route("/blog/getpost/<category>") @app.route("/blog/getpost/<category>")
def getbycategory(category): def bycategory(category):
return posts.getbycategory(category) return posts.getbycategory(category)
# get the id of every post # get the id of every post
@ -226,12 +246,12 @@ def NeverWhere(configfile=None):
def projects(): def projects():
return jsonify(loads(cacheit("projects", getProjects))) return jsonify(loads(cacheit("projects", getProjects)))
@app.route("/blog/browse/<start>") @app.route("/blog/getbrowse/<start>")
def browse(start): def getbrowse(start):
return posts.browse(10, start*10, categories=[]) return posts.browse(10, start*10, categories=[])
@app.route("/blog/browse/<category>/<start>") @app.route("/blog/getbrowse/<category>/<start>")
def bycategory(category, start): def getbycategory(category, start):
return posts.browse(10, start*10, categories=[category]) return posts.browse(10, start*10, categories=[category])
return app return app

Loading…
Cancel
Save