/* global module:false */ module.exports = function(grunt) { var port = grunt.option('port') || 8000; // Project configuration grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), meta: { banner: '/*!\n' + ' * reveal.js <%= pkg.version %> (<%= grunt.template.today("yyyy-mm-dd, HH:MM") %>)\n' + ' * http://lab.hakim.se/reveal-js\n' + ' * MIT licensed\n' + ' *\n' + ' * Copyright (C) 2015 Hakim El Hattab, http://hakim.se\n' + ' */' }, qunit: { files: [ 'test/*.html' ] }, uglify: { options: { banner: '<%= meta.banner %>\n' }, build: { src: 'js/reveal.js', dest: 'js/reveal.min.js' } }, sass: { core: { files: { 'css/reveal.css': 'css/reveal.scss', } }, themes: { files: { 'css/theme/black.css': 'css/theme/source/black.scss', 'css/theme/white.css': 'css/theme/source/white.scss', 'css/theme/league.css': 'css/theme/source/league.scss', 'css/theme/beige.css': 'css/theme/source/beige.scss', 'css/theme/night.css': 'css/theme/source/night.scss', 'css/theme/serif.css': 'css/theme/source/serif.scss', 'css/theme/simple.css': 'css/theme/source/simple.scss', 'css/theme/sky.css': 'css/theme/source/sky.scss', 'css/theme/moon.css': 'css/theme/source/moon.scss', 'css/theme/solarized.css': 'css/theme/source/solarized.scss', 'css/theme/blood.css': 'css/theme/source/blood.scss' } } }, autoprefixer: { dist: { src: 'css/reveal.css' } }, cssmin: { compress: { files: { 'css/reveal.min.css': [ 'css/reveal.css' ] } } }, jshint: { options: { curly: false, eqeqeq: true, immed: true, latedef: true, newcap: true, noarg: true, sub: true, undef: true, eqnull: true, browser: true, expr: true, globals: { head: false, module: false, console: false, unescape: false, define: false, exports: false } }, files: [ 'Gruntfile.js', 'js/reveal.js' ] }, connect: { server: { options: { port: port, base: '.', livereload: true, open: true } } }, zip: { 'reveal-js-presentation.zip': [ 'index.html', 'css/**', 'js/**', 'lib/**', 'images/**', 'plugin/**' ] }, watch: { options: { livereload: true }, js: { files: [ 'Gruntfile.js', 'js/reveal.js' ], tasks: 'js' }, theme: { files: [ 'css/theme/source/*.scss', 'css/theme/template/*.scss' ], tasks: 'css-themes' }, css: { files: [ 'css/reveal.scss' ], tasks: 'css-core' }, html: { files: [ 'index.html'] } } }); // Dependencies grunt.loadNpmTasks( 'grunt-contrib-qunit' ); grunt.loadNpmTasks( 'grunt-contrib-jshint' ); grunt.loadNpmTasks( 'grunt-contrib-cssmin' ); grunt.loadNpmTasks( 'grunt-contrib-uglify' ); grunt.loadNpmTasks( 'grunt-contrib-watch' ); grunt.loadNpmTasks( 'grunt-sass' ); grunt.loadNpmTasks( 'grunt-contrib-connect' ); grunt.loadNpmTasks( 'grunt-autoprefixer' ); grunt.loadNpmTasks( 'grunt-zip' ); // Default task grunt.registerTask( 'default', [ 'css', 'js' ] ); // JS task grunt.registerTask( 'js', [ 'jshint', 'uglify', 'qunit' ] ); // Theme CSS grunt.registerTask( 'css-themes', [ 'sass:themes' ] ); // Core framework CSS grunt.registerTask( 'css-core', [ 'sass:core', 'autoprefixer', 'cssmin' ] ); // All CSS grunt.registerTask( 'css', [ 'sass', 'autoprefixer', 'cssmin' ] ); // Package presentation to archive grunt.registerTask( 'package', [ 'default', 'zip' ] ); // Serve presentation locally grunt.registerTask( 'serve', [ 'connect', 'watch' ] ); // Run tests grunt.registerTask( 'test', [ 'jshint', 'qunit' ] ); };