178 lines
5.3 KiB
JavaScript
Executable File
178 lines
5.3 KiB
JavaScript
Executable File
'use strict';
|
|
var argv = require('minimist')(process.argv.slice(2)),
|
|
gulp = require('gulp'),
|
|
header = require('gulp-header'),
|
|
gutil = require('gulp-util'),
|
|
ngAnnotate = require('gulp-ng-annotate'),
|
|
compass = require('gulp-compass'),
|
|
refresh = require('gulp-livereload'),
|
|
prefix = require('gulp-autoprefixer'),
|
|
minifyCss = require('gulp-minify-css'),
|
|
uglify = require('gulp-uglify'),
|
|
clean = require('gulp-rimraf'),
|
|
concat = require('gulp-concat-util'),
|
|
express = require('express'),
|
|
express_lr = require('connect-livereload'),
|
|
tinylr = require('tiny-lr'),
|
|
opn = require('opn'),
|
|
jshint = require('gulp-jshint'),
|
|
jshintStylish= require('jshint-stylish'),
|
|
pkg = require('./package.json'),
|
|
lr,
|
|
refresh_lr;
|
|
|
|
var today = new Date();
|
|
|
|
// Configuration
|
|
|
|
var Config = {
|
|
port: 9000,
|
|
livereloadPort: 35728,
|
|
testPage: 'test/ng-img-crop.html',
|
|
cache: (typeof argv.cache !== 'undefined' ? !!argv.cache : true),
|
|
paths: {
|
|
source: {
|
|
root: 'source',
|
|
js: 'source/js',
|
|
scss: 'source/scss'
|
|
},
|
|
compileUnminified: {
|
|
root: 'compile/unminified',
|
|
js: 'compile/unminified',
|
|
css: 'compile/unminified'
|
|
},
|
|
compileMinified: {
|
|
root: 'compile/minified',
|
|
js: 'compile/minified',
|
|
css: 'compile/minified'
|
|
}
|
|
},
|
|
banners: {
|
|
unminified: '/*!\n' +
|
|
' * ' + pkg.prettyName + ' v' + pkg.version + '\n' +
|
|
' * ' + pkg.homepage + '\n' +
|
|
' *\n' +
|
|
' * Copyright (c) ' + (today.getFullYear()) + ' ' + pkg.author.name +'\n' +
|
|
' * License: ' + pkg.license + '\n' +
|
|
' *\n' +
|
|
' * Generated at ' + gutil.date(today, 'dddd, mmmm dS, yyyy, h:MM:ss TT') + '\n' +
|
|
' */',
|
|
minified: '/*! ' + pkg.prettyName + ' v' + pkg.version + ' License: ' + pkg.license + ' */'
|
|
}
|
|
};
|
|
|
|
// Tasks
|
|
// =====
|
|
|
|
// Compile Styles
|
|
gulp.task('styles', function(){
|
|
return gulp.src(Config.paths.source.scss + '/'+pkg.name+'.scss')
|
|
.pipe(compass({
|
|
sass: Config.paths.source.scss,
|
|
css: Config.paths.compileUnminified.css,
|
|
errLogToConsole: true
|
|
}))
|
|
.pipe(prefix('last 2 version', '> 5%', 'safari 5', 'ie 8', 'ie 7', 'opera 12.1', 'ios 6', 'android 4'))
|
|
.pipe(gulp.dest(Config.paths.compileUnminified.css));
|
|
});
|
|
|
|
// Compile Scripts
|
|
gulp.task('scripts', function(){
|
|
return gulp.src([
|
|
Config.paths.source.js + '/init.js',
|
|
Config.paths.source.js + '/classes/*.js',
|
|
Config.paths.source.js + '/ng-img-crop.js'
|
|
])
|
|
.pipe(concat(pkg.name+'.js', {
|
|
separator: '\n\n',
|
|
process: function(src) {
|
|
// Remove all 'use strict'; from the code and
|
|
// replaces all double blank lines with one
|
|
return src.replace(/\r\n/g, '\n')
|
|
.replace(/'use strict';\n+/g, '')
|
|
.replace(/\n\n\s*\n/g, '\n\n');
|
|
}
|
|
}))
|
|
.pipe(concat.header(Config.banners.unminified + '\n' +
|
|
'(function() {\n\'use strict\';\n\n'))
|
|
.pipe(concat.footer('\n}());'))
|
|
.pipe(gulp.dest(Config.paths.compileUnminified.js));
|
|
});
|
|
|
|
|
|
// Make a Distrib
|
|
gulp.task('dist:js:clean', function(){
|
|
return gulp.src([Config.paths.compileMinified.root + '/**/*.js'], { read: false })
|
|
.pipe(clean());
|
|
});
|
|
gulp.task('dist:css:clean', function(){
|
|
return gulp.src([Config.paths.compileMinified.root + '/**/*.css'], { read: false })
|
|
.pipe(clean());
|
|
});
|
|
gulp.task('dist:js', ['dist:js:clean', 'scripts'], function(){
|
|
return gulp.src(Config.paths.compileUnminified.js + '/**/*.js')
|
|
.pipe(ngAnnotate())
|
|
.pipe(uglify())
|
|
.pipe(header(Config.banners.minified))
|
|
.pipe(gulp.dest(Config.paths.compileMinified.js));
|
|
});
|
|
gulp.task('dist:css', ['dist:css:clean', 'styles'], function(){
|
|
return gulp.src(Config.paths.compileUnminified.css + '/**/*.css')
|
|
.pipe(minifyCss())
|
|
.pipe(gulp.dest(Config.paths.compileMinified.css));
|
|
});
|
|
|
|
// Server
|
|
gulp.task('server', function(){
|
|
express()
|
|
.use(express_lr())
|
|
.use(express.static('.'))
|
|
.listen(Config.port);
|
|
gutil.log('Server listening on port ' + Config.port);
|
|
});
|
|
|
|
// LiveReload
|
|
gulp.task('livereload', function(){
|
|
lr = tinylr();
|
|
lr.listen(Config.livereloadPort, function(err) {
|
|
if(err) {
|
|
gutil.log('Livereload error:', err);
|
|
}
|
|
});
|
|
refresh_lr=refresh(lr);
|
|
});
|
|
|
|
// Watches
|
|
gulp.task('watch', function(){
|
|
gulp.watch(Config.paths.source.scss + '/**/*.scss', ['styles']);
|
|
gulp.watch([Config.paths.source.js + '/**/*.js'], ['scripts']);
|
|
gulp.watch([
|
|
Config.paths.compileUnminified.css + '/**/*.css',
|
|
Config.paths.compileUnminified.js + '/**/*.js',
|
|
Config.testPage
|
|
], function(evt){
|
|
refresh_lr.changed(evt.path);
|
|
});
|
|
});
|
|
|
|
|
|
// User commands
|
|
// =============
|
|
|
|
// Code linter
|
|
gulp.task('lint', function() {
|
|
return gulp.src(Config.paths.source.js + '/**/*.js')
|
|
.pipe(jshint())
|
|
.pipe(jshint.reporter(jshintStylish));
|
|
});
|
|
|
|
// Build
|
|
gulp.task('build', ['dist:js', 'dist:css']);
|
|
|
|
// Start server and watch for changes
|
|
gulp.task('default', ['server', 'livereload', 'styles', 'scripts', 'watch'], function(){
|
|
// use the -o arg to open the test page in the browser
|
|
if(argv.o) {
|
|
opn('http://localhost:' + Config.port+'/'+Config.testPage);
|
|
}
|
|
}); |