66// ##### Gulp Tasks #####
77
88var { src, dest, watch, series, parallel } = require ( 'gulp' ) ;
9+ var path = require ( 'path' ) ;
910var sass = require ( 'gulp-sass' ) ( require ( 'sass' ) ) ;
1011var autoprefixer = require ( 'autoprefixer' ) ;
1112var browserSync = require ( 'browser-sync' ) ;
1213var server = browserSync . create ( ) ;
14+ var through2 = require ( 'through2' ) ;
1315var useref = require ( 'gulp-useref' ) ;
1416var uglify = require ( 'gulp-uglify' ) ;
1517var gulpIf = require ( 'gulp-if' ) ;
1618var cleanCSS = require ( 'gulp-clean-css' ) ;
17- var cache = require ( 'gulp-cache' ) ;
1819var del = require ( 'del' ) ;
1920var modernizr = require ( 'gulp-modernizr' ) ;
2021var stylelint = require ( 'stylelint' ) ;
@@ -24,6 +25,8 @@ var ssi = require('browsersync-ssi');
2425var postcss = require ( 'gulp-postcss' ) ;
2526var assets = require ( 'postcss-assets' ) ;
2627var ghPages = require ( 'gulp-gh-pages' ) ;
28+ var sharp = require ( 'sharp' ) ;
29+ var optimizeSvg = require ( 'svgo' ) . optimize ;
2730
2831// Public Tasks:
2932
@@ -36,6 +39,8 @@ exports.upload = githubpages;
3639
3740exports . modernizr = runmodernizr ;
3841
42+ exports . scsslint_legacy = scsslint_legacy ;
43+
3944// Process scss to css, add sourcemaps, inline font & image files into css:
4045
4146sass . compiler = require ( 'sass' ) ;
@@ -53,7 +58,7 @@ var dartSassOptions = {
5358 ]
5459} ;
5560
56- function scss ( cb ) {
61+ function scss ( ) {
5762 return src ( 'dev/scss/*.scss' , { sourcemaps : true } )
5863 . pipe ( sass ( dartSassOptions ) . on ( 'error' , sass . logError ) )
5964 . pipe ( postcss ( [ autoprefixer ( {
@@ -63,18 +68,16 @@ function scss(cb) {
6368 } ) ] ) )
6469 . pipe ( dest ( 'dev/css' , { sourcemaps : 'sourcemaps' } ) )
6570 . pipe ( browserSync . stream ( ) ) ;
66- cb ( ) ;
6771}
6872
69- function scss_legacy ( cb ) {
73+ function scss_legacy ( ) {
7074 return src ( 'dev/legacy-scss/*.scss' , { sourcemaps : true } )
7175 . pipe ( sass ( dartSassOptions ) . on ( 'error' , sass . logError ) )
7276 . pipe ( postcss ( [ autoprefixer ( {
7377 overrideBrowserslist : [ 'last 2 versions' ]
7478 } ) ] ) )
7579 . pipe ( dest ( 'dev/legacy-scss/css' , { sourcemaps : 'sourcemaps' } ) )
7680 . pipe ( browserSync . stream ( ) ) ;
77- cb ( ) ;
7881}
7982
8083// Watch scss, html, and js and reload browser if any changes:
@@ -109,118 +112,159 @@ function start(cb) {
109112
110113// Minify and uglify css and js from paths within useref comment tags in html:
111114
112- function assemble ( cb ) {
115+ function assemble ( ) {
113116 return src ( [ 'dev/**/*.html' , '!dev/includes/*' , 'dev/css/*.css' ] )
114117 . pipe ( gulpIf ( '*.js' , uglify ( ) ) )
115118 . pipe ( useref ( ) )
116119 . pipe ( lbInclude ( ) ) // parse <!--#include file="" --> statements
117120 . pipe ( dest ( 'ui_library' ) )
118- cb ( ) ;
119121}
120122
121- function minifyCss ( cb ) {
123+ function minifyCss ( ) {
122124 return src ( [ 'dev/css/*.css' ] )
123125 . pipe ( cleanCSS ( { debug : true , level : 2 } , ( details ) => {
124126 console . log ( `${ details . name } : ${ details . stats . originalSize } ` ) ;
125127 console . log ( `${ details . name } : ${ details . stats . minifiedSize } ` ) ;
126128 } ) )
127129 . pipe ( dest ( 'ui_library' ) )
128- cb ( ) ;
129130}
130131
131132// Compress images and copy from dev/images/ into dev/ui_library/images/:
132133
133- function copyimages ( cb ) {
134- // gulp-imagemin is ESM; load it lazily so this CommonJS gulpfile can initialize.
135- import ( 'gulp-imagemin' )
136- . then ( ( mod ) => {
137- var imagemin = mod . default || mod ;
138- src ( 'dev/images/**/*.+(png|jpg|jpeg|gif|svg)' )
139- . pipe ( cache ( imagemin ( { interlaced : true } ) ) )
140- . pipe ( dest ( 'ui_library/images' ) )
141- . on ( 'end' , cb )
142- . on ( 'error' , cb ) ;
143- } )
144- . catch ( cb ) ;
134+ function copyimages ( ) {
135+ return src ( 'dev/images/**/*.+(png|jpg|jpeg|gif|svg)' )
136+ . pipe ( through2 . obj ( function ( file , enc , cb ) {
137+ if ( file . isNull ( ) ) {
138+ cb ( null , file ) ;
139+ return ;
140+ }
141+
142+ if ( file . isStream ( ) ) {
143+ cb ( new Error ( 'Streaming images are not supported by copyimages.' ) ) ;
144+ return ;
145+ }
146+
147+ var extension = path . extname ( file . path ) . toLowerCase ( ) ;
148+
149+ if ( extension === '.svg' ) {
150+ try {
151+ var result = optimizeSvg ( file . contents . toString ( enc || 'utf8' ) , {
152+ path : file . path ,
153+ multipass : true ,
154+ plugins : [
155+ {
156+ name : 'preset-default'
157+ }
158+ ]
159+ } ) ;
160+
161+ file . contents = Buffer . from ( result . data ) ;
162+ cb ( null , file ) ;
163+ } catch ( error ) {
164+ cb ( error ) ;
165+ }
166+
167+ return ;
168+ }
169+
170+ if ( extension === '.png' || extension === '.jpg' || extension === '.jpeg' ) {
171+ sharp ( file . contents )
172+ . rotate ( )
173+ [ extension === '.png' ? 'png' : 'jpeg' ] ( extension === '.png'
174+ ? {
175+ compressionLevel : 9 ,
176+ progressive : true
177+ }
178+ : {
179+ mozjpeg : true ,
180+ quality : 82 ,
181+ progressive : true
182+ } )
183+ . toBuffer ( )
184+ . then ( function ( buffer ) {
185+ file . contents = buffer ;
186+ cb ( null , file ) ;
187+ } )
188+ . catch ( function ( error ) {
189+ cb ( error ) ;
190+ } ) ;
191+
192+ return ;
193+ }
194+
195+ cb ( null , file ) ;
196+ } ) )
197+ . pipe ( dest ( 'ui_library/images' ) ) ;
145198}
146199
147200// Copy the minified css to the place it actually needs to go in order to function
148- function copyCSS ( cb ) {
201+ function copyCSS ( ) {
149202 return src ( 'ui_library/css/main2.min.css' )
150203 . pipe ( dest ( 'static_src/stylesheets' ) ) ;
151- cb ( ) ;
152204}
153205
154206// Copy the minified js to the place it actually needs to go in order to function
155- function copyJS ( cb ) {
207+ function copyJS ( ) {
156208 return src ( 'ui_library/js/main2.min.js' )
157209 . pipe ( dest ( 'static_src/javascripts' ) ) ;
158- cb ( ) ;
159210}
160211
161212// Copy font files from dev/fonts/ into dev/ui_library/fonts/:
162213
163- function fonts ( cb ) {
214+ function fonts ( ) {
164215 return src ( 'dev/fonts/**/*' )
165216 . pipe ( dest ( 'ui_library/fonts' ) )
166- cb ( ) ;
167217}
168218
169219// Delete ui_library directory at start of build process:
170220
171- function clean ( cb ) {
221+ function clean ( ) {
172222 return del ( 'ui_library' ) ;
173- cb ( ) ;
174223}
175224
176225// Lint Sass:
177226
178- function scsslint ( cb ) {
227+ function scsslint ( ) {
179228 return src ( [ 'dev/scss/*.scss' , '!dev/scss/vendor/*.scss' ] )
180229 . pipe ( stylelint ( {
181230 reporters : [
182231 { formatter : 'string' , console : true }
183232 ]
184233 } ) ) ;
185- cb ( ) ;
186234}
187235
188- function scsslint_legacy ( cb ) {
236+ function scsslint_legacy ( ) {
189237 return src ( [ 'dev/legacy-scss/*.scss' , '!dev/legacy-scss/vendor/*.scss' ] )
190238 . pipe ( stylelint ( {
191239 reporters : [
192240 { formatter : 'string' , console : true }
193241 ]
194242 } ) ) ;
195- cb ( ) ;
196243}
197244
198245
199246
200247// Lint JavaScript:
201248
202- function jslint ( cb ) {
249+ function jslint ( ) {
203250 return src ( [ 'dev/js/**/*.js' , '!dev/js/vendor/*.js' ] )
204251 . pipe ( jshint ( { esversion : 6 } ) )
205252 . pipe ( jshint . reporter ( 'default' ) )
206- cb ( ) ;
207253}
208254
209255// Upload ui_library build to GitHub Pages:
210256
211- function githubpages ( cb ) {
257+ function githubpages ( ) {
212258 return src ( './ui_library/**/*' )
213259 . pipe ( ghPages ( ) )
214- cb ( ) ;
215260}
216261
217262// Run "gulp modernizr" to build a custom modernizr file based off of classes found in CSS:
218263
219- function runmodernizr ( cb ) {
264+ function runmodernizr ( ) {
220265 return src ( 'dev/css/main2.css' ) // where modernizr will look for classes
221266 . pipe ( modernizr ( {
222267 options : [ 'setClasses' ] ,
223268 dest : 'dev/js/modernizr-custombuild.js'
224269 } ) )
225- cb ( ) ;
226270}
0 commit comments