123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- /* 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);
- }
|