module.exports = function (grunt) { function createBanner(fileName) { return '/*!\n' + '* ' + fileName + '\n' + '* http://github.com/RobinHerbots/jquery.inputmask\n' + '* Copyright (c) 2010 - <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>\n' + '* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\n' + '* Version: <%= pkg.version %>\n' + '*/\n'; } function createUglifyConfig(path) { var uglifyConfig = {}; var srcFiles = grunt.file.expand(path + "/*.js"); for (var srcNdx in srcFiles) { var dstFile = srcFiles[srcNdx].replace("js/", ""), dstFileMin = dstFile.replace(".js", ".min.js"); wrapAMDLoader(srcFiles[srcNdx], "build/" + dstFile, dstFile.indexOf("extension") == -1 ? ["jquery"] : ["jquery", "./jquery.inputmask"]); uglifyConfig[dstFile] = { dest: 'dist/inputmask/' + dstFile, src: "build/" + dstFile, options: { banner: createBanner(dstFile), beautify: true, mangle: false, preserveComments: "some", ASCIIOnly: true } }; uglifyConfig[dstFileMin] = { dest: 'dist/inputmask/' + dstFileMin, src: "build/" + dstFile, options: { banner: createBanner(dstFileMin), preserveComments: "some", ASCIIOnly: true } }; } srcFiles = grunt.file.expand(path + "/*.extensions.js"); srcFiles.splice(0, 0, "js/jquery.inputmask.js"); uglifyConfig["inputmaskbundle"] = { files: { 'dist/<%= pkg.name %>.bundle.js': srcFiles }, options: { banner: createBanner('<%= pkg.name %>.bundle'), beautify: true, mangle: false, preserveComments: "some", ASCIIOnly: true } } uglifyConfig["inputmaskbundlemin"] = { files: { 'dist/<%= pkg.name %>.bundle.min.js': srcFiles }, options: { banner: createBanner('<%= pkg.name %>.bundle'), preserveComments: "some", ASCIIOnly: true } } return uglifyConfig; } function wrapAMDLoader(src, dst, dependencies) { function stripClosureExecution() { return srcFile.replace(new RegExp("\\(jQuery\\).*$"), ""); } var srcFile = grunt.file.read(src), dstContent = "(function (factory) {" + "if (typeof define === 'function' && define.amd) {" + "define(" + JSON.stringify(dependencies) + ", factory);" + "} else {" + "factory(jQuery);" + "}}\n" + stripClosureExecution() + ");"; grunt.file.write(dst, dstContent); } // Project configuration. grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), uglify: createUglifyConfig("js"), clean: ["dist"], qunit: { files: ['qunit/qunit.html'] }, bump: { options: { files: ['package.json', 'bower.json', 'composer.json'], updateConfigs: ['pkg'], commit: false, createTag: false, push: false } }, release: { options: { bump: false, commitMessage: 'jquery.inputmask <%= version %>' } }, nugetpack: { dist: { src: function () { return process.platform === "linux" ? 'nuget/jquery.inputmask.linux.nuspec' : 'nuget/jquery.inputmask.nuspec'; }(), dest: 'dist/', options: { version: '<%= pkg.version %>' } } }, nugetpush: { dist: { src: 'dist/jQuery.InputMask.<%= pkg.version %>.nupkg' } }, shell: { options: { stderr: false }, gitcommitchanges: { command: ['git add .', 'git reset -- package.json', 'git commit -m "jquery.inputmask <%= pkg.version %>"' ].join('&&') } } }); // Load the plugin that provides the tasks. grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-clean'); grunt.loadNpmTasks('grunt-contrib-qunit'); grunt.loadNpmTasks('grunt-bump'); grunt.loadNpmTasks('grunt-release'); grunt.loadNpmTasks('grunt-nuget'); grunt.loadNpmTasks('grunt-shell'); grunt.registerTask('publish:patch', ['clean', 'bump:patch', 'uglify', 'shell:gitcommitchanges', 'release', 'nugetpack', 'nugetpush']); grunt.registerTask('publish:minor', ['clean', 'bump:minor', 'uglify', 'shell:gitcommitchanges', 'release', 'nugetpack', 'nugetpush']); grunt.registerTask('publish:major', ['clean', 'bump:major', 'uglify', 'shell:gitcommitchanges', 'release', 'nugetpack', 'nugetpush']); // Default task(s). grunt.registerTask('default', ['clean', 'uglify']); };