Replaces the `select` instruction with a new one called `advance`. Instead of the jumping to a specific index, the new instruction goes forward X amount of elements. The advantage of doing this is that it should generate code the compresses better. PR Close #32516
91 lines
2.8 KiB
TypeScript
91 lines
2.8 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google Inc. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.io/license
|
|
*/
|
|
|
|
import {ɵRenderFlags, ɵrenderComponent as renderComponent, ɵɵadvance, ɵɵcontainer, ɵɵcontainerRefreshEnd, ɵɵcontainerRefreshStart, ɵɵdefineComponent, ɵɵelementEnd, ɵɵelementStart, ɵɵembeddedViewEnd, ɵɵembeddedViewStart, ɵɵstyleProp, ɵɵstyling, ɵɵstylingApply, ɵɵtext, ɵɵtextInterpolate1} from '@angular/core';
|
|
|
|
import {bindAction, profile} from '../../util';
|
|
import {createDom, destroyDom, detectChanges} from '../render3/tree';
|
|
import {TreeNode, emptyTree} from '../util';
|
|
|
|
function noop() {}
|
|
|
|
export class TreeFunction {
|
|
data: TreeNode = emptyTree;
|
|
|
|
/** @nocollapse */
|
|
static ngFactoryDef = () => new TreeFunction;
|
|
|
|
/** @nocollapse */
|
|
static ngComponentDef = ɵɵdefineComponent({
|
|
type: TreeFunction,
|
|
selectors: [['tree']],
|
|
consts: 5,
|
|
vars: 1,
|
|
template: function(rf: ɵRenderFlags, ctx: TreeFunction) {
|
|
// bit of a hack
|
|
TreeTpl(rf, ctx.data);
|
|
},
|
|
inputs: {data: 'data'}
|
|
});
|
|
}
|
|
|
|
export function TreeTpl(rf: ɵRenderFlags, ctx: TreeNode) {
|
|
if (rf & ɵRenderFlags.Create) {
|
|
ɵɵelementStart(0, 'tree');
|
|
{
|
|
ɵɵelementStart(1, 'span');
|
|
ɵɵstyling();
|
|
{ ɵɵtext(2); }
|
|
ɵɵelementEnd();
|
|
ɵɵcontainer(3);
|
|
ɵɵcontainer(4);
|
|
}
|
|
ɵɵelementEnd();
|
|
}
|
|
if (rf & ɵRenderFlags.Update) {
|
|
ɵɵadvance(1);
|
|
ɵɵstyleProp('background-color', ctx.depth % 2 ? '' : 'grey');
|
|
ɵɵstylingApply();
|
|
ɵɵadvance(1);
|
|
ɵɵtextInterpolate1(' ', ctx.value, ' ');
|
|
ɵɵcontainerRefreshStart(3);
|
|
{
|
|
if (ctx.left != null) {
|
|
let rf0 = ɵɵembeddedViewStart(0, 5, 1);
|
|
{ TreeTpl(rf0, ctx.left); }
|
|
ɵɵembeddedViewEnd();
|
|
}
|
|
}
|
|
ɵɵcontainerRefreshEnd();
|
|
ɵɵcontainerRefreshStart(4);
|
|
{
|
|
if (ctx.right != null) {
|
|
let rf0 = ɵɵembeddedViewStart(0, 5, 1);
|
|
{ TreeTpl(rf0, ctx.right); }
|
|
ɵɵembeddedViewEnd();
|
|
}
|
|
}
|
|
ɵɵcontainerRefreshEnd();
|
|
}
|
|
}
|
|
|
|
let component: TreeFunction;
|
|
if (typeof window !== 'undefined') {
|
|
component = renderComponent(TreeFunction);
|
|
bindAction('#createDom', () => createDom(component as any));
|
|
bindAction('#destroyDom', () => destroyDom(component as any));
|
|
bindAction('#detectChanges', () => detectChanges(component as any));
|
|
bindAction(
|
|
'#detectChangesProfile',
|
|
profile(() => detectChanges(component as any), noop, 'detectChanges'));
|
|
bindAction('#updateDomProfile', profile(() => createDom(component as any), noop, 'update'));
|
|
bindAction(
|
|
'#createDomProfile',
|
|
profile(() => createDom(component as any), () => destroyDom(component as any), 'create'));
|
|
}
|