From bbca5d1402d2a85eca87d4dcaa217e94a3f3e726 Mon Sep 17 00:00:00 2001 From: Conduitry Date: Thu, 20 Apr 2017 05:55:27 -0400 Subject: [PATCH 1/9] only call .update on yield fragment if it's present (#514) --- src/generators/dom/visitors/Component/Component.js | 10 ++++++---- .../samples/component-yield-static/Widget.html | 1 + .../samples/component-yield-static/_config.js | 12 ++++++++++++ .../runtime/samples/component-yield-static/main.html | 12 ++++++++++++ 4 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 test/runtime/samples/component-yield-static/Widget.html create mode 100644 test/runtime/samples/component-yield-static/_config.js create mode 100644 test/runtime/samples/component-yield-static/main.html diff --git a/src/generators/dom/visitors/Component/Component.js b/src/generators/dom/visitors/Component/Component.js index c54945338d..9a2dbf0025 100644 --- a/src/generators/dom/visitors/Component/Component.js +++ b/src/generators/dom/visitors/Component/Component.js @@ -113,9 +113,11 @@ export default function visitComponent ( generator, block, state, node ) { `var ${yieldFragment} = ${childBlock.name}( ${params}, ${block.component} );` ); - block.builders.update.addLine( - `${yieldFragment}.update( changed, ${params} );` - ); + if ( childBlock.hasUpdateMethod ) { + block.builders.update.addLine( + `${yieldFragment}.update( changed, ${params} );` + ); + } componentInitProperties.push( `_yield: ${yieldFragment}`); } @@ -183,4 +185,4 @@ export default function visitComponent ( generator, block, state, node ) { block.builders.create.addBlock( local.create ); if ( !local.update.isEmpty() ) block.builders.update.addBlock( local.update ); -} \ No newline at end of file +} diff --git a/test/runtime/samples/component-yield-static/Widget.html b/test/runtime/samples/component-yield-static/Widget.html new file mode 100644 index 0000000000..25141c9254 --- /dev/null +++ b/test/runtime/samples/component-yield-static/Widget.html @@ -0,0 +1 @@ +{{yield}} diff --git a/test/runtime/samples/component-yield-static/_config.js b/test/runtime/samples/component-yield-static/_config.js new file mode 100644 index 0000000000..06bcd82882 --- /dev/null +++ b/test/runtime/samples/component-yield-static/_config.js @@ -0,0 +1,12 @@ +export default { + html: ` + Hello + `, + + test ( assert, component, target ) { + component.set( { name: 'World' } ); + assert.htmlEqual( target.innerHTML, ` + Hello World + ` ); + } +}; diff --git a/test/runtime/samples/component-yield-static/main.html b/test/runtime/samples/component-yield-static/main.html new file mode 100644 index 0000000000..5e2fffc76a --- /dev/null +++ b/test/runtime/samples/component-yield-static/main.html @@ -0,0 +1,12 @@ +Hello {{name}} + + From 682def4bda4a061f023105c3cdbea887e725532c Mon Sep 17 00:00:00 2001 From: Rich-Harris Date: Thu, 20 Apr 2017 06:33:37 -0400 Subject: [PATCH 2/9] -> v1.17.1 --- CHANGELOG.md | 5 +++++ package.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 43d0cacd52..8a43d8feed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Svelte changelog +## 1.17.1 + +* Fixes for static each-else and yield blocks ([#509](https://github.com/sveltejs/svelte/issues/509)), ([#514](https://github.com/sveltejs/svelte/issues/514)) +* Code generation tweaks ([#504](https://github.com/sveltejs/svelte/issues/504)), ([#507](https://github.com/sveltejs/svelte/issues/507)) + ## 1.17.0 * Add `currentTime`, `duration` and `paused` bindings for media elements ([#406](https://github.com/sveltejs/svelte/issues/406)) diff --git a/package.json b/package.json index 85a30aad21..d23e771d0e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "svelte", - "version": "1.17.0", + "version": "1.17.1", "description": "The magical disappearing UI framework", "main": "compiler/svelte.js", "files": [ From 5f27bbdcde3f2943dbb95870718430caedeca86c Mon Sep 17 00:00:00 2001 From: Conduitry Date: Thu, 20 Apr 2017 14:54:07 -0400 Subject: [PATCH 3/9] replace invalid characters in element names when creating variables (#516) --- src/generators/dom/visitors/Element/Element.js | 4 ++-- test/runtime/samples/element-invalid-name/_config.js | 5 +++++ test/runtime/samples/element-invalid-name/main.html | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 test/runtime/samples/element-invalid-name/_config.js create mode 100644 test/runtime/samples/element-invalid-name/main.html diff --git a/src/generators/dom/visitors/Element/Element.js b/src/generators/dom/visitors/Element/Element.js index 7f55d84ec9..c4bf6c6af4 100644 --- a/src/generators/dom/visitors/Element/Element.js +++ b/src/generators/dom/visitors/Element/Element.js @@ -34,7 +34,7 @@ export default function visitElement ( generator, block, state, node ) { return visitComponent( generator, block, state, node ); } - const name = block.getUniqueName( node.name ); + const name = block.getUniqueName( node.name.replace( /[^a-zA-Z_$]/g, '_' ) ); const childState = Object.assign( {}, state, { isTopLevel: false, @@ -136,4 +136,4 @@ function getRenderStatement ( generator, namespace, name ) { } return `${generator.helper( 'createElement' )}( '${name}' )`; -} \ No newline at end of file +} diff --git a/test/runtime/samples/element-invalid-name/_config.js b/test/runtime/samples/element-invalid-name/_config.js new file mode 100644 index 0000000000..af6e4933ce --- /dev/null +++ b/test/runtime/samples/element-invalid-name/_config.js @@ -0,0 +1,5 @@ +export default { + html: ` + Hello + ` +} diff --git a/test/runtime/samples/element-invalid-name/main.html b/test/runtime/samples/element-invalid-name/main.html new file mode 100644 index 0000000000..0ff9794228 --- /dev/null +++ b/test/runtime/samples/element-invalid-name/main.html @@ -0,0 +1 @@ +Hello From bcefbb57c0b84521ee7cde80ec7527c0478e36f9 Mon Sep 17 00:00:00 2001 From: Conduitry Date: Thu, 20 Apr 2017 15:05:25 -0400 Subject: [PATCH 4/9] -> v1.17.2 --- CHANGELOG.md | 8 ++++++-- package.json | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a43d8feed..50036edf27 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Svelte changelog +## 1.17.2 + +* Replace bad characters when creating variable names based on attributes ([#470](https://github.com/sveltejs/svelte/issues/470)) + ## 1.17.1 * Fixes for static each-else and yield blocks ([#509](https://github.com/sveltejs/svelte/issues/509)), ([#514](https://github.com/sveltejs/svelte/issues/514)) @@ -48,7 +52,7 @@ * Add `bind:online` to window ([#404](https://github.com/sveltejs/svelte/issues/404)) * In dev mode, throw if read-only properties are set ([#404](https://github.com/sveltejs/svelte/issues/404)) * Prevent conflicts with component name ([#464](https://github.com/sveltejs/svelte/pull/464)) -* Ensure event handler names are deconflicted ([#466https://github.com/sveltejs/svelte/issues/466 +* Ensure event handler names are deconflicted ([#466](https://github.com/sveltejs/svelte/issues/466)) ## 1.13.7 @@ -284,7 +288,7 @@ ## 1.2.4 -* SSR compiler: Implement `{{{tripes}}}` ([#197](https://github.com/sveltejs/svelte/issues/197)) +* SSR compiler: Implement `{{{triples}}}` ([#197](https://github.com/sveltejs/svelte/issues/197)) * SSR compiler: Escape HTML in tags ([#197](https://github.com/sveltejs/svelte/issues/197)) ## 1.2.3 diff --git a/package.json b/package.json index d23e771d0e..3e89b6e2fa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "svelte", - "version": "1.17.1", + "version": "1.17.2", "description": "The magical disappearing UI framework", "main": "compiler/svelte.js", "files": [ From 2b06f572fc23549d39453d6aed7351c9e2f08888 Mon Sep 17 00:00:00 2001 From: Conduitry Date: Thu, 20 Apr 2017 15:14:17 -0400 Subject: [PATCH 5/9] oops, fix changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 50036edf27..017a2219b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## 1.17.2 -* Replace bad characters when creating variable names based on attributes ([#470](https://github.com/sveltejs/svelte/issues/470)) +* Replace bad characters when creating variable names based on element names ([#516](https://github.com/sveltejs/svelte/issues/516)) ## 1.17.1 From 685dffd4f5bfe7d44d3f937e2d064e772f1afdca Mon Sep 17 00:00:00 2001 From: Tobias Davis Date: Fri, 21 Apr 2017 12:15:47 -0500 Subject: [PATCH 6/9] failing test for bound event handler on + {{#each options as option}} + + {{/each}} + + + \ No newline at end of file From 2911513fb8236ce297e24af578446592fb1dfcb4 Mon Sep 17 00:00:00 2001 From: Conduitry Date: Fri, 21 Apr 2017 14:28:14 -0400 Subject: [PATCH 7/9] fix unit test? --- .../samples/select-change-handler/_config.js | 30 +++++++++---------- .../samples/select-change-handler/main.html | 22 +++++++------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/test/runtime/samples/select-change-handler/_config.js b/test/runtime/samples/select-change-handler/_config.js index 2a9bb61bd1..015c8182b4 100644 --- a/test/runtime/samples/select-change-handler/_config.js +++ b/test/runtime/samples/select-change-handler/_config.js @@ -1,22 +1,22 @@ export default { - data: { - options: [ { id: 'a' }, { id: 'b' }, { id: 'c' } ], - selected: 'b' - }, + data: { + options: [ { id: 'a' }, { id: 'b' }, { id: 'c' } ], + selected: 'b' + }, - test ( assert, component, target, window ) { - const select = target.querySelector( 'select' ); - assert.equal( select.value, 'b' ); + test ( assert, component, target, window ) { + const select = target.querySelector( 'select' ); + assert.equal( select.value, 'b' ); - const event = new window.Event( 'update' ); + const event = new window.Event( 'change' ); - select.value = 'c'; - select.dispatchEvent( event ); + select.value = 'c'; + select.dispatchEvent( event ); - assert.equal( select.value, 'c' ); - assert.equal( component.get( 'lastChangedTo' ), 'c' ); - assert.equal( component.get( 'selected' ), 'c' ); + assert.equal( select.value, 'c' ); + assert.equal( component.get( 'lastChangedTo' ), 'c' ); + assert.equal( component.get( 'selected' ), 'c' ); - component.destroy(); - } + component.destroy(); + } }; diff --git a/test/runtime/samples/select-change-handler/main.html b/test/runtime/samples/select-change-handler/main.html index 8a62fd2635..48376dfa93 100644 --- a/test/runtime/samples/select-change-handler/main.html +++ b/test/runtime/samples/select-change-handler/main.html @@ -1,15 +1,15 @@ \ No newline at end of file + export default { + methods: { + updateLastChangedTo(result) { + this.set({ lastChangedTo: result }); + } + } + }; + From d9234572be5e45fa20ba4ec7ac5c6f9b4a7c64e9 Mon Sep 17 00:00:00 2001 From: Conduitry Date: Fri, 21 Apr 2017 16:49:19 -0400 Subject: [PATCH 8/9] visit all attributes of select elements after visiting children --- .../dom/visitors/Element/Element.js | 32 +++++++++---------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/src/generators/dom/visitors/Element/Element.js b/src/generators/dom/visitors/Element/Element.js index c4bf6c6af4..bcbce6004a 100644 --- a/src/generators/dom/visitors/Element/Element.js +++ b/src/generators/dom/visitors/Element/Element.js @@ -56,20 +56,19 @@ export default function visitElement ( generator, block, state, node ) { block.builders.create.addLine( `${generator.helper( 'setAttribute' )}( ${name}, '${generator.cssId}', '' );` ); } - let selectValueAttribute; - - node.attributes - .sort( ( a, b ) => order[ a.type ] - order[ b.type ] ) - .forEach( attribute => { - // value attributes are an annoying special case — it must be handled + // *after* its children have been updated + visitAttributes(); + } // special case – bound