-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
103 lines (85 loc) · 1.75 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
'use strict';
/**
* # Trabea
*
* A theme engine for [Toga](http://togajs.github.io/) documentation.
*/
var proto,
File = require('vinyl'),
Transform = require('stream').Transform,
handlebars = require('handlebars'),
inherits = require('mtil/function/inherits'),
mixin = require('mtil/object/mixin');
require('./assets/helpers')(handlebars);
require('./assets/partials')(handlebars);
/**
* @class Trabea
* @extends Transform
*
* @constructor
* @param {Object} options
*/
function Trabea(options) {
if (!(this instanceof Trabea)) {
return new Trabea(options);
}
/**
* @property options
* @type {Object}
*/
this.options = mixin({}, this.defaults, options);
/**
* @property data
* @type {Object}
*/
this.data = {};
Transform.call(this, { objectMode: true });
}
proto = inherits(Trabea, Transform);
/**
* Default options.
*
* @property defaults
* @type {Object}
*/
proto.defaults = {
title: 'Documentation'
};
/**
* @method _transform
* @param {Vinyl} file
* @param {String} enc
* @param {Function} cb
*/
proto._transform = function (file, enc, cb) {
var options = this.options,
path = file && file.path,
toga = file && file.toga,
ast = toga && toga.ast;
if (!ast) {
return cb();
}
// Create new path (this is gross)
file.path = file.base + file.path.replace(file.cwd, '') + '.html';
// Create new contents
file.contents = new Buffer(handlebars.partials.index({
title: options.title,
path: path.replace(file.cwd, ''),
ext: path.split('.').pop(),
ast: ast
}));
this.push(file);
cb();
};
/**
* @method _flush
* @param {Function} cb
*/
proto._flush = function (cb) {
this.push(new File({
path: 'data.json',
contents: new Buffer(JSON.stringify(this.data, null, 2))
}));
cb();
};
module.exports = Trabea;