Skip to content

Commit

Permalink
fix: correctly exclude aliases from scope in m-for
Browse files Browse the repository at this point in the history
  • Loading branch information
kbrsh committed Jul 31, 2017
1 parent ed26a5b commit 8637d66
Show file tree
Hide file tree
Showing 6 changed files with 183 additions and 27 deletions.
39 changes: 26 additions & 13 deletions dist/moon.js
Original file line number Diff line number Diff line change
Expand Up @@ -989,14 +989,16 @@
/**
* Compiles a Template
* @param {String} template
* @param {Array} exclude
* @param {Array} dependencies
* @return {String} compiled template
*/
var compileTemplate = function(template, dependencies) {
var compileTemplate = function(template, exclude, dependencies) {
var state = {
current: 0,
template: template,
output: "",
exclude: exclude,
dependencies: dependencies
};

Expand Down Expand Up @@ -1040,7 +1042,7 @@

if(name.length !== 0) {
// Extract Variable References
compileTemplateExpression(name, globals, state.dependencies);
compileTemplateExpression(name, state.exclude, state.dependencies);

// Add quotes
name = "\" + " + name + " + \"";
Expand Down Expand Up @@ -1497,7 +1499,7 @@
node.meta.shouldRender = true;
} else {
var value = prop$1.value;
var compiled = compileTemplate(value, state.dependencies);
var compiled = compileTemplate(value, state.exclude, state.dependencies);

if(value !== compiled) {
node.meta.shouldRender = true;
Expand Down Expand Up @@ -1527,7 +1529,7 @@
directiveProp = directiveProps[i];
directivePropValue = directiveProp.value;

compileTemplateExpression(directivePropValue, globals, state.dependencies);
compileTemplateExpression(directivePropValue, state.exclude, state.dependencies);
propsCode += "\"" + (directiveProp.name) + "\": " + (directivePropValue.length === 0 ? "\"\"" : directivePropValue) + ", ";
}

Expand Down Expand Up @@ -1588,7 +1590,7 @@

var generateNode = function(node, parent, state) {
if(typeof node === "string") {
var compiled = compileTemplate(node, state.dependencies);
var compiled = compileTemplate(node, state.exclude, state.dependencies);
var meta = defaultMetadata();

if(node !== compiled) {
Expand Down Expand Up @@ -1660,6 +1662,7 @@
var state = {
hasAttrs: false,
specialDirectivesAfter: null,
exclude: globals,
dependencies: []
};

Expand Down Expand Up @@ -2150,23 +2153,33 @@
beforeGenerate: function(prop, vnode, parentVNode, state) {
// Setup Deep Flag to Flatten Array
parentVNode.deep = true;
},
afterGenerate: function(prop, code, vnode, state) {
// Get dependencies
var dependencies = state.dependencies;

// Get Parts
// Parts
var parts = prop.value.split(" in ");

// Aliases
var aliases = parts[0];

// The Iteratable
// Iteratable
var iteratable = parts[1];
compileTemplateExpression(iteratable, globals.concat(aliases.split(",")), dependencies);
var exclude = globals.concat(aliases.split(","));
state.exclude = exclude;
compileTemplateExpression(iteratable, exclude, state.dependencies);

// Save for further generation
var meta = prop.meta;
meta.iteratable = iteratable;
meta.aliases = aliases;
},
afterGenerate: function(prop, code, vnode, state) {
// Get meta
var meta = prop.meta;

// Restore globals to exclude
state.exclude = globals;

// Use the renderLoop runtime helper
return ("m.renderLoop(" + iteratable + ", function(" + aliases + ") { return " + code + "; })");
return ("m.renderLoop(" + (meta.iteratable) + ", function(" + (meta.aliases) + ") { return " + code + "; })");
}
}

Expand Down
Loading

0 comments on commit 8637d66

Please sign in to comment.