66// ##### Gulp Tasks #####
77
88var { src, dest, watch, series, parallel } = require ( 'gulp' ) ;
9- var sass = require ( 'gulp-sass' ) ( require ( 'node-sass' ) ) ;
10- var autoprefixer = require ( 'gulp-autoprefixer' ) ;
9+ var path = require ( 'path' ) ;
10+ var sass = require ( 'gulp-sass' ) ( require ( 'sass' ) ) ;
11+ var 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 imagemin = require ( 'gulp-imagemin' ) ;
18- var cache = require ( 'gulp-cache' ) ;
1919var del = require ( 'del' ) ;
2020var modernizr = require ( 'gulp-modernizr' ) ;
2121var stylelint = require ( 'stylelint' ) ;
@@ -25,6 +25,8 @@ var ssi = require('browsersync-ssi');
2525var postcss = require ( 'gulp-postcss' ) ;
2626var assets = require ( 'postcss-assets' ) ;
2727var ghPages = require ( 'gulp-gh-pages' ) ;
28+ var sharp = require ( 'sharp' ) ;
29+ var optimizeSvg = require ( 'svgo' ) . optimize ;
2830
2931// Public Tasks:
3032
@@ -37,29 +39,45 @@ exports.upload = githubpages;
3739
3840exports . modernizr = runmodernizr ;
3941
40- // Process scss to css, add sourcemaps, inline font & image files into css:
42+ exports . scsslint_legacy = scsslint_legacy ;
4143
42- sass . compiler = require ( 'node-sass' ) ;
44+ // Process scss to css, add sourcemaps, inline font & image files into css:
4345
44- function scss ( cb ) {
46+ sass . compiler = require ( 'sass' ) ;
47+
48+ // Temporary deprecation-noise reduction while legacy SCSS is still being modernized.
49+ var dartSassOptions = {
50+ quietDeps : true ,
51+ silenceDeprecations : [
52+ 'legacy-js-api' ,
53+ 'import' ,
54+ 'global-builtin' ,
55+ 'color-functions' ,
56+ 'slash-div' ,
57+ 'if-function'
58+ ]
59+ } ;
60+
61+ function scss ( ) {
4562 return src ( 'dev/scss/*.scss' , { sourcemaps : true } )
46- . pipe ( sass ( ) . on ( 'error' , sass . logError ) )
47- . pipe ( autoprefixer ( 'last 2 versions' ) )
48- . pipe ( postcss ( [ assets ( {
63+ . pipe ( sass ( dartSassOptions ) . on ( 'error' , sass . logError ) )
64+ . pipe ( postcss ( [ autoprefixer ( {
65+ overrideBrowserslist : [ 'last 2 versions' ]
66+ } ) , assets ( {
4967 loadPaths : [ 'fonts/' , 'images/' ]
5068 } ) ] ) )
5169 . pipe ( dest ( 'dev/css' , { sourcemaps : 'sourcemaps' } ) )
5270 . pipe ( browserSync . stream ( ) ) ;
53- cb ( ) ;
5471}
5572
56- function scss_legacy ( cb ) {
73+ function scss_legacy ( ) {
5774 return src ( 'dev/legacy-scss/*.scss' , { sourcemaps : true } )
58- . pipe ( sass ( ) . on ( 'error' , sass . logError ) )
59- . pipe ( autoprefixer ( 'last 2 versions' ) )
75+ . pipe ( sass ( dartSassOptions ) . on ( 'error' , sass . logError ) )
76+ . pipe ( postcss ( [ autoprefixer ( {
77+ overrideBrowserslist : [ 'last 2 versions' ]
78+ } ) ] ) )
6079 . pipe ( dest ( 'dev/legacy-scss/css' , { sourcemaps : 'sourcemaps' } ) )
6180 . pipe ( browserSync . stream ( ) ) ;
62- cb ( ) ;
6381}
6482
6583// Watch scss, html, and js and reload browser if any changes:
@@ -94,113 +112,159 @@ function start(cb) {
94112
95113// Minify and uglify css and js from paths within useref comment tags in html:
96114
97- function assemble ( cb ) {
115+ function assemble ( ) {
98116 return src ( [ 'dev/**/*.html' , '!dev/includes/*' , 'dev/css/*.css' ] )
99117 . pipe ( gulpIf ( '*.js' , uglify ( ) ) )
100118 . pipe ( useref ( ) )
101119 . pipe ( lbInclude ( ) ) // parse <!--#include file="" --> statements
102120 . pipe ( dest ( 'ui_library' ) )
103- cb ( ) ;
104121}
105122
106- function minifyCss ( cb ) {
123+ function minifyCss ( ) {
107124 return src ( [ 'dev/css/*.css' ] )
108125 . pipe ( cleanCSS ( { debug : true , level : 2 } , ( details ) => {
109126 console . log ( `${ details . name } : ${ details . stats . originalSize } ` ) ;
110127 console . log ( `${ details . name } : ${ details . stats . minifiedSize } ` ) ;
111128 } ) )
112129 . pipe ( dest ( 'ui_library' ) )
113- cb ( ) ;
114130}
115131
116132// Compress images and copy from dev/images/ into dev/ui_library/images/:
117133
118- function copyimages ( cb ) {
134+ function copyimages ( ) {
119135 return src ( 'dev/images/**/*.+(png|jpg|jpeg|gif|svg)' )
120- . pipe ( cache ( imagemin ( {
121- interlaced : true
122- } ) ) )
123- . pipe ( dest ( 'ui_library/images' ) )
124- cb ( ) ;
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' ) ) ;
125198}
126199
127200// Copy the minified css to the place it actually needs to go in order to function
128- function copyCSS ( cb ) {
201+ function copyCSS ( ) {
129202 return src ( 'ui_library/css/main2.min.css' )
130203 . pipe ( dest ( 'static_src/stylesheets' ) ) ;
131- cb ( ) ;
132204}
133205
134206// Copy the minified js to the place it actually needs to go in order to function
135- function copyJS ( cb ) {
207+ function copyJS ( ) {
136208 return src ( 'ui_library/js/main2.min.js' )
137209 . pipe ( dest ( 'static_src/javascripts' ) ) ;
138- cb ( ) ;
139210}
140211
141212// Copy font files from dev/fonts/ into dev/ui_library/fonts/:
142213
143- function fonts ( cb ) {
214+ function fonts ( ) {
144215 return src ( 'dev/fonts/**/*' )
145216 . pipe ( dest ( 'ui_library/fonts' ) )
146- cb ( ) ;
147217}
148218
149219// Delete ui_library directory at start of build process:
150220
151- function clean ( cb ) {
221+ function clean ( ) {
152222 return del ( 'ui_library' ) ;
153- cb ( ) ;
154223}
155224
156225// Lint Sass:
157226
158- function scsslint ( cb ) {
227+ function scsslint ( ) {
159228 return src ( [ 'dev/scss/*.scss' , '!dev/scss/vendor/*.scss' ] )
160229 . pipe ( stylelint ( {
161230 reporters : [
162231 { formatter : 'string' , console : true }
163232 ]
164233 } ) ) ;
165- cb ( ) ;
166234}
167235
168- function scsslint_legacy ( cb ) {
236+ function scsslint_legacy ( ) {
169237 return src ( [ 'dev/legacy-scss/*.scss' , '!dev/legacy-scss/vendor/*.scss' ] )
170238 . pipe ( stylelint ( {
171239 reporters : [
172240 { formatter : 'string' , console : true }
173241 ]
174242 } ) ) ;
175- cb ( ) ;
176243}
177244
178245
179246
180247// Lint JavaScript:
181248
182- function jslint ( cb ) {
249+ function jslint ( ) {
183250 return src ( [ 'dev/js/**/*.js' , '!dev/js/vendor/*.js' ] )
184251 . pipe ( jshint ( { esversion : 6 } ) )
185252 . pipe ( jshint . reporter ( 'default' ) )
186- cb ( ) ;
187253}
188254
189255// Upload ui_library build to GitHub Pages:
190256
191- function githubpages ( cb ) {
257+ function githubpages ( ) {
192258 return src ( './ui_library/**/*' )
193259 . pipe ( ghPages ( ) )
194- cb ( ) ;
195260}
196261
197262// Run "gulp modernizr" to build a custom modernizr file based off of classes found in CSS:
198263
199- function runmodernizr ( cb ) {
264+ function runmodernizr ( ) {
200265 return src ( 'dev/css/main2.css' ) // where modernizr will look for classes
201266 . pipe ( modernizr ( {
202267 options : [ 'setClasses' ] ,
203268 dest : 'dev/js/modernizr-custombuild.js'
204269 } ) )
205- cb ( ) ;
206270}
0 commit comments