import gulp from 'gulp';
import plugins from 'gulp-load-plugins';
import browser from 'browser-sync';
-import mq from 'media-query-extractor';
import rimraf from 'rimraf';
import panini from 'panini';
import yargs from 'yargs';
import lazypipe from 'lazypipe';
import inky from 'inky';
+import fs from 'fs';
+import siphon from 'siphon-media-query';
const $ = plugins();
// Look for the --production flag
const PRODUCTION = !!(yargs.argv.production);
-// Only inline if the --production flag is enabled
-var buildTasks = [clean, pages, sass, images];
-if (PRODUCTION) buildTasks.push(inline);
-
// Build the "dist" folder by running all of the above tasks
gulp.task('build',
- gulp.series.apply(gulp, buildTasks));
+ gulp.series(clean, pages, sass, images, inline));
// Build emails, run the server, and watch for file changes
gulp.task('default',
// Then parse using Inky templates
function pages() {
return gulp.src('src/pages/**/*.html')
- .pipe(inky())
.pipe(panini({
root: 'src/pages',
layouts: 'src/layouts',
partials: 'src/partials'
}))
+ .pipe(inky())
.pipe(gulp.dest('dist'));
}
function sass() {
return gulp.src('src/assets/scss/app.scss')
.pipe($.if(!PRODUCTION, $.sourcemaps.init()))
- .pipe($.sass().on('error', $.sass.logError))
+ .pipe($.sass({
+ includePaths: ['node_modules/foundation-emails/scss']
+ }).on('error', $.sass.logError))
.pipe($.if(!PRODUCTION, $.sourcemaps.write()))
.pipe(gulp.dest('dist/css'));
}
// Inline CSS and minify HTML
function inline() {
return gulp.src('dist/**/*.html')
- .pipe(inliner({
- css: 'dist/css/app.css'
- }))
+ .pipe($.if(PRODUCTION, inliner('dist/css/app.css')))
.pipe(gulp.dest('dist'));
}
// Watch for file changes
function watch() {
- gulp.watch('src/pages/**/*.html', gulp.series(pages, browser.reload));
- gulp.watch(['src/layouts/**/*', 'src/partials/**/*'], gulp.series(resetPages, pages, browser.reload));
- gulp.watch(['../scss/**/*.scss', 'src/assets/scss/**/*.scss'], gulp.series(sass, browser.reload));
+ gulp.watch('src/pages/**/*.html', gulp.series(pages, inline, browser.reload));
+ gulp.watch(['src/layouts/**/*', 'src/partials/**/*'], gulp.series(resetPages, pages, inline, browser.reload));
+ gulp.watch(['../scss/**/*.scss', 'src/assets/scss/**/*.scss'], gulp.series(sass, pages, inline, browser.reload));
gulp.watch('src/img/**/*', gulp.series(images, browser.reload));
}
// Inlines CSS into HTML, adds media query CSS into the <style> tag of the email, and compresses the HTML
-function inliner(options) {
- var cssPath = options.css;
- var cssMqPath = cssPath.replace(/\.css$/, '-mq.css');
-
- // Extracts media query-specific CSS into a separate file
- mq(cssPath, cssMqPath, [
- 'only screen and (max-width: 580px)|' + cssMqPath
- ]);
+function inliner(css) {
+ var css = fs.readFileSync(css).toString();
+ var mqCss = siphon(css);
var pipe = lazypipe()
- .pipe($.inlineCss)
- .pipe($.inject, gulp.src(cssMqPath), {
- transform: function(path, file) {
- return '<style>\n' + file.contents.toString() + '\n</style>';
- }
+ .pipe($.inlineCss, {
+ applyStyleTags: false
})
+ .pipe($.injectString.replace, '<!-- <style> -->', `<style>${mqCss}</style>`)
.pipe($.htmlmin, {
collapseWhitespace: true,
minifyCSS: true
{
"name": "foundation-emails-template",
- "version": "0.0.1",
+ "version": "1.0.0",
"description": "Basic template for a Foundation for Emails project.",
- "main": "gulpfile.js",
+ "repository": "zurb/foundation-emails-template",
+ "main": "gulpfile.babel.js",
"scripts": {
"start": "gulp",
"build": "gulp --production"
},
"author": "ZURB <foundation@zurb.com>",
"license": "MIT",
+ "dependencies": {
+ "foundation-emails": "2.0.0-rc.3"
+ },
"devDependencies": {
"babel-core": "^6.3.26",
"babel-preset-es2015": "^6.3.13",
"gulp-htmlmin": "^1.1.1",
"gulp-if": "^2.0.0",
"gulp-imagemin": "^2.4.0",
- "gulp-inject": "^3.0.0",
+ "gulp-inject-string": "^1.1.0",
"gulp-inline-css": "^3.0.0",
"gulp-load-plugins": "^1.1.0",
"gulp-sass": "^2.1.0",
"gulp-sourcemaps": "^1.6.0",
- "gulp-webserver": "^0.9.1",
- "inky": "^1.2.1",
+ "inky": "^1.2.0",
"lazypipe": "^1.0.1",
- "media-query-extractor": "^0.1.1",
- "panini": "^1.1.1",
+ "panini": "^1.2.0",
"rimraf": "^2.3.3",
- "yargs": "^3.9.0"
+ "siphon-media-query": "^1.0.0",
+ "yargs": "^4.1.0"
}
}