-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathcompile.js
executable file
·86 lines (74 loc) · 2.19 KB
/
compile.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
#!/usr/bin/env node
var hogan = require('hogan'),
fs = require('fs'),
path = require('path'),
Q = require('q'),
ncp = require('ncp').ncp,
lecturesDir = './lectures',
compiledDir = './compiled',
layoutFilename = './layout.html.mustache',
requiredForComiple = process.argv.slice(2);
function discoverLectures() {
var deferred = Q.defer();
fs.readdir(lecturesDir, function (error, lectures) {
if (error) {
deferred.reject(new Error(error));
} else {
deferred.resolve(lectures);
}
});
return deferred.promise;
}
function loadLayout() {
var deferred = Q.defer();
fs.readFile(layoutFilename, function (error, data) {
if (error) {
console.error('Too bad: ' + error);
deferred.reject(new Error(error));
} else {
deferred.resolve(hogan.compile(data.toString()));
}
});
return deferred.promise;
}
function compile(layout, template_name) {
var deferred = Q.defer();
fs.readFile(path.join(lecturesDir, template_name), function (error, data) {
if (error) {
deferred.reject(new Error(error));
} else {
deferred.resolve(layout.render({slides: data.toString()}));
}
});
return deferred.promise;
}
loadLayout().then(function (layout) {
discoverLectures().then(function (lectures) {
var templatePattern = process.argv[2],
templates = lectures.filter(function (lecture) {
return RegExp(templatePattern).test(lecture);
});
console.log(templates);
templates.forEach(function (template) {
compile(layout, template).then(function (output) {
var basename = template.split('.')[0],
compiled = path.join(compiledDir, basename);
fs.writeFile(compiled + '.html', output, function (error) {
if (error) {
console.error('Writing file failed: ' );
console.error(error);
}
});
}, function (error) {
console.error('Could not read lecture file ' + template);
console.error(error);
});
});
ncp('html', 'compiled', function (error) {
if (error) {
console.error('Error copying src and img folders: ');
console.error(error);
}
});
});
});