From 6b02186505264dc5a05a74bce1f9dcc3f91d08e1 Mon Sep 17 00:00:00 2001 From: Alan Pearce Date: Sat, 24 Jun 2017 12:11:46 +0200 Subject: refactor: Separate templates into layout/body --- src/index.js | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) (limited to 'src/index.js') 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( -- cgit 1.4.1