/*global module:false*/ module.exports = function(grunt) { var packageJSON = grunt.file.readJSON('package.json'); var bumpFiles = ["package.json", "bower.json", "composer.json"]; var commitFiles = bumpFiles.concat(["./dist/*"]); // Project configuration. grunt.initConfig({ // Metadata pkg: packageJSON, // Task configuration. header: { dist: { options: { text: "/*! =======================================================\n VERSION <%= pkg.version %> \n========================================================= */" }, files: { '<%= pkg.gruntConfig.dist.js %>': '<%= pkg.gruntConfig.temp.js %>', '<%= pkg.gruntConfig.dist.jsMin %>': '<%= pkg.gruntConfig.temp.jsMin %>', '<%= pkg.gruntConfig.dist.css %>': '<%= pkg.gruntConfig.temp.css %>', '<%= pkg.gruntConfig.dist.cssMin %>': '<%= pkg.gruntConfig.temp.cssMin %>' } } }, uglify: { options: { preserveComments: 'some' }, dist: { src: '<%= pkg.gruntConfig.temp.js %>', dest: '<%= pkg.gruntConfig.temp.jsMin %>' } }, babel: { options: { presets: ['es2015'] }, dist: { src: '<%= pkg.gruntConfig.js.slider %>', dest: '<%= pkg.gruntConfig.temp.js %>' } }, jshint: { ignore_warning: { options: { '-W099': true }, src: '<%= pkg.gruntConfig.js.slider %>' }, options: { esnext: true, curly: true, eqeqeq: true, immed: true, latedef: false, newcap: true, noarg: true, sub: true, undef: true, unused: true, boss: true, eqnull: true, browser: true, globals: { $ : true, Modernizr : true, console: true, define: true, module: true, require: true }, "-W099": true }, gruntfile: { src: 'Gruntfile.js' }, js: { src: '<%= pkg.gruntConfig.js.slider %>' }, spec : { src: '<%= pkg.gruntConfig.spec %>', options : { globals : { document: true, console: false, Slider: false, $: false, jQuery: false, _: false, _V_: false, afterEach: false, beforeEach: false, confirm: false, context: false, describe: false, expect: false, it: false, jasmine: false, JSHINT: false, mostRecentAjaxRequest: false, qq: false, runs: false, spyOn: false, spyOnEvent: false, waitsFor: false, xdescribe: false } } } }, sasslint: { options: { configFile: './.sass-lint.yml', }, target: ['./src/sass/**/*.scss'] }, lesslint: { src: ['./src/less/bootstrap-slider.less'] }, jasmine : { src : '<%= pkg.gruntConfig.temp.js %>', options : { specs : '<%= pkg.gruntConfig.spec %>', vendor : ['<%= pkg.gruntConfig.js.jquery %>', '<%= pkg.gruntConfig.js.bindPolyfill %>'], styles : ['<%= pkg.gruntConfig.css.bootstrap %>', '<%= pkg.gruntConfig.temp.css %>'], template : '<%= pkg.gruntConfig.tpl.SpecRunner %>' } }, template : { 'generate-index-page' : { options : { data : { js : { highlightjs: '<%= pkg.gruntConfig.js.highlightjs %>', modernizr : '<%= pkg.gruntConfig.js.modernizr %>', jquery : '<%= pkg.gruntConfig.js.jquery %>', slider : '<%= pkg.gruntConfig.temp.js %>' }, css : { highlightjs: '<%= pkg.gruntConfig.css.highlightjs %>', bootstrap : '<%= pkg.gruntConfig.css.bootstrap %>', slider : '<%= pkg.gruntConfig.temp.css %>' } } }, files : { 'index.html' : ['<%= pkg.gruntConfig.tpl.index %>'] } }, 'generate-gh-pages' : { options : { data : { js : { highlightjs: '<%= pkg.gruntConfig.js.highlightjs %>', modernizr : '<%= pkg.gruntConfig.js.modernizr %>', jquery : '<%= pkg.gruntConfig.js.jquery %>', slider : 'js/bootstrap-slider.js' }, css : { highlightjs: '<%= pkg.gruntConfig.css.highlightjs %>', bootstrap : 'css/bootstrap.min.css', slider : 'css/bootstrap-slider.css' } } }, files : { 'index.html' : ['<%= pkg.gruntConfig.tpl.index %>'] } } }, watch: { options: { livereload: true }, js: { files: '<%= pkg.gruntConfig.js.slider %>', tasks: ['jshint:js', 'babel', 'jasmine'] }, gruntfile: { files: '<%= jshint.gruntfile %>', tasks: ['jshint:gruntfile'] }, spec: { files: '<%= pkg.gruntConfig.spec %>', tasks: ['jshint:spec', 'jasmine:src'] }, css: { files: [ '<%= pkg.gruntConfig.less.slider %>', '<%= pkg.gruntConfig.less.rules %>', '<%= pkg.gruntConfig.less.variables %>' ], tasks: ['less:development'] }, index: { files: '<%= pkg.gruntConfig.tpl.index %>', tasks: ['template:generate-index-page'] } }, connect: { server: { options: { port: "<%= pkg.gruntConfig.devPort %>" } } }, open : { development : { path: 'http://localhost:<%= connect.server.options.port %>' } }, less: { options: { paths: ["bower_components/bootstrap/less"] }, development: { files: { '<%= pkg.gruntConfig.temp.css %>': '<%= pkg.gruntConfig.less.slider %>' } }, production: { files: { '<%= pkg.gruntConfig.temp.css %>': '<%= pkg.gruntConfig.less.slider %>', } }, "production-min": { options: { yuicompress: true }, files: { '<%= pkg.gruntConfig.temp.cssMin %>': '<%= pkg.gruntConfig.less.slider %>' } } }, clean: { dist: ["dist"], temp: ["temp"] }, bump: { options: { files: bumpFiles, updateConfigs: [], commit: true, commitMessage: 'Release v%VERSION%', commitFiles: commitFiles, createTag: true, tagName: 'v%VERSION%', tagMessage: 'Version %VERSION%', push: false, pushTo: 'origin' } } }); // These plugins provide necessary tasks. grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-jasmine'); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-contrib-connect'); grunt.loadNpmTasks('grunt-contrib-clean'); grunt.loadNpmTasks('grunt-contrib-less'); grunt.loadNpmTasks('grunt-open'); grunt.loadNpmTasks('grunt-template'); grunt.loadNpmTasks('grunt-header'); grunt.loadNpmTasks('grunt-bump'); grunt.loadNpmTasks('grunt-babel'); grunt.loadNpmTasks('grunt-sass-lint'); grunt.loadNpmTasks('grunt-lesslint'); // Create custom tasks grunt.registerTask('append-header', ['header', 'clean:temp']); grunt.registerTask('lint', [ 'jshint', 'lesslint', 'sasslint' ]); grunt.registerTask('test', [ 'babel', 'less:development', 'jasmine', 'clean:temp' ]); grunt.registerTask('build', [ 'less:development', 'test', 'template:generate-index-page' ]); grunt.registerTask('build-gh-pages', [ 'less:development', 'babel', 'template:generate-gh-pages' ]); grunt.registerTask('dist', [ 'clean:dist', 'less:production', 'less:production-min', 'babel', 'uglify', 'append-header' ]); grunt.registerTask('development', [ 'less:development', 'babel', 'template:generate-index-page', 'connect', 'open:development', 'watch' ]); grunt.registerTask('production', ['dist']); grunt.registerTask('dev', 'development'); grunt.registerTask('prod', 'production'); grunt.registerTask('default', ['build']); }; // End of module