ajs
Version:
Asynchronous templating in Node.js
78 lines (68 loc) • 1.95 kB
JavaScript
;
var path = require('path');
var filenameCache = {},
dirnameCache = {};
module.exports = {
/**
* resolveFilename
* Resolves and caches filename paths.
*
* @name resolveFilename
* @function
* @param {String} filename The filename to resolve.
* @returns {String} The resolved filename.
*/
resolveFilename: function resolveFilename(filename) {
var cached = filenameCache[filename];
if (cached) {
return cached;
}
return filenameCache[filename] = path.resolve(process.cwd(), filename);
}
/**
* resolveDirname
* Resolves and caches folder paths.
*
* @name resolveDirname
* @function
* @param {} filename
* @returns {String} The resolved dirname path.
*/
, resolveDirname: function resolveDirname(filename) {
var cached = dirnameCache[filename];
if (cached) {
return cached;
}
return dirnameCache[filename] = path.dirname(filename);
}
/**
* escape
* Escapes the HTML entities.
*
* @name escape
* @function
* @param {String} expr The input HTML code.
* @returns {String} The escaped result.
*/
, escape: function escape(expr) {
return String(expr).replace(/&(?!\w+;)/g, '&').replace(/</g, '<').replace(/>/g, '>');
}
/**
* extend
* Merges two objects.
*
* @name extend
* @function
* @param {Object} target The first object.
* @param {Object} source The second object.
* @returns {Object} The merged objects.
*/
, extend: function extend(target, source, clone) {
var _target = clone ? {} : target;
var props = Object.getOwnPropertyNames(source);
props.forEach(function (name) {
_target[name] = (clone ? target[name] : null) || source[name];
});
return _target;
}
};