| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 | 
							- 'use strict';
 
- var path = require('path');
 
- var util = require('util');
 
- var CleanCSS = require('clean-css');
 
- var chalk = require('chalk');
 
- var maxmin = require('maxmin');
 
- module.exports = function (grunt) {
 
-   var getAvailableFiles = function (filesArray) {
 
-     return filesArray.filter(function (filepath) {
 
-       if (!grunt.file.exists(filepath)) {
 
-         grunt.log.warn('Source file ' + chalk.cyan(filepath) + ' not found');
 
-         return false;
 
-       }
 
-       return true;
 
-     });
 
-   };
 
-   grunt.registerMultiTask('cssmin', 'Minify CSS', function () {
 
-     var created = {
 
-       maps: 0,
 
-       files: 0
 
-     };
 
-     var size = {
 
-       before: 0,
 
-       after: 0
 
-     };
 
-     this.files.forEach(function (file) {
 
-       var options = this.options({
 
-         rebase: false,
 
-         report: 'min',
 
-         sourceMap: false
 
-       });
 
-       var availableFiles = getAvailableFiles(file.src);
 
-       var compiled = '';
 
-       options.target = file.dest;
 
-       options.relativeTo = path.dirname(availableFiles[0]);
 
-       try {
 
-         compiled = new CleanCSS(options).minify(availableFiles);
 
-         if (compiled.errors.length) {
 
-           grunt.warn(compiled.errors.toString());
 
-           return;
 
-         }
 
-         if (compiled.warnings.length) {
 
-           grunt.log.error(compiled.warnings.toString());
 
-         }
 
-         if (options.debug) {
 
-           grunt.log.writeln(util.format(compiled.stats));
 
-         }
 
-       } catch (err) {
 
-         grunt.log.error(err);
 
-         grunt.warn('CSS minification failed at ' + availableFiles + '.');
 
-       }
 
-       var compiledCssString = compiled.styles;
 
-       var unCompiledCssString = availableFiles.map(function (file) {
 
-         return grunt.file.read(file);
 
-       }).join('');
 
-       size.before += unCompiledCssString.length;
 
-       if (options.sourceMap) {
 
-         compiledCssString += '\n' + '/*# sourceMappingURL=' + path.basename(file.dest) + '.map */';
 
-         grunt.file.write(file.dest + '.map', compiled.sourceMap.toString());
 
-         created.maps++;
 
-         grunt.verbose.writeln('File ' + chalk.cyan(file.dest + '.map') + ' created');
 
-       }
 
-       grunt.file.write(file.dest, compiledCssString);
 
-       created.files++;
 
-       size.after += compiledCssString.length;
 
-       grunt.verbose.writeln('File ' + chalk.cyan(file.dest) + ' created ' + chalk.dim(maxmin(unCompiledCssString, compiledCssString, options.report === 'gzip')));
 
-     }, this);
 
-     if (created.maps > 0) {
 
-       grunt.log.ok(created.maps + ' source' + grunt.util.pluralize(this.files.length, 'map/maps') + ' created.');
 
-     }
 
-     if (created.files > 0) {
 
-       grunt.log.ok(created.files + ' ' + grunt.util.pluralize(this.files.length, 'file/files') + ' created. ' + chalk.dim(maxmin(size.before, size.after)));
 
-     } else {
 
-       grunt.log.warn('No files created.');
 
-     }
 
-   });
 
- };
 
 
  |