1+ var gulp = require ( 'gulp' ) ;
2+ var plumber = require ( 'gulp-plumber' ) ;
3+ var clean = require ( 'gulp-clean' ) ;
4+ var rename = require ( 'gulp-rename' ) ;
5+ var flatten = require ( 'gulp-flatten' ) ;
6+ var tap = require ( 'gulp-tap' ) ;
7+ var header = require ( 'gulp-header' ) ;
8+ var jshint = require ( 'gulp-jshint' ) ;
9+ var stylish = require ( 'jshint-stylish' ) ;
10+ var concat = require ( 'gulp-concat' ) ;
11+ var uglify = require ( 'gulp-uglify' ) ;
12+ var sass = require ( 'gulp-sass' ) ;
13+ var prefix = require ( 'gulp-autoprefixer' ) ;
14+ var minify = require ( 'gulp-minify-css' ) ;
15+ var karma = require ( 'gulp-karma' ) ;
16+ var package = require ( './package.json' ) ;
17+
18+ var paths = {
19+ output : 'dist/' ,
20+ scripts : {
21+ input : [ 'src/js/*' ] ,
22+ output : 'dist/js/'
23+ } ,
24+ styles : {
25+ input : 'src/sass/**/*.scss' ,
26+ output : 'dist/css/'
27+ } ,
28+ sass : {
29+ input : 'src/sass/*' ,
30+ output : 'dist/sass/' ,
31+ } ,
32+ static : 'src/static/**' ,
33+ test : {
34+ spec : [ 'test/spec/**/*.js' ] ,
35+ coverage : 'test/coverage/' ,
36+ results : 'test/results/'
37+ }
38+ } ;
39+
40+ var banner = {
41+ full :
42+ '/**\n' +
43+ ' * <%= package.name %> v<%= package.version %>\n' +
44+ ' * <%= package.description %>, by <%= package.author.name %>.\n' +
45+ ' * <%= package.repository.url %>\n' +
46+ ' * \n' +
47+ ' * Free to use under the MIT License.\n' +
48+ ' * http://gomakethings.com/mit/\n' +
49+ ' */\n\n' ,
50+ min :
51+ '/**' +
52+ ' <%= package.name %> v<%= package.version %>, by Chris Ferdinandi' +
53+ ' | <%= package.repository.url %>' +
54+ ' | Licensed under MIT: http://gomakethings.com/mit/' +
55+ ' */\n'
56+ } ;
57+
58+ gulp . task ( 'scripts' , [ 'clean' ] , function ( ) {
59+ return gulp . src ( paths . scripts . input )
60+ . pipe ( plumber ( ) )
61+ . pipe ( flatten ( ) )
62+
63+ . pipe ( tap ( function ( file , t ) {
64+ if ( file . stat . isDirectory ( ) ) {
65+ var name = file . relative + '.js' ;
66+ return gulp . src ( file . path + '/*.js' )
67+ . pipe ( concat ( name ) )
68+ . pipe ( header ( banner . full , { package : package } ) )
69+ . pipe ( gulp . dest ( paths . scripts . output ) )
70+ . pipe ( rename ( { suffix : '.min' } ) )
71+ . pipe ( uglify ( ) )
72+ . pipe ( header ( banner . min , { package : package } ) )
73+ . pipe ( gulp . dest ( paths . scripts . output ) ) ;
74+ }
75+ } ) )
76+
77+ // Don't add headers to classList.js
78+ . pipe ( tap ( function ( file , t ) {
79+ if ( file . relative === 'classList.js' ) {
80+ return gulp . src ( file . path )
81+ . pipe ( gulp . dest ( paths . scripts . output ) )
82+ . pipe ( rename ( { suffix : '.min' } ) )
83+ . pipe ( uglify ( ) )
84+ . pipe ( gulp . dest ( paths . scripts . output ) ) ;
85+ }
86+ } ) )
87+
88+ . pipe ( header ( banner . full , { package : package } ) )
89+ . pipe ( gulp . dest ( paths . scripts . output ) )
90+ . pipe ( rename ( { suffix : '.min' } ) )
91+ . pipe ( uglify ( ) )
92+ . pipe ( header ( banner . min , { package : package } ) )
93+ . pipe ( gulp . dest ( paths . scripts . output ) ) ;
94+ } ) ;
95+
96+ gulp . task ( 'styles' , [ 'clean' ] , function ( ) {
97+ return gulp . src ( paths . styles . input )
98+ . pipe ( plumber ( ) )
99+ . pipe ( sass ( ) )
100+ . pipe ( flatten ( ) )
101+ . pipe ( prefix ( 'last 2 version' , '> 1%' ) )
102+ . pipe ( header ( banner . full , { package : package } ) )
103+ . pipe ( gulp . dest ( paths . styles . output ) )
104+ . pipe ( rename ( { suffix : '.min' } ) )
105+ . pipe ( minify ( ) )
106+ . pipe ( header ( banner . min , { package : package } ) )
107+ . pipe ( gulp . dest ( paths . styles . output ) ) ;
108+ } ) ;
109+
110+ gulp . task ( 'sass' , [ 'clean' ] , function ( ) {
111+ return gulp . src ( paths . sass . input )
112+ . pipe ( plumber ( ) )
113+ . pipe ( flatten ( ) )
114+ . pipe ( tap ( function ( file , t ) {
115+ if ( file . stat . isDirectory ( ) ) {
116+ return gulp . src ( file . path + '/*.scss' )
117+ . pipe ( header ( banner . full , { package : package } ) )
118+ . pipe ( gulp . dest ( paths . sass . output + '/components' ) ) ;
119+ }
120+ } ) )
121+ . pipe ( gulp . dest ( paths . sass . output ) ) ;
122+ } ) ;
123+
124+ gulp . task ( 'static' , [ 'clean' ] , function ( ) {
125+ return gulp . src ( paths . static )
126+ . pipe ( plumber ( ) )
127+ . pipe ( gulp . dest ( paths . output ) ) ;
128+ } ) ;
129+
130+ gulp . task ( 'lint' , function ( ) {
131+ return gulp . src ( paths . scripts . input )
132+ . pipe ( plumber ( ) )
133+ . pipe ( jshint ( ) )
134+ . pipe ( jshint . reporter ( 'jshint-stylish' ) ) ;
135+ } ) ;
136+
137+ gulp . task ( 'clean' , function ( ) {
138+ return gulp . src ( [
139+ paths . output ,
140+ paths . test . coverage ,
141+ paths . test . results
142+ ] , { read : false } )
143+ . pipe ( plumber ( ) )
144+ . pipe ( clean ( ) ) ;
145+ } ) ;
146+
147+ gulp . task ( 'test' , function ( ) {
148+ return gulp . src ( paths . scripts . input . concat ( paths . test . spec ) )
149+ . pipe ( plumber ( ) )
150+ . pipe ( karma ( { configFile : 'test/karma.conf.js' } ) )
151+ . on ( 'error' , function ( err ) { throw err ; } ) ;
152+ } ) ;
153+
154+ gulp . task ( 'default' , [
155+ 'lint' ,
156+ 'clean' ,
157+ 'scripts' ,
158+ 'styles' ,
159+ 'sass' ,
160+ 'static' ,
161+ 'test'
162+ ] ) ;
0 commit comments