From 7e73287676affb603387e9aef132a6d93c89e44b Mon Sep 17 00:00:00 2001 From: Victor Berchet Date: Wed, 6 Jun 2018 13:38:00 -0700 Subject: [PATCH] Revert "feat(ivy): added new namespace and element instructions to JIT environment (#23899)" This reverts commit acf270d724ce0b229bc5410b3344b142efb61a1a. --- .../compiler/src/render3/view/compiler.ts | 5 +- .../compiler/src/render3/view/template.ts | 45 +++++++------- .../render3/r3_compiler_compliance_spec.ts | 61 ++----------------- .../core/src/core_render3_private_export.ts | 1 + packages/core/src/render3/STATUS.md | 2 +- packages/core/src/render3/di.ts | 4 +- packages/core/src/render3/index.ts | 1 + packages/core/src/render3/instructions.ts | 31 +++++----- packages/core/src/render3/interfaces/node.ts | 4 +- packages/core/src/render3/jit/environment.ts | 4 -- .../core/src/render3/node_selector_matcher.ts | 6 +- .../template_variables_spec.ts | 3 +- packages/core/test/render3/content_spec.ts | 2 +- packages/core/test/render3/di_spec.ts | 4 +- packages/core/test/render3/directive_spec.ts | 8 +-- .../core/test/render3/instructions_spec.ts | 12 ++-- .../render3/node_selector_matcher_spec.ts | 6 +- packages/core/test/render3/query_spec.ts | 2 +- 18 files changed, 75 insertions(+), 126 deletions(-) diff --git a/packages/compiler/src/render3/view/compiler.ts b/packages/compiler/src/render3/view/compiler.ts index d830630418..a057d83826 100644 --- a/packages/compiler/src/render3/view/compiler.ts +++ b/packages/compiler/src/render3/view/compiler.ts @@ -136,8 +136,7 @@ export function compileComponentFromMetadata( const templateFunctionExpression = new TemplateDefinitionBuilder( constantPool, CONTEXT_NAME, BindingScope.ROOT_SCOPE, 0, templateTypeName, templateName, - meta.viewQueries, directiveMatcher, directivesUsed, meta.pipes, pipesUsed, - R3.namespaceHTML) + meta.viewQueries, directiveMatcher, directivesUsed, meta.pipes, pipesUsed) .buildTemplateFunction( template.nodes, [], template.hasNgContent, template.ngContentSelectors); @@ -444,4 +443,4 @@ function typeMapToExpressionMap( const entries = Array.from(map).map( ([key, type]): [string, o.Expression] => [key, outputCtx.importExpr(type)]); return new Map(entries); -} +} \ No newline at end of file diff --git a/packages/compiler/src/render3/view/template.ts b/packages/compiler/src/render3/view/template.ts index a445fe1b11..9d7a7163d4 100644 --- a/packages/compiler/src/render3/view/template.ts +++ b/packages/compiler/src/render3/view/template.ts @@ -18,8 +18,8 @@ import * as html from '../../ml_parser/ast'; import {HtmlParser} from '../../ml_parser/html_parser'; import {WhitespaceVisitor} from '../../ml_parser/html_whitespaces'; import {DEFAULT_INTERPOLATION_CONFIG} from '../../ml_parser/interpolation_config'; -import {splitNsName} from '../../ml_parser/tags'; import * as o from '../../output/output_ast'; +import {ExternalReference} from '../../output/output_ast'; import {ParseError, ParseSourceSpan} from '../../parse_util'; import {DomElementSchemaRegistry} from '../../schema/dom_element_schema_registry'; import {CssSelector, SelectorMatcher} from '../../selector'; @@ -52,6 +52,7 @@ export class TemplateDefinitionBuilder implements t.Visitor, LocalResolver private _valueConverter: ValueConverter; private _unsupported = unsupported; private _bindingScope: BindingScope; + private _namespace = R3.namespaceHTML; // Whether we are inside a translatable element (`

... somewhere here ...

) private _inI18nSection: boolean = false; @@ -67,8 +68,7 @@ export class TemplateDefinitionBuilder implements t.Visitor, LocalResolver parentBindingScope: BindingScope, private level = 0, private contextName: string|null, private templateName: string|null, private viewQueries: R3QueryMetadata[], private directiveMatcher: SelectorMatcher|null, private directives: Set, - private pipeTypeByName: Map, private pipes: Set, - private _namespace: o.ExternalReference) { + private pipeTypeByName: Map, private pipes: Set) { this._bindingScope = parentBindingScope.nestedScope((lhsVar: o.ReadVarExpr, expression: o.Expression) => { this._bindingCode.push( @@ -91,10 +91,6 @@ export class TemplateDefinitionBuilder implements t.Visitor, LocalResolver buildTemplateFunction( nodes: t.Node[], variables: t.Variable[], hasNgContent: boolean = false, ngContentSelectors: string[] = []): o.FunctionExpr { - if (this._namespace !== R3.namespaceHTML) { - this.instruction(this._creationCode, null, this._namespace); - } - // Create variable bindings for (const variable of variables) { const variableName = variable.name; @@ -228,20 +224,20 @@ export class TemplateDefinitionBuilder implements t.Visitor, LocalResolver /** * Gets the namespace instruction function based on the current element - * @param namespaceKey A system key for a namespace (e.g. 'svg' or 'math') + * @param ivyElementName An system element name, can include colons like :svg:svg */ - getNamespaceInstruction(namespaceKey: string|null) { - switch (namespaceKey) { - case 'svg': + getNamespaceInstruction(ivyElementName: string) { + switch (ivyElementName) { + case ':svg:svg': return R3.namespaceSVG; - case 'math': + case ':math:math': return R3.namespaceMathML; default: - return R3.namespaceHTML; + return this._namespace; } } - addNamespaceInstruction(nsInstruction: o.ExternalReference, element: t.Element) { + addNamespaceInstruction(nsInstruction: ExternalReference, element: t.Element) { this._namespace = nsInstruction; this.instruction(this._creationCode, element.sourceSpan, nsInstruction); } @@ -253,9 +249,7 @@ export class TemplateDefinitionBuilder implements t.Visitor, LocalResolver const outputAttrs: {[name: string]: string} = {}; const attrI18nMetas: {[name: string]: string} = {}; - let i18nMeta = ''; - - const [namespaceKey, elementName] = splitNsName(element.name); + let i18nMeta: string = ''; // Elements inside i18n sections are replaced with placeholders // TODO(vicb): nested elements are a WIP in this phase @@ -297,7 +291,7 @@ export class TemplateDefinitionBuilder implements t.Visitor, LocalResolver // Element creation mode const parameters: o.Expression[] = [ o.literal(elementIndex), - o.literal(elementName), + o.literal(element.name), ]; // Add the attributes @@ -349,8 +343,7 @@ export class TemplateDefinitionBuilder implements t.Visitor, LocalResolver const implicit = o.variable(CONTEXT_NAME); const wasInNamespace = this._namespace; - const currentNamespace = this.getNamespaceInstruction(namespaceKey); - + const currentNamespace = this.getNamespaceInstruction(element.name); // If the namespace is changing now, include an instruction to change it // during element creation. if (currentNamespace !== wasInNamespace) { @@ -366,6 +359,14 @@ export class TemplateDefinitionBuilder implements t.Visitor, LocalResolver this._creationCode, element.sourceSpan, R3.elementStart, ...trimTrailingNulls(parameters)); + // If the element happens to be an SVG , we need to switch + // to the HTML namespace inside of it + if (element.name === ':svg:foreignObject') { + // NOTE(benlesh): this may cause extremem corner-case bugs if someone was to do something + // like ....... + this.addNamespaceInstruction(R3.namespaceHTML, element); + } + // Generate Listeners (outputs) element.outputs.forEach((outputAst: t.BoundEvent) => { const elName = sanitizeIdentifier(element.name); @@ -422,6 +423,7 @@ export class TemplateDefinitionBuilder implements t.Visitor, LocalResolver } // Restore the state before exiting this node this._inI18nSection = wasInI18nSection; + this._namespace = wasInNamespace; } visitTemplate(template: t.Template) { @@ -482,8 +484,7 @@ export class TemplateDefinitionBuilder implements t.Visitor, LocalResolver // Create the template function const templateVisitor = new TemplateDefinitionBuilder( this.constantPool, templateContext, this._bindingScope, this.level + 1, contextName, - templateName, [], this.directiveMatcher, this.directives, this.pipeTypeByName, this.pipes, - this._namespace); + templateName, [], this.directiveMatcher, this.directives, this.pipeTypeByName, this.pipes); const templateFunctionExpr = templateVisitor.buildTemplateFunction(template.children, template.variables); this._postfixCode.push(templateFunctionExpr.toDeclStmt(templateName, null)); diff --git a/packages/compiler/test/render3/r3_compiler_compliance_spec.ts b/packages/compiler/test/render3/r3_compiler_compliance_spec.ts index 54b504383a..322af1a50c 100644 --- a/packages/compiler/test/render3/r3_compiler_compliance_spec.ts +++ b/packages/compiler/test/render3/r3_compiler_compliance_spec.ts @@ -95,8 +95,8 @@ describe('compiler compliance', () => { if (rf & 1) { $r3$.ɵE(0, 'div', $e0_attrs$); $r3$.ɵNS(); - $r3$.ɵE(1, 'svg'); - $r3$.ɵEe(2, 'circle', $e2_attrs$); + $r3$.ɵE(1, ':svg:svg'); + $r3$.ɵEe(2, ':svg:circle', $e2_attrs$); $r3$.ɵe(); $r3$.ɵe(); } @@ -110,54 +110,6 @@ describe('compiler compliance', () => { expectEmit(result.source, template, 'Incorrect template'); }); - it('should enter and leave the SVG namespace appropriately', () => { - const files = { - app: { - 'spec.ts': ` - import {Component, NgModule} from '@angular/core'; - - @Component({ - selector: 'my-component', - template: \`

TEST 2

\` - }) - export class MyComponent {} - - @NgModule({declarations: [MyComponent]}) - export class MyModule {} - ` - } - }; - - // The factory should look like this: - const factory = 'factory: function MyComponent_Factory() { return new MyComponent(); }'; - - // The template should look like this (where IDENT is a wild card for an identifier): - const template = ` - const $c1$ = ['class', 'my-app', 'title', 'Hello']; - … - template: function MyComponent_Template(rf: IDENT, ctx: IDENT) { - if (rf & 1) { - $r3$.ɵE(0, 'div', $e0_attrs$); - $r3$.ɵNS(); - $r3$.ɵE(1, 'svg'); - $r3$.ɵEe(2, 'circle', $e2_attrs$); - $r3$.ɵe(); - $r3$.ɵNH(); - $r3$.ɵE(3, 'p'); - $r3$.ɵT(4, 'TEST 2'); - $r3$.ɵe(); - $r3$.ɵe(); - } - } - `; - - - const result = compile(files, angularFiles); - - expectEmit(result.source, factory, 'Incorrect factory'); - expectEmit(result.source, template, 'Incorrect template'); - }); - it('should bind to element properties', () => { const files = { app: { @@ -1322,7 +1274,7 @@ describe('compiler compliance', () => { expectEmit(source, MyComponentDefinition, 'Invalid component definition'); }); - it('should support embedded views in the SVG namespace', () => { + it('should support a let variable and reference for SVG', () => { const files = { app: { ...shared, @@ -1369,16 +1321,15 @@ describe('compiler compliance', () => { template: function MyComponent_Template(rf:IDENT,ctx:IDENT){ if (rf & 1) { $r3$.ɵNS(); - $r3$.ɵE(0,'svg'); + $r3$.ɵE(0,':svg:svg'); $r3$.ɵC(1,MyComponent__svg_g_Template_1,null,$_c0$); $r3$.ɵe(); } if (rf & 2) { $r3$.ɵp(1,'forOf',$r3$.ɵb(ctx.items)); } function MyComponent__svg_g_Template_1(rf:IDENT,ctx0:IDENT) { if (rf & 1) { - $r3$.ɵNS(); - $r3$.ɵE(0,'g'); - $r3$.ɵEe(1,'circle'); + $r3$.ɵE(0,':svg:g'); + $r3$.ɵEe(1,':svg:circle'); $r3$.ɵe(); } } diff --git a/packages/core/src/core_render3_private_export.ts b/packages/core/src/core_render3_private_export.ts index c6e22fa8f5..0be275e0b1 100644 --- a/packages/core/src/core_render3_private_export.ts +++ b/packages/core/src/core_render3_private_export.ts @@ -45,6 +45,7 @@ export { i7 as ɵi7, i8 as ɵi8, iV as ɵiV, + N as ɵN, NH as ɵNH, NM as ɵNM, NS as ɵNS, diff --git a/packages/core/src/render3/STATUS.md b/packages/core/src/render3/STATUS.md index cf29f3dd99..8209be7c33 100644 --- a/packages/core/src/render3/STATUS.md +++ b/packages/core/src/render3/STATUS.md @@ -150,7 +150,7 @@ The goal is for the `@Component` (and friends) to be the compiler of template. S | `{{ ['literal', exp ] }}` | ✅ | ✅ | ✅ | | `{{ { a: 'literal', b: exp } }}` | ✅ | ✅ | ✅ | | `{{ exp \| pipe: arg }}` | ✅ | ✅ | ✅ | -| `` | ✅ | ✅ | ✅ | +| `` | ✅ | ✅ | ❌ | | `` sanitization | ❌ | ❌ | ❌ | | `
` | ❌ | ❌ | ❌ | | `
` | ❌ | ❌ | ❌ | diff --git a/packages/core/src/render3/di.ts b/packages/core/src/render3/di.ts index 8a2e17e35f..168507bdb5 100644 --- a/packages/core/src/render3/di.ts +++ b/packages/core/src/render3/di.ts @@ -261,8 +261,8 @@ export function injectAttribute(attrNameToInject: string): string|undefined { if (attrs) { for (let i = 0; i < attrs.length; i = i + 2) { let attrName = attrs[i]; - if (attrName === AttributeMarker.SelectOnly) break; - if (attrName === AttributeMarker.NamespaceUri) { + if (attrName === AttributeMarker.SELECT_ONLY) break; + if (attrName === AttributeMarker.NAMESPACE_URI) { attrName = attrs[i += 2]; } if (attrName == attrNameToInject) { diff --git a/packages/core/src/render3/index.ts b/packages/core/src/render3/index.ts index c88d6334b2..fd08cc9a0f 100644 --- a/packages/core/src/render3/index.ts +++ b/packages/core/src/render3/index.ts @@ -54,6 +54,7 @@ export { elementStyle as s, elementStyleNamed as sn, + namespace as N, namespaceHTML as NH, namespaceMathML as NM, namespaceSVG as NS, diff --git a/packages/core/src/render3/instructions.ts b/packages/core/src/render3/instructions.ts index 9991d5bc92..c8efc2cbe3 100644 --- a/packages/core/src/render3/instructions.ts +++ b/packages/core/src/render3/instructions.ts @@ -560,6 +560,15 @@ function getRenderFlags(view: LView): RenderFlags { ////////////////////////// let _currentNamespace: string|null = null; +/** + * Sets the namespace URI that will be used to create elements in {@link element} + * and {@link elementStart} + * @param uri the full namespaceUri + */ +export function namespace(uri: string | null) { + _currentNamespace = uri; +} + /** * Sets the current namespace URI to null, meaning createElement (not createElementNS) * will be used to create elements in {@link element} and {@link elementStart} @@ -608,17 +617,9 @@ export function elementStart( ngDevMode && ngDevMode.rendererCreateElement++; - let native: RElement; - - if (isProceduralRenderer(renderer)) { - native = renderer.createElement(name, _currentNamespace); - } else { - if (_currentNamespace === null) { - native = renderer.createElement(name); - } else { - native = renderer.createElementNS(_currentNamespace, name); - } - } + const native: RElement = _currentNamespace === null || isProceduralRenderer(renderer) ? + renderer.createElement(name) : + (renderer as ObjectOrientedRenderer3).createElementNS(_currentNamespace, name); ngDevMode && assertDataInRange(index - 1); @@ -860,7 +861,7 @@ function setUpAttributes(native: RElement, attrs: TAttributes): void { const isProc = isProceduralRenderer(renderer); for (let i = 0; i < attrs.length; i += 2) { let attrName = attrs[i]; - if (attrName === AttributeMarker.NamespaceUri) { + if (attrName === AttributeMarker.NAMESPACE_URI) { const attrNS = attrs[i + 1] as string; attrName = attrs[i + 2] as string; const attrVal = attrs[i + 3] as string; @@ -871,7 +872,7 @@ function setUpAttributes(native: RElement, attrs: TAttributes): void { native.setAttributeNS(attrNS, attrName, attrVal); } } else { - if (attrName === AttributeMarker.SelectOnly) break; + if (attrName === AttributeMarker.SELECT_ONLY) break; if (attrName !== NG_PROJECT_AS_ATTR_NAME) { const attrVal = attrs[i + 1]; ngDevMode && ngDevMode.rendererSetAttribute++; @@ -1532,11 +1533,11 @@ function generateInitialInputs( const attrs = tNode.attrs !; for (let i = 0; i < attrs.length; i += 2) { const first = attrs[i]; - const attrName = first === AttributeMarker.NamespaceUri ? attrs[i += 2] : first; + const attrName = first === AttributeMarker.NAMESPACE_URI ? attrs[i += 2] : first; const minifiedInputName = inputs[attrName]; const attrValue = attrs[i + 1]; - if (attrName === AttributeMarker.SelectOnly) break; + if (attrName === AttributeMarker.SELECT_ONLY) break; if (minifiedInputName !== undefined) { const inputsToStore: InitialInputs = initialInputData[directiveIndex] || (initialInputData[directiveIndex] = []); diff --git a/packages/core/src/render3/interfaces/node.ts b/packages/core/src/render3/interfaces/node.ts index 33dfe4940f..2f3ac9585a 100644 --- a/packages/core/src/render3/interfaces/node.ts +++ b/packages/core/src/render3/interfaces/node.ts @@ -164,7 +164,7 @@ export const enum AttributeMarker { * Use the next value as the full namespaces URI, the values after that * are then the name and the value, respectively. */ - NamespaceUri = 0, // namespace. Has to be repeated. + NAMESPACE_URI = 0, // namespace. Has to be repeated. /** * This marker indicates that the following attribute names were extracted from bindings (ex.: @@ -172,7 +172,7 @@ export const enum AttributeMarker { * Taking the above bindings and outputs as an example an attributes array could look as follows: * ['class', 'fade in', AttributeMarker.SELECT_ONLY, 'foo', 'bar'] */ - SelectOnly = 1 + SELECT_ONLY = 1 } /** diff --git a/packages/core/src/render3/jit/environment.ts b/packages/core/src/render3/jit/environment.ts index 5ca7cda1e6..4714697558 100644 --- a/packages/core/src/render3/jit/environment.ts +++ b/packages/core/src/render3/jit/environment.ts @@ -37,7 +37,6 @@ export const angularCoreEnv: {[name: string]: Function} = { 'ɵcr': r3.cr, 'ɵd': r3.d, 'ɵE': r3.E, - 'ɵEe': r3.Ee, 'ɵe': r3.e, 'ɵf0': r3.f0, 'ɵf1': r3.f1, @@ -61,9 +60,6 @@ export const angularCoreEnv: {[name: string]: Function} = { 'ɵkn': r3.kn, 'ɵL': r3.L, 'ɵld': r3.ld, - 'ɵNH': r3.NH, - 'ɵNM': r3.NM, - 'ɵNS': r3.NS, 'ɵp': r3.p, 'ɵpb1': r3.pb1, 'ɵpb2': r3.pb2, diff --git a/packages/core/src/render3/node_selector_matcher.ts b/packages/core/src/render3/node_selector_matcher.ts index 79f3ad2190..354ff7317f 100644 --- a/packages/core/src/render3/node_selector_matcher.ts +++ b/packages/core/src/render3/node_selector_matcher.ts @@ -41,7 +41,7 @@ export function isNodeMatchingSelector(tNode: TNode, selector: CssSelector): boo let mode: SelectorFlags = SelectorFlags.ELEMENT; const nodeAttrs = tNode.attrs !; - const selectOnlyMarkerIdx = nodeAttrs ? nodeAttrs.indexOf(AttributeMarker.SelectOnly) : -1; + const selectOnlyMarkerIdx = nodeAttrs ? nodeAttrs.indexOf(AttributeMarker.SELECT_ONLY) : -1; // When processing ":not" selectors, we skip to the next ":not" if the // current one doesn't match @@ -107,11 +107,11 @@ function findAttrIndexInNode(name: string, attrs: TAttributes | null): number { if (attrs === null) return -1; for (let i = 0; i < attrs.length; i += step) { const attrName = attrs[i]; - if (attrName === AttributeMarker.NamespaceUri) { + if (attrName === AttributeMarker.NAMESPACE_URI) { step = 2; } else if (attrName === name) { return i; - } else if (attrName === AttributeMarker.SelectOnly) { + } else if (attrName === AttributeMarker.SELECT_ONLY) { step = 1; } } diff --git a/packages/core/test/render3/compiler_canonical/template_variables_spec.ts b/packages/core/test/render3/compiler_canonical/template_variables_spec.ts index 7e8aaee0e5..f3ab25ad1d 100644 --- a/packages/core/test/render3/compiler_canonical/template_variables_spec.ts +++ b/packages/core/test/render3/compiler_canonical/template_variables_spec.ts @@ -165,7 +165,6 @@ describe('template variables', () => { } function MyComponent__svg_g_Template_1(rf: $RenderFlags$, ctx0: $MyComponent$) { if (rf & 1) { - $r3$.ɵNS(); $r3$.ɵE(0, 'g'); $r3$.ɵEe(1, 'circle'); $r3$.ɵe(); @@ -181,7 +180,7 @@ describe('template variables', () => { [ForOfDirective.ngDirectiveDef]; // /NON-NORMATIVE - // TODO(benlesh): update when the changes to enable ngForOf lands. + // TODO(chuckj): update when the changes to enable ngForOf lands. expect(toHtml(renderComponent(MyComponent))).toEqual(''); }); diff --git a/packages/core/test/render3/content_spec.ts b/packages/core/test/render3/content_spec.ts index 058be8ca4b..71d7dda90b 100644 --- a/packages/core/test/render3/content_spec.ts +++ b/packages/core/test/render3/content_spec.ts @@ -605,7 +605,7 @@ describe('content projection', () => { if (rf & RenderFlags.Create) { elementStart(0, 'child'); { - elementStart(1, 'span', [AttributeMarker.SelectOnly, 'title']); + elementStart(1, 'span', [AttributeMarker.SELECT_ONLY, 'title']); { text(2, 'Has title'); } elementEnd(); } diff --git a/packages/core/test/render3/di_spec.ts b/packages/core/test/render3/di_spec.ts index 9d46b94ab1..ea3d413d31 100644 --- a/packages/core/test/render3/di_spec.ts +++ b/packages/core/test/render3/di_spec.ts @@ -1225,7 +1225,7 @@ describe('di', () => { const MyApp = createComponent('my-app', function(rf: RenderFlags, ctx: any) { if (rf & RenderFlags.Create) { - elementStart(0, 'div', ['exist', 'existValue', AttributeMarker.SelectOnly, 'nonExist']); + elementStart(0, 'div', ['exist', 'existValue', AttributeMarker.SELECT_ONLY, 'nonExist']); exist = injectAttribute('exist'); nonExist = injectAttribute('nonExist'); } @@ -1243,7 +1243,7 @@ describe('di', () => { const MyApp = createComponent('my-app', function(rf: RenderFlags, ctx: any) { if (rf & RenderFlags.Create) { elementStart(0, 'div', [ - 'exist', 'existValue', AttributeMarker.SelectOnly, 'binding1', 'nonExist', 'binding2' + 'exist', 'existValue', AttributeMarker.SELECT_ONLY, 'binding1', 'nonExist', 'binding2' ]); exist = injectAttribute('exist'); nonExist = injectAttribute('nonExist'); diff --git a/packages/core/test/render3/directive_spec.ts b/packages/core/test/render3/directive_spec.ts index 3dde1057d9..58f0c22349 100644 --- a/packages/core/test/render3/directive_spec.ts +++ b/packages/core/test/render3/directive_spec.ts @@ -34,7 +34,7 @@ describe('directive', () => { } function Template() { - elementStart(0, 'span', [AttributeMarker.SelectOnly, 'dir']); + elementStart(0, 'span', [AttributeMarker.SELECT_ONLY, 'dir']); elementEnd(); } @@ -82,7 +82,7 @@ describe('directive', () => { */ function createTemplate() { // using 2 bindings to show example shape of attributes array - elementStart(0, 'span', ['class', 'fade', AttributeMarker.SelectOnly, 'test', 'other']); + elementStart(0, 'span', ['class', 'fade', AttributeMarker.SELECT_ONLY, 'test', 'other']); elementEnd(); } @@ -132,7 +132,7 @@ describe('directive', () => { function createTemplate() { // putting name (test) in the "usual" value position elementStart( - 0, 'span', ['class', 'fade', AttributeMarker.SelectOnly, 'prop1', 'test', 'prop2']); + 0, 'span', ['class', 'fade', AttributeMarker.SELECT_ONLY, 'prop1', 'test', 'prop2']); elementEnd(); } @@ -168,7 +168,7 @@ describe('directive', () => { * */ function createTemplate() { - elementStart(0, 'span', [AttributeMarker.SelectOnly, 'out']); + elementStart(0, 'span', [AttributeMarker.SELECT_ONLY, 'out']); { listener('out', () => {}); } elementEnd(); } diff --git a/packages/core/test/render3/instructions_spec.ts b/packages/core/test/render3/instructions_spec.ts index 00da2cbf97..35ed8b3d5c 100644 --- a/packages/core/test/render3/instructions_spec.ts +++ b/packages/core/test/render3/instructions_spec.ts @@ -95,7 +95,7 @@ describe('instructions', () => { it('should use sanitizer function even on elements with namespaced attributes', () => { const t = new TemplateFixture(() => { element(0, 'div', [ - AttributeMarker.NamespaceUri, + AttributeMarker.NAMESPACE_URI, 'http://www.example.com/2004/test', 'whatever', 'abc', @@ -445,7 +445,7 @@ describe('instructions', () => { 'height', '300', // test:title="abc" - AttributeMarker.NamespaceUri, + AttributeMarker.NAMESPACE_URI, 'http://www.example.com/2014/test', 'title', 'abc', @@ -472,7 +472,7 @@ describe('instructions', () => { 'id', 'container', // test:title="abc" - AttributeMarker.NamespaceUri, + AttributeMarker.NAMESPACE_URI, 'http://www.example.com/2014/test', 'title', 'abc', @@ -492,19 +492,19 @@ describe('instructions', () => { 'container', // NS1:title="abc" - AttributeMarker.NamespaceUri, + AttributeMarker.NAMESPACE_URI, 'http://www.example.com/2014/test', 'title', 'abc', // NS1:whatever="wee" - AttributeMarker.NamespaceUri, + AttributeMarker.NAMESPACE_URI, 'http://www.example.com/2014/test', 'whatever', 'wee', // NS2:shazbot="wocka wocka" - AttributeMarker.NamespaceUri, + AttributeMarker.NAMESPACE_URI, 'http://www.whatever.com/2016/blah', 'shazbot', 'wocka wocka', diff --git a/packages/core/test/render3/node_selector_matcher_spec.ts b/packages/core/test/render3/node_selector_matcher_spec.ts index 0011c732d6..3a143bcadf 100644 --- a/packages/core/test/render3/node_selector_matcher_spec.ts +++ b/packages/core/test/render3/node_selector_matcher_spec.ts @@ -179,14 +179,14 @@ describe('css selector matching', () => { }); it('should take optional binding attribute names into account', () => { - expect(isMatching('span', [AttributeMarker.SelectOnly, 'directive'], [ + expect(isMatching('span', [AttributeMarker.SELECT_ONLY, 'directive'], [ '', 'directive', '' ])).toBeTruthy(`Selector '[directive]' should match `); }); it('should not match optional binding attribute names if attribute selector has value', () => { - expect(isMatching('span', [AttributeMarker.SelectOnly, 'directive'], [ + expect(isMatching('span', [AttributeMarker.SELECT_ONLY, 'directive'], [ '', 'directive', 'value' ])).toBeFalsy(`Selector '[directive=value]' should not match `); }); @@ -194,7 +194,7 @@ describe('css selector matching', () => { it('should not match optional binding attribute names if attribute selector has value and next name equals to value', () => { expect(isMatching( - 'span', [AttributeMarker.SelectOnly, 'directive', 'value'], + 'span', [AttributeMarker.SELECT_ONLY, 'directive', 'value'], ['', 'directive', 'value'])) .toBeFalsy( `Selector '[directive=value]' should not match `); diff --git a/packages/core/test/render3/query_spec.ts b/packages/core/test/render3/query_spec.ts index cd4a3df46d..7382fabfa3 100644 --- a/packages/core/test/render3/query_spec.ts +++ b/packages/core/test/render3/query_spec.ts @@ -856,7 +856,7 @@ describe('query', () => { } }, null, []); - container(5, undefined, null, [AttributeMarker.SelectOnly, 'vc']); + container(5, undefined, null, [AttributeMarker.SELECT_ONLY, 'vc']); } if (rf & RenderFlags.Update) {