summaryrefslogtreecommitdiff
path: root/node_modules/express/lib/view
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2012-09-24 16:22:07 -0400
committerJules Laplace <jules@okfoc.us>2012-09-24 16:22:07 -0400
commit686106d544ecc3b6ffd4db2b665d3bc879a58d8c (patch)
treea5b5e50237cef70e12f0745371896e96f5f6d578 /node_modules/express/lib/view
ok
Diffstat (limited to 'node_modules/express/lib/view')
-rw-r--r--node_modules/express/lib/view/partial.js40
-rw-r--r--node_modules/express/lib/view/view.js210
2 files changed, 250 insertions, 0 deletions
diff --git a/node_modules/express/lib/view/partial.js b/node_modules/express/lib/view/partial.js
new file mode 100644
index 0000000..7d2f69b
--- /dev/null
+++ b/node_modules/express/lib/view/partial.js
@@ -0,0 +1,40 @@
+
+/*!
+ * Express - view - Partial
+ * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
+ * MIT Licensed
+ */
+
+/**
+ * Memory cache.
+ */
+
+var cache = {};
+
+/**
+ * Resolve partial object name from the view path.
+ *
+ * Examples:
+ *
+ * "user.ejs" becomes "user"
+ * "forum thread.ejs" becomes "forumThread"
+ * "forum/thread/post.ejs" becomes "post"
+ * "blog-post.ejs" becomes "blogPost"
+ *
+ * @return {String}
+ * @api private
+ */
+
+exports.resolveObjectName = function(view){
+ return cache[view] || (cache[view] = view
+ .split('/')
+ .slice(-1)[0]
+ .split('.')[0]
+ .replace(/^_/, '')
+ .replace(/[^a-zA-Z0-9 ]+/g, ' ')
+ .split(/ +/).map(function(word, i){
+ return i
+ ? word[0].toUpperCase() + word.substr(1)
+ : word;
+ }).join(''));
+}; \ No newline at end of file
diff --git a/node_modules/express/lib/view/view.js b/node_modules/express/lib/view/view.js
new file mode 100644
index 0000000..7d9392c
--- /dev/null
+++ b/node_modules/express/lib/view/view.js
@@ -0,0 +1,210 @@
+
+/*!
+ * Express - View
+ * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var path = require('path')
+ , utils = require('../utils')
+ , extname = path.extname
+ , dirname = path.dirname
+ , basename = path.basename
+ , fs = require('fs')
+ , stat = fs.statSync;
+
+/**
+ * Expose `View`.
+ */
+
+exports = module.exports = View;
+
+/**
+ * Require cache.
+ */
+
+var cache = {};
+
+/**
+ * Initialize a new `View` with the given `view` path and `options`.
+ *
+ * @param {String} view
+ * @param {Object} options
+ * @api private
+ */
+
+function View(view, options) {
+ options = options || {};
+ this.view = view;
+ this.root = options.root;
+ this.relative = false !== options.relative;
+ this.defaultEngine = options.defaultEngine;
+ this.parent = options.parentView;
+ this.basename = basename(view);
+ this.engine = this.resolveEngine();
+ this.extension = '.' + this.engine;
+ this.name = this.basename.replace(this.extension, '');
+ this.path = this.resolvePath();
+ this.dirname = dirname(this.path);
+ if (options.attempts) {
+ if (!~options.attempts.indexOf(this.path))
+ options.attempts.push(this.path);
+ }
+};
+
+/**
+ * Check if the view path exists.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+View.prototype.__defineGetter__('exists', function(){
+ try {
+ stat(this.path);
+ return true;
+ } catch (err) {
+ return false;
+ }
+});
+
+/**
+ * Resolve view engine.
+ *
+ * @return {String}
+ * @api private
+ */
+
+View.prototype.resolveEngine = function(){
+ // Explicit
+ if (~this.basename.indexOf('.')) return extname(this.basename).substr(1);
+ // Inherit from parent
+ if (this.parent) return this.parent.engine;
+ // Default
+ return this.defaultEngine;
+};
+
+/**
+ * Resolve view path.
+ *
+ * @return {String}
+ * @api private
+ */
+
+View.prototype.resolvePath = function(){
+ var path = this.view;
+ // Implicit engine
+ if (!~this.basename.indexOf('.')) path += this.extension;
+ // Absolute
+ if (utils.isAbsolute(path)) return path;
+ // Relative to parent
+ if (this.relative && this.parent) return this.parent.dirname + '/' + path;
+ // Relative to root
+ return this.root
+ ? this.root + '/' + path
+ : path;
+};
+
+/**
+ * Get view contents. This is a one-time hit, so we
+ * can afford to be sync.
+ *
+ * @return {String}
+ * @api public
+ */
+
+View.prototype.__defineGetter__('contents', function(){
+ return fs.readFileSync(this.path, 'utf8');
+});
+
+/**
+ * Get template engine api, cache exports to reduce
+ * require() calls.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+View.prototype.__defineGetter__('templateEngine', function(){
+ var ext = this.extension;
+ return cache[ext] || (cache[ext] = require(this.engine));
+});
+
+/**
+ * Return root path alternative.
+ *
+ * @return {String}
+ * @api public
+ */
+
+View.prototype.__defineGetter__('rootPath', function(){
+ this.relative = false;
+ return this.resolvePath();
+});
+
+/**
+ * Return index path alternative.
+ *
+ * @return {String}
+ * @api public
+ */
+
+View.prototype.__defineGetter__('indexPath', function(){
+ return this.dirname
+ + '/' + this.basename.replace(this.extension, '')
+ + '/index' + this.extension;
+});
+
+/**
+ * Return ../<name>/index path alternative.
+ *
+ * @return {String}
+ * @api public
+ */
+
+View.prototype.__defineGetter__('upIndexPath', function(){
+ return this.dirname + '/../' + this.name + '/index' + this.extension;
+});
+
+/**
+ * Return _ prefix path alternative
+ *
+ * @return {String}
+ * @api public
+ */
+
+View.prototype.__defineGetter__('prefixPath', function(){
+ return this.dirname + '/_' + this.basename;
+});
+
+/**
+ * Register the given template engine `exports`
+ * as `ext`. For example we may wish to map ".html"
+ * files to jade:
+ *
+ * app.register('.html', require('jade'));
+ *
+ * or
+ *
+ * app.register('html', require('jade'));
+ *
+ * This is also useful for libraries that may not
+ * match extensions correctly. For example my haml.js
+ * library is installed from npm as "hamljs" so instead
+ * of layout.hamljs, we can register the engine as ".haml":
+ *
+ * app.register('.haml', require('haml-js'));
+ *
+ * @param {String} ext
+ * @param {Object} obj
+ * @api public
+ */
+
+exports.register = function(ext, exports) {
+ if ('.' != ext[0]) ext = '.' + ext;
+ cache[ext] = exports;
+};