Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var _ = require('underscore');
- var fs = require('fs');
- var path = require('path');
- var debug = require('debug')('asset-embed');
- module.exports = function() {
- var self = {
- loaders: {
- less: function(a, callback) {
- self.loaders.plain(a, function(err, res) {
- if (err) return callback(err);
- var less = require('less');
- var parser = new less.Parser(self.loaders.less.options);
- parser.parse(res, function(err, tree) {
- if (err) return callback(err);
- callback(null, '<style>' + tree.toCSS(self.loaders.less.options) + '</style>');
- });
- });
- },
- css: function(a, callback) {
- self.loaders.plain(a, function(err, res) {
- if (err) return callback(err);
- callback(null, '<style>' + res + '</style>');
- });
- },
- js: function(a, callback) {
- self.loaders.plain(a, function(err, res) {
- if (err) return callback(err);
- var uglify = require('uglify-js');
- res = uglify.parser.parse(res);
- res = uglify.uglify.ast_squeeze(res);
- res = uglify.uglify.gen_code(res);
- res = '<script>' + res + '</script>';
- callback(null, res);
- });
- },
- plain: function(a, callback) {
- debug('loading asset file', a);
- fs.readFile(a, 'utf8', callback);
- }
- },
- assets: {},
- load: function(names, callback) {
- if (!_.isArray(names)) names = [names];
- var left = names.length, panic = false;
- _.each(names, function(names) {
- var loader = path.extname(names);
- if (loader) loader = loader.substr(1);
- if (!loader || !_.has(self.loaders, loader)) {
- loader = 'plain';
- }
- self.loaders[loader](names, function(err, res) {
- if (panic) return;
- if (err) {
- panic = true;
- if (_.isFunction(callback)) {
- return callback(err);
- }
- throw err;
- }
- self.assets[names] = res;
- if (!--left && _.isFunction(callback)) {
- return callback();
- }
- });
- });
- },
- embed: function(name) {
- if (!_.has(self.assets, name)) {
- throw new Error(name + ' not loaded');
- }
- return self.assets[name];
- }
- };
- self.loaders.less.options = { compress: true };
- return _.extend(self.embed, self);
- };
Add Comment
Please, Sign In to add comment