You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

38 lines
1005 B
CoffeeScript

Promise = require "bluebird"
router = require("express-promise-router")()
moment = require "moment"
marked = require "marked"
slug = require "slug"
mdRenderer = new marked.Renderer()
mdRenderer.heading = (text, level) ->
sluggedText = slug(text).replace(/\./g, "-")
return """
<h#{level + 2}>
<a name="#{sluggedText}" class="anchor" href="##{sluggedText}">
§
</a>
#{text}
</h#{level + 2}>
"""
router.get "/", (req, res) ->
Promise.try ->
req.model("BlogPost").getAll()
.then (blogPosts) ->
blogPosts.forEach (post) ->
# TODO: There must be a nicer way to do this. Maybe in yaorm.
post.set "Posted", moment(post.get("Posted")).format "D MMM YYYY"
res.render "blog-index", posts: blogPosts.toJSON()
router.get "/:articleID/:slug?", (req, res) ->
Promise.try ->
req.model("BlogPost").find(req.params.articleID)
.then (post) ->
post.set "HTML", marked(post.get("Body"), renderer: mdRenderer)
res.render "blog-post", post: post.toJSON()
module.exports = router