1
+ module . exports = function ( grunt ) {
2
+ 'use strict' ;
3
+
4
+ var jsFiles = module . exports . jsFiles ;
5
+
6
+ var output = {
7
+ js : '<%= pkg.name %>.js' ,
8
+ jsmin : '<%= pkg.name %>.min.js' ,
9
+ map : '<%= pkg.name %>.min.js.map'
10
+ } ;
11
+
12
+ grunt . initConfig ( {
13
+ pkg : grunt . file . readJSON ( 'package.json' ) ,
14
+
15
+ concat : {
16
+ js : {
17
+ src : jsFiles ,
18
+ dest : output . js
19
+ }
20
+ } ,
21
+ uglify : {
22
+ jsmin : {
23
+ options : {
24
+ mangle : true ,
25
+ compress : true ,
26
+ sourceMap : output . map
27
+ } ,
28
+ src : output . js ,
29
+ dest : output . jsmin
30
+ }
31
+ } ,
32
+ sed : {
33
+ version : {
34
+ pattern : '%VERSION%' ,
35
+ replacement : '<%= pkg.version %>' ,
36
+ path : [ output . js , output . jsmin ]
37
+ }
38
+ } ,
39
+ jscs : {
40
+ old : {
41
+ src : [ 'spec/**/*.js' ] ,
42
+ options : {
43
+ validateIndentation : 4
44
+ }
45
+ } ,
46
+ source : {
47
+ src : [ 'src/**/*.js' , '!src/{banner,footer}.js' , 'Gruntfile.js' ] ,
48
+ options : {
49
+ config : '.jscsrc'
50
+ }
51
+ }
52
+ } ,
53
+ jshint : {
54
+ source : {
55
+ src : [ 'src/**/*.js' , 'Gruntfile.js' ] ,
56
+ options : {
57
+ jshintrc : '.jshintrc' ,
58
+ ignores : [ 'src/banner.js' , 'src/footer.js' ]
59
+ }
60
+ }
61
+ } ,
62
+ watch : {
63
+ scripts : {
64
+ files : [ 'src/**/*.js' ] ,
65
+ tasks : [ 'build' ]
66
+ } ,
67
+ jasmineRunner : {
68
+ files : [ 'spec/**/*.js' ] ,
69
+ tasks : [ 'jasmine:specs:build' ]
70
+ } ,
71
+ tests : {
72
+ files : [ 'src/**/*.js' , 'spec/**/*.js' ] ,
73
+ tasks : [ 'test' ]
74
+ } ,
75
+ reload : {
76
+ files : [ 'crossfilter-ma.js' , 'web/js/crossfilter-ma.js' , 'crossfilter-ma.min.js' ] ,
77
+ options : {
78
+ livereload : true
79
+ }
80
+ }
81
+ } ,
82
+ connect : {
83
+ server : {
84
+ options : {
85
+ port : 8888 ,
86
+ base : '.'
87
+ }
88
+ }
89
+ } ,
90
+ jasmine : {
91
+ specs : {
92
+ options : {
93
+ display : 'short' ,
94
+ summary : true ,
95
+ specs : 'spec/*-spec.js' ,
96
+ helpers : 'spec/helpers/*.js' ,
97
+ version : '2.0.0' ,
98
+ outfile : 'spec/index.html' ,
99
+ keepRunner : true
100
+ } ,
101
+ src : [
102
+ 'node_modules/d3/d3.js' ,
103
+ 'node_modules/crossfilter/crossfilter.js' ,
104
+ 'web/js/colorbrewer.js' ,
105
+ 'crossfilter-ma.js'
106
+ ]
107
+ } ,
108
+ coverage :{
109
+ src : '<%= jasmine.specs.src %>' ,
110
+ options :{
111
+ specs : '<%= jasmine.specs.options.specs %>' ,
112
+ helpers : '<%= jasmine.specs.options.helpers %>' ,
113
+ version : '<%= jasmine.specs.options.version %>' ,
114
+ template : require ( 'grunt-template-jasmine-istanbul' ) ,
115
+ templateOptions : {
116
+ coverage : 'coverage/jasmine/coverage.json' ,
117
+ report : [
118
+ {
119
+ type : 'html' ,
120
+ options : {
121
+ dir : 'coverage/jasmine'
122
+ }
123
+ }
124
+ ]
125
+ }
126
+ }
127
+ } ,
128
+ browserify : {
129
+ options : {
130
+ display : 'short' ,
131
+ summary : true ,
132
+ specs : 'spec/*-spec.js' ,
133
+ helpers : 'spec/helpers/*.js' ,
134
+ version : '2.0.0' ,
135
+ outfile : 'spec/index-browserify.html' ,
136
+ keepRunner : true
137
+ } ,
138
+ src : [
139
+ 'bundle.js'
140
+ ]
141
+ }
142
+ } ,
143
+ browserify : {
144
+ dev : {
145
+ src : 'crossfilter-ma.js' ,
146
+ dest : 'bundle.js' ,
147
+ options : {
148
+ browserifyOptions : {
149
+ standalone : 'crossfilter-ma'
150
+ }
151
+ }
152
+ } ,
153
+ }
154
+ } ) ;
155
+
156
+
157
+ grunt . registerTask ( 'watch:jasmine' , function ( ) {
158
+ grunt . config ( 'watch' , {
159
+ options : {
160
+ interrupt : true
161
+ } ,
162
+ runner : grunt . config ( 'watch' ) . jasmineRunner ,
163
+ scripts : grunt . config ( 'watch' ) . scripts
164
+ } ) ;
165
+ grunt . task . run ( 'watch' ) ;
166
+ } ) ;
167
+
168
+
169
+ // These plugins provide necessary tasks.
170
+ grunt . loadNpmTasks ( 'grunt-contrib-concat' ) ;
171
+ grunt . loadNpmTasks ( 'grunt-contrib-connect' ) ;
172
+ grunt . loadNpmTasks ( 'grunt-contrib-copy' ) ;
173
+ grunt . loadNpmTasks ( 'grunt-contrib-jasmine' ) ;
174
+ grunt . loadNpmTasks ( 'grunt-contrib-jshint' ) ;
175
+ grunt . loadNpmTasks ( 'grunt-contrib-uglify' ) ;
176
+ grunt . loadNpmTasks ( 'grunt-contrib-watch' ) ;
177
+ grunt . loadNpmTasks ( 'grunt-jscs' ) ;
178
+ grunt . loadNpmTasks ( 'grunt-markdown' ) ;
179
+ grunt . loadNpmTasks ( 'grunt-sed' ) ;
180
+ grunt . loadNpmTasks ( 'grunt-shell' ) ;
181
+ grunt . loadNpmTasks ( 'grunt-debug-task' ) ;
182
+ grunt . loadNpmTasks ( 'grunt-browserify' ) ;
183
+
184
+
185
+ // task aliases
186
+ grunt . registerTask ( 'build' , [ 'concat' , 'uglify' , 'sed' ] ) ;
187
+ grunt . registerTask ( 'lint' , [ 'build' , 'jshint' , 'jscs' ] ) ;
188
+ grunt . registerTask ( 'coverage' , [ 'build' , 'jasmine:coverage' ] ) ;
189
+ grunt . registerTask ( 'server' , [ 'jasmine:specs:build' , 'connect:server' , 'watch:jasmine' ] ) ;
190
+ grunt . registerTask ( 'test' , [ 'build' , 'jasmine:specs' ] ) ;
191
+
192
+ grunt . registerTask ( 'test-browserify' , [ 'build' , 'browserify' , 'jasmine:browserify' ] ) ;
193
+ grunt . registerTask ( 'default' , [ 'build' ] ) ;
194
+ } ;
195
+
196
+ module . exports . jsFiles = [
197
+ 'src/banner.js' ,
198
+ 'src/crossfilter-ma.js' ,
199
+ 'src/footer.js'
200
+ ] ;
0 commit comments