Revert "feat(ivy): added new namespace and element instructions to JIT environment (#23899)"
This reverts commit acf270d724
.
This commit is contained in:
@ -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,
|
||||
|
@ -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 }}` | ✅ | ✅ | ✅ |
|
||||
| `<svg:g svg:p>` | ✅ | ✅ | ✅ |
|
||||
| `<svg:g svg:p>` | ✅ | ✅ | ❌ |
|
||||
| `<img src=[userData]>` sanitization | ❌ | ❌ | ❌ |
|
||||
| `<div (nocd.click)>` | ❌ | ❌ | ❌ |
|
||||
| `<div (bubble.click)>` | ❌ | ❌ | ❌ |
|
||||
|
@ -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) {
|
||||
|
@ -54,6 +54,7 @@ export {
|
||||
elementStyle as s,
|
||||
elementStyleNamed as sn,
|
||||
|
||||
namespace as N,
|
||||
namespaceHTML as NH,
|
||||
namespaceMathML as NM,
|
||||
namespaceSVG as NS,
|
||||
|
@ -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] = []);
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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('<svg></svg>');
|
||||
});
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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');
|
||||
|
@ -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', () => {
|
||||
* <span (out)="someVar = true"></span>
|
||||
*/
|
||||
function createTemplate() {
|
||||
elementStart(0, 'span', [AttributeMarker.SelectOnly, 'out']);
|
||||
elementStart(0, 'span', [AttributeMarker.SELECT_ONLY, 'out']);
|
||||
{ listener('out', () => {}); }
|
||||
elementEnd();
|
||||
}
|
||||
|
@ -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',
|
||||
|
@ -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 <span [directive]="exp">`);
|
||||
});
|
||||
|
||||
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 <span [directive]="exp">`);
|
||||
});
|
||||
@ -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 <span [directive]="exp" [value]="otherExp">`);
|
||||
|
@ -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) {
|
||||
|
Reference in New Issue
Block a user