mason
Version:
simple, fun, static-file builder for jade, stylus, and javascript
47 lines (42 loc) • 1.4 kB
JavaScript
var path = require('path');
module.exports = function createRenderer(assets, config) {
return new Renderer(assets, config);
};
function Renderer(assets, config) {
this.assets = assets || {};
this.config = config || {};
}
// Render a mason target inside jade
Renderer.prototype.render = function(assetName) {
var asset = this.assets[assetName];
if (asset) {
var mode = (this.config.modes && this.config.modes[assetName]) || asset.renderer || Renderer.defaultModes[asset.type];
var writer = Renderer.writers[mode];
this.config.prefix = this.config.prefix || '';
return writer(asset, this.config);
}
asset = { toSrc: assetName };
return Renderer.writers.passthru(asset, this.config);
};
Renderer.writers = {
passthru: function(asset, config) {
return config.prefix + asset.toSrc;
},
debug: function(asset, config) {
var sources = (asset.fromSrc instanceof Array) ? asset.fromSrc : [asset.fromSrc];
return sources.map(function(src) {
return '<script src="' + config.prefix + src + '"></script>';
}).join('');
},
uglify: function(asset, config) {
return '<script src="' + config.prefix + asset.toSrc + '"></script>';
},
stylus: function(asset, config) {
return '<link rel="stylesheet" href="' + config.prefix + asset.toSrc + '" />';
}
};
Renderer.defaultModes = {
javascript: 'uglify',
stylus: 'stylus',
jade: 'jade'
};