Skip to content

Instantly share code, notes, and snippets.

@mdnmdn
Last active July 10, 2017 13:04
Show Gist options
  • Save mdnmdn/19208cc2ee094510ed1a6496ec9b3121 to your computer and use it in GitHub Desktop.
Save mdnmdn/19208cc2ee094510ed1a6496ec9b3121 to your computer and use it in GitHub Desktop.
totaljs less module
// MIT License
// Copyright Peter Širka <petersirka@gmail.com>
var less = require('less');
var fs = require('fs');
exports.install = function() {
// THE PROBLEM:
// LESS CSS does not support synchronous compiler
// We must create a file route
F.file('/css/', less_compiler, ['.less']);
var accept = F.config['static-accepts'];
if (accept['less'] === -1)
accept.less = true;
F.helpers.less = function(name, tag) {
var self = this;
var url = F.$routeStatic(name, self.config['static-url-style']);
return (tag || true) ? '<link type="text/css" rel="stylesheet" href="' + url + '" />' : url;
};
};
function less_compiler(req, res, isValidation) {
if (isValidation)
return req.url.indexOf('.css') !== -1 || req.url.indexOf('.less') !== -1;
// this === framework
var self = this;
// create temporary filename
// we'll compile file
var filename = self.path.temp(req.url.replace(/\//g, '-').substring(1));
// Cache for RELEASE MODE ONLY
if (framework.isProcessed(filename)) {
self.responseFile(req, res, filename);
return;
}
var fileName = self.path.public(req.url);
fs.readFile(self.path.public(req.url), function(err, data) {
if (err) {
self.response404(req, res);
return;
}
var options = {
filename: fileName
};
less.render(data.toString('utf8'), options, function(err, css) {
if (err) {
self.response500(req, res, err);
return;
}
// write compiled content into the temporary file
fs.writeFileSync(filename, css.css);
// this function affect framework.isProcessed() function
self.responseFile(req, res, filename);
});
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment