summaryrefslogtreecommitdiffstats
path: root/lib/handlebars/base.js
diff options
context:
space:
mode:
authorkpdecker <kpdecker@gmail.com>2014-01-17 20:01:43 -0600
committerkpdecker <kpdecker@gmail.com>2014-01-17 23:15:18 -0600
commit49fcf10de21b89c504d641e72ce6c31c2feaed8f (patch)
tree5d974781339357d0f35590968b520df4f88fa3c3 /lib/handlebars/base.js
parentace2896ec876104f5bd220744124e7370fe6b9a2 (diff)
downloadhandlebars.js-49fcf10de21b89c504d641e72ce6c31c2feaed8f.zip
handlebars.js-49fcf10de21b89c504d641e72ce6c31c2feaed8f.tar.gz
handlebars.js-49fcf10de21b89c504d641e72ce6c31c2feaed8f.tar.bz2
Add contextPath tracking in builtin helpers
Diffstat (limited to 'lib/handlebars/base.js')
-rw-r--r--lib/handlebars/base.js34
1 files changed, 32 insertions, 2 deletions
diff --git a/lib/handlebars/base.js b/lib/handlebars/base.js
index 790228c..9dc49fc 100644
--- a/lib/handlebars/base.js
+++ b/lib/handlebars/base.js
@@ -70,12 +70,19 @@ function registerDefaultHelpers(instance) {
return inverse(this);
} else if (isArray(context)) {
if(context.length > 0) {
+ options.ids = [options.name];
return instance.helpers.each(context, options);
} else {
return inverse(this);
}
} else {
- return fn(context);
+ if (options.ids) {
+ var data = createFrame(options.data);
+ data.contextPath = Utils.appendContextPath(options.data.contextPath, options.name);
+ options = {data: data};
+ }
+
+ return fn(context, options);
}
});
@@ -89,6 +96,11 @@ function registerDefaultHelpers(instance) {
var fn = options.fn, inverse = options.inverse;
var i = 0, ret = "", data;
+ var contextPath;
+ if (options.ids) {
+ contextPath = Utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';
+ }
+
if (isFunction(context)) { context = context.call(this); }
if (options.data) {
@@ -102,6 +114,10 @@ function registerDefaultHelpers(instance) {
data.index = i;
data.first = (i === 0);
data.last = (i === (context.length-1));
+
+ if (contextPath) {
+ data.contextPath = contextPath + i;
+ }
}
ret = ret + fn(context[i], { data: data });
}
@@ -112,6 +128,10 @@ function registerDefaultHelpers(instance) {
data.key = key;
data.index = i;
data.first = (i === 0);
+
+ if (contextPath) {
+ data.contextPath = contextPath + key;
+ }
}
ret = ret + fn(context[key], {data: data});
i++;
@@ -147,7 +167,17 @@ function registerDefaultHelpers(instance) {
instance.registerHelper('with', function(context, options) {
if (isFunction(context)) { context = context.call(this); }
- if (!Utils.isEmpty(context)) return options.fn(context);
+ var fn = options.fn;
+
+ if (!Utils.isEmpty(context)) {
+ if (options.ids) {
+ var data = createFrame(options.data);
+ data.contextPath = Utils.appendContextPath(options.data.contextPath, options.ids[0]);
+ options = {data:data};
+ }
+
+ return fn(context, options);
+ }
});
instance.registerHelper('log', function(context, options) {