Current File : //home/tradevaly/www/node_modules/toastr/gulpfile.js |
/* jshint node:true, camelcase:false */
var gulp = require('gulp');
var karma = require('karma').server;
var merge = require('merge-stream');
var plug = require('gulp-load-plugins')();
var paths = {
js: './toastr.js',
less: './toastr.less',
report: './report',
build: './build'
};
var log = plug.util.log;
/**
* List the available gulp tasks
*/
gulp.task('help', plug.taskListing);
/**
* Lint the code, create coverage report, and a visualizer
* @return {Stream}
*/
gulp.task('analyze', function () {
log('Analyzing source with JSHint and JSCS');
var jshint = analyzejshint([paths.js]);
var jscs = analyzejscs([paths.js]);
return merge(jshint, jscs);
});
/**
* Minify and bundle the app's JavaScript
* @return {Stream}
*/
gulp.task('js', function () {
log('Bundling, minifying, and copying the app\'s JavaScript');
return gulp
.src(paths.js)
.pipe(plug.sourcemaps.init())
.pipe(plug.bytediff.start())
.pipe(plug.uglify({}))
.pipe(plug.bytediff.stop(bytediffFormatter))
.pipe(plug.sourcemaps.write('.'))
.pipe(plug.rename(function (path) {
if (path.extname === '.js') {
path.basename += '.min';
}
}))
.pipe(gulp.dest(paths.build));
});
/**
* Minify and bundle the CSS
* @return {Stream}
*/
gulp.task('css', function () {
log('Bundling, minifying, and copying the app\'s CSS');
return gulp.src(paths.less)
.pipe(plug.less())
.pipe(gulp.dest(paths.build))
.pipe(plug.bytediff.start())
.pipe(plug.minifyCss({}))
.pipe(plug.bytediff.stop(bytediffFormatter))
.pipe(plug.rename('toastr.min.css'))
.pipe(gulp.dest(paths.build));
});
/**
* Build js and css
*/
gulp.task('default', ['js', 'css'], function () {
log('Analyze, Build CSS and JS');
});
/**
* Remove all files from the build folder
* One way to run clean before all tasks is to run
* from the cmd line: gulp clean && gulp build
* @return {Stream}
*/
gulp.task('clean', function (cb) {
log('Cleaning: ' + plug.util.colors.blue(paths.report));
log('Cleaning: ' + plug.util.colors.blue(paths.build));
var delPaths = [paths.build, paths.report];
del(delPaths, cb);
});
/**
* Run specs once and exit
* To start servers and run midway specs as well:
* gulp test --startServers
* @return {Stream}
*/
gulp.task('test', function (done) {
startTests(true /*singleRun*/, done);
});
////////////////
/**
* Execute JSHint on given source files
* @param {Array} sources
* @param {String} overrideRcFile
* @return {Stream}
*/
function analyzejshint(sources, overrideRcFile) {
var jshintrcFile = overrideRcFile || './.jshintrc';
log('Running JSHint');
return gulp
.src(sources)
.pipe(plug.jshint(jshintrcFile))
.pipe(plug.jshint.reporter('jshint-stylish'));
}
/**
* Execute JSCS on given source files
* @param {Array} sources
* @return {Stream}
*/
function analyzejscs(sources) {
log('Running JSCS');
return gulp
.src(sources)
.pipe(plug.jscs('./.jscsrc'));
}
/**
* Start the tests using karma.
* @param {boolean} singleRun - True means run once and end (CI), or keep running (dev)
* @param {Function} done - Callback to fire when karma is done
* @return {undefined}
*/
function startTests(singleRun, done) {
karma.start({
configFile: __dirname + '/karma.conf.js',
singleRun: !!singleRun
}, karmaCompleted);
////////////////
function karmaCompleted() {
done();
}
}
/**
* Formatter for bytediff to display the size changes after processing
* @param {Object} data - byte data
* @return {String} Difference in bytes, formatted
*/
function bytediffFormatter(data) {
var difference = (data.savings > 0) ? ' smaller.' : ' larger.';
return data.fileName + ' went from ' +
(data.startSize / 1000).toFixed(2) + ' kB to ' + (data.endSize / 1000).toFixed(2) + ' kB' +
' and is ' + formatPercent(1 - data.percent, 2) + '%' + difference;
}
/**
* Format a number as a percentage
* @param {Number} num Number to format as a percent
* @param {Number} precision Precision of the decimal
* @return {Number} Formatted perentage
*/
function formatPercent(num, precision) {
return (num * 100).toFixed(precision);
}