UNPKG

blogware

Version:

A static site generator for hosting full-featured Ghost blog on GitHub Pages.

108 lines (79 loc) 2.41 kB
var _ = require('lodash'); var table = require('../../../table'); var l2p = require('./l2p'); function prepareOptions(location, file) { var opts = {}; var config = table.config.all(); var collection = table.collection.all(); opts.data = {}; // @blogware, @site, @posts & @pages _.merge(opts.data, config); _.merge(opts.data, collection); // @authors var authors = table.author.all(); opts.data.authors = authors; // @tags var tags = table.tag.all(); opts.data.tags = tags; // tags = _.map(tags || [], function(tag) { // var _tag = _.clone(tag); // if (_tag.posts) { // _tag.posts = _tag.posts.map(function(relative) { // return table.collection.get('posts', relative); // }).sort(function(a, b) { // return b.date > a.date; // }); // } // return _tag; // }); // opts.data.tags = tags.length ? tags : null; // @posts var posts = (opts.data.posts || []).sort(function(a, b) { return b.date > a.date; }); posts = posts.map(expand); opts.data.posts = posts.length ? posts : null; // @current var current = file.meta('matter'); current = expand(current); opts.data.current = current; // @next & @prev var relatives = _.map(opts.data.posts, function(post) { return post.relative; }); var index = relatives && relatives.indexOf(opts.data.current.relative); var next = index >= 0 ? opts.data.posts[index - 1] : null; var prev = index >= 0 ? opts.data.posts[index + 1] : null; opts.data.next = next; opts.data.prev = prev; // @navigation var navigation = _.map(opts.data.site.navigation || [], function(value, key) { return { title: key, path: value }; }); navigation.forEach(function(entry) { var path1 = l2p(location).replace(/\/+$/, ''); var path2 = entry.path.replace(/index.html$/, '').replace(/\/+$/, ''); if (path1 === path2) { entry.current = true; } }); opts.data.navigation = navigation.length ? navigation : null; return opts; function expand(post) { var _post = _.clone(post); if (_post.author) { _post.author = authors[_post.author]; } if (_post.tags) { _post.tags = _.isArray(_post.tags) ? _post.tags : [_post.tags] _post.tags = _post.tags.map(function(tag) { return tags[tag]; }); } return _post; } } module.exports = prepareOptions;