From d23cf3b52ceca752289292969f4fd7b6157e1d19 Mon Sep 17 00:00:00 2001 From: Matthieu Riegler Date: Fri, 3 May 2024 20:42:07 +0200 Subject: [PATCH] fix(platform-browser): Use the right namespace for mathML. Prior to this change, MathML element were created with the wrong namespace resulting in regular DOM `Element`. This commit fixes this. --- .../src/typeahead.spec.ts | 2 +- .../acceptance/view_container_ref_spec.ts | 2 +- .../platform-browser/src/dom/dom_renderer.ts | 2 +- .../test/dom/dom_renderer_spec.ts | 19 +++++++++++++++++++ 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/aio/content/examples/practical-observable-usage/src/typeahead.spec.ts b/aio/content/examples/practical-observable-usage/src/typeahead.spec.ts index 0f9b0aea3028a8..8c74a6b0f64062 100644 --- a/aio/content/examples/practical-observable-usage/src/typeahead.spec.ts +++ b/aio/content/examples/practical-observable-usage/src/typeahead.spec.ts @@ -112,7 +112,7 @@ describe('typeahead', () => { const task: MockTask = { id: {} as MockTask['id'], - fn: fn.bind(null, ...args), + fn: fn.bind(null, ...args), delay, recurring, nextTriggerTime: this.now + delay, diff --git a/packages/core/test/acceptance/view_container_ref_spec.ts b/packages/core/test/acceptance/view_container_ref_spec.ts index ab399bba69c270..2843c3fae488c5 100644 --- a/packages/core/test/acceptance/view_container_ref_spec.ts +++ b/packages/core/test/acceptance/view_container_ref_spec.ts @@ -227,7 +227,7 @@ describe('ViewContainerRef', () => { expect(fixture.nativeElement.querySelector('svg').namespaceURI) .toEqual('http://www.w3.org/2000/svg'); expect(fixture.nativeElement.querySelector('math').namespaceURI) - .toEqual('http://www.w3.org/1998/MathML/'); + .toEqual('http://www.w3.org/1998/Math/MathML'); }); } diff --git a/packages/platform-browser/src/dom/dom_renderer.ts b/packages/platform-browser/src/dom/dom_renderer.ts index afb067053127a5..4b2bcc5d3cff5b 100644 --- a/packages/platform-browser/src/dom/dom_renderer.ts +++ b/packages/platform-browser/src/dom/dom_renderer.ts @@ -20,7 +20,7 @@ export const NAMESPACE_URIS: {[ns: string]: string} = { 'xlink': 'http://www.w3.org/1999/xlink', 'xml': 'http://www.w3.org/XML/1998/namespace', 'xmlns': 'http://www.w3.org/2000/xmlns/', - 'math': 'http://www.w3.org/1998/MathML/', + 'math': 'http://www.w3.org/1998/Math/MathML', }; const COMPONENT_REGEX = /%COMP%/g; diff --git a/packages/platform-browser/test/dom/dom_renderer_spec.ts b/packages/platform-browser/test/dom/dom_renderer_spec.ts index ac9d7e8ac87c89..1712d466870e2f 100644 --- a/packages/platform-browser/test/dom/dom_renderer_spec.ts +++ b/packages/platform-browser/test/dom/dom_renderer_spec.ts @@ -257,6 +257,25 @@ describe('DefaultDomRendererV2', () => { expect(await styleCount(fixture, '.emulated')).toBe(0); }); }); + + describe('should support namespaces', () => { + it('should create SVG elements', () => { + expect( + document.createElementNS(NAMESPACE_URIS['svg'], 'math') instanceof SVGElement, + ) + .toBeTrue(); + }); + + it('should create MathML elements', () => { + // MathMLElement is fairly recent and doesn't exist on our Saucelabs test environments + if (typeof MathMLElement !== 'undefined') { + expect( + document.createElementNS(NAMESPACE_URIS['math'], 'math') instanceof MathMLElement, + ) + .toBeTrue(); + } + }); + }); });