summary refs log tree commit diff stats
path: root/src/index.js
diff options
context:
space:
mode:
authorAlan Pearce2017-06-24 12:11:46 +0200
committerAlan Pearce2017-06-24 12:11:46 +0200
commit6b02186505264dc5a05a74bce1f9dcc3f91d08e1 (patch)
tree09201512999c62c2cae19c9a44fe3b055fd664d4 /src/index.js
parentf9fd0d795fb7bff10cb759f2300200d50b0fbab3 (diff)
downloadhomestead-6b02186505264dc5a05a74bce1f9dcc3f91d08e1.tar.lz
homestead-6b02186505264dc5a05a74bce1f9dcc3f91d08e1.tar.zst
homestead-6b02186505264dc5a05a74bce1f9dcc3f91d08e1.zip
refactor: Separate templates into layout/body
Diffstat (limited to 'src/index.js')
-rw-r--r--src/index.js39
1 files changed, 28 insertions, 11 deletions
diff --git a/src/index.js b/src/index.js
index 93d61a4..a98a32d 100644
--- a/src/index.js
+++ b/src/index.js
@@ -20,12 +20,21 @@ const rheo = require('rheo')
 const Posts = require('./modules/posts.js')
 const posts = Posts.getFolder(config.posts.folder)
 
-const index = () => fs.createReadStream(`${__dirname}/templates/index.html`)
+const templateReader = template => () =>
+  fs.createReadStream(`${__dirname}/templates/${template}.html`)
+const templates = {
+  layout: templateReader('layout'),
+  home: templateReader('home'),
+  post: templateReader('post'),
+  taxon: templateReader('taxon')
+}
 
 function setTitle (pageTitle) {
-  return rheo.template(s =>
-    s.inner('title', rheo((pageTitle ? ' · ' : '') + config.site.title))
-  )
+  return rheo.template(function (s) {
+    return s
+      .inner('title', rheo((pageTitle ? ' · ' : '') + config.site.title))
+      .inner('body header h1', rheo(config.site.title))
+  })
 }
 
 function renderPostListItem (template, [, post]) {
@@ -38,13 +47,19 @@ function toArrayStream (iterator) {
   return streamify(Array.from(iterator.entries()))
 }
 
+function showPage (name) {
+  return function (els) {
+    return rheo(templates[name]())
+  }
+}
+
 const postsStream = toArrayStream(posts)
 router.get('home', '/', async function (ctx, next) {
   ctx.set('Content-Type', 'text/html')
-  ctx.body = index()
+  ctx.body = templates
+    .layout()
     .pipe(rheo())
-    .inner('body', pages => pages.find('main.homepage'))
-    .inner('h1', rheo(config.site.title))
+    .outer('main', showPage('home'))
     .inner('.posts', function (postsTemplate) {
       return postsStream.pipe(postsTemplate.map(renderPostListItem))
     })
@@ -58,9 +73,10 @@ router.get('post', '/post/:filename', async function (ctx, next) {
   post.body = Posts.render(post)
 
   ctx.set('Content-Type', 'text/html')
-  ctx.body = index()
+  ctx.body = templates
+    .layout()
     .pipe(rheo())
-    .inner('body', pages => pages.find('main.post'))
+    .inner('main', showPage('post'))
     .inner('article h1', rheo(post.data.get('title')))
     .inner('article main', rheo(post.body))
     .pipe(setTitle())
@@ -78,9 +94,10 @@ for (let [term, items] of taxonomies) {
     )
 
     ctx.set('Content-Type', 'text/html')
-    ctx.body = index()
+    ctx.body = templates
+      .layout()
       .pipe(rheo())
-      .inner('body', pages => pages.find('main.taxon'))
+      .inner('main', showPage('taxon'))
       .inner('h1', rheo(config.site.title))
       .inner('.posts', function (postsTemplate) {
         return toArrayStream(items.get(value)).pipe(