UNPKG

1.65 kBJavaScriptView Raw
1/**
2 * Create an renderable.
3 * @function budRenderer
4 * @returns {function} - Renderable function.
5 */
6
7"use strict";
8
9var Handlebars = require('handlebars'),
10 coz = require('coz'),
11 extend = require('extend');
12
13/** @lends budRenderer */
14function budRenderer(src) {
15 var renderer = new Renderer(src);
16 var render = renderer.bindRender();
17 render.render = render;
18 render.buds = renderer.bindBuds();
19 return render;
20}
21
22
23function Renderer(src) {
24 var s = this;
25 s.src = src;
26}
27Renderer.prototype = {
28 /**
29 * Get buds.
30 * @param {object} data - Data to render.
31 * @returns {Array} - Buds objects.
32 */
33 buds: function (data) {
34 var s = this;
35 return Object.keys(s.src).map(function (pathname) {
36 var src = s.src[pathname];
37 pathname = String(Handlebars.compile(pathname)(data));
38 return extend(src, {
39 path: pathname,
40 mkdirp: true,
41 data: data
42 });
43 });
44 },
45 /**
46 * Render with data.
47 * @param {object} data - Data to render.
48 * @param {function} callback - Callback when done.
49 */
50 render: function (data, callback) {
51 var s = this,
52 buds = s.buds(data);
53 coz.render(buds, callback);
54 },
55 /**
56 * Bind render method.
57 * @returns {function}
58 */
59 bindRender: function () {
60 var s = this;
61 return s.render.bind(s);
62 },
63 /**
64 * Bind buds method.
65 * @returns {function}
66 */
67 bindBuds: function () {
68 var s = this;
69 return s.buds.bind(s);
70 }
71};
72
73module.exports = budRenderer;