/*global module:false*/ module.exports = function(grunt) { grunt.loadNpmTasks('grunt-contrib'); //grunt.loadTasks('tasks/'); //directories var lib = 'src/', forms = lib+'editable-form/', inputs = lib+'inputs/', containers = lib+'containers/'; //config for different cores of lib var config = { bootstrap: { form: [forms+'editable-form-bootstrap.js'], container: [containers+'editable-popover.js'], inputs: [inputs+'date/date.js', inputs+'date/bootstrap-datepicker.js'], css: [inputs+'date/datepicker.css'] }, jqueryui: { form: [forms+'editable-form-jqueryui.js'], container: [containers+'editable-tooltip.js'], inputs: [inputs+'dateui.js'], css: [] }, jquery: { form: [], container: [containers+'editable-poshytip.js'], inputs: [inputs+'dateui.js'], css: [] } }; var inline = [containers+'editable-inline.js']; //common js files var js = [ '<banner:meta.banner>', forms+'editable-form.js', forms+'editable-form-utils.js', containers+'editable-container.js', lib+'element/editable-element.js', inputs+'abstract.js', inputs+'text.js', inputs+'textarea.js', inputs+'select.js' ]; //common css files var css = [ '<banner:meta.banner>', forms+'editable-form.css', containers+'editable-container.css', lib+'element/editable-element.css' ]; //create grunt concat task var task, folder, dest, concat_files = {}, min_files = {}; for(var k in config) { folder = '<%= dist %>/'+k+'-editable/'; //popup task = k+'_popup_js'; dest = folder+'js/'+k+'-editable'+ (k === 'jquery' ? '-poshytip' : ''); concat_files[task] = { src: js.concat(config[k].form).concat(config[k].container).concat(config[k].inputs), dest: dest+'.js' }; min_files[task] = { src: ['<banner:meta.banner>', '<config:concat.'+task+'.dest>'], dest: dest + '.min.js' }; //inline task = k+'_inline_js'; dest = folder+'js/'+k+'-editable-inline'; concat_files[task] = { src: js.concat(config[k].form).concat(inline).concat(config[k].inputs), dest: dest+'.js' }; min_files[task] = { src: ['<banner:meta.banner>', '<config:concat.'+task+'.dest>'], dest: dest + '.min.js' }; //css concat_files[k+'_css'] = { src: css.concat(config[k].css), dest: folder+'css/'+k+'-editable.css' }; } var module = ''; //module = '&module=textarea'; //module = '&module=select'; //module = '&module=text'; // Project configuration. grunt.initConfig({ pkg: '<json:package.json>', dist: 'dist', meta: { banner: '/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> \n' + '* <%= pkg.description %>\n' + '* <%= pkg.homepage %>\n' + '* Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>;' + ' Licensed <%= _.pluck(pkg.licenses, "type").join(", ") %> */' }, clean: ['<config:dist>'], concat: concat_files, min: min_files, qunit: { bootstrap: [ 'http://localhost:8000/test/index.html?f=bootstrap&c=popup'+module, 'http://localhost:8000/test/index.html?f=bootstrap&c=inline'+module ], jqueryui: [ 'http://localhost:8000/test/index.html?f=jqueryui&c=popup'+module, 'http://localhost:8000/test/index.html?f=jqueryui&c=inline'+module ], plain: [ 'http://localhost:8000/test/index.html?f=plain&c=popup'+module, 'http://localhost:8000/test/index.html?f=plain&c=inline'+module ] // files: ['test/index.html'] }, server: { port: 8000, base: '.' }, lint: { //TODO: lint tests files //files: ['grunt.js', 'src/js/*.js', 'test/**/*.js'] files: ['grunt.js', 'src/editable-form/*.js', 'src/containers/*.js', 'src/inputs/*.js', 'src/element/*.js', 'src/inputs/*.js', 'src/inputs/date/date.js' //do not check bootstrap-datepicker ] }, /* watch: { files: '<config:lint.files>', tasks: 'lint qunit' }, */ jshint: { options: { curly: true, eqeqeq: true, immed: true, latedef: true, newcap: true, noarg: true, sub: true, undef: true, boss: true, eqnull: true, browser: true, evil: false }, globals: { jQuery: true } }, copy: { dist: { files: { '<%= dist %>/bootstrap-editable/css/img' : 'src/editable-form/img/*', '<%= dist %>/jqueryui-editable/css/img' : 'src/editable-form/img/*', '<%= dist %>/jquery-editable/css/img' : 'src/editable-form/img/*', '<%= dist %>/bootstrap-editable/js/locales' : 'src/inputs/date/locales/*', '<%= dist %>': ['LICENSE-GPL', 'LICENSE-MIT', 'README.md', 'CHANGELOG.txt'] }, options: { flatten: true } } }, //compress does not work properly for MAC OS (see https://github.com/vitalets/bootstrap-editable/issues/19) //zip will be created manually /* compress: { zip: { options: { mode: "zip", //TODO: unfortunatly here <%= dist_source %> and <config:dist_source> does not work basePath: "dist" }, files: { "<%= dist %>/bootstrap-editable-v<%= pkg.version %>.zip": ["<%= dist_source %>/ **", "<%= dist %>/libs/ **"] } }, tgz: { options: { mode: "tgz", basePath: "dist" }, files: { "<%= dist %>/bootstrap-editable-v<%= pkg.version %>.tar.gz": ["<%= dist_source %>/ **", "<%= dist %>/libs/ **"] } } }, */ uglify: {} }); //test task grunt.registerTask('test', 'server qunit:bootstrap'); grunt.registerTask('testall', 'server qunit'); // Default task. // grunt.registerTask('default', 'lint qunit'); grunt.registerTask('default', 'clean concat min copy'); // build grunt.registerTask('build', 'clean lint concat min copy'); //to run particular task use ":", e.g. copy:libs };