From abbd605091d12a6b023ffa7b4ba018b949cf5746 Mon Sep 17 00:00:00 2001 From: Rich-Harris Date: Tue, 6 Dec 2016 22:01:39 -0500 Subject: [PATCH] dont render text nodes inside SVG elements (#142) --- compiler/generate/visitors/Text.js | 4 ++++ test/compiler/svg-no-whitespace/_config.js | 9 +++++++++ test/compiler/svg-no-whitespace/main.html | 5 +++++ 3 files changed, 18 insertions(+) create mode 100644 test/compiler/svg-no-whitespace/_config.js create mode 100644 test/compiler/svg-no-whitespace/main.html diff --git a/compiler/generate/visitors/Text.js b/compiler/generate/visitors/Text.js index ead59ed3b3..758c9c4648 100644 --- a/compiler/generate/visitors/Text.js +++ b/compiler/generate/visitors/Text.js @@ -1,5 +1,9 @@ export default { enter ( generator, node ) { + if ( generator.current.namespace && !/\S/.test( node.data ) ) { + return; + } + const name = generator.current.getUniqueName( `text` ); generator.addElement( name, `document.createTextNode( ${JSON.stringify( node.data )} )` ); } diff --git a/test/compiler/svg-no-whitespace/_config.js b/test/compiler/svg-no-whitespace/_config.js new file mode 100644 index 0000000000..f2a670abd2 --- /dev/null +++ b/test/compiler/svg-no-whitespace/_config.js @@ -0,0 +1,9 @@ +export default { + test ( assert, component, target ) { + const svg = target.querySelector( 'svg' ); + + assert.equal( svg.childNodes.length, 2 ); + assert.equal( svg.childNodes[0].nodeName, 'rect' ); + assert.equal( svg.childNodes[1].nodeName, 'rect' ); + } +}; diff --git a/test/compiler/svg-no-whitespace/main.html b/test/compiler/svg-no-whitespace/main.html new file mode 100644 index 0000000000..1a937b3188 --- /dev/null +++ b/test/compiler/svg-no-whitespace/main.html @@ -0,0 +1,5 @@ + + + + +