
see: https://docs.google.com/document/d/1XXMvReO8-Awi1EZXAXS4PzDzdNvV6pGcuaF4Q9821Es/pub The files are now grouped by view / component. Tests are located beside tested js files. The Grunt build will be responsible for only distributing actual files without the tests. Each partial is at the same level as the js files related to it. Ideally css files should be at the same level, maybe I'll refactor this later. Moves all non-bower plugins to app/vendor. Moves all images to app/images and styles to app/styles. Merges the test and non-test jshintrc files. Adds all the Jamstash contributors to the package.json file while I was refactoring. Conflicts: app/app.js app/images/vgrabber.gif app/images/vgrabber2-active.gif app/images/vgrabber2-normal.gif app/index.html
308 lines
7.1 KiB
JavaScript
308 lines
7.1 KiB
JavaScript
// Generated on 2014-10-26 using generator-angular 0.9.8
|
|
'use strict';
|
|
|
|
// # Globbing
|
|
// for performance reasons we're only matching one level down:
|
|
// 'test/spec/{,*/}*.js'
|
|
// use this if you want to recursively match all subfolders:
|
|
// 'test/spec/**/*.js'
|
|
|
|
module.exports = function (grunt) {
|
|
|
|
// Load grunt tasks automatically
|
|
require('load-grunt-tasks')(grunt);
|
|
|
|
// Time how long tasks take. Can help when optimizing build times
|
|
require('time-grunt')(grunt);
|
|
|
|
// Configurable paths for the application
|
|
var appConfig = {
|
|
app: require('./bower.json').appPath || 'app',
|
|
dist: 'dist'
|
|
};
|
|
|
|
// Define the configuration for all the tasks
|
|
grunt.initConfig({
|
|
|
|
// Project settings
|
|
yeoman: appConfig,
|
|
|
|
// Watches files for changes and runs tasks based on the changed files
|
|
watch: {
|
|
bower: {
|
|
files: ['bower.json'],
|
|
tasks: ['wiredep']
|
|
},
|
|
js: {
|
|
files: ['<%= yeoman.app %>/**/*.js', '!<%= yeoman.app %>/**/*_test.js'],
|
|
tasks: ['karma:continuous:run'], //'newer:jshint:all'],
|
|
options: {
|
|
livereload: '<%= connect.options.livereload %>'
|
|
}
|
|
},
|
|
jsTest: {
|
|
files: ['<%= yeoman.app %>/**/*_test.js'],
|
|
tasks: ['karma:continuous:run'], //'newer:jshint:test']
|
|
},
|
|
styles: {
|
|
files: ['<%= yeoman.app %>/styles/{,*/}*.css'],
|
|
tasks: ['newer:copy:styles']
|
|
},
|
|
gruntfile: {
|
|
files: ['Gruntfile.js']
|
|
},
|
|
livereload: {
|
|
files: [
|
|
'<%= yeoman.app %>/**/*.html',
|
|
'.tmp/styles/{,*/}*.css',
|
|
'<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
|
|
]
|
|
},
|
|
options: {
|
|
livereload: '<%= connect.options.livereload %>'
|
|
}
|
|
},
|
|
|
|
// The actual grunt server settings
|
|
connect: {
|
|
options: {
|
|
port: 9000,
|
|
// Change this to '0.0.0.0' to access the server from outside.
|
|
hostname: 'localhost',
|
|
livereload: 35729
|
|
},
|
|
livereload: {
|
|
options: {
|
|
open: true,
|
|
middleware: function (connect) {
|
|
return [
|
|
connect.static('.tmp'),
|
|
connect().use(
|
|
'/bower_components',
|
|
connect.static('./bower_components')
|
|
),
|
|
connect.static(appConfig.app)
|
|
];
|
|
}
|
|
}
|
|
},
|
|
test: {
|
|
options: {
|
|
port: 9001,
|
|
middleware: function (connect) {
|
|
return [
|
|
connect.static('.tmp'),
|
|
//connect.static('test'),
|
|
connect().use(
|
|
'/bower_components',
|
|
connect.static('./bower_components')
|
|
),
|
|
connect.static(appConfig.app)
|
|
];
|
|
}
|
|
}
|
|
},
|
|
dist: {
|
|
options: {
|
|
open: true,
|
|
base: '<%= yeoman.dist %>'
|
|
}
|
|
}
|
|
},
|
|
|
|
// Make sure code styles are up to par and there are no obvious mistakes
|
|
jshint: {
|
|
options: {
|
|
jshintrc: '.jshintrc',
|
|
reporter: require('jshint-stylish')
|
|
},
|
|
all: {
|
|
src: [
|
|
'Gruntfile.js',
|
|
'<%= yeoman.app %>/**/*.js'
|
|
]
|
|
}
|
|
},
|
|
|
|
// Empties folders to start fresh
|
|
clean: {
|
|
dist: {
|
|
files: [{
|
|
dot: true,
|
|
src: [
|
|
'.tmp',
|
|
'<%= yeoman.dist %>/{,*/}*',
|
|
'!<%= yeoman.dist %>/.git*'
|
|
]
|
|
}]
|
|
},
|
|
server: '.tmp'
|
|
},
|
|
|
|
// Automatically inject Bower components into the app
|
|
wiredep: {
|
|
app: {
|
|
src: ['<%= yeoman.app %>/index.html'],
|
|
ignorePath: /\.\.\//
|
|
}
|
|
},
|
|
|
|
// Renames files for browser caching purposes
|
|
filerev: {
|
|
dist: {
|
|
src: [
|
|
'<%= yeoman.dist %>/js/{,*/}*.js',
|
|
'<%= yeoman.dist %>/styles/{,*/}*.css',
|
|
'<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
|
|
'<%= yeoman.dist %>/styles/fonts/*'
|
|
]
|
|
}
|
|
},
|
|
|
|
// Reads HTML for usemin blocks to enable smart builds that automatically
|
|
// concat, minify and revision files. Creates configurations in memory so
|
|
// additional tasks can operate on them
|
|
useminPrepare: {
|
|
html: '<%= yeoman.app %>/index.html',
|
|
options: {
|
|
dest: '<%= yeoman.dist %>',
|
|
flow: {
|
|
html: {
|
|
steps: {
|
|
js: ['concat', 'uglifyjs'],
|
|
css: ['cssmin']
|
|
},
|
|
post: {}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
// Performs rewrites based on filerev and the useminPrepare configuration
|
|
usemin: {
|
|
html: ['<%= yeoman.dist %>/{,*/}*.html'],
|
|
css: ['<%= yeoman.dist %>/styles/{,*/}*.css'],
|
|
options: {
|
|
assetsDirs: ['<%= yeoman.dist %>','<%= yeoman.dist %>/images']
|
|
}
|
|
},
|
|
|
|
htmlmin: {
|
|
dist: {
|
|
options: {
|
|
collapseWhitespace: true,
|
|
conservativeCollapse: true,
|
|
collapseBooleanAttributes: true,
|
|
removeCommentsFromCDATA: true,
|
|
removeOptionalTags: true
|
|
},
|
|
files: [{
|
|
expand: true,
|
|
cwd: '<%= yeoman.dist %>',
|
|
src: ['*.html', 'views/{,*/}*.html'],
|
|
dest: '<%= yeoman.dist %>'
|
|
}]
|
|
}
|
|
},
|
|
|
|
// Copies remaining files to places other tasks can use
|
|
copy: {
|
|
dist: {
|
|
files: [{
|
|
expand: true,
|
|
dot: true,
|
|
cwd: '<%= yeoman.app %>',
|
|
dest: '<%= yeoman.dist %>',
|
|
src: [
|
|
'*.{ico,png,txt}',
|
|
'.htaccess',
|
|
'*.html',
|
|
'views/{,*/}*.html',
|
|
'images/{,*/}*.{webp}',
|
|
'fonts/*'
|
|
]
|
|
}, {
|
|
expand: true,
|
|
cwd: '.tmp/images',
|
|
dest: '<%= yeoman.dist %>/images',
|
|
src: ['<%= yeoman.app %>/images/*']
|
|
}]
|
|
},
|
|
styles: {
|
|
expand: true,
|
|
cwd: '<%= yeoman.app %>/styles',
|
|
dest: '.tmp/styles/',
|
|
src: '{,*/}*.css'
|
|
}
|
|
},
|
|
|
|
// Run some tasks in parallel to speed up the build process
|
|
concurrent: {
|
|
server: [
|
|
'copy:styles'
|
|
],
|
|
test: [
|
|
'copy:styles'
|
|
],
|
|
dist: [
|
|
'copy:styles',
|
|
]
|
|
},
|
|
|
|
// Test settings
|
|
karma: {
|
|
options: {
|
|
configFile: './karma.conf.js',
|
|
},
|
|
unit: {
|
|
singleRun: true
|
|
},
|
|
continuous: {
|
|
singleRun: false,
|
|
background: true
|
|
}
|
|
}
|
|
});
|
|
|
|
|
|
grunt.registerTask('serve', 'Compile then start a connect web server', function (target) {
|
|
if (target === 'dist') {
|
|
return grunt.task.run(['build', 'connect:dist:keepalive']);
|
|
}
|
|
|
|
grunt.task.run([
|
|
'clean:server',
|
|
'wiredep',
|
|
'concurrent:server',
|
|
'karma:continuous',
|
|
'connect:livereload',
|
|
'watch'
|
|
]);
|
|
});
|
|
|
|
grunt.registerTask('test', [
|
|
'clean:server',
|
|
'concurrent:test',
|
|
'connect:test',
|
|
'karma:unit'
|
|
]);
|
|
|
|
grunt.registerTask('build', [
|
|
'clean:dist',
|
|
'wiredep',
|
|
'useminPrepare',
|
|
'concurrent:dist',
|
|
'concat',
|
|
'copy:dist',
|
|
'uglify',
|
|
'filerev',
|
|
'usemin',
|
|
'htmlmin'
|
|
]);
|
|
|
|
grunt.registerTask('default', [
|
|
//'newer:jshint',
|
|
'test',
|
|
'build'
|
|
]);
|
|
};
|