/** * Owl Carousel * * Bartosz Wojciechowski * * Copyright (c) 2014 * Licensed under the MIT license. */ module.exports = function(grunt) { require('load-grunt-tasks')(grunt); grunt .initConfig({ pkg: grunt.file.readJSON('package.json'), app: grunt.file.readJSON('_config.json'), banner: '/**\n' + ' * Owl Carousel v<%= pkg.version %>\n' + ' * Copyright 2013-<%= grunt.template.today("yyyy") %> <%= pkg.author.name %>\n' + ' * Licensed under: <%= pkg.license %>\n' + ' */\n', // assemble assemble: { options: { flatten: false, expand: true, production: false, assets: '<%= app.docs.dest %>/assets', postprocess: require('pretty'), // metadata pkg: '<%= pkg %>', app: '<%= app %>', data: [ '<%= app.docs.src %>/data/*.{json,yml}' ], // templates partials: '<%= app.docs.templates %>/partials/*.hbs', layoutdir: '<%= app.docs.layouts %>/', // extensions helpers: '<%= app.docs.src %>/helpers/*.js' }, index: { options: { layout: 'home.hbs' }, files: [ { expand: true, cwd: '<%= app.docs.pages %>/', src: '*.hbs', dest: '<%= app.docs.dest %>/' } ] }, demos: { options: { layout: 'demos.hbs' }, files: [ { expand: true, cwd: '<%= app.docs.pages %>/demos/', src: '*.hbs', dest: '<%= app.docs.dest %>/demos' } ] }, docs: { options: { layout: 'docs.hbs' }, files: [ { expand: true, cwd: '<%= app.docs.pages %>/docs/', src: '*.hbs', dest: '<%= app.docs.dest %>/docs' } ] } }, // clean clean: { docs: [ '<%= app.docs.dest %>' ], dist: [ 'dist' ] }, // sass sass: { docs: { options: { outputStyle: 'compressed', includePaths: [ '<%= app.docs.src %>/assets/scss/', 'node_modules/foundation-sites/scss' ] }, files: { '<%= app.docs.dest %>/assets/css/docs.theme.min.css': '<%= app.docs.src %>/assets/scss/docs.theme.scss' } }, dist: { options: { outputStyle: 'nested' }, files: { 'dist/assets/<%= pkg.name %>.css': 'src/scss/<%= pkg.name %>.scss', 'dist/assets/owl.theme.default.css': 'src/scss/owl.theme.default.scss', 'dist/assets/owl.theme.green.css': 'src/scss/owl.theme.green.scss' } } }, autoprefixer: { options: { browsers: [ 'last 2 versions', 'ie 7', 'ie 8', 'ie 9', 'ie 10', 'ie 11' ] }, dist: { files: { 'dist/assets/<%= pkg.name %>.css': 'dist/assets/<%= pkg.name %>.css', 'dist/assets/owl.theme.default.css': 'dist/assets/owl.theme.default.css', 'dist/assets/owl.theme.green.css': 'dist/assets/owl.theme.green.css' } } }, concat: { dist: { files: { 'dist/<%= pkg.name %>.js': '<%= app.src.scripts %>' } } }, cssmin: { dist: { files: { 'dist/assets/<%= pkg.name %>.min.css': 'dist/assets/<%= pkg.name %>.css', 'dist/assets/owl.theme.default.min.css': 'dist/assets/owl.theme.default.css', 'dist/assets/owl.theme.green.min.css': 'dist/assets/owl.theme.green.css' } } }, jshint: { options: { jshintrc: 'src/js/.jshintrc' }, dist: { src: [ '<%= app.src.scripts %>', 'Gruntfile.js' ] } }, qunit: { options: { timeout: 10000 }, dist: [ 'test/index.html' ] }, jscs: { options: { config: 'src/js/.jscsrc', reporter: 'text.js', reporterOutput: 'jscs.report.txt' }, dist: { src: [ '<%= app.src.scripts %>', 'Gruntfile.js' ] } }, usebanner: { dist: { options: { banner: '<%= banner %>', linebreak: false }, files: { src: [ 'dist/<%= pkg.name %>.js', 'dist/assets/*.css' ] } } }, uglify: { options: { banner: '<%= banner %>' }, dist: { files: { 'dist/<%= pkg.name %>.min.js': 'dist/<%= pkg.name %>.js' } } }, // copy copy: { distImages: { expand: true, flatten: true, cwd: 'src/', src: [ 'img/*.*' ], dest: 'dist/assets' }, distToDocs: { expand: true, cwd: 'dist/', src: [ '**/*.*' ], dest: '<%= app.docs.dest %>/assets/owlcarousel' }, srcToDocs: { expand: true, cwd: 'src/js', src: [ '**/*.js' ], dest: '<%= app.docs.dest %>/assets/owlcarousel/src' }, docsAssets: { expand: true, cwd: '<%= app.docs.src %>/assets/', src: [ 'css/*.css', 'vendors/*.js', 'vendors/*.map', 'img/*.*', 'js/*.*' ], dest: '<%= app.docs.dest %>/assets/' }, readme: { files: [ { 'dist/LICENSE': 'LICENSE', 'dist/README.md': 'README.md' } ] } }, // connect connect: { options: { port: 9600, open: true, livereload: true, hostname: 'localhost' }, docs: { options: { base: "<%= app.docs.dest %>" } } }, // watch watch: { options: { livereload: true }, templatesDocs: { files: [ '<%= app.docs.templates %>/**/*.hbs' ], tasks: [ 'assemble' ] }, sassDocs: { files: [ '<%= app.docs.src %>/assets/**/*.scss' ], tasks: [ 'sass:docs' ] }, sass: { files: [ 'src/**/*.scss' ], tasks: [ 'sass:dist', 'cssmin:dist', 'usebanner:dist', 'copy:distToDocs' ] }, jsDocs: { files: [ '<%= app.docs.src %>/assets/**/*.js' ], tasks: [ 'copy:docsAssets' ] }, js: { files: [ 'src/**/*.js' ], tasks: [ 'jscs:dist', 'jshint:dist', 'qunit:dist', 'concat:dist', 'uglify:dist', 'usebanner:dist', 'copy:distToDocs', 'copy:srcToDocs' ] }, helpersDocs: { files: [ '<%= app.docs.src %>/helpers/*.js' ], tasks: [ 'assemble' ] }, test: { files: [ 'test/*.html', 'test/unit/*.js' ], tasks: [ 'qunit:dist' ] } }, // compress zip compress: { zip: { options: { archive: 'docs/download/owl.carousel.<%= pkg.version %>.zip' }, files: [ { expand: true, cwd: 'dist/', src: [ '**' ], dest: 'owl.carousel.<%= pkg.version %>' } ] } }, // publish to github pages 'gh-pages': { options: { base: 'docs' }, src: '**/*' } }); grunt.loadNpmTasks('assemble'); // tasks grunt.registerTask('dist', [ 'clean:dist', 'sass:dist', 'autoprefixer', 'concat:dist', 'cssmin:dist', 'copy:distImages', 'usebanner:dist', 'uglify:dist', 'copy:readme' ]); grunt.registerTask('docs', [ 'dist', 'clean:docs', 'assemble', 'sass:docs', 'copy:docsAssets', 'copy:distToDocs', 'zip' ]); grunt.registerTask('test', [ 'jshint:dist', 'qunit:dist', 'jscs:dist' ]); grunt.registerTask('default', [ 'dist', 'docs', 'test' ]); grunt.registerTask('serve', [ 'connect:docs', 'watch' ]); grunt.registerTask('zip', [ 'compress' ]); grunt.registerTask('deploy', [ 'docs', 'gh-pages' ]); };