forked from salaros/responsive-html-email-template
-
Notifications
You must be signed in to change notification settings - Fork 0
/
gulpfile.js
105 lines (95 loc) · 3.11 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
var gulp = require('gulp'),
sass = require("gulp-sass"),
prettify = require('gulp-jsbeautifier'),
autoprefixer = require('gulp-autoprefixer'),
rename = require('gulp-rename'),
sourcemaps = require('gulp-sourcemaps'),
inlinesource = require('gulp-inline-source'),
inlineImages = require('gulp-inline-images'),
inlineCss = require('gulp-inline-css'),
twig = require('gulp-twig'),
yaml = require('js-yaml'),
fs = require('fs'),
Path = require('path');
gulp.task('default', [ 'html:prettify' ]);
// Tidy up resulting HTML files
gulp.task('html:prettify', [ 'html:inline:css' ], function () {
return gulp.src('./*.html')
.pipe(prettify({
indent_char: " ",
indent_size: 2,
selector_separator_newline: true,
end_with_newline: true,
}))
.pipe(gulp.dest('./'));;
});
// Inline CSS rules in HTML file
gulp.task('html:inline:css', [ 'html:inline:images', 'html:inline:sources' ], function () {
return gulp.src([
'./*.html',
'!./*-inlined.html'
])
.pipe(inlineCss({
preserveMediaQueries: true
}))
.pipe(rename({
suffix: "-inlined",
}))
.pipe(gulp.dest('./'));
});
// Include base64-encoded images
gulp.task('html:inline:images', [ 'twig:compile' ], function () {
return gulp.src('./src/*.html')
.pipe(inlineImages({/* options */}))
.pipe(gulp.dest('./'));
});
// Inline external JavaScript and CSS files
gulp.task('html:inline:sources', [ 'twig:compile', 'scss:compile' ], function () {
return gulp.src('./src/*.html')
.pipe(inlinesource({
compress: false,
pretty: true
}))
.pipe(gulp.dest('./'));
});
// SCSS to CSS compilation
gulp.task('scss:compile', function () {
return gulp.src("./scss/*.scss")
.pipe(sourcemaps.init())
.pipe(sass().on('error', sass.logError))
.pipe(autoprefixer({
browsers: [ 'last 2 versions' ],
cascade: false
}))
.pipe(gulp.dest("css/"))
.pipe(sourcemaps.write("./", {
addComment: false
}))
.pipe(gulp.dest("css/"));
});
function getFilenames(path, extension) {
return fs
.readdirSync(path)
.filter(item => fs.statSync(Path.join(path, item)).isFile() &&
(extension === undefined || Path.extname(item) === extension))
.sort();
}
gulp.task('twig:compile', function () {
var yamlFiles = getFilenames('./src', '.yml');
if (yamlFiles === undefined || yamlFiles.length <= 0) return; // nothing to do!
yamlFiles.map(function(yamlFile) {
var suffix = '-' + yamlFile.replace('.yml', ''),
emailData = yaml.safeLoad(fs.readFileSync('./src/' + yamlFile, 'utf8'));
return gulp.src('./src/email.twig')
.pipe(twig({
data: emailData
}))
.pipe(rename({
suffix: suffix,
}))
.pipe(gulp.dest('./src'));
});
});
gulp.task('watch', function () {
gulp.watch('scss/**/*.scss', [ 'scss:compile' ]);
});