@nativescript-community/ui-pager 13.0.33 → 13.0.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/angular/esm2020/index.mjs +55 -0
- package/angular/{esm2015/nativescript-community-ui-pager-angular.js → esm2020/nativescript-community-ui-pager-angular.mjs} +0 -0
- package/angular/esm2020/pager-items-comp.mjs +304 -0
- package/angular/fesm2015/nativescript-community-ui-pager-angular.mjs +379 -0
- package/angular/fesm2015/nativescript-community-ui-pager-angular.mjs.map +1 -0
- package/angular/{fesm2015/nativescript-community-ui-pager-angular.js → fesm2020/nativescript-community-ui-pager-angular.mjs} +15 -24
- package/angular/fesm2020/nativescript-community-ui-pager-angular.mjs.map +1 -0
- package/angular/package.json +20 -6
- package/index.android.js +336 -350
- package/index.android.js.map +1 -1
- package/index.common.d.ts +1 -4
- package/index.common.js +4 -7
- package/index.common.js.map +1 -1
- package/index.d.ts +1 -1
- package/index.ios.d.ts +15 -15
- package/index.ios.js +259 -375
- package/index.ios.js.map +1 -1
- package/package.json +9 -4
- package/react/index.d.ts +5 -5
- package/react/index.js +4 -2
- package/react/index.js.map +1 -1
- package/references.d.ts +1 -0
- package/svelte/index.js +3 -2
- package/svelte/index.js.map +1 -1
- package/typings/objc!CHIPageControl.d.ts +197 -0
- package/vue/pager.js +15 -15
- package/vue/pager.js.map +1 -1
- package/.pnpm-debug.log +0 -1
- package/angular/bundles/nativescript-community-ui-pager-angular.umd.js +0 -759
- package/angular/bundles/nativescript-community-ui-pager-angular.umd.js.map +0 -1
- package/angular/esm2015/index.js +0 -55
- package/angular/esm2015/pager-items-comp.js +0 -312
- package/angular/fesm2015/nativescript-community-ui-pager-angular.js.map +0 -1
package/CHANGELOG.md
CHANGED
@@ -3,6 +3,30 @@
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
5
5
|
|
6
|
+
## [13.0.36](https://github.com/nativescript-community/ui-pager/compare/v13.0.35...v13.0.36) (2022-05-17)
|
7
|
+
|
8
|
+
**Note:** Version bump only for package @nativescript-community/ui-pager
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
## [13.0.35](https://github.com/nativescript-community/ui-pager/compare/v13.0.34...v13.0.35) (2022-03-15)
|
15
|
+
|
16
|
+
**Note:** Version bump only for package @nativescript-community/ui-pager
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
## [13.0.34](https://github.com/nativescript-community/ui-pager/compare/v13.0.33...v13.0.34) (2022-01-19)
|
23
|
+
|
24
|
+
**Note:** Version bump only for package @nativescript-community/ui-pager
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
|
6
30
|
## [13.0.33](https://github.com/nativescript-community/ui-pager/compare/v13.0.32...v13.0.33) (2021-11-17)
|
7
31
|
|
8
32
|
**Note:** Version bump only for package @nativescript-community/ui-pager
|
@@ -0,0 +1,55 @@
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ElementRef, IterableDiffers, NO_ERRORS_SCHEMA, NgModule, forwardRef } from '@angular/core';
|
2
|
+
import { Pager } from '@nativescript-community/ui-pager';
|
3
|
+
import { PagerItemDirective, TEMPLATED_ITEMS_COMPONENT, TemplateKeyDirective, TemplatedItemsComponent } from './pager-items-comp';
|
4
|
+
import * as i0 from "@angular/core";
|
5
|
+
export { PagerItemDirective, TemplatedItemsComponent, TemplateKeyDirective } from './pager-items-comp';
|
6
|
+
export class PagerComponent extends TemplatedItemsComponent {
|
7
|
+
constructor(_elementRef, _iterableDiffers) {
|
8
|
+
super(_elementRef, _iterableDiffers);
|
9
|
+
}
|
10
|
+
get nativeElement() {
|
11
|
+
return this.templatedItemsView;
|
12
|
+
}
|
13
|
+
}
|
14
|
+
PagerComponent.ɵfac = function PagerComponent_Factory(t) { return new (t || PagerComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.IterableDiffers)); };
|
15
|
+
PagerComponent.ɵcmp = i0.ɵɵdefineComponent({ type: PagerComponent, selectors: [["Pager"]], features: [i0.ɵɵProvidersFeature([
|
16
|
+
{
|
17
|
+
provide: TEMPLATED_ITEMS_COMPONENT,
|
18
|
+
useExisting: forwardRef(() => PagerComponent)
|
19
|
+
}
|
20
|
+
]), i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 0, consts: [["loader", ""]], template: function PagerComponent_Template(rf, ctx) { if (rf & 1) {
|
21
|
+
i0.ɵɵelementStart(0, "DetachedContainer");
|
22
|
+
i0.ɵɵelement(1, "Placeholder", null, 0);
|
23
|
+
i0.ɵɵelementEnd();
|
24
|
+
} }, encapsulation: 2, changeDetection: 0 });
|
25
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PagerComponent, [{
|
26
|
+
type: Component,
|
27
|
+
args: [{
|
28
|
+
selector: 'Pager',
|
29
|
+
template: ` <DetachedContainer>
|
30
|
+
<Placeholder #loader></Placeholder>
|
31
|
+
</DetachedContainer>`,
|
32
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
33
|
+
providers: [
|
34
|
+
{
|
35
|
+
provide: TEMPLATED_ITEMS_COMPONENT,
|
36
|
+
useExisting: forwardRef(() => PagerComponent)
|
37
|
+
}
|
38
|
+
]
|
39
|
+
}]
|
40
|
+
}], function () { return [{ type: i0.ElementRef }, { type: i0.IterableDiffers }]; }, null); })();
|
41
|
+
export class PagerModule {
|
42
|
+
}
|
43
|
+
PagerModule.ɵfac = function PagerModule_Factory(t) { return new (t || PagerModule)(); };
|
44
|
+
PagerModule.ɵmod = i0.ɵɵdefineNgModule({ type: PagerModule });
|
45
|
+
PagerModule.ɵinj = i0.ɵɵdefineInjector({});
|
46
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PagerModule, [{
|
47
|
+
type: NgModule,
|
48
|
+
args: [{
|
49
|
+
declarations: [PagerComponent, TemplateKeyDirective, PagerItemDirective],
|
50
|
+
exports: [PagerComponent, TemplateKeyDirective, PagerItemDirective],
|
51
|
+
schemas: [NO_ERRORS_SCHEMA]
|
52
|
+
}]
|
53
|
+
}], null, null); })();
|
54
|
+
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(PagerModule, { declarations: [PagerComponent, TemplateKeyDirective, PagerItemDirective], exports: [PagerComponent, TemplateKeyDirective, PagerItemDirective] }); })();
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdWktcGFnZXIvYW5ndWxhci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4SSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7O0FBRWxJLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBZXZHLE1BQU0sT0FBTyxjQUFlLFNBQVEsdUJBQXVCO0lBT3ZELFlBQVksV0FBdUIsRUFBRSxnQkFBaUM7UUFDbEUsS0FBSyxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFSRCxJQUFXLGFBQWE7UUFDcEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDbkMsQ0FBQzs7NEVBSFEsY0FBYzttREFBZCxjQUFjLDJEQVBaO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLHlCQUF5QjtnQkFDbEMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUM7YUFDaEQ7U0FDSjtRQVRXLHlDQUFtQjtRQUMzQix1Q0FBbUM7UUFDdkMsaUJBQW9COzt1RkFTWCxjQUFjO2NBYjFCLFNBQVM7ZUFBQztnQkFDUCxRQUFRLEVBQUUsT0FBTztnQkFDakIsUUFBUSxFQUFFOzt5QkFFVztnQkFDckIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07Z0JBQy9DLFNBQVMsRUFBRTtvQkFDUDt3QkFDSSxPQUFPLEVBQUUseUJBQXlCO3dCQUNsQyxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUM7cUJBQ2hEO2lCQUNKO2FBQ0o7O0FBa0JELE1BQU0sT0FBTyxXQUFXOztzRUFBWCxXQUFXOytDQUFYLFdBQVc7O3VGQUFYLFdBQVc7Y0FMdkIsUUFBUTtlQUFDO2dCQUNOLFlBQVksRUFBRSxDQUFDLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsQ0FBQztnQkFDeEUsT0FBTyxFQUFFLENBQUMsY0FBYyxFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixDQUFDO2dCQUNuRSxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQzthQUM5Qjs7d0ZBQ1ksV0FBVyxtQkFqQlgsY0FBYyxFQWFRLG9CQUFvQixFQUFFLGtCQUFrQixhQWI5RCxjQUFjLEVBY0csb0JBQW9CLEVBQUUsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSXRlcmFibGVEaWZmZXJzLCBOT19FUlJPUlNfU0NIRU1BLCBOZ01vZHVsZSwgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBQYWdlciB9IGZyb20gJ0BuYXRpdmVzY3JpcHQtY29tbXVuaXR5L3VpLXBhZ2VyJztcbmltcG9ydCB7IFBhZ2VySXRlbURpcmVjdGl2ZSwgVEVNUExBVEVEX0lURU1TX0NPTVBPTkVOVCwgVGVtcGxhdGVLZXlEaXJlY3RpdmUsIFRlbXBsYXRlZEl0ZW1zQ29tcG9uZW50IH0gZnJvbSAnLi9wYWdlci1pdGVtcy1jb21wJztcblxuZXhwb3J0IHsgUGFnZXJJdGVtRGlyZWN0aXZlLCBUZW1wbGF0ZWRJdGVtc0NvbXBvbmVudCwgVGVtcGxhdGVLZXlEaXJlY3RpdmUgfSBmcm9tICcuL3BhZ2VyLWl0ZW1zLWNvbXAnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ1BhZ2VyJyxcbiAgICB0ZW1wbGF0ZTogYCA8RGV0YWNoZWRDb250YWluZXI+XG4gICAgICAgIDxQbGFjZWhvbGRlciAjbG9hZGVyPjwvUGxhY2Vob2xkZXI+XG4gICAgPC9EZXRhY2hlZENvbnRhaW5lcj5gLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBURU1QTEFURURfSVRFTVNfQ09NUE9ORU5ULFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUGFnZXJDb21wb25lbnQpXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VyQ29tcG9uZW50IGV4dGVuZHMgVGVtcGxhdGVkSXRlbXNDb21wb25lbnQge1xuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpOiBQYWdlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlZEl0ZW1zVmlldztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdGVtcGxhdGVkSXRlbXNWaWV3OiBQYWdlcjtcblxuICAgIGNvbnN0cnVjdG9yKF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLCBfaXRlcmFibGVEaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMpIHtcbiAgICAgICAgc3VwZXIoX2VsZW1lbnRSZWYsIF9pdGVyYWJsZURpZmZlcnMpO1xuICAgIH1cbn1cblxuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtQYWdlckNvbXBvbmVudCwgVGVtcGxhdGVLZXlEaXJlY3RpdmUsIFBhZ2VySXRlbURpcmVjdGl2ZV0sXG4gICAgZXhwb3J0czogW1BhZ2VyQ29tcG9uZW50LCBUZW1wbGF0ZUtleURpcmVjdGl2ZSwgUGFnZXJJdGVtRGlyZWN0aXZlXSxcbiAgICBzY2hlbWFzOiBbTk9fRVJST1JTX1NDSEVNQV1cbn0pXG5leHBvcnQgY2xhc3MgUGFnZXJNb2R1bGUge31cbiJdfQ==
|
File without changes
|
@@ -0,0 +1,304 @@
|
|
1
|
+
import { Component, ContentChild, Directive, ElementRef, EmbeddedViewRef, EventEmitter, Host, Inject, InjectionToken, Input, IterableDiffers, Output, TemplateRef, ViewChild, ViewContainerRef, ɵisListLikeIterable as isListLikeIterable } from '@angular/core';
|
2
|
+
import { Pager, PagerError, PagerItem, PagerLog } from '@nativescript-community/ui-pager';
|
3
|
+
import { extractSingleViewRecursive, isInvisibleNode, registerElement } from '@nativescript/angular';
|
4
|
+
import { LayoutBase, Trace, View, isIOS } from '@nativescript/core';
|
5
|
+
import { ObservableArray } from '@nativescript/core/data/observable-array';
|
6
|
+
import { profile } from '@nativescript/core/profiling';
|
7
|
+
import * as i0 from "@angular/core";
|
8
|
+
const _c0 = ["loader"];
|
9
|
+
registerElement('Pager', () => Pager);
|
10
|
+
registerElement('PagerItem', () => PagerItem);
|
11
|
+
const NG_VIEW = '_ngViewRef';
|
12
|
+
export class ItemContext {
|
13
|
+
constructor($implicit, item, index, even, odd) {
|
14
|
+
this.$implicit = $implicit;
|
15
|
+
this.item = item;
|
16
|
+
this.index = index;
|
17
|
+
this.even = even;
|
18
|
+
this.odd = odd;
|
19
|
+
}
|
20
|
+
}
|
21
|
+
export class TemplatedItemsComponent {
|
22
|
+
constructor(_elementRef, _iterableDiffers) {
|
23
|
+
this._iterableDiffers = _iterableDiffers;
|
24
|
+
this.setupItemView = new EventEmitter();
|
25
|
+
this.templatedItemsView = _elementRef.nativeElement;
|
26
|
+
this.templatedItemsView.on('itemLoading', this.onItemLoading, this);
|
27
|
+
this.templatedItemsView.on('itemDisposing', this.onItemDisposing, this);
|
28
|
+
}
|
29
|
+
get items() {
|
30
|
+
return this._items;
|
31
|
+
}
|
32
|
+
set items(value) {
|
33
|
+
this._items = value;
|
34
|
+
let needDiffer = true;
|
35
|
+
if (value instanceof ObservableArray) {
|
36
|
+
needDiffer = false;
|
37
|
+
}
|
38
|
+
if (needDiffer && !this._differ && isListLikeIterable(value)) {
|
39
|
+
this._differ = this._iterableDiffers.find(this._items).create((_index, item) => item);
|
40
|
+
}
|
41
|
+
this.templatedItemsView.items = this._items;
|
42
|
+
}
|
43
|
+
get selectedIndex() {
|
44
|
+
return this._selectedIndex;
|
45
|
+
}
|
46
|
+
set selectedIndex(value) {
|
47
|
+
this._selectedIndex = value;
|
48
|
+
this.templatedItemsView.selectedIndex = this._selectedIndex;
|
49
|
+
}
|
50
|
+
ngAfterViewInit() {
|
51
|
+
if (!!this._selectedIndex) {
|
52
|
+
setTimeout(() => {
|
53
|
+
if (isIOS) {
|
54
|
+
this.templatedItemsView.scrollToIndexAnimated(this._selectedIndex, false);
|
55
|
+
}
|
56
|
+
this.templatedItemsView.selectedIndex = this._selectedIndex;
|
57
|
+
});
|
58
|
+
}
|
59
|
+
}
|
60
|
+
ngAfterContentInit() {
|
61
|
+
if (Trace.isEnabled()) {
|
62
|
+
PagerLog('TemplatedItemsView.ngAfterContentInit()');
|
63
|
+
}
|
64
|
+
this.setItemTemplates();
|
65
|
+
}
|
66
|
+
ngOnDestroy() {
|
67
|
+
this.templatedItemsView.off('itemLoading', this.onItemLoading, this);
|
68
|
+
this.templatedItemsView.off('itemDisposing', this.onItemDisposing, this);
|
69
|
+
}
|
70
|
+
setItemTemplates() {
|
71
|
+
if (!this.items)
|
72
|
+
return;
|
73
|
+
this.itemTemplate = this.itemTemplateQuery;
|
74
|
+
if (this._templateMap) {
|
75
|
+
if (Trace.isEnabled()) {
|
76
|
+
PagerLog('Setting templates');
|
77
|
+
}
|
78
|
+
const templates = [];
|
79
|
+
this._templateMap.forEach((value) => {
|
80
|
+
templates.push(value);
|
81
|
+
});
|
82
|
+
this.templatedItemsView.itemTemplates = templates;
|
83
|
+
}
|
84
|
+
}
|
85
|
+
registerTemplate(key, template) {
|
86
|
+
if (Trace.isEnabled()) {
|
87
|
+
PagerLog(`registerTemplate for key: ${key}`);
|
88
|
+
}
|
89
|
+
if (!this._templateMap) {
|
90
|
+
this._templateMap = new Map();
|
91
|
+
}
|
92
|
+
const keyedTemplate = {
|
93
|
+
key,
|
94
|
+
createView: this.getItemTemplateViewFactory(template)
|
95
|
+
};
|
96
|
+
this._templateMap.set(key, keyedTemplate);
|
97
|
+
}
|
98
|
+
onItemLoading(args) {
|
99
|
+
if (!args.view && !this.itemTemplate) {
|
100
|
+
return;
|
101
|
+
}
|
102
|
+
if (!this.items)
|
103
|
+
return;
|
104
|
+
const index = args.index;
|
105
|
+
const items = args.object.items;
|
106
|
+
const currentItem = typeof items.getItem === 'function' ? items.getItem(index) : items[index];
|
107
|
+
let viewRef;
|
108
|
+
if (args.view) {
|
109
|
+
if (Trace.isEnabled()) {
|
110
|
+
PagerLog(`onItemLoading: ${index} - Reusing existing view`);
|
111
|
+
}
|
112
|
+
viewRef = args.view[NG_VIEW];
|
113
|
+
if (!viewRef && args.view instanceof LayoutBase && args.view.getChildrenCount() > 0) {
|
114
|
+
viewRef = args.view.getChildAt(0)[NG_VIEW];
|
115
|
+
}
|
116
|
+
if (!viewRef && Trace.isEnabled()) {
|
117
|
+
PagerError(`ViewReference not found for item ${index}. View recycling is not working`);
|
118
|
+
}
|
119
|
+
}
|
120
|
+
if (!viewRef) {
|
121
|
+
if (Trace.isEnabled()) {
|
122
|
+
PagerLog(`onItemLoading: ${index} - Creating view from template`);
|
123
|
+
}
|
124
|
+
viewRef = this.loader.createEmbeddedView(this.itemTemplate, new ItemContext(), 0);
|
125
|
+
args.view = getItemViewRoot(viewRef);
|
126
|
+
args.view[NG_VIEW] = viewRef;
|
127
|
+
}
|
128
|
+
this.setupViewRef(viewRef, currentItem, index);
|
129
|
+
this.detectChangesOnChild(viewRef, index);
|
130
|
+
}
|
131
|
+
onItemDisposing(args) {
|
132
|
+
if (!args.view) {
|
133
|
+
return;
|
134
|
+
}
|
135
|
+
let viewRef;
|
136
|
+
if (args.view) {
|
137
|
+
if (Trace.isEnabled()) {
|
138
|
+
PagerLog(`onItemDisposing: ${args.index} - Removing angular view`);
|
139
|
+
}
|
140
|
+
viewRef = args.view[NG_VIEW];
|
141
|
+
if (!viewRef && args.view instanceof LayoutBase && args.view.getChildrenCount() > 0) {
|
142
|
+
viewRef = args.view.getChildAt(0)[NG_VIEW];
|
143
|
+
}
|
144
|
+
if (!viewRef && Trace.isEnabled()) {
|
145
|
+
PagerError(`ViewReference not found for item ${args.index}. View disposing is not working`);
|
146
|
+
}
|
147
|
+
}
|
148
|
+
if (viewRef) {
|
149
|
+
if (Trace.isEnabled()) {
|
150
|
+
PagerLog(`onItemDisposing: ${args.index} - Disposing view reference`);
|
151
|
+
}
|
152
|
+
viewRef.destroy();
|
153
|
+
}
|
154
|
+
}
|
155
|
+
setupViewRef(viewRef, data, index) {
|
156
|
+
const context = viewRef.context;
|
157
|
+
context.$implicit = data;
|
158
|
+
context.item = data;
|
159
|
+
context.index = index;
|
160
|
+
context.even = index % 2 === 0;
|
161
|
+
context.odd = !context.even;
|
162
|
+
this.setupItemView.next({
|
163
|
+
view: viewRef,
|
164
|
+
data,
|
165
|
+
index,
|
166
|
+
context
|
167
|
+
});
|
168
|
+
}
|
169
|
+
getItemTemplateViewFactory(template) {
|
170
|
+
return () => {
|
171
|
+
const viewRef = this.loader.createEmbeddedView(template, new ItemContext(), 0);
|
172
|
+
const resultView = getItemViewRoot(viewRef);
|
173
|
+
resultView[NG_VIEW] = viewRef;
|
174
|
+
return resultView;
|
175
|
+
};
|
176
|
+
}
|
177
|
+
detectChangesOnChild(viewRef, index) {
|
178
|
+
if (Trace.isEnabled()) {
|
179
|
+
PagerLog(`Manually detect changes in child: ${index}`);
|
180
|
+
}
|
181
|
+
viewRef.markForCheck();
|
182
|
+
viewRef.detectChanges();
|
183
|
+
}
|
184
|
+
ngDoCheck() {
|
185
|
+
if (this._differ) {
|
186
|
+
if (Trace.isEnabled()) {
|
187
|
+
PagerLog('ngDoCheck() - execute differ');
|
188
|
+
}
|
189
|
+
const changes = this._differ.diff(this._items);
|
190
|
+
if (changes) {
|
191
|
+
if (Trace.isEnabled()) {
|
192
|
+
PagerLog('ngDoCheck() - refresh');
|
193
|
+
}
|
194
|
+
this.templatedItemsView.refresh();
|
195
|
+
}
|
196
|
+
}
|
197
|
+
}
|
198
|
+
}
|
199
|
+
TemplatedItemsComponent.ɵfac = function TemplatedItemsComponent_Factory(t) { return new (t || TemplatedItemsComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.IterableDiffers)); };
|
200
|
+
TemplatedItemsComponent.ɵcmp = i0.ɵɵdefineComponent({ type: TemplatedItemsComponent, selectors: [["ng-component"]], contentQueries: function TemplatedItemsComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
|
201
|
+
i0.ɵɵcontentQuery(dirIndex, TemplateRef, 5);
|
202
|
+
} if (rf & 2) {
|
203
|
+
let _t;
|
204
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.itemTemplateQuery = _t.first);
|
205
|
+
} }, viewQuery: function TemplatedItemsComponent_Query(rf, ctx) { if (rf & 1) {
|
206
|
+
i0.ɵɵviewQuery(_c0, 5, ViewContainerRef);
|
207
|
+
} if (rf & 2) {
|
208
|
+
let _t;
|
209
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.loader = _t.first);
|
210
|
+
} }, inputs: { items: "items", selectedIndex: "selectedIndex" }, outputs: { setupItemView: "setupItemView" }, decls: 0, vars: 0, template: function TemplatedItemsComponent_Template(rf, ctx) { }, encapsulation: 2 });
|
211
|
+
__decorate([
|
212
|
+
profile
|
213
|
+
], TemplatedItemsComponent.prototype, "onItemLoading", null);
|
214
|
+
__decorate([
|
215
|
+
profile
|
216
|
+
], TemplatedItemsComponent.prototype, "onItemDisposing", null);
|
217
|
+
__decorate([
|
218
|
+
profile
|
219
|
+
], TemplatedItemsComponent.prototype, "detectChangesOnChild", null);
|
220
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TemplatedItemsComponent, [{
|
221
|
+
type: Component,
|
222
|
+
args: [{
|
223
|
+
template: ''
|
224
|
+
}]
|
225
|
+
}], function () { return [{ type: i0.ElementRef }, { type: i0.IterableDiffers }]; }, { loader: [{
|
226
|
+
type: ViewChild,
|
227
|
+
args: ['loader', { read: ViewContainerRef, static: false }]
|
228
|
+
}], setupItemView: [{
|
229
|
+
type: Output
|
230
|
+
}], itemTemplateQuery: [{
|
231
|
+
type: ContentChild,
|
232
|
+
args: [TemplateRef, { static: false }]
|
233
|
+
}], items: [{
|
234
|
+
type: Input
|
235
|
+
}], selectedIndex: [{
|
236
|
+
type: Input
|
237
|
+
}], onItemLoading: [], onItemDisposing: [], detectChangesOnChild: [] }); })();
|
238
|
+
export function getItemViewRoot(viewRef, rootLocator = extractSingleViewRecursive) {
|
239
|
+
return rootLocator(viewRef.rootNodes, 0);
|
240
|
+
}
|
241
|
+
export const TEMPLATED_ITEMS_COMPONENT = new InjectionToken('TemplatedItemsComponent');
|
242
|
+
export class PagerItemDirective {
|
243
|
+
constructor(templateRef, owner, viewContainer) {
|
244
|
+
this.templateRef = templateRef;
|
245
|
+
this.owner = owner;
|
246
|
+
this.viewContainer = viewContainer;
|
247
|
+
}
|
248
|
+
ensureItem() {
|
249
|
+
if (!this.item) {
|
250
|
+
this.item = new PagerItem();
|
251
|
+
}
|
252
|
+
}
|
253
|
+
applyConfig() {
|
254
|
+
this.ensureItem();
|
255
|
+
}
|
256
|
+
ngOnInit() {
|
257
|
+
this.applyConfig();
|
258
|
+
const viewRef = this.viewContainer.createEmbeddedView(this.templateRef);
|
259
|
+
const realViews = viewRef.rootNodes.filter((node) => !isInvisibleNode(node));
|
260
|
+
if (realViews.length > 0) {
|
261
|
+
const view = realViews[0];
|
262
|
+
this.item.addChild(view);
|
263
|
+
this.owner.nativeElement._addChildFromBuilder('PagerItem', this.item);
|
264
|
+
}
|
265
|
+
}
|
266
|
+
}
|
267
|
+
PagerItemDirective.ɵfac = function PagerItemDirective_Factory(t) { return new (t || PagerItemDirective)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(TEMPLATED_ITEMS_COMPONENT, 1), i0.ɵɵdirectiveInject(i0.ViewContainerRef)); };
|
268
|
+
PagerItemDirective.ɵdir = i0.ɵɵdefineDirective({ type: PagerItemDirective, selectors: [["", "pagerItem", ""]] });
|
269
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PagerItemDirective, [{
|
270
|
+
type: Directive,
|
271
|
+
args: [{
|
272
|
+
selector: '[pagerItem]'
|
273
|
+
}]
|
274
|
+
}], function () { return [{ type: i0.TemplateRef }, { type: TemplatedItemsComponent, decorators: [{
|
275
|
+
type: Inject,
|
276
|
+
args: [TEMPLATED_ITEMS_COMPONENT]
|
277
|
+
}, {
|
278
|
+
type: Host
|
279
|
+
}] }, { type: i0.ViewContainerRef }]; }, null); })();
|
280
|
+
export class TemplateKeyDirective {
|
281
|
+
constructor(templateRef, comp) {
|
282
|
+
this.templateRef = templateRef;
|
283
|
+
this.comp = comp;
|
284
|
+
}
|
285
|
+
set pagerTemplateKey(value) {
|
286
|
+
if (this.comp && this.templateRef) {
|
287
|
+
this.comp.registerTemplate(value, this.templateRef);
|
288
|
+
}
|
289
|
+
}
|
290
|
+
}
|
291
|
+
TemplateKeyDirective.ɵfac = function TemplateKeyDirective_Factory(t) { return new (t || TemplateKeyDirective)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(TEMPLATED_ITEMS_COMPONENT, 1)); };
|
292
|
+
TemplateKeyDirective.ɵdir = i0.ɵɵdefineDirective({ type: TemplateKeyDirective, selectors: [["", "pagerTemplateKey", ""]], inputs: { pagerTemplateKey: "pagerTemplateKey" } });
|
293
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TemplateKeyDirective, [{
|
294
|
+
type: Directive,
|
295
|
+
args: [{ selector: '[pagerTemplateKey]' }]
|
296
|
+
}], function () { return [{ type: i0.TemplateRef }, { type: TemplatedItemsComponent, decorators: [{
|
297
|
+
type: Inject,
|
298
|
+
args: [TEMPLATED_ITEMS_COMPONENT]
|
299
|
+
}, {
|
300
|
+
type: Host
|
301
|
+
}] }]; }, { pagerTemplateKey: [{
|
302
|
+
type: Input
|
303
|
+
}] }); })();
|
304
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZXItaXRlbXMtY29tcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91aS1wYWdlci9hbmd1bGFyL3BhZ2VyLWl0ZW1zLWNvbXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osU0FBUyxFQUVULFVBQVUsRUFDVixlQUFlLEVBQ2YsWUFBWSxFQUNaLElBQUksRUFDSixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFFTCxlQUFlLEVBR2YsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLG1CQUFtQixJQUFJLGtCQUFrQixFQUM1QyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDMUYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRyxPQUFPLEVBQTRCLFVBQVUsRUFBWSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOEJBQThCLENBQUM7OztBQUd2RCxlQUFlLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFOUMsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDO0FBYzdCLE1BQU0sT0FBTyxXQUFXO0lBQ3BCLFlBQW1CLFNBQWUsRUFBUyxJQUFVLEVBQVMsS0FBYyxFQUFTLElBQWMsRUFBUyxHQUFhO1FBQXRHLGNBQVMsR0FBVCxTQUFTLENB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QWpDUSxrQkFBa0IsNkRBS2YseUJBQXlCO3VEQUw1QixrQkFBa0I7dUZBQWxCLGtCQUFrQjtjQUg5QixTQUFTO2VBQUM7Z0JBQ1AsUUFBUSxFQUFFLGFBQWE7YUFDMUI7Z0VBUXNCLHVCQUF1QjtzQkFGckMsTUFBTTt1QkFBQyx5QkFBeUI7O3NCQUNoQyxJQUFJOztBQStCYixNQUFNLE9BQU8sb0JBQW9CO0lBQzdCLFlBQ1ksV0FBNkIsRUFHN0IsSUFBNkI7UUFIN0IsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBRzdCLFNBQUksR0FBSixJQUFJLENBQXlCO0lBQ3RDLENBQUM7SUFFSixJQUNJLGdCQUFnQixDQUFDLEtBQVU7UUFDM0IsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3ZEO0lBQ0wsQ0FBQzs7d0ZBYlEsb0JBQW9CLDZEQUdqQix5QkFBeUI7eURBSDVCLG9CQUFvQjt1RkFBcEIsb0JBQW9CO2NBRGhDLFNBQVM7ZUFBQyxFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRTtnRUFNdkIsdUJBQXVCO3NCQUZwQyxNQUFNO3VCQUFDLHlCQUF5Qjs7c0JBQ2hDLElBQUk7d0JBS0wsZ0JBQWdCO2tCQURuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRGlyZWN0aXZlLFxuICAgIERvQ2hlY2ssXG4gICAgRWxlbWVudFJlZixcbiAgICBFbWJlZGRlZFZpZXdSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdGlvblRva2VuLFxuICAgIElucHV0LFxuICAgIEl0ZXJhYmxlRGlmZmVyLFxuICAgIEl0ZXJhYmxlRGlmZmVycyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICDJtWlzTGlzdExpa2VJdGVyYWJsZSBhcyBpc0xpc3RMaWtlSXRlcmFibGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQYWdlciwgUGFnZXJFcnJvciwgUGFnZXJJdGVtLCBQYWdlckxvZyB9IGZyb20gJ0BuYXRpdmVzY3JpcHQtY29tbXVuaXR5L3VpLXBhZ2VyJztcbmltcG9ydCB7IGV4dHJhY3RTaW5nbGVWaWV3UmVjdXJzaXZlLCBpc0ludmlzaWJsZU5vZGUsIHJlZ2lzdGVyRWxlbWVudCB9IGZyb20gJ0BuYXRpdmVzY3JpcHQvYW5ndWxhcic7XG5pbXBvcnQgeyBFdmVudERhdGEsIEtleWVkVGVtcGxhdGUsIExheW91dEJhc2UsIFRlbXBsYXRlLCBUcmFjZSwgVmlldywgaXNJT1MgfSBmcm9tICdAbmF0aXZlc2NyaXB0L2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZUFycmF5IH0gZnJvbSAnQG5hdGl2ZXNjcmlwdC9jb3JlL2RhdGEvb2JzZXJ2YWJsZS1hcnJheSc7XG5pbXBvcnQgeyBwcm9maWxlIH0gZnJvbSAnQG5hdGl2ZXNjcmlwdC9jb3JlL3Byb2ZpbGluZyc7XG5pbXBvcnQgeyBJdGVtRXZlbnREYXRhLCBJdGVtc1NvdXJjZSB9IGZyb20gJ0BuYXRpdmVzY3JpcHQvY29yZS91aS9saXN0LXZpZXcnO1xuXG5yZWdpc3RlckVsZW1lbnQoJ1BhZ2VyJywgKCkgPT4gUGFnZXIpO1xucmVnaXN0ZXJFbGVtZW50KCdQYWdlckl0ZW0nLCAoKSA9PiBQYWdlckl0ZW0pO1xuXG5jb25zdCBOR19WSUVXID0gJ19uZ1ZpZXdSZWYnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VyVGVtcGxhdGVkSXRlbXNWaWV3IHtcbiAgICBpdGVtczogYW55W10gfCBJdGVtc1NvdXJjZTtcbiAgICBpdGVtVGVtcGxhdGU6IHN0cmluZyB8IFRlbXBsYXRlO1xuICAgIGl0ZW1UZW1wbGF0ZXM/OiBzdHJpbmcgfCBLZXllZFRlbXBsYXRlW107XG5cbiAgICByZWZyZXNoKCk6IHZvaWQ7XG5cbiAgICBvbihldmVudDogJ2l0ZW1EaXNwb3NpbmcnIHwgJ2l0ZW1Mb2FkaW5nJywgY2FsbGJhY2s6IChhcmdzOiBJdGVtRXZlbnREYXRhKSA9PiB2b2lkLCB0aGlzQXJnPzogYW55KTtcblxuICAgIG9mZihldmVudDogJ2l0ZW1Mb2FkaW5nJyB8ICdpdGVtRGlzcG9zaW5nJywgY2FsbGJhY2s6IChhcmdzOiBFdmVudERhdGEpID0+IHZvaWQsIHRoaXNBcmc/OiBhbnkpO1xufVxuXG5leHBvcnQgY2xhc3MgSXRlbUNvbnRleHQge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyAkaW1wbGljaXQ/OiBhbnksIHB1YmxpYyBpdGVtPzogYW55LCBwdWJsaWMgaW5kZXg/OiBudW1iZXIsIHB1YmxpYyBldmVuPzogYm9vbGVhbiwgcHVibGljIG9kZD86IGJvb2xlYW4pIHt9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2V0dXBJdGVtVmlld0FyZ3Mge1xuICAgIHZpZXc6IEVtYmVkZGVkVmlld1JlZjxhbnk+O1xuICAgIGRhdGE6IGFueTtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIGNvbnRleHQ6IEl0ZW1Db250ZXh0O1xufVxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGU6ICcnXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRlbXBsYXRlZEl0ZW1zQ29tcG9uZW50IGltcGxlbWVudHMgRG9DaGVjaywgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgICBwdWJsaWMgYWJzdHJhY3QgZ2V0IG5hdGl2ZUVsZW1lbnQoKTogUGFnZXI7XG5cbiAgICBwcm90ZWN0ZWQgdGVtcGxhdGVkSXRlbXNWaWV3OiBQYWdlcjtcbiAgICBwcm90ZWN0ZWQgX2l0ZW1zOiBhbnk7XG4gICAgcHJvdGVjdGVkIF9kaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPEtleWVkVGVtcGxhdGU+O1xuICAgIHByb3RlY3RlZCBfdGVtcGxhdGVNYXA6IE1hcDxzdHJpbmcsIEtleWVkVGVtcGxhdGU+O1xuICAgIHByaXZhdGUgX3NlbGVjdGVkSW5kZXg6IG51bWJlcjtcbiAgICBAVmlld0NoaWxkKCdsb2FkZXInLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogZmFsc2UgfSkgbG9hZGVyOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHNldHVwSXRlbVZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPFNldHVwSXRlbVZpZXdBcmdzPigpO1xuXG4gICAgQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZiwgeyBzdGF0aWM6IGZhbHNlIH0pIGl0ZW1UZW1wbGF0ZVF1ZXJ5OiBUZW1wbGF0ZVJlZjxJdGVtQ29udGV4dD47XG5cbiAgICBpdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPEl0ZW1Db250ZXh0PjtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGl0ZW1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gICAgfVxuXG4gICAgc2V0IGl0ZW1zKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5faXRlbXMgPSB2YWx1ZTtcbiAgICAgICAgbGV0IG5lZWREaWZmZXIgPSB0cnVlO1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYnNlcnZhYmxlQXJyYXkpIHtcbiAgICAgICAgICAgIG5lZWREaWZmZXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmVlZERpZmZlciAmJiAhdGhpcy5fZGlmZmVyICYmIGlzTGlzdExpa2VJdGVyYWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2RpZmZlciA9IHRoaXMuX2l0ZXJhYmxlRGlmZmVycy5maW5kKHRoaXMuX2l0ZW1zKS5jcmVhdGUoKF9pbmRleCwgaXRlbSkgPT4gaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRlbXBsYXRlZEl0ZW1zVmlldy5pdGVtcyA9IHRoaXMuX2l0ZW1zO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHNlbGVjdGVkSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSW5kZXg7XG4gICAgfVxuXG4gICAgc2V0IHNlbGVjdGVkSW5kZXgodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRJbmRleCA9IHZhbHVlO1xuICAgICAgICB0aGlzLnRlbXBsYXRlZEl0ZW1zVmlldy5zZWxlY3RlZEluZGV4ID0gdGhpcy5fc2VsZWN0ZWRJbmRleDtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmICghIXRoaXMuX3NlbGVjdGVkSW5kZXgpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc0lPUykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlZEl0ZW1zVmlldy5zY3JvbGxUb0luZGV4QW5pbWF0ZWQodGhpcy5fc2VsZWN0ZWRJbmRleCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlZEl0ZW1zVmlldy5zZWxlY3RlZEluZGV4ID0gdGhpcy5fc2VsZWN0ZWRJbmRleDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgX2l0ZXJhYmxlRGlmZmVyczogSXRlcmFibGVEaWZmZXJzKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVkSXRlbXNWaWV3ID0gX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgICAgICB0aGlzLnRlbXBsYXRlZEl0ZW1zVmlldy5vbignaXRlbUxvYWRpbmcnLCB0aGlzLm9uSXRlbUxvYWRpbmcsIHRoaXMpO1xuICAgICAgICB0aGlzLnRlbXBsYXRlZEl0ZW1zVmlldy5vbignaXRlbURpc3Bvc2luZycsIHRoaXMub25JdGVtRGlzcG9zaW5nLCB0aGlzKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIGlmIChUcmFjZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgUGFnZXJMb2coJ1RlbXBsYXRlZEl0ZW1zVmlldy5uZ0FmdGVyQ29udGVudEluaXQoKScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0SXRlbVRlbXBsYXRlcygpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnRlbXBsYXRlZEl0ZW1zVmlldy5vZmYoJ2l0ZW1Mb2FkaW5nJywgdGhpcy5vbkl0ZW1Mb2FkaW5nLCB0aGlzKTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZWRJdGVtc1ZpZXcub2ZmKCdpdGVtRGlzcG9zaW5nJywgdGhpcy5vbkl0ZW1EaXNwb3NpbmcsIHRoaXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SXRlbVRlbXBsYXRlcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLml0ZW1zKSByZXR1cm47XG4gICAgICAgIC8vIFRoZSBpdGVtVGVtcGxhdGVRdWVyeSBtYXkgYmUgY2hhbmdlZCBhZnRlciBsaXN0IGl0ZW1zIGFyZSBhZGRlZCB0aGF0IGNvbnRhaW4gPHRlbXBsYXRlPiBpbnNpZGUsXG4gICAgICAgIC8vIHNvIGNhY2hlIGFuZCB1c2Ugb25seSB0aGUgb3JpZ2luYWwgdGVtcGxhdGUgdG8gYXZvaWQgZXJyb3JzLlxuICAgICAgICB0aGlzLml0ZW1UZW1wbGF0ZSA9IHRoaXMuaXRlbVRlbXBsYXRlUXVlcnk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3RlbXBsYXRlTWFwKSB7XG4gICAgICAgICAgICBpZiAoVHJhY2UuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICBQYWdlckxvZygnU2V0dGluZyB0ZW1wbGF0ZXMnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVzOiBLZXllZFRlbXBsYXRlW10gPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3RlbXBsYXRlTWFwLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGVzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlZEl0ZW1zVmlldy5pdGVtVGVtcGxhdGVzID0gdGVtcGxhdGVzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyVGVtcGxhdGUoa2V5OiBzdHJpbmcsIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxJdGVtQ29udGV4dD4pIHtcbiAgICAgICAgaWYgKFRyYWNlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICBQYWdlckxvZyhgcmVnaXN0ZXJUZW1wbGF0ZSBmb3Iga2V5OiAke2tleX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fdGVtcGxhdGVNYXApIHtcbiAgICAgICAgICAgIHRoaXMuX3RlbXBsYXRlTWFwID0gbmV3IE1hcDxzdHJpbmcsIEtleWVkVGVtcGxhdGU+KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBrZXllZFRlbXBsYXRlID0ge1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgY3JlYXRlVmlldzogdGhpcy5nZXRJdGVtVGVtcGxhdGVWaWV3RmFjdG9yeSh0ZW1wbGF0ZSlcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl90ZW1wbGF0ZU1hcC5zZXQoa2V5LCBrZXllZFRlbXBsYXRlKTtcbiAgICB9XG5cbiAgICBAcHJvZmlsZVxuICAgIHB1YmxpYyBvbkl0ZW1Mb2FkaW5nKGFyZ3M6IEl0ZW1FdmVudERhdGEpIHtcbiAgICAgICAgaWYgKCFhcmdzLnZpZXcgJiYgIXRoaXMuaXRlbVRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaXRlbXMpIHJldHVybjtcblxuICAgICAgICBjb25zdCBpbmRleCA9IGFyZ3MuaW5kZXg7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gKGFyZ3Mub2JqZWN0IGFzIGFueSkuaXRlbXM7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gdHlwZW9mIGl0ZW1zLmdldEl0ZW0gPT09ICdmdW5jdGlvbicgPyBpdGVtcy5nZXRJdGVtKGluZGV4KSA6IGl0ZW1zW2luZGV4XTtcbiAgICAgICAgbGV0IHZpZXdSZWY6IEVtYmVkZGVkVmlld1JlZjxJdGVtQ29udGV4dD47XG5cbiAgICAgICAgaWYgKGFyZ3Mudmlldykge1xuICAgICAgICAgICAgaWYgKFRyYWNlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgUGFnZXJMb2coYG9uSXRlbUxvYWRpbmc6ICR7aW5kZXh9IC0gUmV1c2luZyBleGlzdGluZyB2aWV3YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZpZXdSZWYgPSBhcmdzLnZpZXdbTkdfVklFV107XG4gICAgICAgICAgICAvLyBHZXR0aW5nIGFuZ3VsYXIgdmlldyBmcm9tIG9yaWdpbmFsIGVsZW1lbnQgKGluIGNhc2VzIHdoZW4gUHJveHlWaWV3Q29udGFpbmVyXG4gICAgICAgICAgICAvLyBpcyB1c2VkIE5hdGl2ZVNjcmlwdCBpbnRlcm5hbGx5IHdyYXBzIGl0IGluIGEgU3RhY2tMYXlvdXQpXG4gICAgICAgICAgICBpZiAoIXZpZXdSZWYgJiYgYXJncy52aWV3IGluc3RhbmNlb2YgTGF5b3V0QmFzZSAmJiBhcmdzLnZpZXcuZ2V0Q2hpbGRyZW5Db3VudCgpID4gMCkge1xuICAgICAgICAgICAgICAgIHZpZXdSZWYgPSBhcmdzLnZpZXcuZ2V0Q2hpbGRBdCgwKVtOR19WSUVXXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF2aWV3UmVmICYmIFRyYWNlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgUGFnZXJFcnJvcihgVmlld1JlZmVyZW5jZSBub3QgZm91bmQgZm9yIGl0ZW0gJHtpbmRleH0uIFZpZXcgcmVjeWNsaW5nIGlzIG5vdCB3b3JraW5nYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZpZXdSZWYpIHtcbiAgICAgICAgICAgIGlmIChUcmFjZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgIFBhZ2VyTG9nKGBvbkl0ZW1Mb2FkaW5nOiAke2luZGV4fSAtIENyZWF0aW5nIHZpZXcgZnJvbSB0ZW1wbGF0ZWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2aWV3UmVmID0gdGhpcy5sb2FkZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuaXRlbVRlbXBsYXRlLCBuZXcgSXRlbUNvbnRleHQoKSwgMCk7XG4gICAgICAgICAgICBhcmdzLnZpZXcgPSBnZXRJdGVtVmlld1Jvb3Qodmlld1JlZik7XG4gICAgICAgICAgICBhcmdzLnZpZXdbTkdfVklFV10gPSB2aWV3UmVmO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXR1cFZpZXdSZWYodmlld1JlZiwgY3VycmVudEl0ZW0sIGluZGV4KTtcblxuICAgICAgICB0aGlzLmRldGVjdENoYW5nZXNPbkNoaWxkKHZpZXdSZWYsIGluZGV4KTtcbiAgICB9XG5cbiAgICBAcHJvZmlsZVxuICAgIHB1YmxpYyBvbkl0ZW1EaXNwb3NpbmcoYXJnczogSXRlbUV2ZW50RGF0YSkge1xuICAgICAgICBpZiAoIWFyZ3Mudmlldykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCB2aWV3UmVmOiBFbWJlZGRlZFZpZXdSZWY8SXRlbUNvbnRleHQ+O1xuXG4gICAgICAgIGlmIChhcmdzLnZpZXcpIHtcbiAgICAgICAgICAgIGlmIChUcmFjZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgIFBhZ2VyTG9nKGBvbkl0ZW1EaXNwb3Npbmc6ICR7YXJncy5pbmRleH0gLSBSZW1vdmluZyBhbmd1bGFyIHZpZXdgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmlld1JlZiA9IGFyZ3Mudmlld1tOR19WSUVXXTtcbiAgICAgICAgICAgIC8vIEdldHRpbmcgYW5ndWxhciB2aWV3IGZyb20gb3JpZ2luYWwgZWxlbWVudCAoaW4gY2FzZXMgd2hlbiBQcm94eVZpZXdDb250YWluZXJcbiAgICAgICAgICAgIC8vIGlzIHVzZWQgTmF0aXZlU2NyaXB0IGludGVybmFsbHkgd3JhcHMgaXQgaW4gYSBTdGFja0xheW91dClcbiAgICAgICAgICAgIGlmICghdmlld1JlZiAmJiBhcmdzLnZpZXcgaW5zdGFuY2VvZiBMYXlvdXRCYXNlICYmIGFyZ3Mudmlldy5nZXRDaGlsZHJlbkNvdW50KCkgPiAwKSB7XG4gICAgICAgICAgICAgICAgdmlld1JlZiA9IGFyZ3Mudmlldy5nZXRDaGlsZEF0KDApW05HX1ZJRVddO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXZpZXdSZWYgJiYgVHJhY2UuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICBQYWdlckVycm9yKGBWaWV3UmVmZXJlbmNlIG5vdCBmb3VuZCBmb3IgaXRlbSAke2FyZ3MuaW5kZXh9LiBWaWV3IGRpc3Bvc2luZyBpcyBub3Qgd29ya2luZ2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZpZXdSZWYpIHtcbiAgICAgICAgICAgIGlmIChUcmFjZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgIFBhZ2VyTG9nKGBvbkl0ZW1EaXNwb3Npbmc6ICR7YXJncy5pbmRleH0gLSBEaXNwb3NpbmcgdmlldyByZWZlcmVuY2VgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmlld1JlZi5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0dXBWaWV3UmVmKHZpZXdSZWY6IEVtYmVkZGVkVmlld1JlZjxJdGVtQ29udGV4dD4sIGRhdGE6IGFueSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdmlld1JlZi5jb250ZXh0O1xuICAgICAgICBjb250ZXh0LiRpbXBsaWNpdCA9IGRhdGE7XG4gICAgICAgIGNvbnRleHQuaXRlbSA9IGRhdGE7XG4gICAgICAgIGNvbnRleHQuaW5kZXggPSBpbmRleDtcbiAgICAgICAgY29udGV4dC5ldmVuID0gaW5kZXggJSAyID09PSAwO1xuICAgICAgICBjb250ZXh0Lm9kZCA9ICFjb250ZXh0LmV2ZW47XG5cbiAgICAgICAgdGhpcy5zZXR1cEl0ZW1WaWV3Lm5leHQoe1xuICAgICAgICAgICAgdmlldzogdmlld1JlZixcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldEl0ZW1UZW1wbGF0ZVZpZXdGYWN0b3J5KHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxJdGVtQ29udGV4dD4pOiAoKSA9PiBWaWV3IHtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdSZWYgPSB0aGlzLmxvYWRlci5jcmVhdGVFbWJlZGRlZFZpZXcodGVtcGxhdGUsIG5ldyBJdGVtQ29udGV4dCgpLCAwKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdFZpZXcgPSBnZXRJdGVtVmlld1Jvb3Qodmlld1JlZik7XG4gICAgICAgICAgICByZXN1bHRWaWV3W05HX1ZJRVddID0gdmlld1JlZjtcblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFZpZXc7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgQHByb2ZpbGVcbiAgICBwcml2YXRlIGRldGVjdENoYW5nZXNPbkNoaWxkKHZpZXdSZWY6IEVtYmVkZGVkVmlld1JlZjxJdGVtQ29udGV4dD4sIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKFRyYWNlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICBQYWdlckxvZyhgTWFudWFsbHkgZGV0ZWN0IGNoYW5nZXMgaW4gY2hpbGQ6ICR7aW5kZXh9YCk7XG4gICAgICAgIH1cblxuICAgICAgICB2aWV3UmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB2aWV3UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIGlmICh0aGlzLl9kaWZmZXIpIHtcbiAgICAgICAgICAgIGlmIChUcmFjZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgIFBhZ2VyTG9nKCduZ0RvQ2hlY2soKSAtIGV4ZWN1dGUgZGlmZmVyJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9pdGVtcyk7XG4gICAgICAgICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICAgICAgICAgIGlmIChUcmFjZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICBQYWdlckxvZygnbmdEb0NoZWNrKCkgLSByZWZyZXNoJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZWRJdGVtc1ZpZXcucmVmcmVzaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudFZpZXcge1xuICAgIHJvb3ROb2RlczogYW55W107XG5cbiAgICBkZXN0cm95KCk6IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIFJvb3RMb2NhdG9yID0gKG5vZGVzOiBhbnlbXSwgbmVzdExldmVsOiBudW1iZXIpID0+IFZpZXc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtVmlld1Jvb3Qodmlld1JlZjogQ29tcG9uZW50Vmlldywgcm9vdExvY2F0b3I6IFJvb3RMb2NhdG9yID0gZXh0cmFjdFNpbmdsZVZpZXdSZWN1cnNpdmUgYXMgYW55KTogVmlldyB7XG4gICAgcmV0dXJuIHJvb3RMb2NhdG9yKHZpZXdSZWYucm9vdE5vZGVzLCAwKTtcbn1cblxuZXhwb3J0IGNvbnN0IFRFTVBMQVRFRF9JVEVNU19DT01QT05FTlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48VGVtcGxhdGVkSXRlbXNDb21wb25lbnQ+KCdUZW1wbGF0ZWRJdGVtc0NvbXBvbmVudCcpO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1twYWdlckl0ZW1dJ1xufSlcbmV4cG9ydCBjbGFzcyBQYWdlckl0ZW1EaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHByaXZhdGUgaXRlbTogUGFnZXJJdGVtO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgICAgIEBJbmplY3QoVEVNUExBVEVEX0lURU1TX0NPTVBPTkVOVClcbiAgICAgICAgQEhvc3QoKVxuICAgICAgICBwcml2YXRlIG93bmVyOiBUZW1wbGF0ZWRJdGVtc0NvbXBvbmVudCxcbiAgICAgICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmXG4gICAgKSB7fVxuXG4gICAgcHJpdmF0ZSBlbnN1cmVJdGVtKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5pdGVtID0gbmV3IFBhZ2VySXRlbSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseUNvbmZpZygpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVJdGVtKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuYXBwbHlDb25maWcoKTtcblxuICAgICAgICBjb25zdCB2aWV3UmVmID0gdGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlUmVmKTtcbiAgICAgICAgLy8gRmlsdGVyIG91dCB0ZXh0IG5vZGVzIGFuZCBjb21tZW50c1xuICAgICAgICBjb25zdCByZWFsVmlld3MgPSB2aWV3UmVmLnJvb3ROb2Rlcy5maWx0ZXIoKG5vZGUpID0+ICFpc0ludmlzaWJsZU5vZGUobm9kZSkpO1xuXG4gICAgICAgIGlmIChyZWFsVmlld3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdmlldyA9IHJlYWxWaWV3c1swXTtcbiAgICAgICAgICAgIHRoaXMuaXRlbS5hZGRDaGlsZCh2aWV3KTtcbiAgICAgICAgICAgIHRoaXMub3duZXIubmF0aXZlRWxlbWVudC5fYWRkQ2hpbGRGcm9tQnVpbGRlcignUGFnZXJJdGVtJywgdGhpcy5pdGVtKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW3BhZ2VyVGVtcGxhdGVLZXldJyB9KVxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlS2V5RGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICAgICAgQEluamVjdChURU1QTEFURURfSVRFTVNfQ09NUE9ORU5UKVxuICAgICAgICBASG9zdCgpXG4gICAgICAgIHByaXZhdGUgY29tcDogVGVtcGxhdGVkSXRlbXNDb21wb25lbnRcbiAgICApIHt9XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBwYWdlclRlbXBsYXRlS2V5KHZhbHVlOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcCAmJiB0aGlzLnRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICB0aGlzLmNvbXAucmVnaXN0ZXJUZW1wbGF0ZSh2YWx1ZSwgdGhpcy50ZW1wbGF0ZVJlZik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|