From d8f2318811d502d65d7f70709c0df1e580078af4 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Tue, 22 Jan 2019 20:40:27 +0100 Subject: [PATCH] fix(ivy): generating incorrect tag name with namespace (#28298) Fixes the template generation function generating an incorrect tag name when the element has a namespace (e.g. `:svg:circle` gets generated rather than `circle`). PR Close #28298 --- .../test/compliance/r3_compiler_compliance_spec.ts | 5 +---- packages/compiler/src/render3/view/template.ts | 7 +++++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/compiler-cli/test/compliance/r3_compiler_compliance_spec.ts b/packages/compiler-cli/test/compliance/r3_compiler_compliance_spec.ts index 7a6ae03d8c..477de86321 100644 --- a/packages/compiler-cli/test/compliance/r3_compiler_compliance_spec.ts +++ b/packages/compiler-cli/test/compliance/r3_compiler_compliance_spec.ts @@ -2206,9 +2206,6 @@ describe('compiler compliance', () => { } }; - // TODO(akushnir): tag name generated for element inside is incorrect. - // It's generated as ":svg:g", when it should be just "g". Potentially related to - // the issue described in FW-672. it('should support embedded views in the SVG namespace', () => { const files = { app: { @@ -2266,7 +2263,7 @@ describe('compiler compliance', () => { if (rf & 1) { $r3$.ɵnamespaceSVG(); $r3$.ɵelementStart(0,"svg"); - $r3$.ɵtemplate(1, MyComponent__svg_g_1_Template, 2, 0, ":svg:g", $t1_attrs$); + $r3$.ɵtemplate(1, MyComponent__svg_g_1_Template, 2, 0, "g", $t1_attrs$); $r3$.ɵelementEnd(); } if (rf & 2) { $r3$.ɵelementProperty(1,"forOf",$r3$.ɵbind(ctx.items)); } diff --git a/packages/compiler/src/render3/view/template.ts b/packages/compiler/src/render3/view/template.ts index 7d0fb1db38..99b7bbb517 100644 --- a/packages/compiler/src/render3/view/template.ts +++ b/packages/compiler/src/render3/view/template.ts @@ -10,7 +10,7 @@ import {flatten, sanitizeIdentifier} from '../../compile_metadata'; import {BindingForm, BuiltinFunctionCall, LocalResolver, convertActionBinding, convertPropertyBinding} from '../../compiler_util/expression_converter'; import {ConstantPool} from '../../constant_pool'; import * as core from '../../core'; -import {AST, ASTWithSource, AstMemoryEfficientTransformer, BindingPipe, BindingType, FunctionCall, ImplicitReceiver, Interpolation, LiteralArray, LiteralMap, LiteralPrimitive, ParsedEvent, ParsedEventType, PropertyRead} from '../../expression_parser/ast'; +import {AST, AstMemoryEfficientTransformer, BindingPipe, BindingType, FunctionCall, ImplicitReceiver, Interpolation, LiteralArray, LiteralMap, LiteralPrimitive, ParsedEvent, ParsedEventType, PropertyRead} from '../../expression_parser/ast'; import {Lexer} from '../../expression_parser/lexer'; import {Parser} from '../../expression_parser/parser'; import * as i18n from '../../i18n/i18n_ast'; @@ -769,7 +769,10 @@ export class TemplateDefinitionBuilder implements t.Visitor, LocalResolver const parameters: o.Expression[] = [ o.literal(templateIndex), o.variable(templateName), - o.literal(template.tagName), + + // We don't care about the tag's namespace here, because we infer + // it based on the parent nodes inside the template instruction. + o.literal(template.tagName ? splitNsName(template.tagName)[1] : template.tagName), ]; // find directives matching on a given node