mirror of https://github.com/sveltejs/svelte
commit
1a49c2f344
@ -0,0 +1,5 @@
|
|||||||
|
<select bind:value='selectedComponent'>
|
||||||
|
{{#each components as component}}
|
||||||
|
<option value='{{component}}'>{{component.name}}.html</option>
|
||||||
|
{{/each}}
|
||||||
|
</select>
|
@ -0,0 +1 @@
|
|||||||
|
<textarea bind:value='code'></textarea>
|
@ -0,0 +1,84 @@
|
|||||||
|
const components = [
|
||||||
|
{
|
||||||
|
name: 'One',
|
||||||
|
source: 'one source'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Two',
|
||||||
|
source: 'two source'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
const selectedComponent = components[0];
|
||||||
|
|
||||||
|
export default {
|
||||||
|
skip: true, // doesn't reflect real-world bug, maybe a JSDOM quirk
|
||||||
|
|
||||||
|
data: {
|
||||||
|
components,
|
||||||
|
selectedComponent
|
||||||
|
},
|
||||||
|
|
||||||
|
html: `
|
||||||
|
<select>
|
||||||
|
<option value='[object Object]'>One.html</option>
|
||||||
|
<option value='[object Object]'>Two.html</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<textarea></textarea>
|
||||||
|
|
||||||
|
<pre>ONE SOURCE\nTWO SOURCE</pre>
|
||||||
|
`,
|
||||||
|
|
||||||
|
test ( assert, component, target, window ) {
|
||||||
|
const event = new window.MouseEvent( 'input' );
|
||||||
|
const textarea = target.querySelector( 'textarea' );
|
||||||
|
|
||||||
|
textarea.value = 'one source changed';
|
||||||
|
textarea.dispatchEvent( event );
|
||||||
|
|
||||||
|
assert.equal( component.get( 'compiled' ), 'ONE SOURCE CHANGED\nTWO SOURCE' );
|
||||||
|
assert.htmlEqual( target.innerHTML, `
|
||||||
|
<select>
|
||||||
|
<option value='[object Object]'>One.html</option>
|
||||||
|
<option value='[object Object]'>Two.html</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<textarea></textarea>
|
||||||
|
|
||||||
|
<pre>ONE SOURCE CHANGED\nTWO SOURCE</pre>
|
||||||
|
` );
|
||||||
|
|
||||||
|
// const select = target.querySelector( 'select' );
|
||||||
|
// console.log( `select.options[0].selected`, select.options[0].selected )
|
||||||
|
// console.log( `select.options[1].selected`, select.options[1].selected )
|
||||||
|
// console.log( `select.value`, select.value )
|
||||||
|
// console.log( `select.__value`, select.__value )
|
||||||
|
// select.options[1].selected = true;
|
||||||
|
// console.log( `select.options[0].selected`, select.options[0].selected )
|
||||||
|
// console.log( `select.options[1].selected`, select.options[1].selected )
|
||||||
|
// console.log( `select.value`, select.value )
|
||||||
|
// console.log( `select.__value`, select.__value )
|
||||||
|
// select.dispatchEvent( new window.Event( 'change' ) );
|
||||||
|
component.set({ selectedComponent: components[1] });
|
||||||
|
|
||||||
|
assert.equal( textarea.value, 'two source' );
|
||||||
|
|
||||||
|
textarea.value = 'two source changed';
|
||||||
|
textarea.dispatchEvent( event );
|
||||||
|
|
||||||
|
assert.equal( component.get( 'compiled' ), 'ONE SOURCE CHANGED\nTWO SOURCE CHANGED' );
|
||||||
|
assert.htmlEqual( target.innerHTML, `
|
||||||
|
<select>
|
||||||
|
<option value='[object Object]'>One.html</option>
|
||||||
|
<option value='[object Object]'>Two.html</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<textarea></textarea>
|
||||||
|
|
||||||
|
<pre>ONE SOURCE CHANGED\nTWO SOURCE CHANGED</pre>
|
||||||
|
` );
|
||||||
|
|
||||||
|
component.destroy();
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,42 @@
|
|||||||
|
<ComponentSelector :components bind:selectedComponent/>
|
||||||
|
<Editor bind:code='selectedComponent.source'/>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
{{compiled}}
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Editor from './Editor.html';
|
||||||
|
import ComponentSelector from './ComponentSelector.html';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
ComponentSelector,
|
||||||
|
Editor
|
||||||
|
},
|
||||||
|
|
||||||
|
oncreate () {
|
||||||
|
this.observe( 'components', components => {
|
||||||
|
components.forEach( component => {
|
||||||
|
if ( component === this.get( 'selectedComponent' ) ) return;
|
||||||
|
component.compiled = component.source.toUpperCase();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
this.observe( 'selectedComponent', component => {
|
||||||
|
component.compiled = component.source.toUpperCase();
|
||||||
|
this.updateBundle();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
updateBundle () {
|
||||||
|
const components = this.get( 'components' );
|
||||||
|
|
||||||
|
const compiled = components.map( component => component.compiled ).join( '\n' );
|
||||||
|
|
||||||
|
this.set({ compiled });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
@ -0,0 +1,15 @@
|
|||||||
|
export default {
|
||||||
|
'skip-ssr': true,
|
||||||
|
|
||||||
|
html: '<button>10</button>',
|
||||||
|
|
||||||
|
test ( assert, component, target, window ) {
|
||||||
|
const event = new window.MouseEvent( 'click' );
|
||||||
|
|
||||||
|
const button = target.querySelector( 'button' );
|
||||||
|
|
||||||
|
button.dispatchEvent( event );
|
||||||
|
|
||||||
|
assert.equal( target.innerHTML, '<button>11</button>' );
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,25 @@
|
|||||||
|
<button on:tap='set({ z: z + 1 })'>{{z}}</button>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data: () => ({
|
||||||
|
z: 10
|
||||||
|
}),
|
||||||
|
|
||||||
|
events: {
|
||||||
|
tap ( node, callback ) {
|
||||||
|
const clickHandler = event => {
|
||||||
|
callback(event);
|
||||||
|
};
|
||||||
|
|
||||||
|
node.addEventListener( 'click', clickHandler, false );
|
||||||
|
|
||||||
|
return {
|
||||||
|
teardown () {
|
||||||
|
node.addEventListener( 'click', clickHandler, false );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
@ -0,0 +1,19 @@
|
|||||||
|
export default {
|
||||||
|
'skip-ssr': true,
|
||||||
|
|
||||||
|
data: {
|
||||||
|
foo: 'a'
|
||||||
|
},
|
||||||
|
|
||||||
|
test ( assert, component, target ) {
|
||||||
|
const options = target.querySelectorAll( 'option' );
|
||||||
|
|
||||||
|
assert.equal( options[0].selected, true );
|
||||||
|
assert.equal( options[1].selected, false );
|
||||||
|
|
||||||
|
component.set( { foo: 'b' } );
|
||||||
|
|
||||||
|
assert.equal( options[0].selected, false );
|
||||||
|
assert.equal( options[1].selected, true );
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,4 @@
|
|||||||
|
<select value="{{foo}}">
|
||||||
|
<option>a</option>
|
||||||
|
<option>b</option>
|
||||||
|
</select>
|
@ -0,0 +1,8 @@
|
|||||||
|
[{
|
||||||
|
"message": "Imported identifiers cannot have a name of 'root' due to technical limitations",
|
||||||
|
"pos": 17,
|
||||||
|
"loc": {
|
||||||
|
"line": 2,
|
||||||
|
"column": 8
|
||||||
|
}
|
||||||
|
}]
|
@ -0,0 +1,3 @@
|
|||||||
|
<script>
|
||||||
|
import root from 'foo';
|
||||||
|
</script>
|
Loading…
Reference in new issue