11var 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-
92module . exports = function ( grunt ) {
103 grunt . util . linefeed = '\n' ;
114
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+
1239 var all_modules = { } ,
1340 all_langs = { } ,
1441 loaded_modules = [ ] ,
@@ -66,7 +93,7 @@ module.exports = function(grunt) {
6693 }
6794
6895 // default language
69- js_files_to_load . push ( 'dist /i18n/en.js' ) ;
96+ js_files_to_load . push ( '.temp /i18n/en.js' ) ;
7097 loaded_langs . push ( 'en' ) ;
7198
7299 // parse 'lang' parameter
@@ -75,7 +102,7 @@ module.exports = function(grunt) {
75102 arg_langs . replace ( / / g, '' ) . split ( ',' ) . forEach ( function ( l ) {
76103 if ( all_langs [ l ] ) {
77104 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' ) ) ;
79106 loaded_langs . push ( l ) ;
80107 }
81108 }
@@ -100,7 +127,8 @@ module.exports = function(grunt) {
100127 langBanner :
101128 '/*!\n' +
102129 ' * jQuery QueryBuilder <%= pkg.version %>\n' +
103- ' * <%= lang_copyright %>\n' +
130+ ' * Locale: <%= lang_locale %>\n' +
131+ '<% if (lang_author) { %> * Author: <%= lang_author %>\n<% } %>' +
104132 ' * Licensed under MIT (http://opensource.org/licenses/MIT)\n' +
105133 ' */' ,
106134
@@ -187,27 +215,22 @@ module.exports = function(grunt) {
187215 options : {
188216 stripBanners : false ,
189217 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 ) ;
211234 }
212235 }
213236 } ,
@@ -317,6 +340,9 @@ module.exports = function(grunt) {
317340 }
318341 } ,
319342
343+ // clean build dir
344+ clean : [ '.temp' ] ,
345+
320346 // jshint tests
321347 jshint : {
322348 lib : {
@@ -354,11 +380,11 @@ module.exports = function(grunt) {
354380 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,
355381 replacement : function ( match , m1 , m2 ) {
356382 var scripts = '\n' ;
357-
383+
358384 grunt . file . expand ( 'tests/*.module.js' ) . forEach ( function ( file ) {
359385 scripts += '<script src="../' + file + '"></script>\n' ;
360386 } ) ;
361-
387+
362388 return m1 + scripts + m2 ;
363389 }
364390 } ]
@@ -465,16 +491,19 @@ module.exports = function(grunt) {
465491 grunt . loadNpmTasks ( 'grunt-contrib-watch' ) ;
466492 grunt . loadNpmTasks ( 'grunt-qunit-blanket-lcov' ) ;
467493 grunt . loadNpmTasks ( 'grunt-string-replace' ) ;
494+ grunt . loadNpmTasks ( 'grunt-contrib-clean' ) ;
468495 grunt . loadNpmTasks ( 'grunt-contrib-sass' ) ;
469496 grunt . loadNpmTasks ( 'grunt-coveralls' ) ;
470497 grunt . loadNpmTasks ( 'grunt-wrap' ) ;
471498 grunt . loadNpmTasks ( 'grunt-bump' ) ;
472499
473500 grunt . registerTask ( 'build_js' , [
501+ 'concat:lang_temp' ,
474502 'concat:js' ,
475503 'wrap:js' ,
476504 'concat:js_standalone' ,
477- 'uglify'
505+ 'uglify' ,
506+ 'clean'
478507 ] ) ;
479508
480509 grunt . registerTask ( 'build_css' , [
0 commit comments