From bd4a8735bd5cea78dfabcf9283e6322702b11eb7 Mon Sep 17 00:00:00 2001 From: Emily Stark Date: Thu, 15 May 2014 18:06:55 -0700 Subject: [PATCH] {{> UI.dynamic }} for easier dynamic template picking. See #2123. --- .../spacebars-compiler/spacebars-compiler.js | 22 +++-- packages/ui-dynamic-template/.gitignore | 1 + .../ui-dynamic-template/dynamic-tests.html | 19 ++++ packages/ui-dynamic-template/dynamic-tests.js | 87 +++++++++++++++++++ packages/ui-dynamic-template/dynamic.html | 18 ++++ packages/ui-dynamic-template/dynamic.js | 3 + packages/ui-dynamic-template/package.js | 15 ++++ 7 files changed, 160 insertions(+), 5 deletions(-) create mode 100644 packages/ui-dynamic-template/.gitignore create mode 100644 packages/ui-dynamic-template/dynamic-tests.html create mode 100644 packages/ui-dynamic-template/dynamic-tests.js create mode 100644 packages/ui-dynamic-template/dynamic.html create mode 100644 packages/ui-dynamic-template/dynamic.js create mode 100644 packages/ui-dynamic-template/package.js diff --git a/packages/spacebars-compiler/spacebars-compiler.js b/packages/spacebars-compiler/spacebars-compiler.js index b4d6158ec4..a24f2a11ab 100644 --- a/packages/spacebars-compiler/spacebars-compiler.js +++ b/packages/spacebars-compiler/spacebars-compiler.js @@ -163,10 +163,22 @@ var builtInBlockHelpers = { 'each': 'UI.Each' }; -// These must be prefixed with `UI.` when you use them in a template. -var builtInLexicals = { +// Some `UI.*` paths are special in that they generate code that +// doesn't folow the normal lookup rules for dotted symbols. The +// following names must be prefixed with `UI.` when you use them in a +// template. +var builtInUIPaths = { + // `template` is a local variable defined in the generated render + // function for the template in which `UI.contentBlock` (or + // `UI.elseBlock`) is invoked. `template` is a reference to the + // template itself. 'contentBlock': 'template.__content', - 'elseBlock': 'template.__elseContent' + 'elseBlock': 'template.__elseContent', + + // `Template` is the global template namespace. If you define a + // template named `foo` in Spacebars, it gets defined as + // `Template.foo` in JavaScript. + 'dynamic': 'Template.__dynamic' }; // A "reserved name" can't be used as a