1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 | "use strict";
|
8 |
|
9 | var Handlebars = require('handlebars'),
|
10 | coz = require('coz'),
|
11 | extend = require('extend');
|
12 |
|
13 |
|
14 | function 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 |
|
23 | function Renderer(src) {
|
24 | var s = this;
|
25 | s.src = src;
|
26 | }
|
27 | Renderer.prototype = {
|
28 | |
29 |
|
30 |
|
31 |
|
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 |
|
47 |
|
48 |
|
49 |
|
50 | render: function (data, callback) {
|
51 | var s = this,
|
52 | buds = s.buds(data);
|
53 | coz.render(buds, callback);
|
54 | },
|
55 | |
56 |
|
57 |
|
58 |
|
59 | bindRender: function () {
|
60 | var s = this;
|
61 | return s.render.bind(s);
|
62 | },
|
63 | |
64 |
|
65 |
|
66 |
|
67 | bindBuds: function () {
|
68 | var s = this;
|
69 | return s.buds.bind(s);
|
70 | }
|
71 | };
|
72 |
|
73 | module.exports = budRenderer;
|