From eb688f2c8e352558b50d9fdb22ea639dc622d09f Mon Sep 17 00:00:00 2001 From: Gion Kunz Date: Thu, 31 Dec 2015 11:07:11 +0100 Subject: [PATCH] feat(svg): Provide support for SVG foreignObject by adding xhtml namespace Closes #6192 --- .../schema/dom_element_schema_registry.ts | 7 ++++-- .../angular2/src/platform/dom/dom_renderer.ts | 7 ++++-- .../test/core/linker/integration_spec.ts | 24 +++++++++++++++++++ 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/modules/angular2/src/compiler/schema/dom_element_schema_registry.ts b/modules/angular2/src/compiler/schema/dom_element_schema_registry.ts index 84a9230fe3..07e5ad9c90 100644 --- a/modules/angular2/src/compiler/schema/dom_element_schema_registry.ts +++ b/modules/angular2/src/compiler/schema/dom_element_schema_registry.ts @@ -6,8 +6,11 @@ import {splitNsName} from 'angular2/src/compiler/html_tags'; import {ElementSchemaRegistry} from './element_schema_registry'; -const NAMESPACE_URIS = - CONST_EXPR({'xlink': 'http://www.w3.org/1999/xlink', 'svg': 'http://www.w3.org/2000/svg'}); +const NAMESPACE_URIS = CONST_EXPR({ + 'xlink': 'http://www.w3.org/1999/xlink', + 'svg': 'http://www.w3.org/2000/svg', + 'xhtml': 'http://www.w3.org/1999/xhtml' +}); @Injectable() export class DomElementSchemaRegistry extends ElementSchemaRegistry { diff --git a/modules/angular2/src/platform/dom/dom_renderer.ts b/modules/angular2/src/platform/dom/dom_renderer.ts index d64ce1094e..b37be36443 100644 --- a/modules/angular2/src/platform/dom/dom_renderer.ts +++ b/modules/angular2/src/platform/dom/dom_renderer.ts @@ -28,8 +28,11 @@ import {ViewEncapsulation} from 'angular2/src/core/metadata'; import {DOM} from 'angular2/src/platform/dom/dom_adapter'; import {camelCaseToDashCase} from './util'; -const NAMESPACE_URIS = - CONST_EXPR({'xlink': 'http://www.w3.org/1999/xlink', 'svg': 'http://www.w3.org/2000/svg'}); +const NAMESPACE_URIS = CONST_EXPR({ + 'xlink': 'http://www.w3.org/1999/xlink', + 'svg': 'http://www.w3.org/2000/svg', + 'xhtml': 'http://www.w3.org/1999/xhtml' +}); const TEMPLATE_COMMENT_TEXT = 'template bindings={}'; var TEMPLATE_BINDINGS_EXP = /^template bindings=(.*)$/g; diff --git a/modules/angular2/test/core/linker/integration_spec.ts b/modules/angular2/test/core/linker/integration_spec.ts index 8318aea3a5..d77bc9d1a6 100644 --- a/modules/angular2/test/core/linker/integration_spec.ts +++ b/modules/angular2/test/core/linker/integration_spec.ts @@ -1859,6 +1859,30 @@ function declareTests() { }); })); + it('should support foreignObjects', + inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, + async) => { + tcb.overrideView( + MyComp, new ViewMetadata({ + template: + '

Test

' + })) + .createAsync(MyComp) + .then((fixture) => { + var el = fixture.debugElement.nativeElement; + var svg = DOM.childNodes(el)[0]; + var foreignObject = DOM.childNodes(svg)[0]; + var p = DOM.childNodes(foreignObject)[0]; + expect(DOM.getProperty(svg, 'namespaceURI')) + .toEqual('http://www.w3.org/2000/svg'); + expect(DOM.getProperty(foreignObject, 'namespaceURI')) + .toEqual('http://www.w3.org/2000/svg'); + expect(DOM.getProperty(p, 'namespaceURI')) + .toEqual('http://www.w3.org/1999/xhtml'); + + async.done(); + }); + })); }); describe('attributes', () => {