web-apps/apps/presentationeditor/embed/resources/less/watch.js

76 lines
2.5 KiB
JavaScript
Raw Normal View History

2016-03-11 00:48:53 +00:00
(function() {
var path = require('path'),
util = require('util'),
fs = require('fs'),
watchr = require('watchr'),
less = require('less'),
cwd = process.cwd(),
watchPath = process.argv.length === 3 ? path.resolve(cwd, process.argv[2]) : cwd;
var options = {
compress: false,
yuicompress: false,
optimization: 1,
silent: false,
paths: [],
color: true,
strictImports: false
};
var parseLessFile = function(input, output){
return function (e, data) {
if (e) {
console.log('lessc:', e.message);
}
new(less.Parser)({
paths: [path.dirname(input)],
optimization: options.optimization,
filename: input
}).parse(data, function (err, tree) {
if (err) {
less.writeError(err, options);
} else {
try {
var css = tree.toCSS({ compress: options.compress });
if (output) {
var fd = fs.openSync(output, "w");
fs.writeSync(fd, css, 0, "utf8");
} else {
console.log('WARNING: output is undefined');
util.print(css);
}
} catch (e) {
less.writeError(e, options);
}
}
});
};
};
console.log('>>> Script is polling for changes. Press Ctrl-C to Stop.');
watchr.watch({
path: watchPath,
listener: function(eventName, filePath, fileCurrentStat, filePreviousStat) {
if (eventName == 'change' || eventName == 'update') {
console.log('>>> Change detected at', new Date().toLocaleTimeString(), 'to:', path.basename(filePath));
var baseFilePath = path.basename(filePath, '.less');
fs.readFile(filePath, 'utf-8', parseLessFile(filePath, '../css/' + baseFilePath + '.css'));
console.log('overwrite', baseFilePath + '.css');
}
},
next: function(err, watcher) {
if (err) {
console.log('!!! epic fail');
throw err;
}
console.log('Now watching:', watchPath);
}
});
})();