module.exports = function (grunt) { // -- Config ------------------------------------------------------------------- grunt.initConfig({ nick : 'pure', pkg : grunt.file.readJSON('package.json'), // -- Clean Config --------------------------------------------------------- clean: { build : ['build/'], build_res: ['build/*-r.css'], release : ['release/<%= pkg.version %>/'] }, // -- Copy Config ---------------------------------------------------------- copy: { build: { src : 'src/**/css/*.css', dest : 'build/', expand : true, flatten: true }, release: { src : '{LICENSE,README.md,HISTORY.md}', dest: 'build/' } }, // -- Concat Config -------------------------------------------------------- concat: { build: { files: [ {'build/base.css': [ 'node_modules/normalize.css/normalize.css', 'build/base.css' ]}, {'build/buttons.css': [ 'build/buttons-core.css', 'build/buttons.css' ]}, {'build/forms-nr.css': [ 'build/forms.css' ]}, {'build/forms.css': [ 'build/forms-nr.css', 'build/forms-r.css' ]}, {'build/grids.css': [ 'build/grids-core.css', 'build/grids-units.css' ]}, {'build/menus.css': [ 'build/menus-core.css', 'build/menus-horizontal.css', 'build/menus-dropdown.css', 'build/menus-scrollable.css', 'build/menus-skin.css', ]}, // Rollups {'build/<%= nick %>.css': [ 'build/base.css', 'build/grids.css', 'build/buttons.css', 'build/forms.css', 'build/menus.css', 'build/tables.css' ]}, {'build/<%= nick %>-nr.css': [ 'build/base.css', 'build/grids.css', 'build/buttons.css', 'build/forms-nr.css', 'build/menus.css', 'build/tables.css' ]} ] } }, // -- PostCSS Config -------------------------------------------------------- postcss: { options: { processors: [ require('autoprefixer')() ] }, dist: { src: 'build/*.css' } }, // -- CSSLint Config ------------------------------------------------------- csslint: { options: { csslintrc: '.csslintrc' }, base : ['src/base/css/*.css'], buttons: ['src/buttons/css/*.css'], forms : ['src/forms/css/*.css'], grids : ['src/grids/css/*.css'], menus : ['src/menus/css/*.css'], tables : ['src/tables/css/*.css'] }, // -- CSSMin Config -------------------------------------------------------- cssmin: { options: { noAdvanced: true }, files: { expand: true, src : 'build/*.css', ext : '-min.css' } }, // -- Compress Config ------------------------------------------------------ compress: { release: { options: { archive: 'release/<%= pkg.version %>/<%= nick %>-<%= pkg.version %>.tar.gz' }, expand : true, flatten: true, src : 'build/*', dest : '<%= nick %>/<%= pkg.version %>/' } }, // -- License Config ------------------------------------------------------- license: { normalize: { options: { banner: [ '/*!', 'normalize.css v<%= pkg.devDependencies["normalize-css"] %> | MIT License | https://necolas.github.io/normalize.css/', 'Copyright (c) Nicolas Gallagher and Jonathan Neal', '*/\n' ].join('\n') }, expand: true, cwd : 'build/', src : ['base*.css', '<%= nick %>*.css'] }, yahoo: { options: { banner: [ '/*!', 'Pure v<%= pkg.version %>', 'Copyright 2013 Yahoo!', 'Licensed under the BSD License.', 'https://github.com/pure-css/pure/blob/master/LICENSE', '*/\n' ].join('\n') }, expand: true, src : ['build/*.css'] } }, // -- Pure Grids Units Config ---------------------------------------------- pure_grids: { default_units: { dest: 'build/grids-units.css', options: { units: [5, 24] } }, responsive: { dest: 'build/grids-responsive.css', options: { mediaQueries: { sm: 'screen and (min-width: 35.5em)', // 568px md: 'screen and (min-width: 48em)', // 768px lg: 'screen and (min-width: 64em)', // 1024px xl: 'screen and (min-width: 80em)', // 1280px xxl: 'screen and (min-width: 120em)', // 1920px xxxl: 'screen and (min-width: 160em)', // 2560px x4k: 'screen and (min-width: 240em)' // 3840px } } } }, // -- CSS Selectors Config ------------------------------------------------- css_selectors: { base: { src : 'build/base.css', dest: 'build/base-context.css', options: { mutations: [{prefix: '.pure'}] } } }, // -- Watch/Observe Config ------------------------------------------------- observe: { src: { files: 'src/**/css/*.css', tasks: ['test', 'suppress', 'build'], options: { interrupt: true } } } }); // -- Main Tasks --------------------------------------------------------------- // npm tasks. grunt.loadNpmTasks('grunt-contrib-clean'); grunt.loadNpmTasks('grunt-contrib-copy'); grunt.loadNpmTasks('grunt-contrib-concat'); grunt.loadNpmTasks('grunt-contrib-csslint'); grunt.loadNpmTasks('grunt-contrib-cssmin'); grunt.loadNpmTasks('grunt-contrib-compress'); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-css-selectors'); grunt.loadNpmTasks('@lodder/grunt-postcss'); grunt.loadNpmTasks('grunt-pure-grids'); // Local tasks. grunt.loadTasks('tasks/'); grunt.registerTask('default', ['test', 'build']); grunt.registerTask('test', ['csslint']); grunt.registerTask('build', [ 'clean:build', 'copy:build', 'pure_grids', 'concat:build', 'clean:build_res', 'css_selectors:base', 'postcss', 'cssmin', 'license' ]); // Makes the `watch` task run a build first. grunt.renameTask('watch', 'observe'); grunt.registerTask('watch', ['default', 'observe']); grunt.registerTask('release', [ 'default', 'clean:release', 'copy:release', 'compress:release' ]); };