From b72b3d42d75208dcfdd0c231e3c3f96da6dcb0b9 Mon Sep 17 00:00:00 2001 From: Orr Siloni Date: Wed, 3 Dec 2014 17:12:57 +0200 Subject: [PATCH 1/2] Added support for variable includes --- lib/ejs.js | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/ejs.js b/lib/ejs.js index ca304a13..df2bce12 100644 --- a/lib/ejs.js +++ b/lib/ejs.js @@ -158,16 +158,28 @@ var parse = exports.parse = function(str, options){ if (0 == js.trim().indexOf('include')) { var name = js.trim().slice(7).trim(); + /** FORKED START 2014-12-03 Orr Siloni */ + if (options[name]) name = options[name]; + /** FORKED END 2014-12-03 Orr Siloni */ if (!filename) throw new Error('filename option is required for includes'); var path = resolveInclude(name, filename); include = read(path, 'utf8'); - include = exports.parse(include, { filename: path, _with: false, open: open, close: close, compileDebug: compileDebug }); + /** FORKED START 2014-12-03 Orr Siloni */ + var newOptions = { filename: path, _with: false, open: open, close: close, compileDebug: compileDebug }; + var hop = Object.prototype.hasOwnProperty; + for (var key in options){ + if (hop.call(options, key) && !hop.call(newOptions, key)) + newOptions[key] = options[key]; + } + //include = exports.parse(include, { filename: path, _with: false, open: open, close: close, compileDebug: compileDebug }); + include = exports.parse(include, newOptions); + /** FORKED END 2014-12-03 Orr Siloni */ buf += "' + (function(){" + include + "})() + '"; js = ''; } while (~(n = js.indexOf("\n", n))) n++, lineno++; - + switch(js.substr(0, 1)) { case ':': js = filtered(js); @@ -179,7 +191,7 @@ var parse = exports.parse = function(str, options){ js = ""; break; } - + if (js) { if (js.lastIndexOf('//') > js.lastIndexOf('\n')) js += '\n'; buf += prefix; From d4b9b11dededea0d92a32161f5191828a6614680 Mon Sep 17 00:00:00 2001 From: Orr Siloni Date: Thu, 4 Dec 2014 14:00:32 +0200 Subject: [PATCH 2/2] Added support for variable includes. Now supports nested object notation. --- lib/ejs.js | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/lib/ejs.js b/lib/ejs.js index df2bce12..863f1649 100644 --- a/lib/ejs.js +++ b/lib/ejs.js @@ -95,6 +95,27 @@ function rethrow(err, str, filename, lineno){ throw err; } +/** + * parse an object notation string to object entities to retrieve value + * Example: + * var options = { group : [{ name: "The Marx Brothers", members : [{name: "Chico"}, {name : "Harpo"} , {name : "Groucho"}, {name : "Zeppo"}] }] } + * parseObjectNotationString('group[0].members[2]["name"]', options) + * Output: + * Groucho + * + * @param {String} str + * @param {Object} context + * @api private + */ +function parseObjectNotationString(str, context){ + var parts = str.match(/\w+/g), i, ref = context, undef; + for (i=0; i