etcd/mod/dashboard/Gruntfile.js

308 lines
6.2 KiB
JavaScript

'use strict';
var util = require('util');
module.exports = function(grunt) {
/*jshint maxstatements:false */
require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);
grunt.initConfig({
config: {
appName: 'etcd-dashboard',
appPath: 'app',
bowerPath: 'app/bower_components',
tmpPath: '.tmp',
distPath: 'dist'
},
watch: {
css: {
files: ['<%= config.appPath %>/{page,ui,style}/{**/,}*.scss'],
tasks: ['sass']
},
html: {
files: [
'<%= config.appPath %>/{module,ui,page}/**/*.html'
],
tasks: ['views']
},
js: {
files: [
'<%= config.appPath %>/{module,page}/**/*.js',
'<%= config.appPath %>/*.js'
],
tasks: ['jshint']
}
},
concurrent: {
dev: {
tasks: [
'watch',
//'test-watch'
],
options: {
logConcurrentOutput: true
}
}
},
clean: {
tmp: {
files: [{
dot: true,
src: [
'<%= config.tmpPath %>',
'.sass-cache/**/*'
]
}]
},
dist: {
files: [{
dot: true,
src: [
'<%= config.distPath %>/*'
]
}]
},
'dist-static': {
files: [{
dot: true,
src: [
'<%= config.distPath %>/cp/**'
]
}]
},
compiled: {
files: [{
dot: true,
src: [
'<%= config.appPath %>/compiled/**'
]
}]
}
},
// JS code linting.
jshint: {
options: {
camelcase: true,
curly: true,
eqeqeq: true,
eqnull: true,
forin: true,
freeze: true,
immed: true,
indent: 2,
latedef: true,
maxcomplexity: 10,
maxdepth: 3,
maxlen: 80,
maxparams: 20,
maxstatements: 200,
newcap: true,
noarg: true,
node: true,
noempty: true,
nonew: true,
nonbsp: true,
quotmark: 'single',
strict: true,
sub: true,
trailing: true,
undef: true,
unused: true
},
src: {
node: false,
options: {
globals: {
angular: true,
window: true
}
},
files: {
src: [
'<%= config.appPath %>/*.js',
'<%= config.appPath %>/{module,page}**/*.js',
'!<%= config.appPath %>/vega.js'
]
}
}
},
// Compile SCSS to CSS.
sass: {
etcd: {
options: {
includePaths: ['<%= config.appPath %>/coreos-web/sass'],
outputStyle: 'nested'
},
files: {
'<%= config.appPath %>/compiled/main.css': '<%= config.appPath %>/main.scss'
}
}
},
/**
* Generate grunt configs for concat, uglify, cssmin.
*/
useminPrepare: {
html: '<%= config.appPath %>/index.html',
options: {
dest: '<%= config.distPath %>'
}
},
usemin: {
html: ['<%= config.distPath %>/index.html']
},
// This block gets generated by usemin.
cssmin: {
},
// This block gets generated by usemin.
uglify: {
},
// This block gets generated by usemin.
concat: {
},
// Make our angular code minification friendly.
ngmin: {
dist: {
files: [{
src: '<%= config.tmpPath %>/concat/app.js',
dest: '<%= config.tmpPath %>/concat/app.js'
}]
}
},
copy: {
dist: {
files: [{
expand: true,
cwd: '<%= config.appPath %>',
src: ['index.html'],
dest: '<%= config.distPath %>'
}]
},
images: {
files: [{
expand: true,
cwd: '<%= config.appPath %>/img',
src: ['**'],
dest: '<%= config.distPath %>/img'
}]
},
'coreos-web': {
files: [{
cwd: '<%= config.appPath %>/coreos-web',
expand: true,
src: [
'fonts/*',
'img/*'
],
dest: '<%= config.distPath %>/coreos-web'
}]
},
'dist-static': {
files: [
{
expand: true,
flatten: true,
src: [
'<%= config.distPath %>/cp/static/*'
],
dest: '<%= config.distPath %>'
}
]
}
},
// Precompile html views into a single javascript file.
html2js: {
options: {
base: '<%= config.appPath %>',
rename: function(moduleName) {
return '/' + moduleName;
}
},
views: {
src: [
'<%= config.appPath %>/{page,ui,module}/**/*.html'
],
dest: '<%= config.appPath %>/compiled/views.js'
}
}
});
grunt.registerTask('clean-paths', 'clean up resource paths', function() {
grunt.log.writeln('cleaning paths...');
function clean(path) {
return path.replace('mod/dashboard/static/', '');
}
['concat', 'uglify', 'cssmin'].forEach(function(task) {
var config = grunt.config(task);
config.generated.files.forEach(function(fileGroup) {
fileGroup.dest = clean(fileGroup.dest);
fileGroup.src = fileGroup.src.map(function(path) {
return clean(path);
});
});
grunt.config(task, config);
grunt.log.ok(task + ' config is now:');
grunt.log.writeln(util.inspect(grunt.config(task), false, 4, true));
});
});
grunt.registerTask('test', [
'views',
'karma:unit'
]);
grunt.registerTask('test-watch', [
'karma:dev'
]);
grunt.registerTask('views', [
'html2js:views'
]);
grunt.registerTask('dev', [
'clean',
'jshint',
'views',
'sass',
'concurrent:dev'
]);
grunt.registerTask('build', [
'clean',
'jshint',
'views',
//'test',
'sass',
'useminPrepare',
'clean-paths',
'concat',
'ngmin:dist',
'uglify',
'cssmin',
'copy:dist',
'usemin',
'copy:dist-static',
'clean:dist-static',
'copy:images',
'copy:coreos-web'
]);
grunt.registerTask('default', ['build']);
};