backoffice/node_modules/grunt-less/tasks/less.js

111 lines
2.6 KiB
JavaScript

/*
* grunt-less
* https://github.com/jachardi/grunt-less
*
* Copyright (c) 2012 Jake Harding
* Licensed under the MIT license.
*/
module.exports = function(grunt) {
// Grunt utilities.
var task = grunt.task;
var file = grunt.file;
var utils = grunt.utils;
var log = grunt.log;
var verbose = grunt.verbose;
var fail = grunt.fail;
var option = grunt.option;
var config = grunt.config;
var template = grunt.template;
// external dependencies
var fs = require('fs');
var path = require('path');
var less = require('less');
// ==========================================================================
// TASKS
// ==========================================================================
grunt.registerMultiTask('less', 'Compile LESS files.', function() {
var src = this.file.src;
var dest = this.file.dest;
var options = this.data.options || {};
if (!src) {
grunt.warn('Missing src property.');
return false;
}
if (!dest) {
grunt.warn('Missing dest property');
return false;
}
var srcFiles = file.expandFiles(src);
var done = this.async();
grunt.helper('less', srcFiles, options, function(err, css) {
if (err) {
grunt.warn(err);
done(false);
return;
}
file.write(dest, css);
done();
});
});
// ==========================================================================
// HELPERS
// ==========================================================================
grunt.registerHelper('less', function(srcFiles, options, callback) {
var compileLESSFile = function(src, callback) {
var parser = new less.Parser({
paths: [path.dirname(src)]
});
// read source file
fs.readFile(src, 'utf8', function(err, data) {
if (err) {
callback(err);
}
// send data from source file to LESS parser to get CSS
verbose.writeln('Parsing ' + src);
parser.parse(data, function(err, tree) {
if (err) {
callback(err);
}
var css = null;
try {
css = tree.toCSS({
compress: options.compress,
yuicompress: options.yuicompress
});
} catch(e) {
callback(e);
return;
}
callback(null, css);
});
});
};
utils.async.map(srcFiles, compileLESSFile, function(err, results) {
if (err) {
callback(err);
return;
}
callback(null, results.join(utils.linefeed));
});
});
};