Skip to content

Commit

Permalink
recognise dependencies in class directives - fixes #1793
Browse files Browse the repository at this point in the history
  • Loading branch information
Rich-Harris committed Oct 24, 2018
1 parent 1deb25e commit 3258779
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 16 deletions.
22 changes: 8 additions & 14 deletions src/compile/render-dom/wrappers/Element/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,14 @@ export default class ElementWrapper extends Wrapper {
block.addAnimation();
}

if (node.classes) {
node.classes.forEach(({ expression }) => {
if (expression) {
block.addDependencies(expression.dependencies);
}
});
}

if (this.parent) {
if (node.actions.length > 0) this.parent.cannotUseInnerHTML();
if (node.animation) this.parent.cannotUseInnerHTML();
Expand Down Expand Up @@ -394,20 +402,6 @@ export default class ElementWrapper extends Wrapper {
: `{}`}, ${this.node.namespace === namespaces.svg ? true : false})`;
}

// addBindings(block: Block) {
// if (this.bindings.length === 0) return;

// if (this.node.name === 'select' || this.isMediaNode()) {
// this.renderer.hasComplexBindings = true;
// }

// this.bindings.forEach(binding => {
// binding.render(block);
// });

// this.initialUpdate = this.bindings.map(binding => binding.initialUpdate).filter(Boolean).join('\n');
// }

addBindings(block: Block) {
const { renderer } = this;

Expand Down
4 changes: 2 additions & 2 deletions src/compile/render-ssr/handlers/Element.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,15 +105,15 @@ export default function(node, renderer, options) {
openingTag += '${' + attribute.chunks[0].snippet + ' ? " ' + attribute.name + '" : "" }';
} else if (attribute.name === 'class' && classExpr) {
addClassAttribute = false;
openingTag += ` class="\${ [\`${attribute.stringifyForSsr()}\`, ${classExpr} ].join(' ').trim() }"`;
openingTag += ` class="\${[\`${attribute.stringifyForSsr()}\`, ${classExpr}].join(' ').trim() }"`;
} else {
openingTag += ` ${attribute.name}="${attribute.stringifyForSsr()}"`;
}
});
}

if (addClassAttribute) {
openingTag += ` class="\${ [${classExpr}].join(' ').trim() }"`;
openingTag += `\${((v) => v ? ' class="' + v + '"' : '')([${classExpr}].join(' ').trim())}`;
}

openingTag += '>';
Expand Down
21 changes: 21 additions & 0 deletions test/runtime/samples/class-in-each/_config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
export default {
data: {
things: ['one', 'two', 'three'],
selected: 'two'
},

html: `
<div></div>
<div class="selected"></div>
<div></div>
`,

test(assert, component, target) {
component.set({ selected: 'three' });
assert.htmlEqual(target.innerHTML, `
<div></div>
<div class=""></div>
<div class="selected"></div>
`);
}
};
3 changes: 3 additions & 0 deletions test/runtime/samples/class-in-each/main.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{#each things as thing}
<div class:selected="selected === thing"></div>
{/each}

0 comments on commit 3258779

Please sign in to comment.