Bootstrap (and its dependency popper.js) are now used from npm packages, allowing better version control and custom building of only the required components for both styling and javascript. At this moment the whole styling of bootstrap is included, once the Cloud redesign is over it will be stripped to only the used components.
160 lines
5.1 KiB
JavaScript
160 lines
5.1 KiB
JavaScript
var argv = require('minimist')(process.argv.slice(2));
|
|
var autoprefixer = require('gulp-autoprefixer');
|
|
var chmod = require('gulp-chmod');
|
|
var concat = require('gulp-concat');
|
|
var git = require('gulp-git');
|
|
var gulp = require('gulp');
|
|
var gulpif = require('gulp-if');
|
|
var pug = require('gulp-pug');
|
|
var livereload = require('gulp-livereload');
|
|
var plumber = require('gulp-plumber');
|
|
var rename = require('gulp-rename');
|
|
var sass = require('gulp-sass');
|
|
var sourcemaps = require('gulp-sourcemaps');
|
|
var uglify = require('gulp-uglify');
|
|
var cache = require('gulp-cached');
|
|
|
|
var enabled = {
|
|
uglify: argv.production,
|
|
maps: argv.production,
|
|
failCheck: !argv.production,
|
|
prettyPug: !argv.production,
|
|
cachify: !argv.production,
|
|
cleanup: argv.production,
|
|
};
|
|
|
|
var destination = {
|
|
css: 'cloud/static/assets/css',
|
|
pug: 'cloud/templates',
|
|
js: 'cloud/static/assets/js',
|
|
}
|
|
|
|
var source = {
|
|
pillar: '../pillar/',
|
|
bootstrap: 'node_modules/bootstrap/',
|
|
popper: 'node_modules/popper.js/'
|
|
}
|
|
|
|
|
|
/* CSS */
|
|
gulp.task('styles', function() {
|
|
gulp.src('src/styles/**/*.sass')
|
|
.pipe(gulpif(enabled.failCheck, plumber()))
|
|
.pipe(gulpif(enabled.maps, sourcemaps.init()))
|
|
.pipe(sass({
|
|
outputStyle: 'compressed'}
|
|
))
|
|
.pipe(autoprefixer("last 3 versions"))
|
|
.pipe(gulpif(enabled.maps, sourcemaps.write(".")))
|
|
.pipe(gulp.dest(destination.css))
|
|
.pipe(gulpif(argv.livereload, livereload()));
|
|
});
|
|
|
|
|
|
/* Templates - Pug */
|
|
gulp.task('templates', function() {
|
|
gulp.src('src/templates/**/*.pug')
|
|
.pipe(gulpif(enabled.failCheck, plumber()))
|
|
.pipe(gulpif(enabled.cachify, cache('templating')))
|
|
.pipe(pug({
|
|
pretty: enabled.prettyPug
|
|
}))
|
|
.pipe(gulp.dest(destination.pug))
|
|
.pipe(gulpif(argv.livereload, livereload()));
|
|
// TODO(venomgfx): please check why 'gulp watch' doesn't pick up on .txt changes.
|
|
gulp.src('src/templates/**/*.txt')
|
|
.pipe(gulpif(enabled.failCheck, plumber()))
|
|
.pipe(gulpif(enabled.cachify, cache('templating')))
|
|
.pipe(gulp.dest(destination.pug))
|
|
.pipe(gulpif(argv.livereload, livereload()));
|
|
});
|
|
|
|
|
|
/* Individual Uglified Scripts */
|
|
gulp.task('scripts', function() {
|
|
gulp.src('src/scripts/*.js')
|
|
.pipe(gulpif(enabled.failCheck, plumber()))
|
|
.pipe(gulpif(enabled.cachify, cache('scripting')))
|
|
.pipe(gulpif(enabled.maps, sourcemaps.init()))
|
|
.pipe(gulpif(enabled.uglify, uglify()))
|
|
.pipe(rename({suffix: '.min'}))
|
|
.pipe(gulpif(enabled.maps, sourcemaps.write(".")))
|
|
.pipe(chmod(644))
|
|
.pipe(gulp.dest(destination.js))
|
|
.pipe(gulpif(argv.livereload, livereload()));
|
|
});
|
|
|
|
|
|
/* Collection of scripts in src/scripts/tutti/ to merge into tutti.min.js */
|
|
/* Since it's always loaded, it's only for functions that we want site-wide */
|
|
gulp.task('scripts_concat_tutti', function() {
|
|
gulp.src('src/scripts/tutti/**/*.js')
|
|
.pipe(gulpif(enabled.failCheck, plumber()))
|
|
.pipe(gulpif(enabled.maps, sourcemaps.init()))
|
|
.pipe(concat("tutti.min.js"))
|
|
.pipe(gulpif(enabled.uglify, uglify()))
|
|
.pipe(gulpif(enabled.maps, sourcemaps.write(".")))
|
|
.pipe(chmod(644))
|
|
.pipe(gulp.dest(destination.js))
|
|
.pipe(gulpif(argv.livereload, livereload()));
|
|
});
|
|
|
|
|
|
// Combine all needed Bootstrap JavaScript into a single file.
|
|
gulp.task('scripts_concat_bootstrap', function() {
|
|
|
|
toUglify = [
|
|
source.popper + 'dist/umd/popper.min.js',
|
|
source.bootstrap + 'js/dist/index.js',
|
|
source.bootstrap + 'js/dist/util.js',
|
|
source.bootstrap + 'js/dist/tooltip.js',
|
|
source.bootstrap + 'js/dist/dropdown.js',
|
|
];
|
|
|
|
gulp.src(toUglify)
|
|
.pipe(gulpif(enabled.failCheck, plumber()))
|
|
.pipe(gulpif(enabled.maps, sourcemaps.init()))
|
|
.pipe(concat("bootstrap.min.js"))
|
|
.pipe(gulpif(enabled.uglify, uglify()))
|
|
.pipe(gulpif(enabled.maps, sourcemaps.write(".")))
|
|
.pipe(chmod(644))
|
|
.pipe(gulp.dest(destination.js))
|
|
.pipe(gulpif(argv.livereload, livereload()));
|
|
});
|
|
|
|
|
|
// While developing, run 'gulp watch'
|
|
gulp.task('watch',function() {
|
|
// Only listen for live reloads if ran with --livereload
|
|
if (argv.livereload){
|
|
livereload.listen();
|
|
}
|
|
|
|
gulp.watch('src/styles/**/*.sass',['styles']);
|
|
gulp.watch(source.pillar + 'src/styles/**/*.sass',['styles']);
|
|
|
|
gulp.watch('src/templates/**/*.pug',['templates']);
|
|
gulp.watch('src/scripts/*.js',['scripts']);
|
|
gulp.watch('src/scripts/tutti/**/*.js',['scripts_concat_tutti']);
|
|
});
|
|
|
|
// Erases all generated files in output directories.
|
|
gulp.task('cleanup', function() {
|
|
var paths = [];
|
|
for (attr in destination) {
|
|
paths.push(destination[attr]);
|
|
}
|
|
|
|
git.clean({ args: '-f -X ' + paths.join(' ') }, function (err) {
|
|
if(err) throw err;
|
|
});
|
|
|
|
});
|
|
|
|
|
|
// Run 'gulp' to build everything at once
|
|
var tasks = [];
|
|
if (enabled.cleanup) tasks.push('cleanup');
|
|
|
|
gulp.task('default', tasks.concat(['styles', 'templates', 'scripts', 'scripts_concat_tutti', 'scripts_concat_bootstrap']));
|