123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- /* global module:false */
- module.exports = function(grunt) {
- var port = grunt.option('port') || 8000;
- var root = grunt.option('root') || '.';
- if (!Array.isArray(root)) root = [root];
- // 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://revealjs.com\n' +
- ' * MIT licensed\n' +
- ' *\n' +
- ' * Copyright (C) 2018 Hakim El Hattab, http://hakim.se\n' +
- ' */'
- },
- qunit: {
- files: [ 'test/*.html' ]
- },
- uglify: {
- options: {
- banner: '<%= meta.banner %>\n',
- ie8: true
- },
- build: {
- src: 'js/reveal.js',
- dest: 'js/reveal.min.js'
- }
- },
- sass: {
- core: {
- src: 'css/reveal.scss',
- dest: 'css/reveal.css'
- },
- themes: {
- expand: true,
- cwd: 'css/theme/source',
- src: ['*.sass', '*.scss'],
- dest: 'css/theme',
- ext: '.css'
- }
- },
- autoprefixer: {
- core: {
- src: 'css/reveal.css'
- }
- },
- cssmin: {
- options: {
- compatibility: 'ie9'
- },
- compress: {
- src: 'css/reveal.css',
- dest: 'css/reveal.min.css'
- }
- },
- jshint: {
- options: {
- curly: false,
- eqeqeq: true,
- immed: true,
- esnext: true,
- latedef: 'nofunc',
- newcap: true,
- noarg: true,
- sub: true,
- undef: true,
- eqnull: true,
- browser: true,
- expr: true,
- loopfunc: 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: root,
- livereload: true,
- open: true,
- useAvailablePort: true
- }
- }
- },
- zip: {
- bundle: {
- src: [
- 'index.html',
- 'css/**',
- 'js/**',
- 'lib/**',
- 'images/**',
- 'plugin/**',
- '**.md'
- ],
- dest: 'reveal-js-presentation.zip'
- }
- },
- watch: {
- js: {
- files: [ 'Gruntfile.js', 'js/reveal.js' ],
- tasks: 'js'
- },
- theme: {
- files: [
- 'css/theme/source/*.sass',
- 'css/theme/source/*.scss',
- 'css/theme/template/*.sass',
- 'css/theme/template/*.scss'
- ],
- tasks: 'css-themes'
- },
- css: {
- files: [ 'css/reveal.scss' ],
- tasks: 'css-core'
- },
- html: {
- files: root.map(path => path + '/*.html')
- },
- markdown: {
- files: root.map(path => path + '/*.md')
- },
- options: {
- livereload: true
- }
- },
- retire: {
- js: [ 'js/reveal.js', 'lib/js/*.js', 'plugin/**/*.js' ],
- node: [ '.' ]
- }
- });
- // Dependencies
- grunt.loadNpmTasks( 'grunt-contrib-connect' );
- grunt.loadNpmTasks( 'grunt-contrib-cssmin' );
- grunt.loadNpmTasks( 'grunt-contrib-jshint' );
- grunt.loadNpmTasks( 'grunt-contrib-qunit' );
- grunt.loadNpmTasks( 'grunt-contrib-uglify' );
- grunt.loadNpmTasks( 'grunt-contrib-watch' );
- grunt.loadNpmTasks( 'grunt-autoprefixer' );
- grunt.loadNpmTasks( 'grunt-retire' );
- grunt.loadNpmTasks( 'grunt-sass' );
- 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' ] );
- };
|