Browse Source

initial browse page working

pull/1/head
wes 7 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 mistune
import json
from json import dumps
from werkzeug.local import Local, LocalProxy, LocalManager
from couchdb.http import ResourceConflict, ResourceNotFound
@ -145,10 +145,12 @@ class Posts:
group=True)
])))
def browse(self, count, skip, categories=[]):
return jsonify(self.db.list(
"blogPosts/categories",
"blogPosts/format",
count=count,
skip=skip,
categories=json.dumps(categories))[1].get("results", []))
def browse(self, count, skip, categories=[], json=True):
result = self.db.list(
"blogPosts/categories",
"blogPosts/format",
count=count,
skip=skip,
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")}
>
</links>
<browse
state={state}
if={active.get("browse")}
>
</browse>
</div>
</div>
<script>
@ -92,6 +97,7 @@ import './projectsview.tag';
import './postsview.tag';
import './about.tag';
import './links.tag';
import './browse.tag';
import route from 'riot-route';
import lens from './lenses.js';
@ -107,6 +113,8 @@ self.riot = riot;
self.menuActive = false;
self.currentPage = self.opts.title;
self.decode = (x) => JSON.parse(decodeURIComponent(x));
window.addEventListener("scroll",
throttle((ev) => {
self.update({"showBorder" : window.pageYOffset != 0});
@ -133,20 +141,24 @@ RiotControl.on("postswitch",
self.state = {
"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),
"author" : self.opts.author,
"title" : self.opts.title,
"loaded" : false,
"initial" : document.getElementsByTagName("noscript")[0].textContent,
"links" : JSON.parse(decodeURIComponent(self.opts.links)),
"categories" : JSON.parse(decodeURIComponent(self.opts.categories))
"links" : self.decode(self.opts.links),
"categories" : self.decode(self.opts.categories)
};
self.active = lens.actives({
"projects" : false,
"posts" : false,
"links" : false,
"about" : false
"about" : false,
"browse" : false
});
menuOn(ev) {
@ -181,6 +193,7 @@ function activate(page) {
var projects = activate("projects");
var about = activate("about");
var links = activate("links");
var browse = activate("browse");
function posts(_id) {
if (self.state._id != _id) {
@ -217,6 +230,8 @@ self.on("mount", () => {
self.route("projects", projects);
self.route("about", about);
self.route("links", links);
self.route("browse/*", browse);
self.route("browse/*/*", browse);
route.start(true);
});

6
src/scripts/browse.tag

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

3
src/templates/index.html

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

30
src/website.py

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

Loading…
Cancel
Save