From ba99e6f3d8295d35b2c5b1e5c9b106f996493fbb Mon Sep 17 00:00:00 2001 From: Mitar Date: Thu, 26 Mar 2015 14:26:01 -0700 Subject: [PATCH 1/8] Use Blaze._getTemplateHelper directly. This allows one to override Blaze._getTemplateHelper with a custom implementation. --- packages/blaze/lookup.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/blaze/lookup.js b/packages/blaze/lookup.js index 6a57bfa9b7..368ee4a71b 100644 --- a/packages/blaze/lookup.js +++ b/packages/blaze/lookup.js @@ -28,7 +28,7 @@ var bindDataContext = function (x) { Blaze._OLDSTYLE_HELPER = {}; -var getTemplateHelper = Blaze._getTemplateHelper = function (template, name) { +Blaze._getTemplateHelper = function (template, name) { // XXX COMPAT WITH 0.9.3 var isKnownOldStyleHelper = false; @@ -106,7 +106,7 @@ Blaze.View.prototype.lookup = function (name, _options) { return Blaze._parentData(name.length - 1, true /*_functionWrapped*/); } else if (template && - ((helper = getTemplateHelper(template, name)) != null)) { + ((helper = Blaze._getTemplateHelper(template, name)) != null)) { return wrapHelper(bindDataContext(helper), boundTmplInstance); } else if (lookupTemplate && (name in Blaze.Template) && (Blaze.Template[name] instanceof Blaze.Template)) { From c8212d0553ab6a43ca2f30c61da605db7bc08b47 Mon Sep 17 00:00:00 2001 From: Mitar Date: Thu, 26 Mar 2015 15:18:12 -0700 Subject: [PATCH 2/8] templateInstance is needed as well. --- packages/blaze/lookup.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/blaze/lookup.js b/packages/blaze/lookup.js index 368ee4a71b..aa85c125de 100644 --- a/packages/blaze/lookup.js +++ b/packages/blaze/lookup.js @@ -28,7 +28,9 @@ var bindDataContext = function (x) { Blaze._OLDSTYLE_HELPER = {}; -Blaze._getTemplateHelper = function (template, name) { +// templateInstance argument is provided to be available for possible +// alternative implementations of this function by 3rd party packages. +Blaze._getTemplateHelper = function (template, name, templateInstance) { // XXX COMPAT WITH 0.9.3 var isKnownOldStyleHelper = false; @@ -106,7 +108,7 @@ Blaze.View.prototype.lookup = function (name, _options) { return Blaze._parentData(name.length - 1, true /*_functionWrapped*/); } else if (template && - ((helper = Blaze._getTemplateHelper(template, name)) != null)) { + ((helper = Blaze._getTemplateHelper(template, name, templateInstance)) != null)) { return wrapHelper(bindDataContext(helper), boundTmplInstance); } else if (lookupTemplate && (name in Blaze.Template) && (Blaze.Template[name] instanceof Blaze.Template)) { From 93eb5c3f4d85814b4ada3e6da312343ca4353872 Mon Sep 17 00:00:00 2001 From: Mitar Date: Sat, 28 Mar 2015 04:28:31 -0700 Subject: [PATCH 3/8] Allow extending lookup for templates as well. --- packages/blaze/lookup.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/blaze/lookup.js b/packages/blaze/lookup.js index aa85c125de..a68c62811f 100644 --- a/packages/blaze/lookup.js +++ b/packages/blaze/lookup.js @@ -75,6 +75,13 @@ var wrapHelper = function (f, templateFunc) { }; }; +Blaze._getTemplate = function (name) { + if (name in Blaze.Template) { + return Blaze.Template[name]; + } + return null; +}; + // Looks up a name, like "foo" or "..", as a helper of the // current template; a global helper; the name of a template; // or a property of the data context. Called on the View of @@ -94,6 +101,7 @@ Blaze.View.prototype.lookup = function (name, _options) { var lookupTemplate = _options && _options.template; var helper; var boundTmplInstance; + var foundTemplate; if (this.templateInstance) { boundTmplInstance = _.bind(this.templateInstance, this); @@ -110,9 +118,9 @@ Blaze.View.prototype.lookup = function (name, _options) { } else if (template && ((helper = Blaze._getTemplateHelper(template, name, templateInstance)) != null)) { return wrapHelper(bindDataContext(helper), boundTmplInstance); - } else if (lookupTemplate && (name in Blaze.Template) && - (Blaze.Template[name] instanceof Blaze.Template)) { - return Blaze.Template[name]; + } else if (lookupTemplate && (foundTemplate = Blaze._getTemplate(name)) && + (foundTemplate instanceof Blaze.Template)) { + return foundTemplate; } else if (Blaze._globalHelpers[name] != null) { return wrapHelper(bindDataContext(Blaze._globalHelpers[name]), boundTmplInstance); From 28fee7e46cd86ccce7923355b301f5d3f0ff944c Mon Sep 17 00:00:00 2001 From: Mitar Date: Tue, 31 Mar 2015 00:23:58 -0700 Subject: [PATCH 4/8] Allow also a function for reactivity. --- packages/blaze/lookup.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/blaze/lookup.js b/packages/blaze/lookup.js index a68c62811f..158b3dd7f7 100644 --- a/packages/blaze/lookup.js +++ b/packages/blaze/lookup.js @@ -119,7 +119,7 @@ Blaze.View.prototype.lookup = function (name, _options) { ((helper = Blaze._getTemplateHelper(template, name, templateInstance)) != null)) { return wrapHelper(bindDataContext(helper), boundTmplInstance); } else if (lookupTemplate && (foundTemplate = Blaze._getTemplate(name)) && - (foundTemplate instanceof Blaze.Template)) { + (foundTemplate instanceof Blaze.Template || typeof foundTemplate === 'function')) { return foundTemplate; } else if (Blaze._globalHelpers[name] != null) { return wrapHelper(bindDataContext(Blaze._globalHelpers[name]), From 8b723b26f9cdd0777022386885fb962edf026979 Mon Sep 17 00:00:00 2001 From: Mitar Date: Fri, 3 Apr 2015 19:55:48 -0700 Subject: [PATCH 5/8] Updated methods to move more checks into methods. --- packages/blaze/lookup.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/blaze/lookup.js b/packages/blaze/lookup.js index 158b3dd7f7..99f9f89464 100644 --- a/packages/blaze/lookup.js +++ b/packages/blaze/lookup.js @@ -75,8 +75,10 @@ var wrapHelper = function (f, templateFunc) { }; }; -Blaze._getTemplate = function (name) { - if (name in Blaze.Template) { +// templateInstance argument is provided to be available for possible +// alternative implementations of this function by 3rd party packages. +Blaze._getTemplate = function (name, templateInstance) { + if ((name in Blaze.Template) && (Blaze.Template[name] instanceof Blaze.Template)) { return Blaze.Template[name]; } return null; @@ -116,10 +118,10 @@ Blaze.View.prototype.lookup = function (name, _options) { return Blaze._parentData(name.length - 1, true /*_functionWrapped*/); } else if (template && - ((helper = Blaze._getTemplateHelper(template, name, templateInstance)) != null)) { + ((helper = Blaze._getTemplateHelper(template, name, boundTmplInstance)) != null)) { return wrapHelper(bindDataContext(helper), boundTmplInstance); - } else if (lookupTemplate && (foundTemplate = Blaze._getTemplate(name)) && - (foundTemplate instanceof Blaze.Template || typeof foundTemplate === 'function')) { + } else if (lookupTemplate && + ((foundTemplate = Blaze._getTemplate(name, boundTmplInstance)) != null)) { return foundTemplate; } else if (Blaze._globalHelpers[name] != null) { return wrapHelper(bindDataContext(Blaze._globalHelpers[name]), From 11b7397857f71a938d016e9cd1ddbb4e4b94de4c Mon Sep 17 00:00:00 2001 From: Mitar Date: Fri, 24 Apr 2015 04:16:18 -0700 Subject: [PATCH 6/8] Moved binding of template helpers to the function. --- packages/blaze/lookup.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/blaze/lookup.js b/packages/blaze/lookup.js index 99f9f89464..8d526b645a 100644 --- a/packages/blaze/lookup.js +++ b/packages/blaze/lookup.js @@ -38,8 +38,10 @@ Blaze._getTemplateHelper = function (template, name, templateInstance) { var helper = template.__helpers.get(name); if (helper === Blaze._OLDSTYLE_HELPER) { isKnownOldStyleHelper = true; + } else if (helper != null) { + return wrapHelper(bindDataContext(helper), templateInstance); } else { - return helper; + return null; } } @@ -54,7 +56,9 @@ Blaze._getTemplateHelper = function (template, name, templateInstance) { '.helpers(...)` instead.'); } } - return template[name]; + if (template[name] != null) { + return wrapHelper(bindDataContext(template[name]), templateInstance); + } } return null; @@ -119,7 +123,7 @@ Blaze.View.prototype.lookup = function (name, _options) { } else if (template && ((helper = Blaze._getTemplateHelper(template, name, boundTmplInstance)) != null)) { - return wrapHelper(bindDataContext(helper), boundTmplInstance); + return helper; } else if (lookupTemplate && ((foundTemplate = Blaze._getTemplate(name, boundTmplInstance)) != null)) { return foundTemplate; From ec091943329112694b6c2aa2c19c2c89826faff3 Mon Sep 17 00:00:00 2001 From: Mitar Date: Fri, 24 Apr 2015 20:39:54 -0700 Subject: [PATCH 7/8] Use new Blaze._getTemplate in the Template.dynamic. --- packages/spacebars/dynamic.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/spacebars/dynamic.js b/packages/spacebars/dynamic.js index eeb4560126..609d5d3ff5 100644 --- a/packages/spacebars/dynamic.js +++ b/packages/spacebars/dynamic.js @@ -10,7 +10,9 @@ Template.__dynamicWithDataContext.helpers({ chooseTemplate: function (name) { - return Template[name] || null; + return Blaze._getTemplate(name, function () { + return Template.instance(); + }); } }); From e12bd03a167f61d8bff06daa79ec426472efa623 Mon Sep 17 00:00:00 2001 From: Mitar Date: Fri, 8 May 2015 15:37:17 -0700 Subject: [PATCH 8/8] Fixed comment. --- packages/blaze/lookup.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/blaze/lookup.js b/packages/blaze/lookup.js index f51ad42df8..746c760efd 100644 --- a/packages/blaze/lookup.js +++ b/packages/blaze/lookup.js @@ -178,7 +178,7 @@ Blaze.View.prototype.lookup = function (name, _options) { return helper; } - // 5. throw an error when called: nothing is found + // 5. look up in a data context return function () { var isCalledAsFunction = (arguments.length > 0); var data = Blaze.getData();