/*jshint laxcomma:true */ module.exports = function(grunt) { grunt.initConfig({ pkg: '', themeMeta: '', meta: { // // set dynamically in generateThemeConfig() }, lint: { files: ['assets/js/_*.js', 'grunt.js'] }, recess: { // set dynamically in generateThemeConfig() }, concat: { // set dynamically in generateThemeConfig() }, min: { // set dynamically in generateThemeConfig() }, mincss: { // set dynamically in generateThemeConfig() }, watch: { // set dynamically in generateThemeConfig() } }); grunt.loadTasks('build/tasks'); grunt.loadNpmTasks('grunt-contrib'); grunt.loadNpmTasks('grunt-recess'); function generateThemeConfig( registerThemeTask ) { var i , len , o , allTasksLen , msg , themeMetaObj = grunt.file.readJSON('themes.json') , pkgObject = grunt.file.readJSON('package.json') // tasks performed on all themes are declared in package.json , themeSpecificTasks = pkgObject.themeSpecificTasks; // iterate over the themeMetaObj for number of themes (default is declared here as well) for ( var key in themeMetaObj ) { var thisTheme = themeMetaObj[key] , taskArray = []; grunt.config( 'meta.'+thisTheme._name, { banner: '/*! ================================================\n' + ' * '+thisTheme._long_name+' Theme by example.co \n' + ' * v.<%= pkg.version %>\n' + ' * Copyright (c) <%= grunt.template.today("yyyy") %> ' + ' example.Co */\n' + ' * ================================================ */' }); grunt.config( 'recess.'+thisTheme._name+'Dev', { // set dynamically in generateThemeBundles() src: 'assets/css/less/'+thisTheme._name+'/master.less', dest: '../'+thisTheme._name+'/assets/css/main.css', options: { compile: true } }); grunt.config( 'recess.'+thisTheme._name+'Prod', { // set dynamically in generateThemeBundles() src: 'assets/css/less/'+thisTheme._name+'/master.less', dest: '../'+thisTheme._name+'/assets/css/main.min.css', options: { compile: true, compress: true } }); grunt.config( 'concat.'+thisTheme._name, { src: thisTheme._js_includes, dest: '../'+thisTheme._name+'/assets/js/scripts.js' }); grunt.config( 'min.'+thisTheme._name, { src: ['<'+thisTheme._name+'Banner>', 'assets/js/scripts.js'], dest: '../'+thisTheme._name+'/assets/js/scripts.min.js' }); } registerThemeTask(); } // grunt.log.writeln( grunt.log.writeflags( grunt.config.get(), prefix) ); // register themes as a callback to ensure config is generated first generateThemeConfig( function() { var themeMetaObj = grunt.file.readJSON('themes.json') , pkgObject = grunt.file.readJSON('package.json') // tasks performed on all themes are declared in package.json // in attribute name `themeSpecificTasks` , themeSpecificTasks = pkgObject.themeSpecificTasks , allTaskArray = []; // iterate over the themeMetaObj for number of themes (default is declared here as well) for ( var key in themeMetaObj ) { var thisTheme = themeMetaObj[key] , taskArray = []; // now that our config is setup, let's register this as a MultiTask taskArray = ['lint']; for ( var tasksKey in themeSpecificTasks ) { if ( themeSpecificTasks[tasksKey] === 'recess' ) { taskArray.push( themeSpecificTasks[tasksKey]+':'+thisTheme._name+'Dev' ); taskArray.push( themeSpecificTasks[tasksKey]+':'+thisTheme._name+'Prod' ); } else { taskArray.push( themeSpecificTasks[tasksKey]+':'+thisTheme._name ); } } taskArray.push( 'enqueue_ver' ); allTaskArray = allTaskArray.concat( taskArray ); grunt.registerTask( 'theme:'+thisTheme._name, taskArray); } grunt.registerTask( 'default', allTaskArray ); }); };