2020-05-09 14:45:23 +00:00
|
|
|
// @ts-ignore
|
|
|
|
const path = require("path");
|
|
|
|
|
|
|
|
// Globs for non-ui resources
|
2020-05-12 07:56:11 +00:00
|
|
|
const nonImageResourcesGlobs = ["../res/**/*.woff2", "../res/*.ico", "../res/**/*.webm"];
|
2020-05-09 14:45:23 +00:00
|
|
|
|
|
|
|
// Globs for ui resources
|
2020-06-01 19:14:12 +00:00
|
|
|
const imageResourcesGlobs = ["../res/**/*.png", "../res/**/*.svg", "../res/**/*.jpg", "../res/**/*.gif"];
|
2020-05-09 14:45:23 +00:00
|
|
|
|
|
|
|
function gulptasksImageResources($, gulp, buildFolder) {
|
|
|
|
// Lossless options
|
|
|
|
const minifyImagesOptsLossless = () => [
|
2020-06-13 15:59:25 +00:00
|
|
|
$.imageminJpegtran({
|
2020-05-09 14:45:23 +00:00
|
|
|
progressive: true,
|
|
|
|
}),
|
|
|
|
$.imagemin.svgo({}),
|
|
|
|
$.imagemin.optipng({
|
|
|
|
optimizationLevel: 3,
|
|
|
|
}),
|
2020-06-01 19:14:12 +00:00
|
|
|
$.imageminGifsicle({
|
|
|
|
optimizationLevel: 3,
|
|
|
|
colors: 128,
|
|
|
|
}),
|
2020-05-09 14:45:23 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
// Lossy options
|
|
|
|
const minifyImagesOpts = () => [
|
2020-06-13 15:59:25 +00:00
|
|
|
$.imagemin.mozjpeg({
|
2020-05-09 14:45:23 +00:00
|
|
|
quality: 80,
|
|
|
|
maxMemory: 1024 * 1024 * 8,
|
|
|
|
}),
|
|
|
|
$.imagemin.svgo({}),
|
|
|
|
$.imageminPngquant({
|
|
|
|
speed: 1,
|
|
|
|
strip: true,
|
|
|
|
quality: [0.65, 0.9],
|
|
|
|
dithering: false,
|
|
|
|
verbose: false,
|
|
|
|
}),
|
|
|
|
$.imagemin.optipng({
|
|
|
|
optimizationLevel: 3,
|
|
|
|
}),
|
2020-06-01 19:14:12 +00:00
|
|
|
$.imageminGifsicle({
|
|
|
|
optimizationLevel: 3,
|
|
|
|
colors: 128,
|
|
|
|
}),
|
2020-05-09 14:45:23 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
// Where the resources folder are
|
|
|
|
const resourcesDestFolder = path.join(buildFolder, "res");
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Determines if an atlas must use lossless compression
|
|
|
|
* @param {string} fname
|
|
|
|
*/
|
|
|
|
function fileMustBeLossless(fname) {
|
|
|
|
return fname.indexOf("lossless") >= 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/////////////// ATLAS /////////////////////
|
|
|
|
|
|
|
|
// Copies the atlas to the final destination
|
|
|
|
gulp.task("imgres.atlas", () => {
|
|
|
|
return gulp
|
|
|
|
.src(["../res_built/atlas/*.png"])
|
|
|
|
.pipe($.cached("imgres.atlas"))
|
|
|
|
.pipe(gulp.dest(resourcesDestFolder));
|
|
|
|
});
|
|
|
|
|
|
|
|
// Copies the atlas to the final destination after optimizing it (lossy compression)
|
|
|
|
gulp.task("imgres.atlasOptimized", () => {
|
|
|
|
return gulp
|
|
|
|
.src(["../res_built/atlas/*.png"])
|
|
|
|
.pipe($.cached("imgres.atlasOptimized"))
|
|
|
|
.pipe(
|
|
|
|
$.if(
|
|
|
|
fname => fileMustBeLossless(fname.history[0]),
|
|
|
|
$.imagemin(minifyImagesOptsLossless()),
|
|
|
|
$.imagemin(minifyImagesOpts())
|
|
|
|
)
|
|
|
|
)
|
|
|
|
.pipe(gulp.dest(resourcesDestFolder));
|
|
|
|
});
|
|
|
|
|
|
|
|
//////////////////// RESOURCES //////////////////////
|
|
|
|
|
|
|
|
// Copies all resources which are no ui resources
|
|
|
|
gulp.task("imgres.copyNonImageResources", () => {
|
|
|
|
return gulp
|
|
|
|
.src(nonImageResourcesGlobs)
|
|
|
|
.pipe($.cached("imgres.copyNonImageResources"))
|
|
|
|
.pipe(gulp.dest(resourcesDestFolder));
|
|
|
|
});
|
|
|
|
|
|
|
|
// Copies all ui resources
|
|
|
|
gulp.task("imgres.copyImageResources", () => {
|
|
|
|
return gulp
|
|
|
|
.src(imageResourcesGlobs)
|
|
|
|
.pipe($.cached("copyImageResources"))
|
|
|
|
.pipe(gulp.dest(path.join(resourcesDestFolder)));
|
|
|
|
});
|
|
|
|
|
|
|
|
// Copies all ui resources and optimizes them
|
|
|
|
gulp.task("imgres.copyImageResourcesOptimized", () => {
|
|
|
|
return gulp
|
|
|
|
.src(imageResourcesGlobs)
|
|
|
|
.pipe($.cached("imgres.copyImageResourcesOptimized"))
|
|
|
|
.pipe(
|
|
|
|
$.if(
|
|
|
|
fname => fileMustBeLossless(fname.history[0]),
|
|
|
|
$.imagemin(minifyImagesOptsLossless()),
|
|
|
|
$.imagemin(minifyImagesOpts())
|
|
|
|
)
|
|
|
|
)
|
|
|
|
.pipe(gulp.dest(path.join(resourcesDestFolder)));
|
|
|
|
});
|
|
|
|
|
|
|
|
// Copies all resources and optimizes them
|
2020-06-13 18:44:00 +00:00
|
|
|
gulp.task(
|
|
|
|
"imgres.allOptimized",
|
|
|
|
gulp.parallel(
|
|
|
|
"imgres.atlasOptimized",
|
|
|
|
"imgres.copyNonImageResources",
|
|
|
|
"imgres.copyImageResourcesOptimized"
|
2020-05-09 14:45:23 +00:00
|
|
|
)
|
|
|
|
);
|
|
|
|
|
|
|
|
// Cleans up unused images which are instead inline into the css
|
|
|
|
gulp.task("imgres.cleanupUnusedCssInlineImages", () => {
|
|
|
|
return gulp
|
|
|
|
.src(
|
|
|
|
[
|
|
|
|
path.join(buildFolder, "res", "ui", "**", "*.png"),
|
|
|
|
path.join(buildFolder, "res", "ui", "**", "*.jpg"),
|
|
|
|
path.join(buildFolder, "res", "ui", "**", "*.svg"),
|
2020-06-01 19:14:12 +00:00
|
|
|
path.join(buildFolder, "res", "ui", "**", "*.gif"),
|
2020-05-09 14:45:23 +00:00
|
|
|
],
|
|
|
|
{ read: false }
|
|
|
|
)
|
|
|
|
.pipe($.if(fname => fname.history[0].indexOf("noinline") < 0, $.clean({ force: true })));
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
nonImageResourcesGlobs,
|
|
|
|
imageResourcesGlobs,
|
|
|
|
gulptasksImageResources,
|
|
|
|
};
|