166 lines
5.0 KiB
JavaScript
Executable File

/* ------------------------------------------------------------------------------
*
* # Gulp file
*
* Basic Gulp tasks for Limitless template
*
* Version: 1.0
* Latest update: Dec 2, 2015
*
* ---------------------------------------------------------------------------- */
var gulp = require('gulp');
/* set project paths */
var baseProject = '.';
var project = {
sass: baseProject + '/src/sass',
css: baseProject + '/css',
js: baseProject + '/src/js',
cssDist: baseProject + '/dist/css',
jsDist: baseProject + '/dist/js'
};
// Include our plugins
var autoprefixer = require('autoprefixer');
var concat = require('gulp-concat');
var cssnano = require('gulp-cssnano');
var minify = require('gulp-minify');
var postcss = require('gulp-postcss');
var rename = require('gulp-rename');
var sass = require('gulp-sass');
// Compile scss files
gulp.task('scss', function() {
return gulp
.src(project.sass + '/*.scss')
.pipe(sass().on('error', sass.logError))
.pipe(gulp.dest(project.css)); // create normal CSS
});
// add vendor prefixes - https://github.com/postcss/postcssk
gulp.task('postcss', ['scss'], function() {
// scss has to be finished before postcss
return gulp
.src(project.css + '/*.css')
.pipe(postcss([autoprefixer({ browsers: ['last 4 versions'] })]))
.pipe(gulp.dest(project.css));
});
// optimise css - http://cssnano.co/
gulp.task('cssnano', ['postcss'], function() {
// postcss has to be finished before cssnano
return gulp
.src([project.css + '/*.css', '!' + project.css + '/*.min.css']) // exclude .min.css
.pipe(cssnano({ zindex: false, minifyFontValues: false, discardUnused: false }))
.pipe(
rename({
suffix: '.min' // add *.min suffix
})
)
.pipe(gulp.dest(project.css));
});
gulp.task('combinecss', ['cssnano'], function() {
// cssnano has to be finished before combinecss
return gulp
.src([project.css + '/*.min.css'])
.pipe(concat('material-datepicker.min.css'))
.pipe(gulp.dest(project.cssDist));
});
// Create minified js
gulp.task('minifyjs', function() {
return gulp
.src([project.js + '/**/**/*.js', '!' + project.js + '/**/**/*.min.js'])
.pipe(
minify({
ext: {
src: '.js',
min: [/(.*)\.js$/, '$1.min.js']
},
noSource: true
})
)
.pipe(gulp.dest(project.js));
});
// Combine js files
gulp.task('combinejs', ['minifyjs'], function() {
// minifyjs has to be finished before combinejs
/* =================================================================
Important: each disabled src has to be disabled the same way in
phpformbuilder/plugins/materialize/src/js/global.js M.AutoInit()
================================================================= */
return gulp
.src([
// project.js + '/cash.js',
// project.js + '/component.js',
// project.js + '/global.js',
// project.js + '/anime.js',
// project.js + '/collapsible.js',
// project.js + '/dropdown.js',
// project.js + '/modal.js',
// project.js + '/materialbox.js',
// project.js + '/parallax.js',
// project.js + '/tabs.js',
// project.js + '/tooltip.js',
// project.js + '/waves.js',
// project.js + '/toasts.js',
// project.js + '/sidenav.js',
// project.js + '/scrollspy.js',
// project.js + '/autocomplete.js',
// project.js + '/forms.js',
// project.js + '/slider.js',
// project.js + '/cards.js',
// project.js + '/chips.js',
// project.js + '/pushpin.js',
// project.js + '/buttons.js',
project.js + '/datepicker.js'
// project.js + '/timepicker.js',
// project.js + '/characterCounter.js',
// project.js + '/carousel.js',
// project.js + '/tapTarget.js',
// project.js + '/select.js'
// project.js + '/range.js'
])
.pipe(concat('material-datepicker.min.js'))
.pipe(gulp.dest(project.jsDist));
});
/* =============================================
WATCH & DIST
============================================= */
gulp.task('watch', function() {
// Watch files for changes
gulp.watch(project.sass + '/**/*.scss', ['sass']);
gulp.watch(project.js + '/**/*.js', ['scripts']);
});
// main SASS task
gulp.task('sass', ['scss', 'postcss', 'cssnano', 'combinecss']);
// main SCRIPTS task
gulp.task('scripts', ['minifyjs', 'combinejs']);
gulp.task('dist', [
// dist all concat & minified files
'scss',
'postcss',
'cssnano',
'combinecss',
'minifyjs',
'combinejs'
]);
// Default task
gulp.task('default', [
// list of default tasks
'watch' // watch for changes
]);