Skip to content

Commit 1f34882

Browse files
authored
Merge pull request #1007 from CDLUC3/develop
Merge develop into main
2 parents dd95091 + 0310572 commit 1f34882

6 files changed

Lines changed: 7788 additions & 13135 deletions

File tree

gulpfile.js

Lines changed: 107 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@
66
// ##### Gulp Tasks #####
77

88
var { 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');
1112
var browserSync = require('browser-sync');
1213
var server = browserSync.create();
14+
var through2 = require('through2');
1315
var useref = require('gulp-useref');
1416
var uglify = require('gulp-uglify');
1517
var gulpIf = require('gulp-if');
1618
var cleanCSS = require('gulp-clean-css');
17-
var imagemin = require('gulp-imagemin');
18-
var cache = require('gulp-cache');
1919
var del = require('del');
2020
var modernizr = require('gulp-modernizr');
2121
var stylelint = require('stylelint');
@@ -25,6 +25,8 @@ var ssi = require('browsersync-ssi');
2525
var postcss = require('gulp-postcss');
2626
var assets = require('postcss-assets');
2727
var 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

3840
exports.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

Comments
 (0)