Last active
July 10, 2017 13:04
-
-
Save mdnmdn/19208cc2ee094510ed1a6496ec9b3121 to your computer and use it in GitHub Desktop.
totaljs less module
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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