-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathload-templates.js
More file actions
65 lines (51 loc) · 1.48 KB
/
load-templates.js
File metadata and controls
65 lines (51 loc) · 1.48 KB
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
// modules > native
var fs = require('fs');
var p = require('path');
// modules > 3rd-party
var chalk = require('chalk');
var debug = require('debug')('epiphany:loaders');
var dust = require('dustjs-linkedin');
var warningPrefix = '[' + chalk.yellow('!!') + '] ';
var isWin = /^win/.test(process.platform);
module.exports = function(directory) {
function recurse(file) {
if(fs.statSync(file).isDirectory()) {
_.each(fs.readdirSync(file), function(f) {
recurse(p.join(file, f));
});
} else if(p.extname(file) === '.dust') {
var src = fs.readFileSync(file, { encoding: 'utf8' });
var name = p.relative(directory, file).slice(0,-5);
if(isWin)
name = name.split('\\').join('/');
var compiled;
try {
compiled = dust.compile(src, name);
} catch(e) {
console.log('error in template: ' + file);
console.log(e);
return;
}
/* use regex to determine the names of any templates the current template
* includes
*/
var dependencies = compiled.match(/\.p\("(.*?)"/g);
if(dependencies) {
dependencies = dependencies.map(function(value) {
return value.slice(4, -1);
});
}
if(dust.templates[name]) debug(warningPrefix + 'Overriting template "' + name + '".');
dust.templates[name] = {
compiled: compiled,
dependencies: dependencies
};
dust.loadSource(compiled);
}
}
dust.templates = {};
if(fs.existsSync(directory))
recurse(directory);
else
throw new Error('Template directory does not exist!');
};