Files
dev-chiefworks b085356c99 first commit
2022-09-25 15:25:10 -04:00

447 lines
12 KiB
JavaScript

'use strict';
/* Paths */
var path = {
dev: {
html: 'dev/',
js: 'dev/assets/js/',
css: 'dev/assets/css/',
style: 'dev/assets/css/',
fontcss: 'dev/assets/css/fonts/',
colorcss: 'dev/assets/css/colors/',
img: 'dev/assets/img/',
fonts: 'dev/assets/fonts/',
media: 'dev/assets/media/',
php: 'dev/assets/php/'
},
dist: {
html: 'dist/',
js: 'dist/assets/js/',
css: 'dist/assets/css/',
style: 'dist/assets/css/',
fontcss: 'dist/assets/css/fonts/',
colorcss: 'dist/assets/css/colors/',
img: 'dist/assets/img/',
fonts: 'dist/assets/fonts/',
media: 'dist/assets/media/',
php: 'dist/assets/php/'
},
src: {
html: ['src/**/*.html', '!src/partials/**/*.html', '!src/assets/php/**/*.html'],
partials: 'src/partials/',
js: 'src/assets/js/',
vendorjs: 'src/assets/js/vendor/*.*',
themejs: 'src/assets/js/theme.js',
style: 'src/assets/scss/style.scss',
fontcss: 'src/assets/scss/fonts/*.*',
colorcss: ['src/assets/scss/colors/*.scss', 'src/assets/scss/theme/_colors.scss'],
vendorcss: 'src/assets/css/vendor/*.*',
img: 'src/assets/img/**/*.*',
fonts: 'src/assets/fonts/**/*.*',
media: 'src/assets/media/**/*.*',
php: 'src/assets/php/**/*.*'
},
watch: {
html: ['src/**/*.html', '!src/assets/php/**/*.html'],
partials: 'src/partials/**/*.*',
themejs: 'src/assets/js/theme.js',
vendorjs: 'src/assets/js/vendor/*.*',
css: ['src/assets/scss/**/*.scss', '!src/assets/scss/fonts/*.scss', '!src/assets/scss/colors/*.scss', '!src/assets/scss/theme/_colors.scss'],
fontcss: 'src/assets/scss/fonts/*.scss',
colorcss: ['src/assets/scss/colors/*.scss', 'src/assets/scss/theme/_colors.scss'],
vendorcss: 'src/assets/css/vendor/*.*',
img: 'src/assets/img/**/*.*',
fonts: 'src/assets/fonts/**/*.*',
media: 'src/assets/media/**/*.*',
php: 'src/assets/php/',
user: 'src/assets/scss/_user-variables.scss'
},
clean: {
dev: 'dev/*',
dist: 'dist/*',
}
};
/* Include gulp and plugins */
var gulp = require('gulp'),
webserver = require('browser-sync'),
reload = webserver.reload,
plumber = require('gulp-plumber'),
sourcemaps = require('gulp-sourcemaps'),
sass = require('gulp-sass')(require('sass')),
sassUnicode = require('gulp-sass-unicode'),
autoprefixer = require('gulp-autoprefixer'),
cleanCSS = require('gulp-clean-css'),
uglify = require('gulp-uglify'),
cache = require('gulp-cache'),
imagemin = require('gulp-imagemin'),
jpegrecompress = require('imagemin-jpeg-recompress'),
pngquant = require('imagemin-pngquant'),
del = require('del'),
fileinclude = require('gulp-file-include'),
beautify = require('gulp-beautify'),
minify = require('gulp-minify'),
concat = require('gulp-concat'),
jsImport = require('gulp-js-import'),
newer = require('gulp-newer'),
replace = require('gulp-replace'),
touch = require('gulp-touch-cmd');
/* Server */
var config = {
server: {
baseDir: './dist'
},
ghostMode: false, // By setting true, clicks, scrolls and form inputs on any device will be mirrored to all others
notify: false
};
/* Tasks */
// Start the server
gulp.task('webserver', function () {
webserver(config);
});
// Compile html
gulp.task('html:dev', function () {
return gulp.src(path.src.html)
.pipe(newer({ dest: path.dev.html, extra: path.watch.partials }))
.pipe(plumber())
.pipe(fileinclude({ prefix: '@@', basepath: path.src.partials }))
.pipe(beautify.html({ indent_size: 2, preserve_newlines: false }))
.pipe(gulp.dest(path.dev.html))
.pipe(touch())
});
gulp.task('html:dist', function () {
return gulp.src(path.src.html)
.pipe(newer({ dest: path.dist.html, extra: path.watch.partials }))
.pipe(plumber())
.pipe(fileinclude({ prefix: '@@', basepath: path.src.partials }))
.pipe(beautify.html({ indent_size: 2, preserve_newlines: false }))
.pipe(gulp.dest(path.dist.html))
.pipe(touch())
.on('end', () => { reload(); });
});
// Compile theme styles
gulp.task('css:dev', function () {
return gulp.src(path.src.style)
.pipe(newer(path.dev.style))
.pipe(plumber())
.pipe(sass()
.on('error', function (err) {
sass.logError(err);
this.emit('end');
})
)
.pipe(sassUnicode())
.pipe(autoprefixer())
.pipe(beautify.css({ indent_size: 2, preserve_newlines: false, newline_between_rules: false }))
.pipe(gulp.dest(path.dev.style))
.pipe(touch())
});
gulp.task('css:dist', function () {
return gulp.src(path.src.style)
.pipe(newer(path.dist.style))
.pipe(plumber())
.pipe(sourcemaps.init())
.pipe(sass()
.on('error', function (err) {
sass.logError(err);
this.emit('end');
})
)
.pipe(sassUnicode())
.pipe(autoprefixer())
.pipe(cleanCSS())
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest(path.dist.style))
.pipe(touch())
.on('end', () => { reload(); });
});
// Move fonts
gulp.task('fonts:dev', function () {
return gulp.src(path.src.fonts)
.pipe(newer(path.dev.fonts))
.pipe(gulp.dest(path.dev.fonts));
});
gulp.task('fonts:dist', function () {
return gulp.src(path.src.fonts)
.pipe(newer(path.dist.fonts))
.pipe(gulp.dest(path.dist.fonts));
});
// Compile font styles
gulp.task('fontcss:dev', function () {
return gulp.src(path.src.fontcss)
.pipe(newer(path.dev.fontcss))
.pipe(plumber())
.pipe(sass()
.on('error', function (err) {
sass.logError(err);
this.emit('end');
})
)
.pipe(sassUnicode())
.pipe(autoprefixer())
.pipe(cleanCSS())
.pipe(beautify.css({ indent_size: 2, preserve_newlines: false, newline_between_rules: false }))
.pipe(gulp.dest(path.dev.fontcss))
.pipe(touch())
});
gulp.task('fontcss:dist', function () {
return gulp.src(path.src.fontcss)
.pipe(newer(path.dist.fontcss))
.pipe(plumber())
.pipe(sass()
.on('error', function (err) {
sass.logError(err);
this.emit('end');
})
)
.pipe(sassUnicode())
.pipe(autoprefixer())
.pipe(cleanCSS())
.pipe(beautify.css({ indent_size: 2, preserve_newlines: false, newline_between_rules: false }))
.pipe(gulp.dest(path.dist.fontcss))
.pipe(touch())
.on('end', () => { reload(); });
});
// Compile color styles
gulp.task('colorcss:dev', function () {
return gulp.src(path.src.colorcss)
.pipe(plumber())
.pipe(sass()
.on('error', function (err) {
sass.logError(err);
this.emit('end');
})
)
.pipe(sassUnicode())
.pipe(autoprefixer())
.pipe(beautify.css({ indent_size: 2, preserve_newlines: false, newline_between_rules: false }))
.pipe(gulp.dest(path.dev.colorcss))
.pipe(touch())
});
gulp.task('colorcss:dist', function () {
return gulp.src(path.src.colorcss)
.pipe(plumber())
.pipe(sass()
.on('error', function (err) {
sass.logError(err);
this.emit('end');
})
)
.pipe(sassUnicode())
.pipe(autoprefixer())
.pipe(cleanCSS())
.pipe(gulp.dest(path.dist.colorcss))
.pipe(touch())
.on('end', () => { reload(); });
});
// Compile vendor styles
gulp.task('vendorcss:dev', function () {
return gulp.src(path.src.vendorcss)
.pipe(concat('plugins.css'))
.pipe(beautify.css({ indent_size: 2, preserve_newlines: false, newline_between_rules: false }))
.pipe(gulp.dest(path.dev.css))
.pipe(touch())
});
gulp.task('vendorcss:dist', function () {
return gulp.src(path.src.vendorcss)
.pipe(concat('plugins.css'))
.pipe(cleanCSS())
.pipe(gulp.dest(path.dist.css))
.pipe(touch())
.on('end', () => { reload(); });
});
// Compile vendor plugins js
gulp.task('pluginsjs:dev', function() {
return gulp.src([
'node_modules/bootstrap/dist/js/bootstrap.bundle.js',
path.src.vendorjs
])
.pipe(jsImport({hideConsole: true}))
.pipe(concat('plugins.js'))
.pipe(gulp.dest(path.dev.js))
.pipe(touch())
});
gulp.task('pluginsjs:dist', function() {
return gulp.src([
'node_modules/bootstrap/dist/js/bootstrap.bundle.js',
path.src.vendorjs
])
.pipe(jsImport({hideConsole: true}))
.pipe(concat('plugins.js'))
.pipe(uglify())
.pipe(gulp.dest(path.dist.js))
.pipe(touch())
.on('end', () => { reload(); });
});
// Compile theme js
gulp.task('themejs:dev', function () {
return gulp.src(path.src.themejs)
.pipe(gulp.dest(path.dev.js))
.pipe(plumber())
.pipe(gulp.dest(path.dev.js))
});
gulp.task('themejs:dist', function () {
return gulp.src(path.src.themejs)
.pipe(gulp.dest(path.dist.js))
.pipe(plumber())
//.pipe(uglify())
.pipe(gulp.dest(path.dist.js))
.on('end', () => { reload(); });
});
// Move media
gulp.task('media:dev', function () {
return gulp.src(path.src.media)
.pipe(newer(path.dev.media))
.pipe(gulp.dest(path.dev.media));
});
gulp.task('media:dist', function () {
return gulp.src(path.src.media)
.pipe(newer(path.dist.media))
.pipe(gulp.dest(path.dist.media));
});
// Move php
gulp.task('php:dev', function () {
return gulp.src(path.src.php)
.pipe(newer(path.dev.php))
.pipe(gulp.dest(path.dev.php));
});
gulp.task('php:dist', function () {
return gulp.src(path.src.php)
.pipe(newer(path.dist.php))
.pipe(gulp.dest(path.dist.php));
});
// Image processing
gulp.task('image:dev', function () {
return gulp.src(path.src.img)
.pipe(newer(path.dev.img))
.pipe(cache(imagemin([
imagemin.gifsicle({ interlaced: true }),
jpegrecompress({
progressive: true,
max: 90,
min: 80
}),
pngquant(),
imagemin.svgo({ plugins: [{ removeViewBox: false }] })])))
.pipe(gulp.dest(path.dev.img));
});
gulp.task('image:dist', function () {
return gulp.src(path.src.img)
.pipe(newer(path.dist.img))
.pipe(cache(imagemin([
imagemin.gifsicle({ interlaced: true }),
jpegrecompress({
progressive: true,
max: 90,
min: 80
}),
pngquant(),
imagemin.svgo({ plugins: [{ removeViewBox: false }] })
])))
.pipe(gulp.dest(path.dist.img))
.on('end', () => { reload(); });
});
// Remove catalog dev
gulp.task('clean:dev', function () {
return del(path.clean.dev);
});
gulp.task('clean:dist', function () {
return del(path.clean.dist);
});
// Clear cache
gulp.task('cache:clear', function () {
cache.clearAll();
});
// Assembly Dev
gulp.task('build:dev',
gulp.series('clean:dev',
gulp.parallel(
'html:dev',
'css:dev',
'fontcss:dev',
'colorcss:dev',
'vendorcss:dev',
'pluginsjs:dev',
'themejs:dev',
'fonts:dev',
'media:dev',
'php:dev',
'image:dev'
)
)
);
// Assembly Dist
gulp.task('build:dist',
gulp.series('clean:dist',
gulp.parallel(
'html:dist',
'css:dist',
'fontcss:dist',
'colorcss:dist',
'vendorcss:dist',
'pluginsjs:dist',
'themejs:dist',
'fonts:dist',
'media:dist',
'php:dist',
'image:dist'
)
)
);
// Launching tasks when files change
gulp.task('watch', function () {
gulp.watch(path.watch.html, gulp.series('html:dist'));
gulp.watch(path.watch.css, gulp.series('css:dist'));
gulp.watch(path.watch.fontcss, gulp.series('fontcss:dist'));
gulp.watch(path.watch.colorcss, gulp.series('colorcss:dist'));
gulp.watch(path.watch.vendorcss, gulp.series('vendorcss:dist'));
gulp.watch(path.watch.vendorjs, gulp.series('pluginsjs:dist'));
gulp.watch(path.watch.themejs, gulp.series('themejs:dist'));
gulp.watch(path.watch.img, gulp.series('image:dist'));
gulp.watch(path.watch.fonts, gulp.series('fonts:dist'));
gulp.watch(path.watch.media, gulp.series('media:dist'));
gulp.watch(path.watch.php, gulp.series('php:dist'));
gulp.watch(path.watch.user, gulp.series('colorcss:dist'));
});
// Serve
gulp.task('serve', gulp.series(
gulp.parallel('webserver','watch')
));
// Dev
gulp.task('build:dev', gulp.series(
'build:dev'
));
// Dist
gulp.task('build:dist', gulp.series(
'build:dist'
));
// Default tasks
gulp.task('default', gulp.series(
'build:dist',
gulp.parallel('webserver','watch')
));