diff --git a/src/view/domconverter.js b/src/view/domconverter.js index 6693a6feb..f0723a718 100644 --- a/src/view/domconverter.js +++ b/src/view/domconverter.js @@ -224,7 +224,11 @@ export default class DomConverter { return domElement; } else { // Create DOM element. - domElement = domDocument.createElement( viewNode.name ); + if ( viewNode.hasAttribute( 'xmlns' ) ) { + domElement = domDocument.createElementNS( viewNode.getAttribute( 'xmlns' ), viewNode.name ); + } else { + domElement = domDocument.createElement( viewNode.name ); + } if ( options.bind ) { this.bindElements( domElement, viewNode ); diff --git a/tests/view/domconverter/view-to-dom.js b/tests/view/domconverter/view-to-dom.js index 5948600fa..57c03eb70 100644 --- a/tests/view/domconverter/view-to-dom.js +++ b/tests/view/domconverter/view-to-dom.js @@ -174,6 +174,15 @@ describe( 'DomConverter', () => { expect( domTextNode.data ).to.equal( 'foo' ); } ); + it( 'should create namespaced elements', () => { + const namespace = 'http://www.w3.org/2000/svg'; + const viewSvg = new ViewElement( 'svg', { xmlns: namespace } ); + + const domSvg = converter.viewToDom( viewSvg, document ); + + expect( domSvg.createSVGRect ).to.be.a( 'function' ); + } ); + describe( 'it should convert spaces to  ', () => { it( 'at the beginning of each container element', () => { const viewDiv = new ViewContainerElement( 'div', null, [