157 lines
5.8 KiB
Python
157 lines
5.8 KiB
Python
module.exports = function (grunt) {
|
|
var stripBanner = function (src, options) {
|
|
|
|
if (!options) { options = {}; }
|
|
var m = [];
|
|
if (options.line) {
|
|
// Strip // ... leading banners.
|
|
m.push('(/{2,}[\\s\\S].*)');
|
|
}
|
|
if (options.block) {
|
|
// Strips all /* ... */ block comment banners.
|
|
m.push('(\/+\\*+[\\s\\S]*?\\*\\/+)');
|
|
} else {
|
|
// Strips only /* ... */ block comment banners, excluding /*! ... */.
|
|
m.push('(\/+\\*+[^!][\\s\\S]*?\\*\\/+)');
|
|
|
|
}
|
|
var re = new RegExp('\s*(' + m.join('|') + ')\s*', 'g');
|
|
src = src.replace(re, '');
|
|
src = src.replace(/\s{2,}(\r|\n|\s){2,}$/gm, '');
|
|
return src;
|
|
};
|
|
|
|
grunt.registerMultiTask('concat', 'Concatenate files.', function () {
|
|
// Merge task-specific and/or target-specific options with these defaults.
|
|
var options = this.options({
|
|
separator: grunt.util.linefeed,
|
|
banner: '',
|
|
footer: '',
|
|
stripBanners: false,
|
|
process: false
|
|
});
|
|
// Normalize boolean options that accept options objects.
|
|
if (typeof options.stripBanners === 'boolean' && options.stripBanners === true) { options.stripBanners = {}; }
|
|
if (typeof options.process === 'boolean' && options.process === true) { options.process = {}; }
|
|
|
|
// Process banner and footer.
|
|
var banner = grunt.template.process(options.banner);
|
|
var footer = grunt.template.process(options.footer);
|
|
|
|
// Iterate over all src-dest file pairs.
|
|
this.files.forEach(function (f) {
|
|
// Concat banner + specified files + footer.
|
|
var src = banner + f.src.filter(function (filepath) {
|
|
// Warn on and remove invalid source files (if nonull was set).
|
|
if (!grunt.file.exists(filepath)) {
|
|
grunt.log.warn('Source file "' + filepath + '" not found.');
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
}).map(function (filepath) {
|
|
// Read file source.
|
|
var src = grunt.file.read(filepath);
|
|
// Process files as templates if requested.
|
|
if (options.process) {
|
|
src = grunt.template.process(src, options.process);
|
|
}
|
|
// Strip banners if requested.
|
|
if (options.stripBanners) {
|
|
src = stripBanner(src, options.stripBanners);
|
|
}
|
|
return src;
|
|
}).join(grunt.util.normalizelf(options.separator)) + footer;
|
|
|
|
// Write the destination file.
|
|
grunt.file.write(f.dest, src);
|
|
|
|
// Print a success message.
|
|
grunt.log.writeln('File "' + f.dest + '" created.');
|
|
});
|
|
});
|
|
|
|
// Project configuration.
|
|
grunt.initConfig({
|
|
pkg: grunt.file.readJSON('package.json'),
|
|
templates: [
|
|
'src/templates/**.html'
|
|
],
|
|
srcFiles: [
|
|
'src/*.js',
|
|
'src/filters/*.js',
|
|
'src/services/*.js',
|
|
'src/classes/*.js',
|
|
|
|
'src/directives/*.js',
|
|
'src/i18n/*.js',
|
|
'<%= ngtemplates.ngGrid.dest %>'
|
|
],
|
|
ngtemplates: {
|
|
ngGrid: {
|
|
options: { base: 'src/templates' },
|
|
src: ['src/templates/**.html'],
|
|
dest: 'build/templates.js'
|
|
}
|
|
},
|
|
concat: {
|
|
options: {
|
|
banner: '/***********************************************\n' +
|
|
'* ng-grid JavaScript Library\n' +
|
|
'* Authors: https://github.com/angular-ui/ng-grid/blob/master/README.md \n' +
|
|
'* License: MIT (http://www.opensource.org/licenses/mit-license.php)\n' +
|
|
'* Compiled At: <%= grunt.template.today("mm/dd/yyyy HH:MM") %>\n' +
|
|
'***********************************************/\n' +
|
|
'(function(window, $) {\n' +
|
|
'\'use strict\';\n',
|
|
footer: '\n}(window, jQuery));'
|
|
},
|
|
prod: {
|
|
options: {
|
|
stripBanners: {
|
|
block: true,
|
|
line: true
|
|
}
|
|
},
|
|
src: ['<%= srcFiles %>'],
|
|
dest: 'build/<%= pkg.name %>.js'
|
|
},
|
|
debug: {
|
|
src: ['<%= srcFiles %>'],
|
|
dest: 'build/<%= pkg.name %>.debug.js'
|
|
},
|
|
version: {
|
|
src: ['<%= srcFiles %>'],
|
|
dest: '<%= pkg.name %>-<%= pkg.version %>.debug.js'
|
|
}
|
|
},
|
|
uglify: {
|
|
build: {
|
|
src: 'build/<%= pkg.name %>.js',
|
|
dest: 'build/<%= pkg.name %>.min.js'
|
|
},
|
|
version: {
|
|
src: '<%= pkg.name %>-<%= pkg.version %>.debug.js',
|
|
dest: '<%= pkg.name %>-<%= pkg.version %>.min.js'
|
|
}
|
|
},
|
|
clean: {
|
|
templates: {
|
|
src: ["<%= ngtemplates.ngGrid.dest %>"]
|
|
}
|
|
}
|
|
});
|
|
|
|
// Load the plugin that provides the "uglify" task.
|
|
grunt.loadNpmTasks('grunt-contrib-uglify');
|
|
//grunt.loadNpmTasks('grunt-contrib-concat');
|
|
grunt.loadNpmTasks('grunt-jsdoc');
|
|
grunt.loadNpmTasks('grunt-angular-templates');
|
|
grunt.loadNpmTasks('grunt-contrib-clean');
|
|
// Default task(s).
|
|
grunt.registerTask('default', ['ngtemplates', 'concat', 'uglify', 'clean']);
|
|
grunt.registerTask('debug', ['ngtemplates', 'concat:debug', 'clean']);
|
|
grunt.registerTask('prod', ['ngtemplates', 'concat:prod', 'uglify', 'clean']);
|
|
grunt.registerTask('version', ['ngtemplates', 'concat:version', 'uglify:version', 'clean']);
|
|
|
|
}; |