/*global module:false*/ module.exports = function(grunt) { // show elapsed time at the end require('time-grunt')(grunt) // load all grunt tasks //require('load-grunt-tasks')(grunt); require('jit-grunt')(grunt, { 'bump-only': 'grunt-bump', 'bump-commit': 'grunt-bump', coveralls: 'grunt-karma-coveralls' }) // Project configuration. grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), meta: { bannerLocal: '/*! iFrame Resizer (iframeSizer.min.js ) - v<%= pkg.version %> - ' + '<%= grunt.template.today("yyyy-mm-dd") %>\n' + ' * Desc: Force cross domain iframes to size to content.\n' + ' * Requires: iframeResizer.contentWindow.min.js to be loaded into the target frame.\n' + ' * Copyright: (c) <%= grunt.template.today("yyyy") %> David J. Bradshaw - dave@bradshaw.net\n' + ' * License: MIT\n */\n', bannerRemote: '/*! iFrame Resizer (iframeSizer.contentWindow.min.js) - v<%= pkg.version %> - ' + '<%= grunt.template.today("yyyy-mm-dd") %>\n' + ' * Desc: Include this file in any page being loaded into an iframe\n' + ' * to force the iframe to resize to the content size.\n' + ' * Requires: iframeResizer.min.js on host page.\n' + ' * Copyright: (c) <%= grunt.template.today("yyyy") %> David J. Bradshaw - dave@bradshaw.net\n' + ' * License: MIT\n */\n' }, clean: ['coverage', 'coverageLcov'], qunit: { files: ['test/*.html'], puppeteer: { args: [ '--disable-web-security', '--allow-file-access-from-files', '--user-data-dir=/tmp' ] } }, karma: { options: { configFile: 'karma.conf.js' }, travis: { singleRun: true, browsers: ['Chrome'], // 'PhantomJS' coverageReporter: { type: 'lcov', dir: 'coverageLcov/' } }, single: { singleRun: true, browsers: ['Chrome', 'Firefox'] // 'Safari', 'PhantomJS' } }, coveralls: { options: { debug: true, coverageDir: 'coverageLcov', dryRun: false, force: true, recursive: true } }, jshint: { options: { asi: true, eqeqeq: true, laxbreak: true, globals: { jQuery: false, require: true, process: true } }, gruntfile: { src: 'gruntfile.js' }, code: { src: 'src/**/*.js' } }, uglify: { options: { sourceMap: true, sourceMapIncludeSources: true, report: 'gzip' }, local: { options: { banner: '<%= meta.bannerLocal %>', sourceMapName: 'js/iframeResizer.map' }, src: ['js/iframeResizer.js'], dest: 'js/iframeResizer.min.js' }, remote: { options: { banner: '<%= meta.bannerRemote %>', sourceMapName: 'js/iframeResizer.contentWindow.map' }, src: ['js/iframeResizer.contentWindow.js'], dest: 'js/iframeResizer.contentWindow.min.js' } }, watch: { files: ['src/**/*'], tasks: 'default' }, bump: { options: { files: [ 'package.json', 'package-lock.json', 'bower.json', 'iframeResizer.jquery.json' ], updateConfigs: ['pkg'], commit: true, commitMessage: 'Release v%VERSION%', commitFiles: ['-a'], // '-a' for all files createTag: true, tagName: 'v%VERSION%', tagMessage: 'Version %VERSION%', push: true, pushTo: 'origin', gitDescribeOptions: '--tags --always --abbrev=1 --dirty=-d' // options to use with '$ git describe' } }, shell: { options: { stdout: true, stderr: true, failOnError: true }, npm: { command: 'npm publish' }, deployExample: { command: function() { var retStr = '', fs = require('fs') if (fs.existsSync('bin')) { retStr = 'bin/deploy.sh' } return retStr } } }, jsonlint: { json: { src: ['*.json'] } }, removeBlock: { options: ['TEST CODE START', 'TEST CODE END'], files: [ { src: 'src/iframeResizer.contentWindow.js', dest: 'js/iframeResizer.contentWindow.js' } ] }, copy: { main: { nonull: true, src: 'src/iframeResizer.js', dest: 'js/iframeResizer.js' } }, eslint: { target: ['src/**'] } }) grunt.registerTask('default', ['notest', 'karma:single']) grunt.registerTask('build', ['removeBlock', 'copy', 'uglify']) grunt.registerTask('notest', ['eslint', 'jsonlint', 'jshint', 'build']) grunt.registerTask('test', ['clean', 'eslint', 'karma:single', 'qunit']) grunt.registerTask('travis', [ 'clean', 'notest', 'qunit', 'karma:travis', 'coveralls' ]) grunt.registerTask('postBump', ['build', 'bump-commit', 'shell']) grunt.registerTask('preBump', ['clean', 'notest']) grunt.registerTask('patch', ['preBump', 'bump-only:patch', 'postBump']) grunt.registerTask('minor', ['preBump', 'bump-only:minor', 'postBump']) grunt.registerTask('major', ['preBump', 'bump-only:major', 'postBump']) grunt.registerMultiTask('removeBlock', function() { // set up a removal regular expression var removalRegEx = new RegExp( '(// ' + this.options()[0] + ' //)(?:[^])*?(// ' + this.options()[1] + ' //)', 'g' ) this.data.forEach(function(fileObj) { var sourceFile = grunt.file.read(fileObj.src), removedFile = sourceFile.replace(removalRegEx, ''), targetFile = grunt.file.write(fileObj.dest, removedFile) }) // for each loop end }) }