|
// Generated on 2013-11-11 using generator-webapp 0.4.4 |
|
/* jshint camelcase: false */ |
|
'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) { |
|
// show elapsed time at the end |
|
require('time-grunt')(grunt); |
|
// load all grunt tasks |
|
require('load-grunt-tasks')(grunt); |
|
grunt.loadNpmTasks('assemble'); |
|
grunt.loadNpmTasks('grunt-modernizr'); |
|
grunt.loadNpmTasks('grunt-webfont'); |
|
grunt.loadNpmTasks('grunt-requirejs'); |
|
grunt.loadNpmTasks('grunt-mkdir'); |
|
grunt.loadNpmTasks('grunt-build-control'); |
|
grunt.loadNpmTasks('grunt-responsive-images'); |
|
grunt.loadNpmTasks('grunt-prettify'); |
|
grunt.loadNpmTasks('grunt-githooks'); |
|
grunt.loadNpmTasks('grunt-inline'); |
|
grunt.loadNpmTasks('grunt-exec'); |
|
grunt.loadNpmTasks('grunt-contrib-sass'); |
|
grunt.loadNpmTasks('grunt-bless'); |
|
|
|
grunt.initConfig({ |
|
bless: { |
|
css: { |
|
options: {}, |
|
files: { |
|
'<%= yeoman.app %>/styles/main-blessed.css': '<%= yeoman.app %>/styles/main.css', |
|
'<%= yeoman.app %>/styles/oldie-blessed.css': '<%= yeoman.app %>/styles/oldie.css', |
|
'<%= yeoman.app %>/styles/styleguide-blessed.css': '<%= yeoman.app %>/styles/styleguide.css', |
|
'<%= yeoman.app %>/styles/styleguide-oldie-blessed.css': '<%= yeoman.app %>/styles/styleguide-oldie.css' |
|
} |
|
} |
|
}, |
|
assemble: { |
|
options: { |
|
helpers: [ |
|
'<%= yeoman.src %>/styleguide-src/handlebarshelpers/*.js' |
|
], |
|
docBase: '<%= yeoman.src %>/documentation', |
|
sgComponent: { |
|
cwd: '<%= yeoman.src %>/styleguide-src/layouts', |
|
src: '<%= yeoman.src %>/src/partials' |
|
} |
|
}, |
|
styleguide: { |
|
options: { |
|
flatten: true, |
|
layoutdir: '<%= yeoman.src %>/styleguide-src/layouts', |
|
layout: false, |
|
partials: [ |
|
'<%= yeoman.src %>/styleguide-src/navigation/*.hbs', |
|
'<%= yeoman.src %>/styleguide-src/partials/*.hbs', |
|
'<%= yeoman.src %>/styleguide-src/layouts/*.hbs', |
|
'<%= yeoman.src %>/src/_framework/partials/**/*.hbs', |
|
'<%= yeoman.src %>/src/partials/**/*.hbs', |
|
'<%= yeoman.src %>/src/layouts/*.hbs', |
|
'<%= yeoman.src %>/src/pages/{parts,proxy}/*.hbs' |
|
], |
|
data: ['<%= yeoman.src %>/src/data/*.{json,yml}', '<%= yeoman.app %>/styleguide-src/data/*.{json,yml}'] |
|
}, |
|
files: { |
|
'<%= yeoman.tmp %>/': [ |
|
'<%= yeoman.src %>/src/pages/*.hbs' |
|
] |
|
} |
|
}, |
|
htmlparts: { |
|
options: { |
|
flatten: true, |
|
partials: [ |
|
'<%= yeoman.src %>/src/partials/**/*.hbs' |
|
], |
|
data: '<%= yeoman.src %>/src/data/*.{json,yml}' |
|
}, |
|
files: { |
|
'<%= yeoman.tmp %>/parts/': [ |
|
'<%= yeoman.src %>/src/pages/parts/*.hbs' |
|
] |
|
} |
|
}, |
|
proxies: { |
|
options: { |
|
flatten: true, |
|
partials: [ |
|
'<%= yeoman.src %>/src/partials/**/*.hbs' |
|
], |
|
data: '<%= yeoman.src %>/src/data/*.{json,yml}' |
|
}, |
|
files: { |
|
'<%= yeoman.tmp %>/proxy/': [ |
|
'<%= yeoman.src %>/src/pages/proxy/*.hbs' |
|
] |
|
} |
|
} |
|
}, |
|
|
|
autoprefixer: { |
|
options: { |
|
browsers: ['> 1%', 'last 2 versions', 'ff > 24', 'Opera 12.1'], |
|
cascade: true |
|
}, |
|
server: { |
|
files: [{ |
|
expand: true, |
|
cwd: '<%= yeoman.app %>/styles/', |
|
src: ['*.css', '!DisplayResolutions.css', '!*-blessed*'], |
|
dest: '<%= yeoman.app %>/styles/' |
|
}] |
|
} |
|
}, |
|
|
|
clean: { |
|
// Clean dist folder before creating styleguide |
|
dist: { |
|
files: [{ |
|
dot: true, |
|
src: [ |
|
'<%= yeoman.dist %>/*' |
|
] |
|
}] |
|
}, |
|
|
|
// Remove font files before regenerating |
|
fonts: { |
|
files: [{ |
|
dot: true, |
|
src: [ |
|
'<%= yeoman.app %>/assets/fonts/icons' |
|
] |
|
}] |
|
}, |
|
|
|
// Clean local server folder |
|
server: '<%= yeoman.tmp %>' |
|
}, |
|
|
|
concat: { |
|
'<%= yeoman.app %>/scripts/oldie.js': [ |
|
'<%= yeoman.app %>/scripts/bower_components/html5shiv/dist/html5shiv.js', |
|
'<%= yeoman.app %>/scripts/bower_components/matchmedia/matchMedia.js', |
|
'<%= yeoman.app %>/scripts/bower_components/matchmedia/matchMedia.addListener.js' |
|
], |
|
'<%= yeoman.app %>/scripts/vendor/matchmedia-polyfills.js': [ |
|
'<%= yeoman.app %>/scripts/bower_components/matchmedia/matchMedia.js', |
|
'<%= yeoman.app %>/scripts/bower_components/matchmedia/matchMedia.addListener.js' |
|
], |
|
'<%= yeoman.app %>/scripts/vendor/enquirejs-legacy.js': [ |
|
'<%= yeoman.app %>/scripts/bower_components/matchmedia/matchMedia.js', |
|
'<%= yeoman.app %>/scripts/bower_components/matchmedia/matchMedia.addListener.js', |
|
'<%= yeoman.app %>/scripts/bower_components/enquire/dist/enquire.min.js' |
|
] |
|
}, |
|
|
|
concurrent: { |
|
server: [ |
|
'sass:serve' |
|
], |
|
test: [ |
|
'copy:styles' |
|
] |
|
}, |
|
|
|
connect: { |
|
options: { |
|
port: 9000, |
|
livereload: 35729, |
|
hostname: '127.0.0.1' |
|
}, |
|
livereload: { |
|
options: { |
|
open: true, |
|
base: [ |
|
'<%= yeoman.app %>', |
|
'<%= yeoman.tmp %>' |
|
] |
|
} |
|
}, |
|
dist: { |
|
options: { |
|
open: true, |
|
base: '<%= yeoman.dist %>', |
|
livereload: false |
|
} |
|
} |
|
}, |
|
|
|
copy: { |
|
dist: { |
|
files: [{ |
|
expand: true, |
|
dot: true, |
|
cwd: '<%= yeoman.tmp %>', |
|
dest: '<%= yeoman.dist %>', |
|
src: [ |
|
'*.{ico,png,txt}', |
|
'*.html', |
|
'**/*.html' |
|
] |
|
}, |
|
{ |
|
expand: true, |
|
dot: true, |
|
cwd: '<%= yeoman.src %>', |
|
dest: '<%= yeoman.dist %>', |
|
src: [ |
|
'src/data/*.json' |
|
] |
|
}] |
|
}, |
|
shims: { |
|
files: [{ |
|
expand: true, |
|
dot: true, |
|
cwd: '<%= yeoman.app %>/scripts/bower_components/webshim/js-webshim/minified/shims', |
|
dest: '<%= yeoman.app %>/scripts/shims', |
|
src: [ |
|
'{,*/}*' |
|
] |
|
}] |
|
} |
|
}, |
|
|
|
jscs: { |
|
src: [ |
|
'<%= yeoman.app %>/scripts/components/*.js', |
|
'!<%= yeoman.app %>/scripts/components/templates.js' |
|
], |
|
options: { |
|
config: '<%= yeoman.config %>/.jscs.json' |
|
} |
|
}, |
|
|
|
jshint: { |
|
options: { |
|
jshintrc: '<%= yeoman.config %>/.jshintrc', |
|
reporter: require('jshint-stylish'), |
|
ignores: [] |
|
}, |
|
all: [ |
|
'Gruntfile.js', |
|
'<%= yeoman.app %>/scripts/{,*/}*.js', |
|
'!<%= yeoman.app %>/scripts/bower_components/*', |
|
'!<%= yeoman.app %>/scripts/vendor/*', |
|
'!<%= yeoman.app %>/scripts/oldie.js', |
|
'!<%= yeoman.app %>/scripts/shims/**/*', |
|
'!<%= yeoman.test %>/*.js', |
|
'<%= yeoman.test %>/spec/{,*/}*.js', |
|
'!<%= yeoman.app %>/scripts/components/templates.js' |
|
] |
|
}, |
|
|
|
karma: { |
|
unit: { |
|
configFile: '<%= yeoman.test %>/karma.conf.js', |
|
singleRun: true |
|
}, |
|
ci: { |
|
configFile: '<%= yeoman.test %>/karma-ci.conf.js', |
|
singleRun: true |
|
}, |
|
watch: { |
|
configFile: '<%= yeoman.test %>/karma.conf.js' |
|
} |
|
}, |
|
|
|
modernizr: { |
|
devFile: '<%= yeoman.app %>/scripts/bower_components/modernizr/modernizr.js', |
|
outputFile: '<%= yeoman.app %>/scripts/vendor/modernizr-custom.js', |
|
files: [ |
|
'<%= yeoman.app %>/scripts/{,*/}*.js', |
|
'<%= yeoman.app %>/styles/{,**/}*.{scss,sass}' |
|
], |
|
extra: { |
|
canvas: true, |
|
load: true, |
|
inputtypes: true, |
|
input: true |
|
}, |
|
extensibility : { |
|
addtest : true, |
|
teststyles : true |
|
}, |
|
uglify: true |
|
}, |
|
|
|
prettify: { |
|
options: { |
|
// Task-specific options go here. |
|
config: '<%= yeoman.config %>/.jsbeautifyrc' |
|
}, |
|
all: { |
|
expand: true, |
|
cwd: '<%= yeoman.dist %>', |
|
ext: '.html', |
|
src: ['*.html'], |
|
dest: '<%= yeoman.dist %>' |
|
} |
|
}, |
|
|
|
// grunt-contrib-sass |
|
sass: { |
|
serve: { |
|
options: { |
|
sourcemap: false, |
|
trace: false, |
|
unixNewlines: true, |
|
style: 'nested', |
|
precision: 3, |
|
debugInfo: false, |
|
lineNumbers: true |
|
}, |
|
files: [{ |
|
expand: true, |
|
cwd: '<%= yeoman.app %>/styles/scss', |
|
src: ['main.scss', 'oldie.scss', 'styleguide.scss', 'styleguide-oldie.scss'], |
|
dest: '<%= yeoman.app %>/styles', |
|
ext: '.css' |
|
}] |
|
} |
|
}, |
|
|
|
scsslint: { |
|
src: ['<%= yeoman.app %>/styles/{,**/}*.{scss,sass,css}'], |
|
options: { |
|
config: '<%= yeoman.config %>/.scss-lint.yml', |
|
colorizeOutput: false, |
|
exclude: [ |
|
'<%= yeoman.app %>/styles/scss/_framework/_vendor/{,**/}*', |
|
'<%= yeoman.app %>/styles/scss/_styleguide/_tdcss.scss', |
|
'<%= yeoman.app %>/styles/scss/_framework/_webfonts/{,**/}*', |
|
'<%= yeoman.app %>/styles/scss/modules/_owlcarousel.scss', |
|
'<%= yeoman.app %>/styles/scss/modules/_royalslider.scss', |
|
'<%= yeoman.app %>/styles/vendor/{,**/}*', |
|
'<%= yeoman.app %>/styles/*.css' |
|
] |
|
} |
|
}, |
|
|
|
inline: { |
|
serve: { |
|
src: [ '<%= yeoman.tmp %>/{,*/}*.html' ] |
|
}, |
|
dist: { |
|
src: [ '<%= yeoman.dist %>/{,*/}*.html' ] |
|
} |
|
}, |
|
|
|
uglify: { |
|
options: { |
|
mangle: false |
|
}, |
|
scripts: { |
|
files: { |
|
'<%= yeoman.app %>/scripts/oldie.js': ['<%= yeoman.app %>/scripts/oldie.js'], |
|
'<%= yeoman.app %>/scripts/vendor/matchmedia-polyfills.js': ['<%= yeoman.app %>/scripts/vendor/matchmedia-polyfills.js'], |
|
'<%= yeoman.app %>/scripts/vendor/enquirejs-legacy.js': ['<%= yeoman.app %>/scripts/vendor/enquirejs-legacy.js'] |
|
} |
|
} |
|
}, |
|
|
|
watch: { |
|
compass: { |
|
files: ['<%= yeoman.app %>/styles/{,**/}*.{scss,sass}'], |
|
tasks: ['sass:serve', 'bless:css', 'autoprefixer:server'] |
|
}, |
|
livereload: { |
|
options: { |
|
livereload: '<%= connect.options.livereload %>' |
|
}, |
|
files: [ |
|
'{<%= yeoman.tmp %>,<%= yeoman.app %>}/{,**/}*.html', |
|
'<%= yeoman.app %>/styles/{,**/}*.css', |
|
'<%= yeoman.app %>/scripts/{,**/}*.js', |
|
'!{<%= yeoman.tmp %>,<%= yeoman.app %>}/scripts/bower_components/{,**/}*.js', |
|
'!{<%= yeoman.tmp %>,<%= yeoman.app %>}/scripts/vendor/{,**/}*.js', |
|
'<%= yeoman.app %>/assets/images/{,**/}*.{gif,jpeg,jpg,png,svg,webp}' |
|
] |
|
}, |
|
assemble: { |
|
files: ['<%= yeoman.app %>/src/**/*.{md,hbs,yml}', '<%= yeoman.app %>/styleguide-src/**/*.{md,hbs,yml}'], |
|
tasks: ['assemble', 'inline:serve'] |
|
} |
|
}, |
|
|
|
webfont: { |
|
dev_icons: { |
|
src: '<%= yeoman.app %>/assets/icons/font/*.svg', |
|
dest: '<%= yeoman.app %>/assets/fonts/icons', |
|
destCss: '<%= yeoman.app %>/styles/scss/base', |
|
options: { |
|
template: '<%= yeoman.app %>/styles/scss/_framework/_webfonts/sass.css', |
|
htmlDemo: false, |
|
hashes: false, |
|
stylesheet: 'scss', |
|
relativeFontPath: '../assets/fonts/icons/', |
|
syntax: 'bootstrap', |
|
templateOptions: { |
|
baseClass: 'devcon', |
|
classPrefix: 'icon', |
|
mixinPrefix: 'devcon' |
|
} |
|
} |
|
} |
|
}, |
|
|
|
// configurable paths |
|
yeoman: { |
|
app: '../', |
|
dist: 'pages', |
|
test: '../scripts/test', |
|
config: '../.config', |
|
tmp: '.tmp', |
|
src: './' |
|
} |
|
}); |
|
|
|
/** |
|
* Post-install scripts |
|
* ------------------------------------------------------------ |
|
*/ |
|
|
|
grunt.registerTask('post-install', [ |
|
'modernizr', |
|
'clean:hooks', |
|
'githooks' |
|
]); |
|
|
|
|
|
/** |
|
* Run styleguide locally |
|
* ------------------------------------------------------------ |
|
*/ |
|
|
|
grunt.registerTask('serve', function (target) { |
|
if (target === 'dist') { |
|
return grunt.task.run(['build', 'connect:dist:keepalive']); |
|
} |
|
|
|
// load local serve config if exist |
|
if (grunt.file.exists('serve-config.json')) { |
|
var localServeConfig = grunt.file.readJSON('serve-config.json'); |
|
|
|
// merge local options to default init configuration |
|
grunt.config.merge(localServeConfig); |
|
} |
|
|
|
grunt.task.run([ |
|
'clean:server', |
|
'assemble', |
|
'run-sass', |
|
'inline:serve', |
|
'connect:livereload', |
|
'watch' |
|
]); |
|
}); |
|
|
|
|
|
/** |
|
* Build HTML-pages from handlebars and update the styleguide |
|
* ------------------------------------------------------------ |
|
*/ |
|
|
|
grunt.registerTask('build-prototypes', [ |
|
'karma:unit', |
|
'build' |
|
]); |
|
|
|
grunt.registerTask('build', [ |
|
'clean:dist', |
|
'assemble', |
|
'concat', |
|
'uglify:scripts', |
|
'copy:dist', |
|
'run-sass', |
|
'prettify:all', |
|
'modernizr', |
|
'inline:dist' |
|
]); |
|
|
|
|
|
/** |
|
* NEW. |
|
* ------------------------------------------------------------ |
|
*/ |
|
|
|
grunt.registerTask('update-shims', [ |
|
'copy:shims' |
|
]); |
|
|
|
|
|
/** |
|
* Utility tasks to generate icon fonts and image versions. |
|
* ------------------------------------------------------------ |
|
*/ |
|
|
|
grunt.registerTask('generate-icons', [ |
|
'clean:fonts', |
|
'webfont:dev_icons' |
|
]); |
|
|
|
grunt.registerTask('run-sass', [ |
|
'sass:serve', |
|
'autoprefixer:server', |
|
'bless:css' |
|
]); |
|
|
|
|
|
/** |
|
* Different test tasks |
|
* ------------------------------------------------------------ |
|
*/ |
|
|
|
grunt.registerTask('test', [ |
|
'karma:watch', |
|
'jscs', |
|
'jshint', |
|
'scsslint' |
|
]); |
|
|
|
grunt.registerTask('test-js', [ |
|
'jshint', |
|
'karma:ci', |
|
'jscs' |
|
]); |
|
|
|
grunt.registerTask('test-ci', [ |
|
'scsslint', |
|
'test-js' |
|
]); |
|
|
|
grunt.registerTask('default', [ |
|
'jscs', |
|
'jshint', |
|
'scsslint', |
|
'build' |
|
]); |
|
}; |