-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgulpfile.js
152 lines (143 loc) · 5.08 KB
/
gulpfile.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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
var fs, gulp, handlebars, mkdir, path, rename, traceur, web;
fs = require('fs');
gulp = require('gulp');
handlebars = require('handlebars');
mkdir = require('mkdirp');
path = require('path');
rename = require('gulp-rename');
traceur = require('gulp-traceur');
web = require('gulp-webserver');
handlebars.registerHelper('json', JSON.stringify);
gulp.task('default', [
'build-modules',
'build-index',
'build-simple-walkthroughs',
'build-narrated-walkthroughs'
]);
gulp.task('dev', [ 'default', 'serve' ], function () {
gulp.watch('_src/modules/*', [ 'build-modules' ]);
gulp.watch('_src/index.*', [ 'build-index' ]);
gulp.watch([ '_src/simple*', '_src/index.json' ], [ 'build-simple-walkthroughs' ]);
gulp.watch([ '_src/narrated*', '_src/index.json' ], [ 'build-narrated-walkthroughs' ]);
});
gulp.task('serve', function () {
return gulp.src('.')
.pipe(web({
port: 8081
}));
});
gulp.task('build-modules', function () {
return gulp.src('_src/modules/*.js')
.pipe(traceur({
experimental: true,
modules: 'instantiate',
moduleName: true
}))
.pipe(gulp.dest('./assets'));
});
gulp.task('build-index', function (cb) {
fs.readFile('./_src/index.html.hbs', 'utf8', function (sourceerr, source) {
var template = handlebars.compile(source)
fs.readFile('./_src/index.json', function (dataerr, data) {
var i, j, section, features, content;
data = JSON.parse(data);
for (i = 0; i < data.interesting.length; i += 1) {
section = data.interesting[i];
if (section.features) {
for (j = 0; j < section.features.length; j += 1) {
feature = section.features[j];
feature.key = feature.key || feature.title;
feature.filename = feature.filename || 'redirect';
feature.state = feature.state || '';
}
} else {
section.state = section.state || '';
section.filename = section.filename || 'redirect';
}
}
for (i = 0; i < data.boring.length; i += 1) {
section = data.boring[i];
for (j = 0; j < section.features.length; j += 1) {
feature = section.features[j];
if (feature.key === undefined) {
feature.key = feature.title;
}
if (feature.filename === undefined) {
feature.filename = feature.key;
}
}
}
content = template(data).replace('<head>', '<head>\n <meta name="generator" content="Handlebars - do not edit">')
fs.writeFile('./index.html', content, 'utf8', cb);
});
});
});
gulp.task('build-narrated-walkthroughs', function (cb) {
mkdir('./narrated-walkthroughs', function (e) {
if (e) {
return cb(e);
}
fs.readFile('./_src/narrated-walkthrough-template.html.hbs', 'utf8', function (sourceerr, source) {
var template = handlebars.compile(source)
fs.readFile('./_src/index.json', function (dataerr, data) {
var i, j, section, features, content;
data = JSON.parse(data);
try {
for (i = 0; i < data.interesting.length; i += 1) {
section = data.interesting[i];
if(section.features === undefined) {
section.features = [ section ];
}
for (j = 0; j < section.features.length; j += 1) {
feature = section.features[j];
if (feature.filename === undefined) {
continue;
}
if (feature.key === undefined) {
feature.key = feature.title;
}
content = template(feature).replace('<head>', '<head>\n <meta name="generator" content="Handlebars - do not edit">')
fs.writeFileSync(path.join('./narrated-walkthroughs', feature.filename + '.html'), content, 'utf8');
}
}
} catch (e) {
return cb(e);
}
cb();
});
});
})
});
gulp.task('build-simple-walkthroughs', function (cb) {
mkdir('./simple-walkthroughs', function (e) {
if (e) {
return cb(e);
}
fs.readFile('./_src/simple-walkthrough-template.html.hbs', 'utf8', function (sourceerr, source) {
var template = handlebars.compile(source)
fs.readFile('./_src/index.json', function (dataerr, data) {
var i, j, section, features, content;
data = JSON.parse(data);
try {
for (i = 0; i < data.boring.length; i += 1) {
section = data.boring[i];
for (j = 0; j < section.features.length; j += 1) {
feature = section.features[j];
if (feature.key === undefined) {
feature.key = feature.title;
}
if (feature.filename === undefined) {
feature.filename = feature.key;
}
content = template(feature).replace('<head>', '<head>\n <meta name="generator" content="Handlebars - do not edit">')
fs.writeFileSync(path.join('./simple-walkthroughs', feature.filename + '.html'), content, 'utf8');
}
}
} catch (e) {
return cb(e);
}
cb();
});
});
})
});