11var deepmerge = require ( 'deepmerge' ) ;
22
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+
39module . exports = function ( grunt ) {
410 grunt . util . linefeed = '\n' ;
511
612 var all_modules = { } ,
713 all_langs = { } ,
814 loaded_modules = [ ] ,
9- loaded_lang = '' ,
15+ loaded_langs = [ ] ,
1016 js_core_files = [
1117 'src/main.js' ,
1218 'src/defaults.js' ,
@@ -59,27 +65,27 @@ module.exports = function(grunt) {
5965 }
6066 }
6167
68+ // default language
69+ js_files_to_load . push ( 'dist/i18n/en.js' ) ;
70+ loaded_langs . push ( 'en' ) ;
71+
6272 // parse 'lang' parameter
63- var arg_lang = grunt . option ( 'lang' ) ;
64- if ( typeof arg_lang === 'string' ) {
65- if ( all_langs [ arg_lang ] ) {
66- if ( arg_lang != 'en' ) {
67- js_files_to_load . push ( all_langs [ arg_lang ] . replace ( / ^ s r c / , 'dist' ) ) ;
68- loaded_lang = arg_lang ;
73+ var arg_langs = grunt . option ( 'languages' ) ;
74+ if ( typeof arg_langs === 'string' ) {
75+ arg_langs . replace ( / / g, '' ) . split ( ',' ) . forEach ( function ( l ) {
76+ if ( all_langs [ l ] ) {
77+ if ( l !== 'en' ) {
78+ js_files_to_load . push ( all_langs [ l ] . replace ( / ^ s r c / , 'dist' ) . replace ( / j s o n $ / , 'js' ) ) ;
79+ loaded_langs . push ( l ) ;
80+ }
6981 }
70- }
71- else {
72- grunt . fail . warn ( 'Lang ' + arg_lang + ' unknown' ) ;
73- }
82+ else {
83+ grunt . fail . warn ( 'Language ' + l + ' unknown' ) ;
84+ }
85+ } ) ;
7486 }
7587 } ( ) ) ;
7688
77- function removeJshint ( src ) {
78- return src
79- . replace ( / \/ \* j s h i n t [ a - z : ] + \* \/ \r ? \n \r ? \n ? / g, '' )
80- . replace ( / \/ \* j s h i n t - [ E W I ] { 1 } [ 0 - 9 ] { 3 } \* \/ \r ? \n \r ? \n ? / g, '' ) ;
81- }
82-
8389
8490 grunt . initConfig ( {
8591 pkg : grunt . file . readJSON ( 'package.json' ) ,
@@ -181,12 +187,11 @@ module.exports = function(grunt) {
181187 options : {
182188 stripBanners : false ,
183189 process : function ( src , file ) {
184- var lang = file . split ( / [ \/ \. ] / ) [ 2 ] ,
185- content = JSON . parse ( src ) ,
186- header ;
190+ var lang = file . split ( / [ \/ \. ] / ) [ 2 ] ;
191+ var content = JSON . parse ( src ) ;
187192
188- grunt . config . set ( 'lang_copyright' , content . __copyright || ( l + ' translation' ) ) ;
189- header = grunt . template . process ( '<%= langBanner %>\n\n ' ) ;
193+ grunt . config . set ( 'lang_copyright' , content . __copyright || ( lang + ' translation' ) ) ;
194+ var header = grunt . template . process ( '<%= langBanner %>' ) ;
190195 delete content . __copyright ;
191196
192197 loaded_modules . forEach ( function ( m ) {
@@ -196,8 +201,13 @@ module.exports = function(grunt) {
196201 content = deepmerge ( content , grunt . file . readJSON ( plugin_file ) ) ;
197202 }
198203 } ) ;
199-
200- return header + 'jQuery.fn.queryBuilder.defaults({ lang: ' + JSON . stringify ( content , null , 2 ) + '});' ;
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 + '\' });'
201211 }
202212 }
203213 } ,
@@ -223,14 +233,13 @@ module.exports = function(grunt) {
223233 options : {
224234 separator : '' ,
225235 wrapper : function ( ) {
226- var wrapper = grunt . file . read ( 'src/.wrapper.js' ) . replace ( / \r \n / g, '\n' )
227- wrapper = wrapper . split ( / @ @ j s \n / ) ;
236+ var wrapper = grunt . file . read ( 'src/.wrapper.js' ) . replace ( / \r \n / g, '\n' ) . split ( / @ @ j s \n / ) ;
228237
229238 if ( loaded_modules . length ) {
230239 wrapper [ 0 ] = '// Modules: ' + loaded_modules . join ( ', ' ) + '\n' + wrapper [ 0 ] ;
231240 }
232- if ( loaded_lang . length ) {
233- wrapper [ 0 ] = '// Language : ' + loaded_lang + '\n' + wrapper [ 0 ] ;
241+ if ( loaded_langs . length ) {
242+ wrapper [ 0 ] = '// Languages : ' + loaded_langs . join ( ', ' ) + '\n' + wrapper [ 0 ] ;
234243 }
235244 wrapper [ 0 ] = grunt . template . process ( '<%= banner %>\n\n' ) + wrapper [ 0 ] ;
236245
@@ -311,9 +320,10 @@ module.exports = function(grunt) {
311320 // jshint tests
312321 jshint : {
313322 lib : {
314- files : {
315- src : js_files_to_load
316- }
323+ options : {
324+ '-W069' : true // accesses to "regional" in language files
325+ } ,
326+ src : js_files_to_load
317327 }
318328 } ,
319329
0 commit comments