1
1
var deepmerge = require ( 'deepmerge' ) ;
2
-
3
- function removeJshint ( src ) {
4
- return src
5
- . replace ( / \/ \* j s h i n t [ a - z : ] + \* \/ \r ? \n \r ? \n ? / g, '' )
6
- . replace ( / \/ \* j s h i n t - [ E W I ] { 1 } [ 0 - 9 ] { 3 } \* \/ \r ? \n \r ? \n ? / g, '' ) ;
7
- }
8
-
9
2
module . exports = function ( grunt ) {
10
3
grunt . util . linefeed = '\n' ;
11
4
5
+ function removeJshint ( src ) {
6
+ return src
7
+ . replace ( / \/ \* j s h i n t [ a - z : ] + \* \/ \r ? \n \r ? \n ? / g, '' )
8
+ . replace ( / \/ \* j s h i n t - [ E W I ] { 1 } [ 0 - 9 ] { 3 } \* \/ \r ? \n \r ? \n ? / g, '' ) ;
9
+ }
10
+
11
+ function process_lang ( file , src , wrapper ) {
12
+ var lang = file . split ( / [ \/ \. ] / ) [ 2 ] ;
13
+ var content = JSON . parse ( src ) ;
14
+ wrapper = wrapper || [ '' , '' ] ;
15
+
16
+ grunt . config . set ( 'lang_locale' , content . __locale || lang ) ;
17
+ grunt . config . set ( 'lang_author' , content . __author ) ;
18
+ var header = grunt . template . process ( '<%= langBanner %>' ) ;
19
+
20
+ loaded_modules . forEach ( function ( m ) {
21
+ var plugin_file = 'src/plugins/' + m + '/i18n/' + lang + '.json' ;
22
+
23
+ if ( grunt . file . exists ( plugin_file ) ) {
24
+ content = deepmerge ( content , grunt . file . readJSON ( plugin_file ) ) ;
25
+ }
26
+ } ) ;
27
+
28
+ return header
29
+ + '\n\n'
30
+ + wrapper [ 0 ]
31
+ + 'QueryBuilder.regional[\'' + lang + '\'] = '
32
+ + JSON . stringify ( content , null , 2 )
33
+ + ';\n\n'
34
+ + 'QueryBuilder.defaults({ lang_code: \'' + lang + '\' });'
35
+ + wrapper [ 1 ] ;
36
+ }
37
+
38
+
12
39
var all_modules = { } ,
13
40
all_langs = { } ,
14
41
loaded_modules = [ ] ,
@@ -66,7 +93,7 @@ module.exports = function(grunt) {
66
93
}
67
94
68
95
// default language
69
- js_files_to_load . push ( 'dist /i18n/en.js' ) ;
96
+ js_files_to_load . push ( '.temp /i18n/en.js' ) ;
70
97
loaded_langs . push ( 'en' ) ;
71
98
72
99
// parse 'lang' parameter
@@ -75,7 +102,7 @@ module.exports = function(grunt) {
75
102
arg_langs . replace ( / / g, '' ) . split ( ',' ) . forEach ( function ( l ) {
76
103
if ( all_langs [ l ] ) {
77
104
if ( l !== 'en' ) {
78
- js_files_to_load . push ( all_langs [ l ] . replace ( / ^ s r c / , 'dist ' ) . replace ( / j s o n $ / , 'js' ) ) ;
105
+ js_files_to_load . push ( all_langs [ l ] . replace ( / ^ s r c / , '.temp ' ) . replace ( / j s o n $ / , 'js' ) ) ;
79
106
loaded_langs . push ( l ) ;
80
107
}
81
108
}
@@ -100,7 +127,8 @@ module.exports = function(grunt) {
100
127
langBanner :
101
128
'/*!\n' +
102
129
' * jQuery QueryBuilder <%= pkg.version %>\n' +
103
- ' * <%= lang_copyright %>\n' +
130
+ ' * Locale: <%= lang_locale %>\n' +
131
+ '<% if (lang_author) { %> * Author: <%= lang_author %>\n<% } %>' +
104
132
' * Licensed under MIT (http://opensource.org/licenses/MIT)\n' +
105
133
' */' ,
106
134
@@ -187,27 +215,22 @@ module.exports = function(grunt) {
187
215
options : {
188
216
stripBanners : false ,
189
217
process : function ( src , file ) {
190
- var lang = file . split ( / [ \/ \. ] / ) [ 2 ] ;
191
- var content = JSON . parse ( src ) ;
192
-
193
- grunt . config . set ( 'lang_copyright' , content . __copyright || ( lang + ' translation' ) ) ;
194
- var header = grunt . template . process ( '<%= langBanner %>' ) ;
195
- delete content . __copyright ;
196
-
197
- loaded_modules . forEach ( function ( m ) {
198
- var plugin_file = 'src/plugins/' + m + '/i18n/' + lang + '.json' ;
199
-
200
- if ( grunt . file . exists ( plugin_file ) ) {
201
- content = deepmerge ( content , grunt . file . readJSON ( plugin_file ) ) ;
202
- }
203
- } ) ;
204
-
205
- return header
206
- + '\n\n'
207
- + 'jQuery.fn.queryBuilder.regional[\'' + lang + '\'] = '
208
- + JSON . stringify ( content , null , 2 )
209
- + ';\n\n'
210
- + 'jQuery.fn.queryBuilder.defaults({ lang_code: \'' + lang + '\' });'
218
+ var wrapper = grunt . file . read ( 'src/i18n/.wrapper.js' ) . replace ( / \r \n / g, '\n' ) . split ( / @ @ j s \n / ) ;
219
+ return process_lang ( file , src , wrapper ) ;
220
+ }
221
+ }
222
+ } ,
223
+ lang_temp : {
224
+ files : Object . keys ( all_langs ) . map ( function ( name ) {
225
+ return {
226
+ src : 'src/i18n/' + name + '.json' ,
227
+ dest : '.temp/i18n/' + name + '.js'
228
+ } ;
229
+ } ) ,
230
+ options : {
231
+ stripBanners : false ,
232
+ process : function ( src , file ) {
233
+ return process_lang ( file , src ) ;
211
234
}
212
235
}
213
236
} ,
@@ -317,6 +340,9 @@ module.exports = function(grunt) {
317
340
}
318
341
} ,
319
342
343
+ // clean build dir
344
+ clean : [ '.temp' ] ,
345
+
320
346
// jshint tests
321
347
jshint : {
322
348
lib : {
@@ -354,11 +380,11 @@ module.exports = function(grunt) {
354
380
pattern : / ( < ! - - q u n i t : m o d u l e s - - > ) (?: [ \s \S ] * ) ( < ! - - \/ q u n i t : m o d u l e s - - > ) / m,
355
381
replacement : function ( match , m1 , m2 ) {
356
382
var scripts = '\n' ;
357
-
383
+
358
384
grunt . file . expand ( 'tests/*.module.js' ) . forEach ( function ( file ) {
359
385
scripts += '<script src="../' + file + '"></script>\n' ;
360
386
} ) ;
361
-
387
+
362
388
return m1 + scripts + m2 ;
363
389
}
364
390
} ]
@@ -465,16 +491,19 @@ module.exports = function(grunt) {
465
491
grunt . loadNpmTasks ( 'grunt-contrib-watch' ) ;
466
492
grunt . loadNpmTasks ( 'grunt-qunit-blanket-lcov' ) ;
467
493
grunt . loadNpmTasks ( 'grunt-string-replace' ) ;
494
+ grunt . loadNpmTasks ( 'grunt-contrib-clean' ) ;
468
495
grunt . loadNpmTasks ( 'grunt-contrib-sass' ) ;
469
496
grunt . loadNpmTasks ( 'grunt-coveralls' ) ;
470
497
grunt . loadNpmTasks ( 'grunt-wrap' ) ;
471
498
grunt . loadNpmTasks ( 'grunt-bump' ) ;
472
499
473
500
grunt . registerTask ( 'build_js' , [
501
+ 'concat:lang_temp' ,
474
502
'concat:js' ,
475
503
'wrap:js' ,
476
504
'concat:js_standalone' ,
477
- 'uglify'
505
+ 'uglify' ,
506
+ 'clean'
478
507
] ) ;
479
508
480
509
grunt . registerTask ( 'build_css' , [
0 commit comments