12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- /*
- * grunt-contrib-cssmin
- * http://gruntjs.com/
- *
- * Copyright (c) 2012 Tim Branyen, contributors
- * Licensed under the MIT license.
- */
- 'use strict';
- module.exports = function(grunt) {
- var helper = require('grunt-lib-contrib').init(grunt);
- var path = require('path');
- grunt.registerMultiTask('cssmin', 'Minify CSS files', function() {
- var options = this.options({
- report: false
- });
- this.files.forEach(function(f) {
- var valid = f.src.filter(function(filepath) {
- // Warn on and remove invalid source files (if nonull was set).
- if (!grunt.file.exists(filepath)) {
- grunt.log.warn('Source file "' + filepath + '" not found.');
- return false;
- } else {
- return true;
- }
- });
- var max = valid
- .map(grunt.file.read)
- .join(grunt.util.normalizelf(grunt.util.linefeed));
- var min = valid.map(function(f) {
- options.relativeTo = path.dirname(f);
- return minifyCSS(grunt.file.read(f), options);
- })
- .join('');
- if (min.length < 1) {
- grunt.log.warn('Destination not written because minified CSS was empty.');
- } else {
- if ( options.banner ) {
- min = options.banner + grunt.util.linefeed + min;
- }
- grunt.file.write(f.dest, min);
- grunt.log.writeln('File ' + f.dest + ' created.');
- if(options.report) {
- helper.minMaxInfo(min, max, options.report);
- }
- }
- });
- });
- var minifyCSS = function(source, options) {
- try {
- return require('clean-css').process(source, options);
- } catch (e) {
- grunt.log.error(e);
- grunt.fail.warn('css minification failed.');
- }
- };
- };
|