Merge branch 'master' into gh-400

pull/401/head
Rich Harris 8 years ago committed by GitHub
commit 108876b64b

@ -47,6 +47,7 @@ export default function createBinding ( generator, node, attribute, current, loc
${generator.current.component}._bindings.push( function () {
if ( ${local.name}._torndown ) return;
${local.name}.observe( '${attribute.name}', function ( value ) {
if ( ${updating} ) return;
${updating} = true;
${setter}
${updating} = false;
@ -56,7 +57,9 @@ export default function createBinding ( generator, node, attribute, current, loc
local.update.addBlock( deindent`
if ( !${updating} && ${dependencies.map( dependency => `'${dependency}' in changed` ).join( '||' )} ) {
${updating} = true;
${local.name}._set({ ${attribute.name}: ${snippet} });
${local.name}_updating = false;
}
` );
}

@ -0,0 +1,12 @@
<B bind:currentIdentifier />
<B bind:currentIdentifier />
<script>
import B from './B.html';
export default {
components: {
B
}
}
</script>

@ -0,0 +1,20 @@
{{#each list as item}}
<p>
<C identifier="{{item}}" bind:currentIdentifier>
{{item}}
</C>
</p>
{{/each}}
<script>
import C from './C.html';
export default {
data: () => ({
list: [1, 2, 3, 2, 1]
}),
components: {
C
}
}
</script>

@ -0,0 +1,23 @@
<span
on:click="toggle()"
class="{{isCurrentlySelected ? 'selected' : ''}}"
>
{{yield}}
</span>
<script>
export default {
computed: {
isCurrentlySelected: (currentIdentifier, identifier) => currentIdentifier === identifier
},
methods: {
toggle() {
const isCurrentlySelected = this.get('isCurrentlySelected')
this.set({
currentIdentifier: isCurrentlySelected ? null : this.get('identifier')
})
}
}
}
</script>

@ -0,0 +1,90 @@
export default {
html: `
<p><span class=''>1</span></p>
<p><span class='selected'>2</span></p>
<p><span class=''>3</span></p>
<p><span class='selected'>2</span></p>
<p><span class=''>1</span></p>
<p><span class=''>1</span></p>
<p><span class='selected'>2</span></p>
<p><span class=''>3</span></p>
<p><span class='selected'>2</span></p>
<p><span class=''>1</span></p>
<p><span class=''>1</span></p>
<p><span class='selected'>2</span></p>
<p><span class=''>3</span></p>
<p><span class='selected'>2</span></p>
<p><span class=''>1</span></p>
<p><span class=''>1</span></p>
<p><span class='selected'>2</span></p>
<p><span class=''>3</span></p>
<p><span class='selected'>2</span></p>
<p><span class=''>1</span></p>
`,
test ( assert, component, target, window ) {
const click = new window.MouseEvent( 'click' );
const spans = target.querySelectorAll( 'span' );
spans[0].dispatchEvent( click );
assert.equal( component.get( 'currentIdentifier' ), 1 );
assert.htmlEqual( target.innerHTML, `
<p><span class='selected'>1</span></p>
<p><span class=''>2</span></p>
<p><span class=''>3</span></p>
<p><span class=''>2</span></p>
<p><span class='selected'>1</span></p>
<p><span class='selected'>1</span></p>
<p><span class=''>2</span></p>
<p><span class=''>3</span></p>
<p><span class=''>2</span></p>
<p><span class='selected'>1</span></p>
<p><span class='selected'>1</span></p>
<p><span class=''>2</span></p>
<p><span class=''>3</span></p>
<p><span class=''>2</span></p>
<p><span class='selected'>1</span></p>
<p><span class='selected'>1</span></p>
<p><span class=''>2</span></p>
<p><span class=''>3</span></p>
<p><span class=''>2</span></p>
<p><span class='selected'>1</span></p>
` );
spans[0].dispatchEvent( click );
assert.equal( component.get( 'currentIdentifier' ), null );
assert.htmlEqual( target.innerHTML, `
<p><span class=''>1</span></p>
<p><span class=''>2</span></p>
<p><span class=''>3</span></p>
<p><span class=''>2</span></p>
<p><span class=''>1</span></p>
<p><span class=''>1</span></p>
<p><span class=''>2</span></p>
<p><span class=''>3</span></p>
<p><span class=''>2</span></p>
<p><span class=''>1</span></p>
<p><span class=''>1</span></p>
<p><span class=''>2</span></p>
<p><span class=''>3</span></p>
<p><span class=''>2</span></p>
<p><span class=''>1</span></p>
<p><span class=''>1</span></p>
<p><span class=''>2</span></p>
<p><span class=''>3</span></p>
<p><span class=''>2</span></p>
<p><span class=''>1</span></p>
` );
}
};

@ -0,0 +1,17 @@
<A bind:currentIdentifier />
<A bind:currentIdentifier />
<script>
import A from './A.html';
export default {
data() {
return {
currentIdentifier: 2
}
},
components: {
A
}
}
</script>
Loading…
Cancel
Save