Permalink
| /*! | |
| * Gruntfile.js | |
| * | |
| * Copyright (c) 2014 | |
| */ | |
| module.exports = function (grunt) { | |
| // Load tasks | |
| require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks); | |
| // Browsers | |
| var browsers = [ | |
| // Latest Versions | |
| { browserName: 'firefox', platform: 'WIN8' }, | |
| { browserName: 'chrome', platform: 'WIN8' }, | |
| { browserName: 'opera', platform: 'WIN7' }, | |
| // Internet Explorer | |
| { browserName: 'internet explorer', platform: 'WIN8', version: '10' }, | |
| { browserName: 'internet explorer', platform: 'VISTA', version: '9' }, | |
| { browserName: 'internet explorer', platform: 'XP', version: '8' } | |
| ]; | |
| // Config | |
| grunt.initConfig({ | |
| // -------------------------------------------------------------------------- | |
| // PKG CONFIG | |
| // -------------------------------------------------------------------------- | |
| 'pkg': grunt.file.readJSON('package.json'), | |
| // -------------------------------------------------------------------------- | |
| // JSHINT | |
| // -------------------------------------------------------------------------- | |
| 'jshint': { | |
| src: [ | |
| 'Gruntfile.js', | |
| 'src/**/*.js', | |
| 'test/**/*.js' | |
| ], | |
| build: [ | |
| 'dist/**/*.js', | |
| '!dist/**/*.min.js' | |
| ], | |
| options: { | |
| jshintrc: '.jshintrc', | |
| force: true | |
| } | |
| }, | |
| // -------------------------------------------------------------------------- | |
| // CLEAN (EMPTY DIRECTORY) | |
| // -------------------------------------------------------------------------- | |
| 'clean': { | |
| dist: [ | |
| 'dist' | |
| ], | |
| docs: [ | |
| 'docs/javascripts/*formatter.js', | |
| 'docs/javascripts/*formatter.min.js', | |
| 'docs/index.md' | |
| ] | |
| }, | |
| // -------------------------------------------------------------------------- | |
| // REQUIREJS BUILD | |
| // -------------------------------------------------------------------------- | |
| 'requirejs': { | |
| compile: { | |
| options: { | |
| name: 'formatter', | |
| baseUrl: 'src', | |
| out: 'dist/formatter.js', | |
| optimize: 'none', | |
| skipModuleInsertion: true, | |
| onBuildWrite: function(name, path, contents) { | |
| return require('amdclean').clean({ | |
| code: contents, | |
| prefixMode: 'camelCase', | |
| escodegen: { | |
| format: { | |
| indent: { style: ' ' } | |
| } | |
| } | |
| }); | |
| } | |
| } | |
| } | |
| }, | |
| // -------------------------------------------------------------------------- | |
| // UMD WRAP | |
| // -------------------------------------------------------------------------- | |
| 'umd': { | |
| jquery: { | |
| src: 'dist/formatter.js', | |
| dest: 'dist/jquery.formatter.js', | |
| template: 'src/tmpls/jquery.hbs', | |
| deps: { 'default': ['jQuery'] } | |
| }, | |
| umd: { | |
| src: 'dist/formatter.js', | |
| objectToExport: 'formatter', | |
| globalAlias: 'Formatter', | |
| template: 'src/tmpls/umd.hbs', | |
| dest: 'dist/formatter.js' | |
| } | |
| }, | |
| // -------------------------------------------------------------------------- | |
| // ADD BANNER | |
| // -------------------------------------------------------------------------- | |
| 'concat': { | |
| options: { | |
| banner: '/*!\n' + | |
| ' * v<%= pkg.version %>\n' + | |
| ' * Copyright (c) 2014 First Opinion\n' + | |
| ' * formatter.js is open sourced under the MIT license.\n' + | |
| ' *\n' + | |
| ' * thanks to digitalBush/jquery.maskedinput for some of the trickier\n' + | |
| ' * keycode handling\n' + | |
| ' */ \n\n', | |
| stripBanners: true | |
| }, | |
| umd: { | |
| src: 'dist/formatter.js', | |
| dest: 'dist/formatter.js' | |
| }, | |
| jquery: { | |
| src: 'dist/jquery.formatter.js', | |
| dest: 'dist/jquery.formatter.js' | |
| } | |
| }, | |
| // -------------------------------------------------------------------------- | |
| // MINIFY JS | |
| // -------------------------------------------------------------------------- | |
| 'uglify': { | |
| umd: { | |
| src: 'dist/formatter.js', | |
| dest: 'dist/formatter.min.js' | |
| }, | |
| jquery: { | |
| src: 'dist/jquery.formatter.js', | |
| dest: 'dist/jquery.formatter.min.js' | |
| } | |
| }, | |
| // -------------------------------------------------------------------------- | |
| // CREATE COMMONJS VERSION IN DIST | |
| // -------------------------------------------------------------------------- | |
| 'nodefy': { | |
| all: { | |
| expand: true, | |
| src: ['**/*.js'], | |
| cwd: 'src/', | |
| dest: 'dist/common' | |
| } | |
| }, | |
| // -------------------------------------------------------------------------- | |
| // COPY AMD TO DIST | |
| // -------------------------------------------------------------------------- | |
| 'copy': { | |
| amd: { | |
| expand: true, | |
| src: ['**/*.js'], | |
| cwd: 'src/', | |
| dest: 'dist/amd' | |
| }, | |
| javascripts: { | |
| expand: true, | |
| src: ['*.js'], | |
| cwd: 'dist', | |
| dest: 'docs/javascripts' | |
| }, | |
| readme: { | |
| src: 'README.md', | |
| dest: 'docs/index.md' | |
| } | |
| }, | |
| // -------------------------------------------------------------------------- | |
| // WRAP | |
| // -------------------------------------------------------------------------- | |
| 'wrap': { | |
| readme: { | |
| src: ['docs/index.md'], | |
| dest: 'docs/index.md', | |
| options: { | |
| wrapper: ['---\nlayout: master\n---\n{% raw %}', '{% endraw %}'] | |
| } | |
| } | |
| }, | |
| // -------------------------------------------------------------------------- | |
| // WATCH FILES | |
| // -------------------------------------------------------------------------- | |
| 'watch': { | |
| options: { spawn: true }, | |
| build: { | |
| files: ['Gruntfile.js'], | |
| tasks: ['build', 'docs'], | |
| options: { livereload: true } | |
| }, | |
| src: { | |
| files: ['src/**/*.js'], | |
| tasks: ['build'], | |
| options: { livereload: true } | |
| }, | |
| docs: { | |
| files: ['docs/**/*'], | |
| tasks: ['jekyll'], | |
| options: { livereload: true } | |
| }, | |
| test: { | |
| files: ['test/**/*'], | |
| options: { livereload: true } | |
| } | |
| }, | |
| // -------------------------------------------------------------------------- | |
| // STATIC SERVER | |
| // -------------------------------------------------------------------------- | |
| 'connect': { | |
| docs: { | |
| options: { base: '_site', port: 9998 } | |
| }, | |
| test: { | |
| options: { base: '', port: 9999 } | |
| } | |
| }, | |
| // -------------------------------------------------------------------------- | |
| // BUILD AND SERVE JEKYLL DOCS | |
| // -------------------------------------------------------------------------- | |
| 'jekyll': { | |
| all: { | |
| options: { | |
| src : 'docs', | |
| dest: '_site' | |
| } | |
| } | |
| }, | |
| // -------------------------------------------------------------------------- | |
| // PUSH DOCS LIVE | |
| // -------------------------------------------------------------------------- | |
| 'gh-pages': { | |
| options: { | |
| base: 'docs' | |
| }, | |
| src: ['**'] | |
| }, | |
| // -------------------------------------------------------------------------- | |
| // TESTS | |
| // -------------------------------------------------------------------------- | |
| 'saucelabs-mocha': { | |
| all: { | |
| options: { | |
| urls: ['http://127.0.0.1:9999/test/_runner.html'], | |
| build: process.env.TRAVIS_JOB_ID || '<%= pkg.version %>', | |
| tunnelTimeout: 5, | |
| concurrency: 3, | |
| browsers: browsers, | |
| testname: 'formatter.js' | |
| } | |
| } | |
| }, | |
| // -------------------------------------------------------------------------- | |
| // MOCHA | |
| // -------------------------------------------------------------------------- | |
| 'mocha_phantomjs': { | |
| all: ['test/_runner.html'] | |
| } | |
| }); | |
| // Tasks | |
| grunt.registerTask('default', ['build']); | |
| grunt.registerTask('dev', ['build', 'docs', 'connect', 'watch']); | |
| grunt.registerTask('test', ['build', 'mocha_phantomjs']); | |
| grunt.registerTask('test-cloud', ['build', 'connect:test', 'saucelabs-mocha']); | |
| grunt.registerTask('docs', ['clean:docs', 'copy:javascripts', 'copy:readme', 'wrap:readme', 'jekyll']); | |
| grunt.registerTask('build', ['jshint:src', 'clean:dist', 'requirejs', 'umd:jquery', 'umd:umd', 'concat:umd', 'concat:jquery', 'uglify:umd', 'uglify:jquery', 'nodefy', 'copy:amd']); | |
| }; |