Skip to content
This repository has been archived by the owner on Jan 10, 2020. It is now read-only.

Update to v2.0.0 plus an error fix. #2

Open
wants to merge 635 commits into
base: yui
Choose a base branch
from
Open

Update to v2.0.0 plus an error fix. #2

wants to merge 635 commits into from

Conversation

tripp
Copy link

@tripp tripp commented Sep 24, 2014

This pull request includes the v2.0.0 tag of the wycat/handlebars repo plus an extra commit that fixes a bug in theYUI Template test suite.

The bug fix is the final commit.
The bug can be reproduces with the following:

    var options = {partials: {foo: '!{{a}}!'}};
    var text = Y.Handlebars.compile('{{> foo}}', options)({a: 'foo'}, options);

Let me know if I need to adjust the pull request.

kpdecker and others added 30 commits December 23, 2013 21:30
…riable

Allow any number of trailing characters for valid JavaScript variable
Fixes test exec under IE
Falsy AMD module names in version 1.2.0
Handlebars now supports subexpressions.

    {{foo (bar 3)}}

Subexpressions are always evaluated as helpers; if
`3` were omitted from the above example, `bar`
would be invoked as a param-less helper, even
though a top-levell `{{bar}}` would be considered
ambiguous.

The return value of a subexpression helper is
passed in as a parameter of a parent subexpression
helper, even in string params mode. Their type,
as listed in `options.types` or `options.hashTypes`
in string params mode, is "sexpr".

The main conceptual change in the Handlebars code
is that there is a new AST.SexprNode that manages
the params/hash passed into a mustache, as well
as the logic that governs whether that mustache
is a helper invocation, property lookup, etc.
MustacheNode, which used to manage this stuff,
still exists, but only manages things like
white-space stripping and whether the mustache
is escaped or not. So, a MustacheNode _has_
a SexprNode.

The introduction of subexpressions is fully
backwards compatible, but a few things needed
to change about the compiled output of a template
in order to support subexpressions. The main one
is that the options hash is no longer stashed in
a local `options` var before being passed to
either the helper being invoked or the
`helperMissing` fallback. Rather, the options
object is inlined in these cases. This does
mean compiled template sizes will be a little
bit larger, even those that don't make use of
subexpressions, but shouldn't have any noticeable
impact on performance when actually rendering
templates as only one of these inlined objects
will actually get evaluated.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.