Browse Source

inline initial post load

pull/1/head
wes 7 years ago
parent
commit
6cea2d5921
  1. 10
      src/posts.py
  2. 35
      src/scripts/app.tag
  3. 28
      src/scripts/post.tag
  4. 3
      src/templates/index.html
  5. 13
      src/website.py

10
src/posts.py

@ -39,9 +39,15 @@ class Posts:
print("post was saved %s" % doc)
return jsonify(self.db.save(doc))
def getpost(self, _id, category="programming"):
def getpost(self, _id, category="programming", json=True):
results = self.db.iterview("blogPosts/blog-posts", 1, include_docs=True, startkey=_id)
return jsonify([result.doc for result in results][0])
post = [result.doc for result in results][0]
return jsonify(post) if json else post
def getinitial(self):
results = list(self.db.iterview("blogPosts/blog-posts", 2, include_docs=True))
return [result.doc for result in results][0]
def iterpost(self, endkey=False, startkey=False, category="programming"):
if startkey and not endkey:

35
src/scripts/app.tag

@ -97,6 +97,8 @@ import route from 'riot-route';
import lens from './lenses.js';
import { throttle } from 'lodash-es';
const hashLength = 8;
var self = this;
self.cache = {};
@ -105,7 +107,7 @@ self.showBorder = false;
self.route = route;
self.riot = riot;
self.menuActive = false;
self.currentPage = "";
self.currentPage = self.opts.title;
window.addEventListener("scroll",
throttle((ev) => {
@ -143,12 +145,15 @@ RiotControl.on("postswitch",
}
);
self.route.base('#!')
self.route.base('/blog/')
self.state = {
"_id" : false,
"_id" : self.opts.postid.slice(-hashLength),
"author" : self.opts.author,
"title" : self.opts.title,
"projects" : Z.empty,
"loaded" : false
"loaded" : false,
"initial" : decodeURIComponent(self.opts.initial_post)
};
self.active = lens.actives({
@ -176,9 +181,12 @@ menuOff(ev) {
function activate(page) {
return function() {
if (page !== "posts") {
document.title = page.slice(0,1).toUpperCase()+" "+page.slice(1,page.length);
document.title = page.slice(0,1).toUpperCase()+page.slice(1,page.length);
self.currentPage = document.title;
}
else {
self.currentPage = self.state.title;
}
self.active = lens.setActive(self.active, page);
self.update();
};
@ -189,6 +197,8 @@ var about = activate("about");
var links = activate("links");
function posts(_id) {
console.log("XXX");
console.log(_id);
if (self.state._id != _id) {
self.state._id = _id;
}
@ -203,12 +213,19 @@ to(name) {
e.preventDefault();
this.menuOff(e);
}
this.route(name);
console.log("routing to " + name);
if (name == "posts") {
this.route(`${name}/${self.state._id}`);
}
else {
this.route(name);
}
return;
}).bind(this);
}
self.route("/", self.to("posts"));
self.route("/", () => { self.route(`/posts/${self.state._id}`); });
self.route("/posts", () => { self.route(`/posts/${self.state._id}`); });
self.route("posts/*", posts);
self.route("posts", (() => {posts(self.state._id)}));
self.route("projects", projects);
@ -245,5 +262,9 @@ function getcategories() {
self.on("mount", loaduser);
self.on("mount", getcategories);
self.on("mount", () => {
console.log(decodeURIComponent(self.opts.initial_post));
});
</script>
</app>

28
src/scripts/post.tag

@ -52,22 +52,19 @@ this.converter = new showdown.Converter();
var self = this;
const hashLength = 8;
self.route = route;
self.category = "programming";
self._id = "";
self.author = "";
self.title = "";
self.content = "";
self._id = self.opts.state._id.slice(-hashLength);
self.author = self.opts.state.author;
self.title = self.opts.state.title;
self.content = self.opts.state.initial;
self.prevloading = "";
self.nextloading = "";
self.content = "";
self.swipe = false;
self.on("mount", () => {
self.loading = self.opts.state.loaded;
});
RiotControl.on("filtercategory",
(ev) => {
let category = ev.category.toLowerCase();
@ -77,8 +74,6 @@ RiotControl.on("filtercategory",
self.start = false;
self.end = false;
const hashLength = 8;
prev(ev) {
ev.preventDefault();
self.end = false;
@ -127,6 +122,12 @@ updatePost(postcontent) {
self.author = postcontent.author;
self.content = postcontent.content;
self.title = postcontent.title;
self.opts.state._id = self._id;
self.opts.state.title = self.title;
self.opts.state.initial = self.content;
self.opts.state.author = self.author;
self.swipe = !self.swipe;
self.loading = false;
self.prevloading = "";
@ -187,7 +188,10 @@ getPost(_id) {
}
self.on("mount", () => {
self.getPost(self.opts.state._id);
//self.getPost(self.opts.state._id);
self.update({
"loading" : false
});
});
</script>

3
src/templates/index.html

@ -3,10 +3,11 @@
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="fragment" content="!">
<title>{{ postcontent["title"] }}</title>
</head>
<html>
<body>
<div data-is="app" initial_post="{{ initial_post }}" csrf_token="{{ csrf_token() }}"></div>
<div data-is="app" author="{{ postcontent['author'] }}" postid="{{ postcontent['_id'] }}" title="{{ postcontent['title'] }}" initial_post="{{ quote(postcontent['content']) }}" csrf_token="{{ csrf_token() }}"></div>
</body>
<footer>
<script>

13
src/website.py

@ -79,10 +79,19 @@ def NeverWhere(configfile=None):
def stuff():
return render_template("projects.html")
@app.route("/blog/posts/", methods=("GET",))
def renderInitial():
post_content = posts.getinitial()
return render_template("index.html", quote=quote, postcontent=dict(post_content))
@app.route("/blog/posts/<_id>", methods=("GET",))
def renderPost(_id):
post_content = posts.getpost(_id, json=False)
return render_template("index.html", quote=quote, postcontent=dict(post_content))
@app.route("/blog/", methods=("GET", "POST"))
def index():
print("matched index")
return render_template("index.html")
return renderInitial()
@app.route("/blog/scripts/<filename>", methods=("GET", "POST"))
def send_script(filename):

Loading…
Cancel
Save