asset-rack
Version:
Static Web Framework for Nodejs
120 lines (104 loc) • 3.98 kB
JavaScript
// Generated by CoffeeScript 1.6.3
(function() {
var Asset, async, fs, pathutil, _ref,
__hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
fs = require('fs');
pathutil = require('path');
async = require('async');
Asset = require('../.').Asset;
exports.JavascriptAsset = (function(_super) {
__extends(JavascriptAsset, _super);
function JavascriptAsset() {
_ref = JavascriptAsset.__super__.constructor.apply(this, arguments);
return _ref;
}
JavascriptAsset.prototype.mimetype = 'text/javascript';
JavascriptAsset.prototype.create = function(options) {
var _this = this;
this.options = options;
this.code = options.code;
this.dirname = options.dirname || '/';
this.compress = options.compress;
if (this.compress == null) {
this.compress = false;
}
this.contents = '';
if (this.compress) {
} else {
this.assets = [];
}
return async.eachSeries(this.code, function(path, next) {
var asset, assetUrl, error, fileContent, jsContent;
try {
if (path instanceof Asset) {
asset = path;
return asset.on('complete', function() {
if (_this.compress) {
_this.contents += asset.contents;
} else {
_this.addAsset(asset);
}
return next();
});
}
fileContent = fs.readFileSync(pathutil.join(_this.dirname, path), 'utf8');
assetUrl = '/' + path.replace('.coffee', '.js').replace(/\\/g, '\/');
jsContent = '';
switch (false) {
case path.indexOf('.coffee') === -1:
_this.setupCoffeescript();
try {
jsContent = _this.coffeescript.compile(fileContent);
} catch (_error) {
error = _error;
error.stack = ("Syntax Error: In " + (pathutil.join(_this.dirname, path)) + " on line " + error.location.first_line + "\n") + error.stack;
throw error;
}
break;
default:
jsContent = fileContent;
}
if (_this.compress) {
_this.contents += jsContent + '\n';
} else {
_this.addAsset(new Asset({
url: assetUrl,
contents: jsContent
}));
}
return next();
} catch (_error) {
error = _error;
return _this.emit('error', error);
}
}, function() {
return _this.emit('created');
});
};
JavascriptAsset.prototype.tag = function() {
var asset, tag, _i, _len, _ref1;
if (this.assets != null) {
tag = '';
_ref1 = this.assets;
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
asset = _ref1[_i];
tag += "\n<script type=\"text/javascript\" ";
tag += "src=\"" + asset.specificUrl + "\"></script>";
}
return tag;
}
if ((this.contents != null) && this.contents !== '') {
tag = "\n<script type=\"" + this.mimetype + "\" ";
return tag += "src=\"" + this.specificUrl + "\"></script>";
}
};
JavascriptAsset.prototype.setupCoffeescript = function() {
return this.coffeescript != null ? this.coffeescript : this.coffeescript = this.options.coffeescript || require('coffee-script');
};
JavascriptAsset.prototype.setupTypescript = function() {
return this.typescript != null ? this.typescript : this.typescript = this.options.typescript || require('node-typescript');
};
return JavascriptAsset;
})(Asset);
}).call(this);