@nativescript-community/ui-collectionview 4.0.65 → 4.0.66
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 +8 -0
- package/README.md +32 -0
- package/angular/esm2020/collectionview-comp.mjs +14 -3
- package/angular/esm2020/index.mjs +4 -3
- package/angular/esm2020/nativescript-community-ui-collectionview-angular.mjs +4 -1
- package/angular/fesm2015/nativescript-community-ui-collectionview-angular.mjs +20 -4
- package/angular/fesm2015/nativescript-community-ui-collectionview-angular.mjs.map +1 -1
- package/angular/fesm2020/nativescript-community-ui-collectionview-angular.mjs +20 -4
- package/angular/fesm2020/nativescript-community-ui-collectionview-angular.mjs.map +1 -1
- package/index-common.d.ts +3 -0
- package/index-common.js +23 -2
- package/index-common.js.map +1 -1
- package/index.android.js +76 -3
- package/index.android.js.map +1 -1
- package/index.ios.js +44 -8
- package/index.ios.js.map +1 -1
- package/package.json +2 -2
- package/react/index.d.ts +28 -0
- package/react/index.js +30 -1
- package/react/index.js.map +1 -1
- package/svelte/index.js +15 -2
- package/svelte/index.js.map +1 -1
- package/vue/component.js +6 -1
- package/vue/component.js.map +1 -1
package/CHANGELOG.md
CHANGED
@@ -3,6 +3,14 @@
|
|
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
|
+
## [4.0.66](https://github.com/nativescript-community/ui-collectionview/compare/v4.0.65...v4.0.66) (2023-01-20)
|
7
|
+
|
8
|
+
**Note:** Version bump only for package @nativescript-community/ui-collectionview
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
|
6
14
|
## [4.0.65](https://github.com/nativescript-community/ui-collectionview/compare/v4.0.64...v4.0.65) (2022-12-18)
|
7
15
|
|
8
16
|
**Note:** Version bump only for package @nativescript-community/ui-collectionview
|
package/README.md
CHANGED
@@ -65,7 +65,10 @@
|
|
65
65
|
* [Demos](#demos-1)
|
66
66
|
* [Contributing](#contributing)
|
67
67
|
* [Update repo ](#update-repo-)
|
68
|
+
* [Update readme ](#update-readme-)
|
69
|
+
* [Update doc ](#update-doc-)
|
68
70
|
* [Publish](#publish)
|
71
|
+
* [modifying submodules](#modifying-submodules)
|
69
72
|
* [Questions](#questions)
|
70
73
|
|
71
74
|
|
@@ -440,6 +443,11 @@ $ ns run ios|android
|
|
440
443
|
|
441
444
|
### Repo Setup
|
442
445
|
|
446
|
+
The repo uses submodules. If you did not clone with ` --recursive` then you need to call
|
447
|
+
```
|
448
|
+
git submodule update --init
|
449
|
+
```
|
450
|
+
|
443
451
|
The package manager used to install and link dependencies must be `pnpm` or `yarn`. `npm` wont work.
|
444
452
|
|
445
453
|
To develop and test:
|
@@ -455,6 +463,7 @@ To start the interactive menu, run `npm start` (or `yarn start` or `pnpm start`)
|
|
455
463
|
```bash
|
456
464
|
npm run build.all
|
457
465
|
```
|
466
|
+
WARNING: it seems `yarn build.all` wont always work (not finding binaries in `node_modules/.bin`) which is why the doc explicitly uses `npm run`
|
458
467
|
|
459
468
|
### Demos
|
460
469
|
|
@@ -464,6 +473,10 @@ npm run demo.[ng|react|svelte|vue].[ios|android]
|
|
464
473
|
npm run demo.svelte.ios # Example
|
465
474
|
```
|
466
475
|
|
476
|
+
Demo setup is a bit special in the sense that if you want to modify/add demos you dont work directly in `demo-[ng|react|svelte|vue]`
|
477
|
+
Instead you work in `demo-snippets/[ng|react|svelte|vue]`
|
478
|
+
You can start from the `install.ts` of each flavor to see how to register new demos
|
479
|
+
|
467
480
|
|
468
481
|
[](#contributing)
|
469
482
|
|
@@ -487,6 +500,16 @@ npm run sync
|
|
487
500
|
```
|
488
501
|
Then you can run `yarn|pnpm`, commit changed files if any
|
489
502
|
|
503
|
+
### Update readme
|
504
|
+
```bash
|
505
|
+
npm run readme
|
506
|
+
```
|
507
|
+
|
508
|
+
### Update doc
|
509
|
+
```bash
|
510
|
+
npm run doc
|
511
|
+
```
|
512
|
+
|
490
513
|
### Publish
|
491
514
|
|
492
515
|
The publishing is completely handled by `lerna` (you can add `-- --bump major` to force a major release)
|
@@ -495,6 +518,15 @@ Simply run
|
|
495
518
|
npm run publish
|
496
519
|
```
|
497
520
|
|
521
|
+
### modifying submodules
|
522
|
+
|
523
|
+
The repo uses https:// for submodules which means you won't be able to push directly into the submodules.
|
524
|
+
One easy solution is t modify `~/.gitconfig` and add
|
525
|
+
```
|
526
|
+
[url "ssh://git@github.com/"]
|
527
|
+
pushInsteadOf = https://github.com/
|
528
|
+
```
|
529
|
+
|
498
530
|
|
499
531
|
[](#questions)
|
500
532
|
|
@@ -144,6 +144,8 @@ export class CollectionViewComponent {
|
|
144
144
|
CLog(CLogTypes.info, `onItemLoading: ${index} - Reusing existing view`);
|
145
145
|
}
|
146
146
|
viewRef = args.view[NG_VIEW];
|
147
|
+
// Getting angular view from original element (in cases when ProxyViewContainer
|
148
|
+
// is used NativeScript internally wraps it in a StackLayout)
|
147
149
|
if (!viewRef && args.view instanceof LayoutBase && args.view.getChildrenCount() > 0) {
|
148
150
|
viewRef = args.view.getChildAt(0)[NG_VIEW];
|
149
151
|
}
|
@@ -168,9 +170,12 @@ export class CollectionViewComponent {
|
|
168
170
|
return;
|
169
171
|
}
|
170
172
|
let ngView = args.view[NG_VIEW];
|
173
|
+
// Getting angular view from original element (in cases when ProxyViewContainer
|
174
|
+
// is used NativeScript internally wraps it in a StackLayout)
|
171
175
|
if (!ngView && args.view instanceof LayoutBase && args.view.getChildrenCount() > 0) {
|
172
176
|
ngView = args.view.getChildAt(0)[NG_VIEW];
|
173
177
|
}
|
178
|
+
// console.log('recycling', args.view);
|
174
179
|
if (ngView) {
|
175
180
|
ngView.detach();
|
176
181
|
}
|
@@ -180,6 +185,8 @@ export class CollectionViewComponent {
|
|
180
185
|
return;
|
181
186
|
}
|
182
187
|
let ngView = args.view[NG_VIEW];
|
188
|
+
// Getting angular view from original element (in cases when ProxyViewContainer
|
189
|
+
// is used NativeScript internally wraps it in a StackLayout)
|
183
190
|
if (!ngView && args.view instanceof LayoutBase && args.view.getChildrenCount() > 0) {
|
184
191
|
ngView = args.view.getChildAt(0)[NG_VIEW];
|
185
192
|
}
|
@@ -230,6 +237,7 @@ export class CollectionViewComponent {
|
|
230
237
|
let viewRef = this.getView(templateRef);
|
231
238
|
if (!viewRef) {
|
232
239
|
const loader = this.detachedLoaderFactory();
|
240
|
+
// viewRef = this.loader.createEmbeddedView(templateRef, new ItemContext(), 0);
|
233
241
|
viewRef = loader.instance.vc.createEmbeddedView(templateRef, new ItemContext(), 0);
|
234
242
|
this.viewToLoader.set(viewRef, loader);
|
235
243
|
this.viewToTemplate.set(viewRef, templateRef);
|
@@ -262,6 +270,8 @@ export class CollectionViewComponent {
|
|
262
270
|
return this.viewPool.get(templateRef);
|
263
271
|
}
|
264
272
|
setItemTemplates() {
|
273
|
+
// The itemTemplateQuery may be changed after list items are added that contain <template> inside,
|
274
|
+
// so cache and use only the original template to avoid errors.
|
265
275
|
this.itemTemplate = this.itemTemplateQuery;
|
266
276
|
if (this._templateMap) {
|
267
277
|
if (Trace.isEnabled()) {
|
@@ -274,6 +284,7 @@ export class CollectionViewComponent {
|
|
274
284
|
this._collectionView.itemTemplates = templates;
|
275
285
|
}
|
276
286
|
else {
|
287
|
+
// If the map was not initialized this means that there are no named templates, so we register the default one.
|
277
288
|
this._collectionView.itemTemplate = this.getItemTemplateViewFactory(this.itemTemplate);
|
278
289
|
}
|
279
290
|
}
|
@@ -291,7 +302,7 @@ export class CollectionViewComponent {
|
|
291
302
|
}
|
292
303
|
}
|
293
304
|
CollectionViewComponent.ɵfac = function CollectionViewComponent_Factory(t) { return new (t || CollectionViewComponent)(i0.ɵɵdirectiveInject(ElementRef), i0.ɵɵdirectiveInject(IterableDiffers), i0.ɵɵdirectiveInject(NativeScriptRendererFactory), i0.ɵɵdirectiveInject(NgZone)); };
|
294
|
-
CollectionViewComponent.ɵcmp = i0.ɵɵdefineComponent({ type: CollectionViewComponent, selectors: [["CollectionView"]], contentQueries: function CollectionViewComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
|
305
|
+
CollectionViewComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CollectionViewComponent, selectors: [["CollectionView"]], contentQueries: function CollectionViewComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
|
295
306
|
i0.ɵɵcontentQuery(dirIndex, TemplateRef, 7, TemplateRef);
|
296
307
|
} if (rf & 2) {
|
297
308
|
let _t;
|
@@ -374,7 +385,7 @@ export class TemplateKeyDirective {
|
|
374
385
|
}
|
375
386
|
}
|
376
387
|
TemplateKeyDirective.ɵfac = function TemplateKeyDirective_Factory(t) { return new (t || TemplateKeyDirective)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(CollectionViewComponent, 1)); };
|
377
|
-
TemplateKeyDirective.ɵdir = i0.ɵɵdefineDirective({ type: TemplateKeyDirective, selectors: [["", "cvTemplateKey", ""]], inputs: { cvTemplateKey: "cvTemplateKey" } });
|
388
|
+
TemplateKeyDirective.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: TemplateKeyDirective, selectors: [["", "cvTemplateKey", ""]], inputs: { cvTemplateKey: "cvTemplateKey" } });
|
378
389
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TemplateKeyDirective, [{
|
379
390
|
type: Directive,
|
380
391
|
args: [{ selector: '[cvTemplateKey]' }]
|
@@ -383,4 +394,4 @@ TemplateKeyDirective.ɵdir = i0.ɵɵdefineDirective({ type: TemplateKeyDirective
|
|
383
394
|
}] }]; }, { cvTemplateKey: [{
|
384
395
|
type: Input
|
385
396
|
}] }); })();
|
386
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbnZpZXctY29tcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb2xsZWN0aW9udmlldy9hbmd1bGFyL2NvbGxlY3Rpb252aWV3LWNvbXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixTQUFTLEVBRVQsVUFBVSxFQUNWLGVBQWUsRUFDZixZQUFZLEVBQ1osSUFBSSxFQUNKLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLGVBQWUsRUFDZixNQUFNLEVBRU4sTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLG1CQUFtQixJQUFJLGtCQUFrQixFQUM1QyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQStCLGlCQUFpQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDNUksT0FBTyxFQUFFLGNBQWMsRUFBRSwyQkFBMkIsRUFBRSwwQkFBMEIsRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqSSxPQUFPLEVBQWlCLFVBQVUsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7O0FBRTdGLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUV4RCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUM7QUFFN0IsTUFBTSxPQUFPLFdBQVc7SUFDcEIsWUFBbUIsU0FBZSxFQUFTLElBQVUsRUFBUyxLQUFjLEVBQVMsSUFBYyxFQUFTLEdBQWE7UUFBdEcsY0FBUyxHQUFULFNBQVMsQ0FBTTtRQUFTLFNBQUksR0FBSixJQUFJLENBQU07UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFTO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBVTtR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QUFDOztBQXNKN0MsTUFBTSxVQUFVLGVBQWUsQ0FBQyxPQUFzQixFQUFFLGNBQTJCLDBCQUEwQjtJQUN6RyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRCxPQUFPLFFBQVEsQ0FBQztBQUNwQixDQUFDO0FBR0QsTUFBTSxPQUFPLG9CQUFvQjtJQUM3QixZQUFvQixXQUE2QixFQUFrQixjQUF1QztRQUF0RixnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFBa0IsbUJBQWMsR0FBZCxjQUFjLENBQXlCO0lBQUcsQ0FBQztJQUU5RyxJQUNJLGFBQWEsQ0FBQyxLQUFVO1FBQ3hCLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQy9FO0lBQ0wsQ0FBQzs7d0ZBWFEsb0JBQW9CO3lEQUFwQixvQkFBb0I7dUZBQXBCLG9CQUFvQjtjQURoQyxTQUFTO2VBQUMsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUU7O3NCQUVjLElBQUk7d0JBR3BELGFBQWE7a0JBRGhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIENvbXBvbmVudFJlZixcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRGlyZWN0aXZlLFxuICAgIERvQ2hlY2ssXG4gICAgRWxlbWVudFJlZixcbiAgICBFbWJlZGRlZFZpZXdSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBJdGVyYWJsZURpZmZlcixcbiAgICBJdGVyYWJsZURpZmZlcnMsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgybVpc0xpc3RMaWtlSXRlcmFibGUgYXMgaXNMaXN0TGlrZUl0ZXJhYmxlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ0xvZywgQ0xvZ1R5cGVzLCBDb2xsZWN0aW9uVmlldywgQ29sbGVjdGlvblZpZXdJdGVtRXZlbnREYXRhLCBMaXN0Vmlld1ZpZXdUeXBlcyB9IGZyb20gJ0BuYXRpdmVzY3JpcHQtY29tbXVuaXR5L3VpLWNvbGxlY3Rpb252aWV3JztcbmltcG9ydCB7IERldGFjaGVkTG9hZGVyLCBOYXRpdmVTY3JpcHRSZW5kZXJlckZhY3RvcnksIGV4dHJhY3RTaW5nbGVWaWV3UmVjdXJzaXZlLCByZWdpc3RlckVsZW1lbnQgfSBmcm9tICdAbmF0aXZlc2NyaXB0L2FuZ3VsYXInO1xuaW1wb3J0IHsgS2V5ZWRUZW1wbGF0ZSwgTGF5b3V0QmFzZSwgT2JzZXJ2YWJsZUFycmF5LCBUcmFjZSwgVmlldyB9IGZyb20gJ0BuYXRpdmVzY3JpcHQvY29yZSc7XG5cbnJlZ2lzdGVyRWxlbWVudCgnQ29sbGVjdGlvblZpZXcnLCAoKSA9PiBDb2xsZWN0aW9uVmlldyk7XG5cbmNvbnN0IE5HX1ZJRVcgPSAnX25nVmlld1JlZic7XG5cbmV4cG9ydCBjbGFzcyBJdGVtQ29udGV4dCB7XG4gICAgY29uc3RydWN0b3IocHVibGljICRpbXBsaWNpdD86IGFueSwgcHVibGljIGl0ZW0/OiBhbnksIHB1YmxpYyBpbmRleD86IG51bWJlciwgcHVibGljIGV2ZW4/OiBib29sZWFuLCBwdWJsaWMgb2RkPzogYm9vbGVhbikge31cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXR1cEl0ZW1WaWV3QXJncyB7XG4gICAgdmlldzogRW1iZWRkZWRWaWV3UmVmPGFueT47XG4gICAgZGF0YTogYW55O1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgY29udGV4dDogSXRlbUNvbnRleHQ7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnQ29sbGVjdGlvblZpZXcnLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxEZXRhY2hlZENvbnRhaW5lcj5cbiAgICAgICAgICAgIDxQbGFjZWhvbGRlciAjbG9hZGVyPjwvUGxhY2Vob2xkZXI+XG4gICAgICAgIDwvRGV0YWNoZWRDb250YWluZXI+XG4gICAgYCxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIERvQ2hlY2ssIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xsZWN0aW9uVmlldztcbiAgICB9XG4gICAgcHVibGljIGdldCBsaXN0VmlldygpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sbGVjdGlvblZpZXc7XG4gICAgfVxuXG4gICAgQFZpZXdDaGlsZCgnbG9hZGVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSkgcHVibGljIGxvYWRlcjogVmlld0NvbnRhaW5lclJlZjtcbiAgICBAT3V0cHV0KCkgcHVibGljIHNldHVwSXRlbVZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPFNldHVwSXRlbVZpZXdBcmdzPigpO1xuICAgIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgaXRlbVRlbXBsYXRlUXVlcnk6IFRlbXBsYXRlUmVmPEl0ZW1Db250ZXh0PjtcblxuICAgIEBJbnB1dCgpIGF1dG9SZXVzZVZpZXdzID0gZmFsc2U7XG5cbiAgICBkZXRhY2hlZExvYWRlckZhY3RvcnkoKSB7XG4gICAgICAgIGNvbnN0IHJlZiA9IHRoaXMubG9hZGVyLmNyZWF0ZUNvbXBvbmVudChEZXRhY2hlZExvYWRlciwge1xuICAgICAgICAgICAgaW5kZXg6IDBcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubG9hZGVyLmRldGFjaCgwKTtcbiAgICAgICAgdGhpcy5fbG9hZGVycy5wdXNoKHJlZik7XG4gICAgICAgIHJldHVybiByZWY7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGl0ZW1UZW1wbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1UZW1wbGF0ZTtcbiAgICB9XG4gICAgcHVibGljIHNldCBpdGVtVGVtcGxhdGUodmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLl9pdGVtVGVtcGxhdGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fY29sbGVjdGlvblZpZXcucmVmcmVzaCgpO1xuICAgIH1cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgaXRlbXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgICB9XG4gICAgcHVibGljIHNldCBpdGVtcyh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuX2l0ZW1zID0gdmFsdWU7XG4gICAgICAgIGxldCBuZWVkRGlmZmVyID0gdHJ1ZTtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JzZXJ2YWJsZUFycmF5KSB7XG4gICAgICAgICAgICBuZWVkRGlmZmVyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5lZWREaWZmZXIgJiYgIXRoaXMuX2RpZmZlciAmJiBpc0xpc3RMaWtlSXRlcmFibGUodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWZmZXIgPSB0aGlzLl9pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLl9pdGVtcykuY3JlYXRlKChfaW5kZXgsIGl0ZW0pID0+IGl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY29sbGVjdGlvblZpZXcuaXRlbXMgPSB0aGlzLl9pdGVtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jb2xsZWN0aW9uVmlldzogQ29sbGVjdGlvblZpZXc7XG4gICAgcHJpdmF0ZSBfaXRlbXM6IGFueTtcbiAgICBwcml2YXRlIF9kaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPEtleWVkVGVtcGxhdGU+O1xuICAgIHByaXZhdGUgX2l0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8SXRlbUNvbnRleHQ+O1xuICAgIHByaXZhdGUgX3RlbXBsYXRlTWFwOiBNYXA8c3RyaW5nLCBLZXllZFRlbXBsYXRlPjtcbiAgICBwcml2YXRlIF9sb2FkZXJzOiBDb21wb25lbnRSZWY8RGV0YWNoZWRMb2FkZXI+W107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChFbGVtZW50UmVmKSBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBASW5qZWN0KEl0ZXJhYmxlRGlmZmVycykgcHJpdmF0ZSBfaXRlcmFibGVEaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsXG4gICAgICAgIEBJbmplY3QoTmF0aXZlU2NyaXB0UmVuZGVyZXJGYWN0b3J5KSBwcml2YXRlIF9yZW5kZXJlcjogTmF0aXZlU2NyaXB0UmVuZGVyZXJGYWN0b3J5LFxuICAgICAgICBASW5qZWN0KE5nWm9uZSkgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmVcbiAgICApIHtcbiAgICAgICAgdGhpcy5fY29sbGVjdGlvblZpZXcgPSBfZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIHRoaXMuX2NvbGxlY3Rpb25WaWV3Lm9uKENvbGxlY3Rpb25WaWV3Lml0ZW1Mb2FkaW5nRXZlbnQsIHRoaXMub25JdGVtTG9hZGluZywgdGhpcyk7XG4gICAgICAgIHRoaXMuX2NvbGxlY3Rpb25WaWV3Lml0ZW1WaWV3TG9hZGVyID0gdGhpcy5pdGVtVmlld0xvYWRlcjtcbiAgICAgICAgdGhpcy5fbG9hZGVycyA9IFtdO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXRlbVZpZXdMb2FkZXIgPSAodmlld1R5cGUpID0+XG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoICh2aWV3VHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgTGlzdFZpZXdWaWV3VHlwZXMuSXRlbVZpZXc6XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pdGVtVGVtcGxhdGUgJiYgdGhpcy5sb2FkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVkVmlldyA9IHRoaXMuZ2V0T3JDcmVhdGUodGhpcy5faXRlbVRlbXBsYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlZFZpZXc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSk7XG5cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICBpZiAoVHJhY2UuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgIENMb2coQ0xvZ1R5cGVzLmluZm8sICdDb2xsZWN0aW9uVmlldy5uZ0FmdGVyQ29udGVudEluaXQoKScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0SXRlbVRlbXBsYXRlcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5fY29sbGVjdGlvblZpZXcub2ZmKENvbGxlY3Rpb25WaWV3Lml0ZW1Mb2FkaW5nRXZlbnQsIHRoaXMub25JdGVtTG9hZGluZywgdGhpcyk7XG4gICAgICAgIHRoaXMuX2NvbGxlY3Rpb25WaWV3ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fbG9hZGVycy5mb3JFYWNoKChsKSA9PiBsLmRlc3Ryb3koKSk7XG4gICAgICAgIHRoaXMuX2xvYWRlcnMgPSBudWxsO1xuICAgICAgICB0aGlzLnZpZXdUb0xvYWRlciA9IG51bGw7XG4gICAgICAgIHRoaXMudmlld1RvVGVtcGxhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLnZpZXdQb29sID0gbnVsbDtcblxuICAgICAgICB0aGlzLl9pdGVtcyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2RpZmZlciA9IG51bGw7XG4gICAgICAgIHRoaXMuX2l0ZW1UZW1wbGF0ZSA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLl90ZW1wbGF0ZU1hcCkge1xuICAgICAgICAgICAgdGhpcy5fdGVtcGxhdGVNYXAuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90ZW1wbGF0ZU1hcCA9IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIG5nRG9DaGVjaygpIHtcbiAgICAgICAgaWYgKFRyYWNlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICBDTG9nKENMb2dUeXBlcy5pbmZvLCAnbmdEb0NoZWNrKCkgLSBleGVjdXRlIGRpZmZlcj8gJyArIHRoaXMuX2RpZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2RpZmZlcikge1xuICAgICAgICAgICAgaWYgKFRyYWNlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgQ0xvZyhDTG9nVHlwZXMuaW5mbywgJ25nRG9DaGVjaygpIC0gZXhlY3V0ZSBkaWZmZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9pdGVtcyk7XG4gICAgICAgICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICAgICAgICAgIGlmIChUcmFjZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICBDTG9nKENMb2dUeXBlcy5pbmZvLCAnbmdEb0NoZWNrKCkgLSByZWZyZXNoJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyVGVtcGxhdGUoa2V5OiBzdHJpbmcsIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxJdGVtQ29udGV4dD4pIHtcbiAgICAgICAgaWYgKFRyYWNlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICBDTG9nKENMb2dUeXBlcy5pbmZvLCAncmVnaXN0ZXJUZW1wbGF0ZSBmb3Iga2V5OiAnICsga2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX3RlbXBsYXRlTWFwKSB7XG4gICAgICAgICAgICB0aGlzLl90ZW1wbGF0ZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBLZXllZFRlbXBsYXRlPigpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2V5ZWRUZW1wbGF0ZSA9IHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGNyZWF0ZVZpZXc6IHRoaXMuZ2V0SXRlbVRlbXBsYXRlVmlld0ZhY3RvcnkodGVtcGxhdGUpXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fdGVtcGxhdGVNYXAuc2V0KGtleSwga2V5ZWRUZW1wbGF0ZSk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignaXRlbUxvYWRpbmcnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkl0ZW1Mb2FkaW5nKGFyZ3M6IENvbGxlY3Rpb25WaWV3SXRlbUV2ZW50RGF0YSkge1xuICAgICAgICBpZiAoIWFyZ3MudmlldyAmJiAhdGhpcy5pdGVtVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXRlbXMpIHJldHVybjtcbiAgICAgICAgY29uc3QgaW5kZXggPSBhcmdzLmluZGV4O1xuICAgICAgICBjb25zdCBpdGVtcyA9IChhcmdzLm9iamVjdCBhcyBhbnkpLml0ZW1zO1xuICAgICAgICBjb25zdCBjdXJyZW50SXRlbSA9IHR5cGVvZiBpdGVtcy5nZXRJdGVtID09PSAnZnVuY3Rpb24nID8gaXRlbXMuZ2V0SXRlbShpbmRleCkgOiBpdGVtc1tpbmRleF07XG4gICAgICAgIGxldCB2aWV3UmVmOiBFbWJlZGRlZFZpZXdSZWY8SXRlbUNvbnRleHQ+O1xuXG4gICAgICAgIGlmIChUcmFjZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgQ0xvZyhDTG9nVHlwZXMuaW5mbywgYG9uSXRlbUxvYWRpbmc6ICR7aW5kZXh9IC0gUmV1c2luZyBleGlzdGluZyB2aWV3YCk7XG4gICAgICAgIH1cblxuICAgICAgICB2aWV3UmVmID0gYXJncy52aWV3W05HX1ZJRVddO1xuICAgICAgICAvLyBHZXR0aW5nIGFuZ3VsYXIgdmlldyBmcm9tIG9yaWdpbmFsIGVsZW1lbnQgKGluIGNhc2VzIHdoZW4gUHJveHlWaWV3Q29udGFpbmVyXG4gICAgICAgIC8vIGlzIHVzZWQgTmF0aXZlU2NyaXB0IGludGVybmFsbHkgd3JhcHMgaXQgaW4gYSBTdGFja0xheW91dClcbiAgICAgICAgaWYgKCF2aWV3UmVmICYmIGFyZ3MudmlldyBpbnN0YW5jZW9mIExheW91dEJhc2UgJiYgYXJncy52aWV3LmdldENoaWxkcmVuQ291bnQoKSA+IDApIHtcbiAgICAgICAgICAgIHZpZXdSZWYgPSBhcmdzLnZpZXcuZ2V0Q2hpbGRBdCgwKVtOR19WSUVXXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmlld1JlZiAmJiBUcmFjZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgaWYgKFRyYWNlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgQ0xvZyhDTG9nVHlwZXMuaW5mbywgYFZpZXdSZWZlcmVuY2Ugbm90IGZvdW5kIGZvciBpdGVtICR7aW5kZXh9LiBWaWV3IHJlY3ljbGluZyBpcyBub3Qgd29ya2luZ2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2aWV3UmVmKSB7XG4gICAgICAgICAgICBpZiAoVHJhY2UuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICBDTG9nKENMb2dUeXBlcy5pbmZvLCBgb25JdGVtTG9hZGluZzogJHtpbmRleH0gLSBDcmVhdGluZyB2aWV3IGZyb20gdGVtcGxhdGVgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmlld1JlZiA9IHRoaXMubG9hZGVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLml0ZW1UZW1wbGF0ZSwgbmV3IEl0ZW1Db250ZXh0KCksIDApO1xuICAgICAgICAgICAgYXJncy52aWV3ID0gZ2V0SXRlbVZpZXdSb290KHZpZXdSZWYpO1xuICAgICAgICAgICAgYXJncy52aWV3W05HX1ZJRVddID0gdmlld1JlZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0dXBWaWV3UmVmKHZpZXdSZWYsIGN1cnJlbnRJdGVtLCBpbmRleCk7XG5cbiAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzT25DaGlsZCh2aWV3UmVmLCBpbmRleCk7XG4gICAgfVxuICAgIEBIb3N0TGlzdGVuZXIoJ2l0ZW1SZWN5Y2xpbmcnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkl0ZW1SZWN5Y2xpbmdJbnRlcm5hbChhcmdzOiBhbnkpIHtcbiAgICAgICAgaWYgKCFhcmdzLnZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmdWaWV3OiBFbWJlZGRlZFZpZXdSZWY8YW55PiA9IGFyZ3Mudmlld1tOR19WSUVXXTtcblxuICAgICAgICAvLyBHZXR0aW5nIGFuZ3VsYXIgdmlldyBmcm9tIG9yaWdpbmFsIGVsZW1lbnQgKGluIGNhc2VzIHdoZW4gUHJveHlWaWV3Q29udGFpbmVyXG4gICAgICAgIC8vIGlzIHVzZWQgTmF0aXZlU2NyaXB0IGludGVybmFsbHkgd3JhcHMgaXQgaW4gYSBTdGFja0xheW91dClcbiAgICAgICAgaWYgKCFuZ1ZpZXcgJiYgYXJncy52aWV3IGluc3RhbmNlb2YgTGF5b3V0QmFzZSAmJiBhcmdzLnZpZXcuZ2V0Q2hpbGRyZW5Db3VudCgpID4gMCkge1xuICAgICAgICAgICAgbmdWaWV3ID0gYXJncy52aWV3LmdldENoaWxkQXQoMClbTkdfVklFV107XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3JlY3ljbGluZycsIGFyZ3Mudmlldyk7XG5cbiAgICAgICAgaWYgKG5nVmlldykge1xuICAgICAgICAgICAgbmdWaWV3LmRldGFjaCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignaXRlbURpc3Bvc2luZycsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uSXRlbURpc3Bvc2luZ0ludGVybmFsKGFyZ3M6IGFueSkge1xuICAgICAgICBpZiAoIWFyZ3Mudmlldykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBuZ1ZpZXc6IEVtYmVkZGVkVmlld1JlZjxhbnk+ID0gYXJncy52aWV3W05HX1ZJRVddO1xuXG4gICAgICAgIC8vIEdldHRpbmcgYW5ndWxhciB2aWV3IGZyb20gb3JpZ2luYWwgZWxlbWVudCAoaW4gY2FzZXMgd2hlbiBQcm94eVZpZXdDb250YWluZXJcbiAgICAgICAgLy8gaXMgdXNlZCBOYXRpdmVTY3JpcHQgaW50ZXJuYWxseSB3cmFwcyBpdCBpbiBhIFN0YWNrTGF5b3V0KVxuICAgICAgICBpZiAoIW5nVmlldyAmJiBhcmdzLnZpZXcgaW5zdGFuY2VvZiBMYXlvdXRCYXNlICYmIGFyZ3Mudmlldy5nZXRDaGlsZHJlbkNvdW50KCkgPiAwKSB7XG4gICAgICAgICAgICBuZ1ZpZXcgPSBhcmdzLnZpZXcuZ2V0Q2hpbGRBdCgwKVtOR19WSUVXXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZ1ZpZXcpIHtcbiAgICAgICAgICAgIG5nVmlldy5kZXRhY2goKTtcbiAgICAgICAgICAgIHRoaXMuc3RvcmVWaWV3UmVmKG5nVmlldyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0dXBWaWV3UmVmKHZpZXc6IEVtYmVkZGVkVmlld1JlZjxJdGVtQ29udGV4dD4sIGRhdGE6IGFueSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdmlldy5jb250ZXh0O1xuICAgICAgICBjb250ZXh0LiRpbXBsaWNpdCA9IGRhdGE7XG4gICAgICAgIGNvbnRleHQuaXRlbSA9IGRhdGE7XG4gICAgICAgIGNvbnRleHQuaW5kZXggPSBpbmRleDtcbiAgICAgICAgY29udGV4dC5ldmVuID0gaW5kZXggJSAyID09PSAwO1xuICAgICAgICBjb250ZXh0Lm9kZCA9ICFjb250ZXh0LmV2ZW47XG5cbiAgICAgICAgdGhpcy5zZXR1cEl0ZW1WaWV3Lm5leHQoe1xuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIHZpZXdcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldEl0ZW1UZW1wbGF0ZVZpZXdGYWN0b3J5KHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxJdGVtQ29udGV4dD4pOiAoKSA9PiBWaWV3IHtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdSZWYgPSB0aGlzLmxvYWRlci5jcmVhdGVFbWJlZGRlZFZpZXcodGVtcGxhdGUsIG5ldyBJdGVtQ29udGV4dCgpLCAwKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdFZpZXcgPSBnZXRJdGVtVmlld1Jvb3Qodmlld1JlZik7XG4gICAgICAgICAgICByZXN1bHRWaWV3W05HX1ZJRVddID0gdmlld1JlZjtcblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFZpZXc7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHZpZXdQb29sID0gbmV3IE1hcDxcbiAgICAgICAgVGVtcGxhdGVSZWY8SXRlbUNvbnRleHQ+LFxuICAgICAgICB7XG4gICAgICAgICAgICBzY3JhcFNpemU6IG51bWJlcjtcbiAgICAgICAgICAgIHNjcmFwSGVhZDogU2V0PEVtYmVkZGVkVmlld1JlZjxJdGVtQ29udGV4dD4+O1xuICAgICAgICB9XG4gICAgPigpO1xuICAgIHByaXZhdGUgc3RvcmVWaWV3UmVmKHZpZXdSZWY6IEVtYmVkZGVkVmlld1JlZjxhbnk+KSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlUmVmID0gdGhpcy52aWV3VG9UZW1wbGF0ZS5nZXQodmlld1JlZik7XG4gICAgICAgIGlmICh0ZW1wbGF0ZVJlZikge1xuICAgICAgICAgICAgY29uc3Qgc2NyYXAgPSB0aGlzLnZpZXdQb29sLmdldCh0ZW1wbGF0ZVJlZik7XG4gICAgICAgICAgICBpZiAoc2NyYXApIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NyYXAuc2NyYXBIZWFkLnNpemUgPj0gc2NyYXAuc2NyYXBTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdSZWYuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdUb0xvYWRlci5nZXQodmlld1JlZik/LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzY3JhcC5zY3JhcEhlYWQuYWRkKHZpZXdSZWYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2aWV3VG9UZW1wbGF0ZSA9IG5ldyBXZWFrTWFwPEVtYmVkZGVkVmlld1JlZjxhbnk+LCBUZW1wbGF0ZVJlZjxhbnk+PigpO1xuICAgIHZpZXdUb0xvYWRlciA9IG5ldyBXZWFrTWFwPEVtYmVkZGVkVmlld1JlZjxhbnk+LCBDb21wb25lbnRSZWY8RGV0YWNoZWRMb2FkZXI+PigpO1xuXG4gICAgcHJpdmF0ZSBnZXRPckNyZWF0ZSh0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8SXRlbUNvbnRleHQ+KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIGxldCB2aWV3UmVmID0gdGhpcy5nZXRWaWV3KHRlbXBsYXRlUmVmKTtcbiAgICAgICAgICAgIGlmICghdmlld1JlZikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvYWRlciA9IHRoaXMuZGV0YWNoZWRMb2FkZXJGYWN0b3J5KCk7XG4gICAgICAgICAgICAgICAgLy8gdmlld1JlZiA9IHRoaXMubG9hZGVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0ZW1wbGF0ZVJlZiwgbmV3IEl0ZW1Db250ZXh0KCksIDApO1xuICAgICAgICAgICAgICAgIHZpZXdSZWYgPSBsb2FkZXIuaW5zdGFuY2UudmMuY3JlYXRlRW1iZWRkZWRWaWV3KHRlbXBsYXRlUmVmLCBuZXcgSXRlbUNvbnRleHQoKSwgMCk7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3VG9Mb2FkZXIuc2V0KHZpZXdSZWYsIGxvYWRlcik7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3VG9UZW1wbGF0ZS5zZXQodmlld1JlZiwgdGVtcGxhdGVSZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmlld1JlZi5kZXRhY2goKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdFZpZXcgPSBnZXRJdGVtVmlld1Jvb3Qodmlld1JlZik7XG4gICAgICAgICAgICByZXN1bHRWaWV3W05HX1ZJRVddID0gdmlld1JlZjtcbiAgICAgICAgICAgIHJlc3VsdFZpZXcucmV1c2FibGUgPSB0aGlzLmF1dG9SZXVzZVZpZXdzO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFZpZXc7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcml2YXRlIGdldFZpZXcodGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPEl0ZW1Db250ZXh0Pikge1xuICAgICAgICBjb25zdCBwb29sID0gdGhpcy5nZXRWaWV3UG9vbCh0ZW1wbGF0ZVJlZik7XG4gICAgICAgIHdoaWxlIChwb29sLnNjcmFwSGVhZC5zaXplID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgdmlld1JlZjogRW1iZWRkZWRWaWV3UmVmPEl0ZW1Db250ZXh0PiA9IHBvb2wuc2NyYXBIZWFkLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICAgICAgICAgIHBvb2wuc2NyYXBIZWFkLmRlbGV0ZSh2aWV3UmVmKTtcbiAgICAgICAgICAgIGlmICghdmlld1JlZi5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmlld1JlZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZpZXdQb29sKHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxJdGVtQ29udGV4dD4pIHtcbiAgICAgICAgaWYgKCF0aGlzLnZpZXdQb29sLmhhcyh0ZW1wbGF0ZVJlZikpIHtcbiAgICAgICAgICAgIHRoaXMudmlld1Bvb2wuc2V0KHRlbXBsYXRlUmVmLCB7XG4gICAgICAgICAgICAgICAgc2NyYXBTaXplOiB0aGlzLmF1dG9SZXVzZVZpZXdzID8gSW5maW5pdHkgOiAwLFxuICAgICAgICAgICAgICAgIHNjcmFwSGVhZDogbmV3IFNldDxFbWJlZGRlZFZpZXdSZWY8SXRlbUNvbnRleHQ+PigpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy52aWV3UG9vbC5nZXQodGVtcGxhdGVSZWYpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SXRlbVRlbXBsYXRlcygpIHtcbiAgICAgICAgLy8gVGhlIGl0ZW1UZW1wbGF0ZVF1ZXJ5IG1heSBiZSBjaGFuZ2VkIGFmdGVyIGxpc3QgaXRlbXMgYXJlIGFkZGVkIHRoYXQgY29udGFpbiA8dGVtcGxhdGU+IGluc2lkZSxcbiAgICAgICAgLy8gc28gY2FjaGUgYW5kIHVzZSBvbmx5IHRoZSBvcmlnaW5hbCB0ZW1wbGF0ZSB0byBhdm9pZCBlcnJvcnMuXG4gICAgICAgIHRoaXMuaXRlbVRlbXBsYXRlID0gdGhpcy5pdGVtVGVtcGxhdGVRdWVyeTtcblxuICAgICAgICBpZiAodGhpcy5fdGVtcGxhdGVNYXApIHtcbiAgICAgICAgICAgIGlmIChUcmFjZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgIENMb2coQ0xvZ1R5cGVzLmluZm8sICdTZXR0aW5nIHRlbXBsYXRlcycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZXM6IEtleWVkVGVtcGxhdGVbXSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fdGVtcGxhdGVNYXAuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2NvbGxlY3Rpb25WaWV3Lml0ZW1UZW1wbGF0ZXMgPSB0ZW1wbGF0ZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgbWFwIHdhcyBub3QgaW5pdGlhbGl6ZWQgdGhpcyBtZWFucyB0aGF0IHRoZXJlIGFyZSBubyBuYW1lZCB0ZW1wbGF0ZXMsIHNvIHdlIHJlZ2lzdGVyIHRoZSBkZWZhdWx0IG9uZS5cbiAgICAgICAgICAgIHRoaXMuX2NvbGxlY3Rpb25WaWV3Lml0ZW1UZW1wbGF0ZSA9IHRoaXMuZ2V0SXRlbVRlbXBsYXRlVmlld0ZhY3RvcnkodGhpcy5pdGVtVGVtcGxhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXRlY3RDaGFuZ2VzT25DaGlsZCh2aWV3UmVmOiBFbWJlZGRlZFZpZXdSZWY8SXRlbUNvbnRleHQ+LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmIChUcmFjZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgQ0xvZyhDTG9nVHlwZXMuaW5mbywgJ01hbnVhbGx5IGRldGVjdCBjaGFuZ2VzIGluIGNoaWxkOiAnICsgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHZpZXdSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHZpZXdSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVmcmVzaCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbGxlY3Rpb25WaWV3KSB7XG4gICAgICAgICAgICB0aGlzLl9jb2xsZWN0aW9uVmlldy5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50VmlldyB7XG4gICAgcm9vdE5vZGVzOiBhbnlbXTtcbiAgICBkZXN0cm95KCk6IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIFJvb3RMb2NhdG9yID0gKG5vZGVzOiBhbnlbXSwgbmVzdExldmVsOiBudW1iZXIpID0+IFZpZXc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtVmlld1Jvb3Qodmlld1JlZjogQ29tcG9uZW50Vmlldywgcm9vdExvY2F0b3I6IFJvb3RMb2NhdG9yID0gZXh0cmFjdFNpbmdsZVZpZXdSZWN1cnNpdmUpOiBWaWV3IHtcbiAgICBjb25zdCByb290VmlldyA9IHJvb3RMb2NhdG9yKHZpZXdSZWYucm9vdE5vZGVzLCAwKTtcbiAgICByZXR1cm4gcm9vdFZpZXc7XG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tjdlRlbXBsYXRlS2V5XScgfSlcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUtleURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PiwgQEhvc3QoKSBwcml2YXRlIGNvbGxlY3Rpb25WaWV3OiBDb2xsZWN0aW9uVmlld0NvbXBvbmVudCkge31cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGN2VGVtcGxhdGVLZXkodmFsdWU6IGFueSkge1xuICAgICAgICBpZiAoVHJhY2UuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgIENMb2coQ0xvZ1R5cGVzLmluZm8sICdjdlRlbXBsYXRlS2V5OiAnICsgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbGxlY3Rpb25WaWV3ICYmIHRoaXMudGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvblZpZXcucmVnaXN0ZXJUZW1wbGF0ZSh2YWx1ZS50b0xvd2VyQ2FzZSgpLCB0aGlzLnRlbXBsYXRlUmVmKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
397
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbnZpZXctY29tcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb2xsZWN0aW9udmlldy9hbmd1bGFyL2NvbGxlY3Rpb252aWV3LWNvbXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixTQUFTLEVBRVQsVUFBVSxFQUNWLGVBQWUsRUFDZixZQUFZLEVBQ1osSUFBSSxFQUNKLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLGVBQWUsRUFDZixNQUFNLEVBRU4sTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLG1CQUFtQixJQUFJLGtCQUFrQixFQUM1QyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQStCLGlCQUFpQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDNUksT0FBTyxFQUFFLGNBQWMsRUFBRSwyQkFBMkIsRUFBRSwwQkFBMEIsRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqSSxPQUFPLEVBQWlCLFVBQVUsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7O0FBRTdGLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUV4RCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUM7QUFFN0IsTUFBTSxPQUFPLFdBQVc7SUFDcEIsWUFBbUIsU0FBZSxFQUFTLElBQVUsRUFBUyxLQUFjLEVBQVMsSUFBYyxFQUFTLEdBQWE7UUFBdEcsY0FBUyxHQUFULFNBQVMsQ0FBTTtRQUFTLFNBQUksR0FBSixJQUFJLENBQU07UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFTO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBVTtR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QVk7bUJBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxDQUFDO1lBMkNoQyx1QkFBdUI7a0JBRDdCLFlBQVk7bUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO1lBb0JsQyx1QkFBdUI7a0JBRDdCLFlBQVk7bUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDOztBQXNKN0MsTUFBTSxVQUFVLGVBQWUsQ0FBQyxPQUFzQixFQUFFLGNBQTJCLDBCQUEwQjtJQUN6RyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRCxPQUFPLFFBQVEsQ0FBQztBQUNwQixDQUFDO0FBR0QsTUFBTSxPQUFPLG9CQUFvQjtJQUM3QixZQUFvQixXQUE2QixFQUFrQixjQUF1QztRQUF0RixnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFBa0IsbUJBQWMsR0FBZCxjQUFjLENBQXlCO0lBQUcsQ0FBQztJQUU5RyxJQUNJLGFBQWEsQ0FBQyxLQUFVO1FBQ3hCLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQy9FO0lBQ0wsQ0FBQzs7d0ZBWFEsb0JBQW9CO3VFQUFwQixvQkFBb0I7dUZBQXBCLG9CQUFvQjtjQURoQyxTQUFTO2VBQUMsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUU7O3NCQUVjLElBQUk7d0JBR3BELGFBQWE7a0JBRGhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIENvbXBvbmVudFJlZixcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRGlyZWN0aXZlLFxuICAgIERvQ2hlY2ssXG4gICAgRWxlbWVudFJlZixcbiAgICBFbWJlZGRlZFZpZXdSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBJdGVyYWJsZURpZmZlcixcbiAgICBJdGVyYWJsZURpZmZlcnMsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgybVpc0xpc3RMaWtlSXRlcmFibGUgYXMgaXNMaXN0TGlrZUl0ZXJhYmxlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ0xvZywgQ0xvZ1R5cGVzLCBDb2xsZWN0aW9uVmlldywgQ29sbGVjdGlvblZpZXdJdGVtRXZlbnREYXRhLCBMaXN0Vmlld1ZpZXdUeXBlcyB9IGZyb20gJ0BuYXRpdmVzY3JpcHQtY29tbXVuaXR5L3VpLWNvbGxlY3Rpb252aWV3JztcbmltcG9ydCB7IERldGFjaGVkTG9hZGVyLCBOYXRpdmVTY3JpcHRSZW5kZXJlckZhY3RvcnksIGV4dHJhY3RTaW5nbGVWaWV3UmVjdXJzaXZlLCByZWdpc3RlckVsZW1lbnQgfSBmcm9tICdAbmF0aXZlc2NyaXB0L2FuZ3VsYXInO1xuaW1wb3J0IHsgS2V5ZWRUZW1wbGF0ZSwgTGF5b3V0QmFzZSwgT2JzZXJ2YWJsZUFycmF5LCBUcmFjZSwgVmlldyB9IGZyb20gJ0BuYXRpdmVzY3JpcHQvY29yZSc7XG5cbnJlZ2lzdGVyRWxlbWVudCgnQ29sbGVjdGlvblZpZXcnLCAoKSA9PiBDb2xsZWN0aW9uVmlldyk7XG5cbmNvbnN0IE5HX1ZJRVcgPSAnX25nVmlld1JlZic7XG5cbmV4cG9ydCBjbGFzcyBJdGVtQ29udGV4dCB7XG4gICAgY29uc3RydWN0b3IocHVibGljICRpbXBsaWNpdD86IGFueSwgcHVibGljIGl0ZW0/OiBhbnksIHB1YmxpYyBpbmRleD86IG51bWJlciwgcHVibGljIGV2ZW4/OiBib29sZWFuLCBwdWJsaWMgb2RkPzogYm9vbGVhbikge31cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXR1cEl0ZW1WaWV3QXJncyB7XG4gICAgdmlldzogRW1iZWRkZWRWaWV3UmVmPGFueT47XG4gICAgZGF0YTogYW55O1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgY29udGV4dDogSXRlbUNvbnRleHQ7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnQ29sbGVjdGlvblZpZXcnLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxEZXRhY2hlZENvbnRhaW5lcj5cbiAgICAgICAgICAgIDxQbGFjZWhvbGRlciAjbG9hZGVyPjwvUGxhY2Vob2xkZXI+XG4gICAgICAgIDwvRGV0YWNoZWRDb250YWluZXI+XG4gICAgYCxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIERvQ2hlY2ssIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xsZWN0aW9uVmlldztcbiAgICB9XG4gICAgcHVibGljIGdldCBsaXN0VmlldygpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sbGVjdGlvblZpZXc7XG4gICAgfVxuXG4gICAgQFZpZXdDaGlsZCgnbG9hZGVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSkgcHVibGljIGxvYWRlcjogVmlld0NvbnRhaW5lclJlZjtcbiAgICBAT3V0cHV0KCkgcHVibGljIHNldHVwSXRlbVZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPFNldHVwSXRlbVZpZXdBcmdzPigpO1xuICAgIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgaXRlbVRlbXBsYXRlUXVlcnk6IFRlbXBsYXRlUmVmPEl0ZW1Db250ZXh0PjtcblxuICAgIEBJbnB1dCgpIGF1dG9SZXVzZVZpZXdzID0gZmFsc2U7XG5cbiAgICBkZXRhY2hlZExvYWRlckZhY3RvcnkoKSB7XG4gICAgICAgIGNvbnN0IHJlZiA9IHRoaXMubG9hZGVyLmNyZWF0ZUNvbXBvbmVudChEZXRhY2hlZExvYWRlciwge1xuICAgICAgICAgICAgaW5kZXg6IDBcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubG9hZGVyLmRldGFjaCgwKTtcbiAgICAgICAgdGhpcy5fbG9hZGVycy5wdXNoKHJlZik7XG4gICAgICAgIHJldHVybiByZWY7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGl0ZW1UZW1wbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1UZW1wbGF0ZTtcbiAgICB9XG4gICAgcHVibGljIHNldCBpdGVtVGVtcGxhdGUodmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLl9pdGVtVGVtcGxhdGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fY29sbGVjdGlvblZpZXcucmVmcmVzaCgpO1xuICAgIH1cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgaXRlbXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgICB9XG4gICAgcHVibGljIHNldCBpdGVtcyh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuX2l0ZW1zID0gdmFsdWU7XG4gICAgICAgIGxldCBuZWVkRGlmZmVyID0gdHJ1ZTtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JzZXJ2YWJsZUFycmF5KSB7XG4gICAgICAgICAgICBuZWVkRGlmZmVyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5lZWREaWZmZXIgJiYgIXRoaXMuX2RpZmZlciAmJiBpc0xpc3RMaWtlSXRlcmFibGUodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWZmZXIgPSB0aGlzLl9pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLl9pdGVtcykuY3JlYXRlKChfaW5kZXgsIGl0ZW0pID0+IGl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY29sbGVjdGlvblZpZXcuaXRlbXMgPSB0aGlzLl9pdGVtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jb2xsZWN0aW9uVmlldzogQ29sbGVjdGlvblZpZXc7XG4gICAgcHJpdmF0ZSBfaXRlbXM6IGFueTtcbiAgICBwcml2YXRlIF9kaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPEtleWVkVGVtcGxhdGU+O1xuICAgIHByaXZhdGUgX2l0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8SXRlbUNvbnRleHQ+O1xuICAgIHByaXZhdGUgX3RlbXBsYXRlTWFwOiBNYXA8c3RyaW5nLCBLZXllZFRlbXBsYXRlPjtcbiAgICBwcml2YXRlIF9sb2FkZXJzOiBDb21wb25lbnRSZWY8RGV0YWNoZWRMb2FkZXI+W107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChFbGVtZW50UmVmKSBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBASW5qZWN0KEl0ZXJhYmxlRGlmZmVycykgcHJpdmF0ZSBfaXRlcmFibGVEaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsXG4gICAgICAgIEBJbmplY3QoTmF0aXZlU2NyaXB0UmVuZGVyZXJGYWN0b3J5KSBwcml2YXRlIF9yZW5kZXJlcjogTmF0aXZlU2NyaXB0UmVuZGVyZXJGYWN0b3J5LFxuICAgICAgICBASW5qZWN0KE5nWm9uZSkgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmVcbiAgICApIHtcbiAgICAgICAgdGhpcy5fY29sbGVjdGlvblZpZXcgPSBfZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIHRoaXMuX2NvbGxlY3Rpb25WaWV3Lm9uKENvbGxlY3Rpb25WaWV3Lml0ZW1Mb2FkaW5nRXZlbnQsIHRoaXMub25JdGVtTG9hZGluZywgdGhpcyk7XG4gICAgICAgIHRoaXMuX2NvbGxlY3Rpb25WaWV3Lml0ZW1WaWV3TG9hZGVyID0gdGhpcy5pdGVtVmlld0xvYWRlcjtcbiAgICAgICAgdGhpcy5fbG9hZGVycyA9IFtdO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXRlbVZpZXdMb2FkZXIgPSAodmlld1R5cGUpID0+XG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoICh2aWV3VHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgTGlzdFZpZXdWaWV3VHlwZXMuSXRlbVZpZXc6XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pdGVtVGVtcGxhdGUgJiYgdGhpcy5sb2FkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVkVmlldyA9IHRoaXMuZ2V0T3JDcmVhdGUodGhpcy5faXRlbVRlbXBsYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlZFZpZXc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSk7XG5cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICBpZiAoVHJhY2UuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgIENMb2coQ0xvZ1R5cGVzLmluZm8sICdDb2xsZWN0aW9uVmlldy5uZ0FmdGVyQ29udGVudEluaXQoKScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0SXRlbVRlbXBsYXRlcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5fY29sbGVjdGlvblZpZXcub2ZmKENvbGxlY3Rpb25WaWV3Lml0ZW1Mb2FkaW5nRXZlbnQsIHRoaXMub25JdGVtTG9hZGluZywgdGhpcyk7XG4gICAgICAgIHRoaXMuX2NvbGxlY3Rpb25WaWV3ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fbG9hZGVycy5mb3JFYWNoKChsKSA9PiBsLmRlc3Ryb3koKSk7XG4gICAgICAgIHRoaXMuX2xvYWRlcnMgPSBudWxsO1xuICAgICAgICB0aGlzLnZpZXdUb0xvYWRlciA9IG51bGw7XG4gICAgICAgIHRoaXMudmlld1RvVGVtcGxhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLnZpZXdQb29sID0gbnVsbDtcblxuICAgICAgICB0aGlzLl9pdGVtcyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2RpZmZlciA9IG51bGw7XG4gICAgICAgIHRoaXMuX2l0ZW1UZW1wbGF0ZSA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLl90ZW1wbGF0ZU1hcCkge1xuICAgICAgICAgICAgdGhpcy5fdGVtcGxhdGVNYXAuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90ZW1wbGF0ZU1hcCA9IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIG5nRG9DaGVjaygpIHtcbiAgICAgICAgaWYgKFRyYWNlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICBDTG9nKENMb2dUeXBlcy5pbmZvLCAnbmdEb0NoZWNrKCkgLSBleGVjdXRlIGRpZmZlcj8gJyArIHRoaXMuX2RpZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2RpZmZlcikge1xuICAgICAgICAgICAgaWYgKFRyYWNlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgQ0xvZyhDTG9nVHlwZXMuaW5mbywgJ25nRG9DaGVjaygpIC0gZXhlY3V0ZSBkaWZmZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9pdGVtcyk7XG4gICAgICAgICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICAgICAgICAgIGlmIChUcmFjZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICBDTG9nKENMb2dUeXBlcy5pbmZvLCAnbmdEb0NoZWNrKCkgLSByZWZyZXNoJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyVGVtcGxhdGUoa2V5OiBzdHJpbmcsIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxJdGVtQ29udGV4dD4pIHtcbiAgICAgICAgaWYgKFRyYWNlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICBDTG9nKENMb2dUeXBlcy5pbmZvLCAncmVnaXN0ZXJUZW1wbGF0ZSBmb3Iga2V5OiAnICsga2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX3RlbXBsYXRlTWFwKSB7XG4gICAgICAgICAgICB0aGlzLl90ZW1wbGF0ZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBLZXllZFRlbXBsYXRlPigpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2V5ZWRUZW1wbGF0ZSA9IHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGNyZWF0ZVZpZXc6IHRoaXMuZ2V0SXRlbVRlbXBsYXRlVmlld0ZhY3RvcnkodGVtcGxhdGUpXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fdGVtcGxhdGVNYXAuc2V0KGtleSwga2V5ZWRUZW1wbGF0ZSk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignaXRlbUxvYWRpbmcnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkl0ZW1Mb2FkaW5nKGFyZ3M6IENvbGxlY3Rpb25WaWV3SXRlbUV2ZW50RGF0YSkge1xuICAgICAgICBpZiAoIWFyZ3MudmlldyAmJiAhdGhpcy5pdGVtVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXRlbXMpIHJldHVybjtcbiAgICAgICAgY29uc3QgaW5kZXggPSBhcmdzLmluZGV4O1xuICAgICAgICBjb25zdCBpdGVtcyA9IChhcmdzLm9iamVjdCBhcyBhbnkpLml0ZW1zO1xuICAgICAgICBjb25zdCBjdXJyZW50SXRlbSA9IHR5cGVvZiBpdGVtcy5nZXRJdGVtID09PSAnZnVuY3Rpb24nID8gaXRlbXMuZ2V0SXRlbShpbmRleCkgOiBpdGVtc1tpbmRleF07XG4gICAgICAgIGxldCB2aWV3UmVmOiBFbWJlZGRlZFZpZXdSZWY8SXRlbUNvbnRleHQ+O1xuXG4gICAgICAgIGlmIChUcmFjZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgQ0xvZyhDTG9nVHlwZXMuaW5mbywgYG9uSXRlbUxvYWRpbmc6ICR7aW5kZXh9IC0gUmV1c2luZyBleGlzdGluZyB2aWV3YCk7XG4gICAgICAgIH1cblxuICAgICAgICB2aWV3UmVmID0gYXJncy52aWV3W05HX1ZJRVddO1xuICAgICAgICAvLyBHZXR0aW5nIGFuZ3VsYXIgdmlldyBmcm9tIG9yaWdpbmFsIGVsZW1lbnQgKGluIGNhc2VzIHdoZW4gUHJveHlWaWV3Q29udGFpbmVyXG4gICAgICAgIC8vIGlzIHVzZWQgTmF0aXZlU2NyaXB0IGludGVybmFsbHkgd3JhcHMgaXQgaW4gYSBTdGFja0xheW91dClcbiAgICAgICAgaWYgKCF2aWV3UmVmICYmIGFyZ3MudmlldyBpbnN0YW5jZW9mIExheW91dEJhc2UgJiYgYXJncy52aWV3LmdldENoaWxkcmVuQ291bnQoKSA+IDApIHtcbiAgICAgICAgICAgIHZpZXdSZWYgPSBhcmdzLnZpZXcuZ2V0Q2hpbGRBdCgwKVtOR19WSUVXXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmlld1JlZiAmJiBUcmFjZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgaWYgKFRyYWNlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgQ0xvZyhDTG9nVHlwZXMuaW5mbywgYFZpZXdSZWZlcmVuY2Ugbm90IGZvdW5kIGZvciBpdGVtICR7aW5kZXh9LiBWaWV3IHJlY3ljbGluZyBpcyBub3Qgd29ya2luZ2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2aWV3UmVmKSB7XG4gICAgICAgICAgICBpZiAoVHJhY2UuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICBDTG9nKENMb2dUeXBlcy5pbmZvLCBgb25JdGVtTG9hZGluZzogJHtpbmRleH0gLSBDcmVhdGluZyB2aWV3IGZyb20gdGVtcGxhdGVgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmlld1JlZiA9IHRoaXMubG9hZGVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLml0ZW1UZW1wbGF0ZSwgbmV3IEl0ZW1Db250ZXh0KCksIDApO1xuICAgICAgICAgICAgYXJncy52aWV3ID0gZ2V0SXRlbVZpZXdSb290KHZpZXdSZWYpO1xuICAgICAgICAgICAgYXJncy52aWV3W05HX1ZJRVddID0gdmlld1JlZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0dXBWaWV3UmVmKHZpZXdSZWYsIGN1cnJlbnRJdGVtLCBpbmRleCk7XG5cbiAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzT25DaGlsZCh2aWV3UmVmLCBpbmRleCk7XG4gICAgfVxuICAgIEBIb3N0TGlzdGVuZXIoJ2l0ZW1SZWN5Y2xpbmcnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkl0ZW1SZWN5Y2xpbmdJbnRlcm5hbChhcmdzOiBhbnkpIHtcbiAgICAgICAgaWYgKCFhcmdzLnZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmdWaWV3OiBFbWJlZGRlZFZpZXdSZWY8YW55PiA9IGFyZ3Mudmlld1tOR19WSUVXXTtcblxuICAgICAgICAvLyBHZXR0aW5nIGFuZ3VsYXIgdmlldyBmcm9tIG9yaWdpbmFsIGVsZW1lbnQgKGluIGNhc2VzIHdoZW4gUHJveHlWaWV3Q29udGFpbmVyXG4gICAgICAgIC8vIGlzIHVzZWQgTmF0aXZlU2NyaXB0IGludGVybmFsbHkgd3JhcHMgaXQgaW4gYSBTdGFja0xheW91dClcbiAgICAgICAgaWYgKCFuZ1ZpZXcgJiYgYXJncy52aWV3IGluc3RhbmNlb2YgTGF5b3V0QmFzZSAmJiBhcmdzLnZpZXcuZ2V0Q2hpbGRyZW5Db3VudCgpID4gMCkge1xuICAgICAgICAgICAgbmdWaWV3ID0gYXJncy52aWV3LmdldENoaWxkQXQoMClbTkdfVklFV107XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3JlY3ljbGluZycsIGFyZ3Mudmlldyk7XG5cbiAgICAgICAgaWYgKG5nVmlldykge1xuICAgICAgICAgICAgbmdWaWV3LmRldGFjaCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignaXRlbURpc3Bvc2luZycsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uSXRlbURpc3Bvc2luZ0ludGVybmFsKGFyZ3M6IGFueSkge1xuICAgICAgICBpZiAoIWFyZ3Mudmlldykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBuZ1ZpZXc6IEVtYmVkZGVkVmlld1JlZjxhbnk+ID0gYXJncy52aWV3W05HX1ZJRVddO1xuXG4gICAgICAgIC8vIEdldHRpbmcgYW5ndWxhciB2aWV3IGZyb20gb3JpZ2luYWwgZWxlbWVudCAoaW4gY2FzZXMgd2hlbiBQcm94eVZpZXdDb250YWluZXJcbiAgICAgICAgLy8gaXMgdXNlZCBOYXRpdmVTY3JpcHQgaW50ZXJuYWxseSB3cmFwcyBpdCBpbiBhIFN0YWNrTGF5b3V0KVxuICAgICAgICBpZiAoIW5nVmlldyAmJiBhcmdzLnZpZXcgaW5zdGFuY2VvZiBMYXlvdXRCYXNlICYmIGFyZ3Mudmlldy5nZXRDaGlsZHJlbkNvdW50KCkgPiAwKSB7XG4gICAgICAgICAgICBuZ1ZpZXcgPSBhcmdzLnZpZXcuZ2V0Q2hpbGRBdCgwKVtOR19WSUVXXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZ1ZpZXcpIHtcbiAgICAgICAgICAgIG5nVmlldy5kZXRhY2goKTtcbiAgICAgICAgICAgIHRoaXMuc3RvcmVWaWV3UmVmKG5nVmlldyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0dXBWaWV3UmVmKHZpZXc6IEVtYmVkZGVkVmlld1JlZjxJdGVtQ29udGV4dD4sIGRhdGE6IGFueSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdmlldy5jb250ZXh0O1xuICAgICAgICBjb250ZXh0LiRpbXBsaWNpdCA9IGRhdGE7XG4gICAgICAgIGNvbnRleHQuaXRlbSA9IGRhdGE7XG4gICAgICAgIGNvbnRleHQuaW5kZXggPSBpbmRleDtcbiAgICAgICAgY29udGV4dC5ldmVuID0gaW5kZXggJSAyID09PSAwO1xuICAgICAgICBjb250ZXh0Lm9kZCA9ICFjb250ZXh0LmV2ZW47XG5cbiAgICAgICAgdGhpcy5zZXR1cEl0ZW1WaWV3Lm5leHQoe1xuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIHZpZXdcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldEl0ZW1UZW1wbGF0ZVZpZXdGYWN0b3J5KHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxJdGVtQ29udGV4dD4pOiAoKSA9PiBWaWV3IHtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdSZWYgPSB0aGlzLmxvYWRlci5jcmVhdGVFbWJlZGRlZFZpZXcodGVtcGxhdGUsIG5ldyBJdGVtQ29udGV4dCgpLCAwKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdFZpZXcgPSBnZXRJdGVtVmlld1Jvb3Qodmlld1JlZik7XG4gICAgICAgICAgICByZXN1bHRWaWV3W05HX1ZJRVddID0gdmlld1JlZjtcblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFZpZXc7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHZpZXdQb29sID0gbmV3IE1hcDxcbiAgICAgICAgVGVtcGxhdGVSZWY8SXRlbUNvbnRleHQ+LFxuICAgICAgICB7XG4gICAgICAgICAgICBzY3JhcFNpemU6IG51bWJlcjtcbiAgICAgICAgICAgIHNjcmFwSGVhZDogU2V0PEVtYmVkZGVkVmlld1JlZjxJdGVtQ29udGV4dD4+O1xuICAgICAgICB9XG4gICAgPigpO1xuICAgIHByaXZhdGUgc3RvcmVWaWV3UmVmKHZpZXdSZWY6IEVtYmVkZGVkVmlld1JlZjxhbnk+KSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlUmVmID0gdGhpcy52aWV3VG9UZW1wbGF0ZS5nZXQodmlld1JlZik7XG4gICAgICAgIGlmICh0ZW1wbGF0ZVJlZikge1xuICAgICAgICAgICAgY29uc3Qgc2NyYXAgPSB0aGlzLnZpZXdQb29sLmdldCh0ZW1wbGF0ZVJlZik7XG4gICAgICAgICAgICBpZiAoc2NyYXApIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NyYXAuc2NyYXBIZWFkLnNpemUgPj0gc2NyYXAuc2NyYXBTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdSZWYuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdUb0xvYWRlci5nZXQodmlld1JlZik/LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzY3JhcC5zY3JhcEhlYWQuYWRkKHZpZXdSZWYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2aWV3VG9UZW1wbGF0ZSA9IG5ldyBXZWFrTWFwPEVtYmVkZGVkVmlld1JlZjxhbnk+LCBUZW1wbGF0ZVJlZjxhbnk+PigpO1xuICAgIHZpZXdUb0xvYWRlciA9IG5ldyBXZWFrTWFwPEVtYmVkZGVkVmlld1JlZjxhbnk+LCBDb21wb25lbnRSZWY8RGV0YWNoZWRMb2FkZXI+PigpO1xuXG4gICAgcHJpdmF0ZSBnZXRPckNyZWF0ZSh0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8SXRlbUNvbnRleHQ+KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIGxldCB2aWV3UmVmID0gdGhpcy5nZXRWaWV3KHRlbXBsYXRlUmVmKTtcbiAgICAgICAgICAgIGlmICghdmlld1JlZikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvYWRlciA9IHRoaXMuZGV0YWNoZWRMb2FkZXJGYWN0b3J5KCk7XG4gICAgICAgICAgICAgICAgLy8gdmlld1JlZiA9IHRoaXMubG9hZGVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0ZW1wbGF0ZVJlZiwgbmV3IEl0ZW1Db250ZXh0KCksIDApO1xuICAgICAgICAgICAgICAgIHZpZXdSZWYgPSBsb2FkZXIuaW5zdGFuY2UudmMuY3JlYXRlRW1iZWRkZWRWaWV3KHRlbXBsYXRlUmVmLCBuZXcgSXRlbUNvbnRleHQoKSwgMCk7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3VG9Mb2FkZXIuc2V0KHZpZXdSZWYsIGxvYWRlcik7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3VG9UZW1wbGF0ZS5zZXQodmlld1JlZiwgdGVtcGxhdGVSZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmlld1JlZi5kZXRhY2goKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdFZpZXcgPSBnZXRJdGVtVmlld1Jvb3Qodmlld1JlZik7XG4gICAgICAgICAgICByZXN1bHRWaWV3W05HX1ZJRVddID0gdmlld1JlZjtcbiAgICAgICAgICAgIHJlc3VsdFZpZXcucmV1c2FibGUgPSB0aGlzLmF1dG9SZXVzZVZpZXdzO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFZpZXc7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcml2YXRlIGdldFZpZXcodGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPEl0ZW1Db250ZXh0Pikge1xuICAgICAgICBjb25zdCBwb29sID0gdGhpcy5nZXRWaWV3UG9vbCh0ZW1wbGF0ZVJlZik7XG4gICAgICAgIHdoaWxlIChwb29sLnNjcmFwSGVhZC5zaXplID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgdmlld1JlZjogRW1iZWRkZWRWaWV3UmVmPEl0ZW1Db250ZXh0PiA9IHBvb2wuc2NyYXBIZWFkLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICAgICAgICAgIHBvb2wuc2NyYXBIZWFkLmRlbGV0ZSh2aWV3UmVmKTtcbiAgICAgICAgICAgIGlmICghdmlld1JlZi5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmlld1JlZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZpZXdQb29sKHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxJdGVtQ29udGV4dD4pIHtcbiAgICAgICAgaWYgKCF0aGlzLnZpZXdQb29sLmhhcyh0ZW1wbGF0ZVJlZikpIHtcbiAgICAgICAgICAgIHRoaXMudmlld1Bvb2wuc2V0KHRlbXBsYXRlUmVmLCB7XG4gICAgICAgICAgICAgICAgc2NyYXBTaXplOiB0aGlzLmF1dG9SZXVzZVZpZXdzID8gSW5maW5pdHkgOiAwLFxuICAgICAgICAgICAgICAgIHNjcmFwSGVhZDogbmV3IFNldDxFbWJlZGRlZFZpZXdSZWY8SXRlbUNvbnRleHQ+PigpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy52aWV3UG9vbC5nZXQodGVtcGxhdGVSZWYpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SXRlbVRlbXBsYXRlcygpIHtcbiAgICAgICAgLy8gVGhlIGl0ZW1UZW1wbGF0ZVF1ZXJ5IG1heSBiZSBjaGFuZ2VkIGFmdGVyIGxpc3QgaXRlbXMgYXJlIGFkZGVkIHRoYXQgY29udGFpbiA8dGVtcGxhdGU+IGluc2lkZSxcbiAgICAgICAgLy8gc28gY2FjaGUgYW5kIHVzZSBvbmx5IHRoZSBvcmlnaW5hbCB0ZW1wbGF0ZSB0byBhdm9pZCBlcnJvcnMuXG4gICAgICAgIHRoaXMuaXRlbVRlbXBsYXRlID0gdGhpcy5pdGVtVGVtcGxhdGVRdWVyeTtcblxuICAgICAgICBpZiAodGhpcy5fdGVtcGxhdGVNYXApIHtcbiAgICAgICAgICAgIGlmIChUcmFjZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgIENMb2coQ0xvZ1R5cGVzLmluZm8sICdTZXR0aW5nIHRlbXBsYXRlcycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZXM6IEtleWVkVGVtcGxhdGVbXSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fdGVtcGxhdGVNYXAuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2NvbGxlY3Rpb25WaWV3Lml0ZW1UZW1wbGF0ZXMgPSB0ZW1wbGF0ZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgbWFwIHdhcyBub3QgaW5pdGlhbGl6ZWQgdGhpcyBtZWFucyB0aGF0IHRoZXJlIGFyZSBubyBuYW1lZCB0ZW1wbGF0ZXMsIHNvIHdlIHJlZ2lzdGVyIHRoZSBkZWZhdWx0IG9uZS5cbiAgICAgICAgICAgIHRoaXMuX2NvbGxlY3Rpb25WaWV3Lml0ZW1UZW1wbGF0ZSA9IHRoaXMuZ2V0SXRlbVRlbXBsYXRlVmlld0ZhY3RvcnkodGhpcy5pdGVtVGVtcGxhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXRlY3RDaGFuZ2VzT25DaGlsZCh2aWV3UmVmOiBFbWJlZGRlZFZpZXdSZWY8SXRlbUNvbnRleHQ+LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmIChUcmFjZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgQ0xvZyhDTG9nVHlwZXMuaW5mbywgJ01hbnVhbGx5IGRldGVjdCBjaGFuZ2VzIGluIGNoaWxkOiAnICsgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHZpZXdSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHZpZXdSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVmcmVzaCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbGxlY3Rpb25WaWV3KSB7XG4gICAgICAgICAgICB0aGlzLl9jb2xsZWN0aW9uVmlldy5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50VmlldyB7XG4gICAgcm9vdE5vZGVzOiBhbnlbXTtcbiAgICBkZXN0cm95KCk6IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIFJvb3RMb2NhdG9yID0gKG5vZGVzOiBhbnlbXSwgbmVzdExldmVsOiBudW1iZXIpID0+IFZpZXc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtVmlld1Jvb3Qodmlld1JlZjogQ29tcG9uZW50Vmlldywgcm9vdExvY2F0b3I6IFJvb3RMb2NhdG9yID0gZXh0cmFjdFNpbmdsZVZpZXdSZWN1cnNpdmUpOiBWaWV3IHtcbiAgICBjb25zdCByb290VmlldyA9IHJvb3RMb2NhdG9yKHZpZXdSZWYucm9vdE5vZGVzLCAwKTtcbiAgICByZXR1cm4gcm9vdFZpZXc7XG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tjdlRlbXBsYXRlS2V5XScgfSlcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUtleURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PiwgQEhvc3QoKSBwcml2YXRlIGNvbGxlY3Rpb25WaWV3OiBDb2xsZWN0aW9uVmlld0NvbXBvbmVudCkge31cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGN2VGVtcGxhdGVLZXkodmFsdWU6IGFueSkge1xuICAgICAgICBpZiAoVHJhY2UuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgICAgIENMb2coQ0xvZ1R5cGVzLmluZm8sICdjdlRlbXBsYXRlS2V5OiAnICsgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbGxlY3Rpb25WaWV3ICYmIHRoaXMudGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvblZpZXcucmVnaXN0ZXJUZW1wbGF0ZSh2YWx1ZS50b0xvd2VyQ2FzZSgpLCB0aGlzLnRlbXBsYXRlUmVmKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
@@ -1,3 +1,4 @@
|
|
1
|
+
// External
|
1
2
|
import { NO_ERRORS_SCHEMA, NgModule } from '@angular/core';
|
2
3
|
import { CollectionViewComponent, TemplateKeyDirective } from './collectionview-comp';
|
3
4
|
import * as i0 from "@angular/core";
|
@@ -5,8 +6,8 @@ export { CollectionViewComponent, TemplateKeyDirective } from './collectionview-
|
|
5
6
|
export class CollectionViewModule {
|
6
7
|
}
|
7
8
|
CollectionViewModule.ɵfac = function CollectionViewModule_Factory(t) { return new (t || CollectionViewModule)(); };
|
8
|
-
CollectionViewModule.ɵmod = i0.ɵɵdefineNgModule({ type: CollectionViewModule });
|
9
|
-
CollectionViewModule.ɵinj = i0.ɵɵdefineInjector({});
|
9
|
+
CollectionViewModule.ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: CollectionViewModule });
|
10
|
+
CollectionViewModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({});
|
10
11
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CollectionViewModule, [{
|
11
12
|
type: NgModule,
|
12
13
|
args: [{
|
@@ -16,4 +17,4 @@ CollectionViewModule.ɵinj = i0.ɵɵdefineInjector({});
|
|
16
17
|
}]
|
17
18
|
}], null, null); })();
|
18
19
|
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(CollectionViewModule, { declarations: [CollectionViewComponent, TemplateKeyDirective], exports: [CollectionViewComponent, TemplateKeyDirective] }); })();
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29sbGVjdGlvbnZpZXcvYW5ndWxhci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxXQUFXO0FBQ1gsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFDdEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFPdEYsTUFBTSxPQUFPLG9CQUFvQjs7d0ZBQXBCLG9CQUFvQjtzRUFBcEIsb0JBQW9COzt1RkFBcEIsb0JBQW9CO2NBTGhDLFFBQVE7ZUFBQztnQkFDTixZQUFZLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxvQkFBb0IsQ0FBQztnQkFDN0QsT0FBTyxFQUFFLENBQUMsdUJBQXVCLEVBQUUsb0JBQW9CLENBQUM7Z0JBQ3hELE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO2FBQzlCOzt3RkFDWSxvQkFBb0IsbUJBSmQsdUJBQXVCLEVBQUUsb0JBQW9CLGFBQ2xELHVCQUF1QixFQUFFLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEV4dGVybmFsXG5pbXBvcnQgeyBOT19FUlJPUlNfU0NIRU1BLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDb2xsZWN0aW9uVmlld0NvbXBvbmVudCwgVGVtcGxhdGVLZXlEaXJlY3RpdmUgfSBmcm9tICcuL2NvbGxlY3Rpb252aWV3LWNvbXAnO1xuZXhwb3J0IHsgQ29sbGVjdGlvblZpZXdDb21wb25lbnQsIFRlbXBsYXRlS2V5RGlyZWN0aXZlIH0gZnJvbSAnLi9jb2xsZWN0aW9udmlldy1jb21wJztcblxuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtDb2xsZWN0aW9uVmlld0NvbXBvbmVudCwgVGVtcGxhdGVLZXlEaXJlY3RpdmVdLFxuICAgIGV4cG9ydHM6IFtDb2xsZWN0aW9uVmlld0NvbXBvbmVudCwgVGVtcGxhdGVLZXlEaXJlY3RpdmVdLFxuICAgIHNjaGVtYXM6IFtOT19FUlJPUlNfU0NIRU1BXVxufSlcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uVmlld01vZHVsZSB7fVxuIl19
|
@@ -1,2 +1,5 @@
|
|
1
|
+
/**
|
2
|
+
* Generated bundle index. Do not edit.
|
3
|
+
*/
|
1
4
|
export * from './index';
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlc2NyaXB0LWNvbW11bml0eS11aS1jb2xsZWN0aW9udmlldy1hbmd1bGFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbGxlY3Rpb252aWV3L2FuZ3VsYXIvbmF0aXZlc2NyaXB0LWNvbW11bml0eS11aS1jb2xsZWN0aW9udmlldy1hbmd1bGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
|
@@ -145,6 +145,8 @@ class CollectionViewComponent {
|
|
145
145
|
CLog(CLogTypes.info, `onItemLoading: ${index} - Reusing existing view`);
|
146
146
|
}
|
147
147
|
viewRef = args.view[NG_VIEW];
|
148
|
+
// Getting angular view from original element (in cases when ProxyViewContainer
|
149
|
+
// is used NativeScript internally wraps it in a StackLayout)
|
148
150
|
if (!viewRef && args.view instanceof LayoutBase && args.view.getChildrenCount() > 0) {
|
149
151
|
viewRef = args.view.getChildAt(0)[NG_VIEW];
|
150
152
|
}
|
@@ -169,9 +171,12 @@ class CollectionViewComponent {
|
|
169
171
|
return;
|
170
172
|
}
|
171
173
|
let ngView = args.view[NG_VIEW];
|
174
|
+
// Getting angular view from original element (in cases when ProxyViewContainer
|
175
|
+
// is used NativeScript internally wraps it in a StackLayout)
|
172
176
|
if (!ngView && args.view instanceof LayoutBase && args.view.getChildrenCount() > 0) {
|
173
177
|
ngView = args.view.getChildAt(0)[NG_VIEW];
|
174
178
|
}
|
179
|
+
// console.log('recycling', args.view);
|
175
180
|
if (ngView) {
|
176
181
|
ngView.detach();
|
177
182
|
}
|
@@ -181,6 +186,8 @@ class CollectionViewComponent {
|
|
181
186
|
return;
|
182
187
|
}
|
183
188
|
let ngView = args.view[NG_VIEW];
|
189
|
+
// Getting angular view from original element (in cases when ProxyViewContainer
|
190
|
+
// is used NativeScript internally wraps it in a StackLayout)
|
184
191
|
if (!ngView && args.view instanceof LayoutBase && args.view.getChildrenCount() > 0) {
|
185
192
|
ngView = args.view.getChildAt(0)[NG_VIEW];
|
186
193
|
}
|
@@ -232,6 +239,7 @@ class CollectionViewComponent {
|
|
232
239
|
let viewRef = this.getView(templateRef);
|
233
240
|
if (!viewRef) {
|
234
241
|
const loader = this.detachedLoaderFactory();
|
242
|
+
// viewRef = this.loader.createEmbeddedView(templateRef, new ItemContext(), 0);
|
235
243
|
viewRef = loader.instance.vc.createEmbeddedView(templateRef, new ItemContext(), 0);
|
236
244
|
this.viewToLoader.set(viewRef, loader);
|
237
245
|
this.viewToTemplate.set(viewRef, templateRef);
|
@@ -264,6 +272,8 @@ class CollectionViewComponent {
|
|
264
272
|
return this.viewPool.get(templateRef);
|
265
273
|
}
|
266
274
|
setItemTemplates() {
|
275
|
+
// The itemTemplateQuery may be changed after list items are added that contain <template> inside,
|
276
|
+
// so cache and use only the original template to avoid errors.
|
267
277
|
this.itemTemplate = this.itemTemplateQuery;
|
268
278
|
if (this._templateMap) {
|
269
279
|
if (Trace.isEnabled()) {
|
@@ -276,6 +286,7 @@ class CollectionViewComponent {
|
|
276
286
|
this._collectionView.itemTemplates = templates;
|
277
287
|
}
|
278
288
|
else {
|
289
|
+
// If the map was not initialized this means that there are no named templates, so we register the default one.
|
279
290
|
this._collectionView.itemTemplate = this.getItemTemplateViewFactory(this.itemTemplate);
|
280
291
|
}
|
281
292
|
}
|
@@ -293,7 +304,7 @@ class CollectionViewComponent {
|
|
293
304
|
}
|
294
305
|
}
|
295
306
|
CollectionViewComponent.ɵfac = function CollectionViewComponent_Factory(t) { return new (t || CollectionViewComponent)(i0.ɵɵdirectiveInject(ElementRef), i0.ɵɵdirectiveInject(IterableDiffers), i0.ɵɵdirectiveInject(NativeScriptRendererFactory), i0.ɵɵdirectiveInject(NgZone)); };
|
296
|
-
CollectionViewComponent.ɵcmp = i0.ɵɵdefineComponent({ type: CollectionViewComponent, selectors: [["CollectionView"]], contentQueries: function CollectionViewComponent_ContentQueries(rf, ctx, dirIndex) {
|
307
|
+
CollectionViewComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CollectionViewComponent, selectors: [["CollectionView"]], contentQueries: function CollectionViewComponent_ContentQueries(rf, ctx, dirIndex) {
|
297
308
|
if (rf & 1) {
|
298
309
|
i0.ɵɵcontentQuery(dirIndex, TemplateRef, 7, TemplateRef);
|
299
310
|
}
|
@@ -390,7 +401,7 @@ class TemplateKeyDirective {
|
|
390
401
|
}
|
391
402
|
}
|
392
403
|
TemplateKeyDirective.ɵfac = function TemplateKeyDirective_Factory(t) { return new (t || TemplateKeyDirective)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(CollectionViewComponent, 1)); };
|
393
|
-
TemplateKeyDirective.ɵdir = i0.ɵɵdefineDirective({ type: TemplateKeyDirective, selectors: [["", "cvTemplateKey", ""]], inputs: { cvTemplateKey: "cvTemplateKey" } });
|
404
|
+
TemplateKeyDirective.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: TemplateKeyDirective, selectors: [["", "cvTemplateKey", ""]], inputs: { cvTemplateKey: "cvTemplateKey" } });
|
394
405
|
(function () {
|
395
406
|
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TemplateKeyDirective, [{
|
396
407
|
type: Directive,
|
@@ -404,11 +415,12 @@ TemplateKeyDirective.ɵdir = i0.ɵɵdefineDirective({ type: TemplateKeyDirective
|
|
404
415
|
}] });
|
405
416
|
})();
|
406
417
|
|
418
|
+
// External
|
407
419
|
class CollectionViewModule {
|
408
420
|
}
|
409
421
|
CollectionViewModule.ɵfac = function CollectionViewModule_Factory(t) { return new (t || CollectionViewModule)(); };
|
410
|
-
CollectionViewModule.ɵmod = i0.ɵɵdefineNgModule({ type: CollectionViewModule });
|
411
|
-
CollectionViewModule.ɵinj = i0.ɵɵdefineInjector({});
|
422
|
+
CollectionViewModule.ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: CollectionViewModule });
|
423
|
+
CollectionViewModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({});
|
412
424
|
(function () {
|
413
425
|
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CollectionViewModule, [{
|
414
426
|
type: NgModule,
|
@@ -421,5 +433,9 @@ CollectionViewModule.ɵinj = i0.ɵɵdefineInjector({});
|
|
421
433
|
})();
|
422
434
|
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(CollectionViewModule, { declarations: [CollectionViewComponent, TemplateKeyDirective], exports: [CollectionViewComponent, TemplateKeyDirective] }); })();
|
423
435
|
|
436
|
+
/**
|
437
|
+
* Generated bundle index. Do not edit.
|
438
|
+
*/
|
439
|
+
|
424
440
|
export { CollectionViewComponent, CollectionViewModule, TemplateKeyDirective };
|
425
441
|
//# sourceMappingURL=nativescript-community-ui-collectionview-angular.mjs.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"nativescript-community-ui-collectionview-angular.mjs","sources":["../../../../src/collectionview/angular/collectionview-comp.ts","../../../../src/collectionview/angular/index.ts"],"sourcesContent":["import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n ContentChild,\n Directive,\n DoCheck,\n ElementRef,\n EmbeddedViewRef,\n EventEmitter,\n Host,\n HostListener,\n Inject,\n Input,\n IterableDiffer,\n IterableDiffers,\n NgZone,\n OnDestroy,\n Output,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ɵisListLikeIterable as isListLikeIterable\n} from '@angular/core';\nimport { CLog, CLogTypes, CollectionView, CollectionViewItemEventData, ListViewViewTypes } from '@nativescript-community/ui-collectionview';\nimport { DetachedLoader, NativeScriptRendererFactory, extractSingleViewRecursive, registerElement } from '@nativescript/angular';\nimport { KeyedTemplate, LayoutBase, ObservableArray, Trace, View } from '@nativescript/core';\n\nregisterElement('CollectionView', () => CollectionView);\n\nconst NG_VIEW = '_ngViewRef';\n\nexport class ItemContext {\n constructor(public $implicit?: any, public item?: any, public index?: number, public even?: boolean, public odd?: boolean) {}\n}\n\nexport interface SetupItemViewArgs {\n view: EmbeddedViewRef<any>;\n data: any;\n index: number;\n context: ItemContext;\n}\n\n@Component({\n selector: 'CollectionView',\n template: `\n <DetachedContainer>\n <Placeholder #loader></Placeholder>\n </DetachedContainer>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CollectionViewComponent implements DoCheck, OnDestroy, AfterContentInit {\n public get nativeElement(): any {\n return this._collectionView;\n }\n public get listView(): any {\n return this._collectionView;\n }\n\n @ViewChild('loader', { read: ViewContainerRef, static: true }) public loader: ViewContainerRef;\n @Output() public setupItemView = new EventEmitter<SetupItemViewArgs>();\n @ContentChild(TemplateRef, { read: TemplateRef, static: true }) public itemTemplateQuery: TemplateRef<ItemContext>;\n\n @Input() autoReuseViews = false;\n\n detachedLoaderFactory() {\n const ref = this.loader.createComponent(DetachedLoader, {\n index: 0\n });\n this.loader.detach(0);\n this._loaders.push(ref);\n return ref;\n }\n\n @Input()\n public get itemTemplate() {\n return this._itemTemplate;\n }\n public set itemTemplate(value: any) {\n this._itemTemplate = value;\n this._collectionView.refresh();\n }\n @Input()\n public get items() {\n return this._items;\n }\n public set items(value: any) {\n this._items = value;\n let needDiffer = true;\n if (value instanceof ObservableArray) {\n needDiffer = false;\n }\n if (needDiffer && !this._differ && isListLikeIterable(value)) {\n this._differ = this._iterableDiffers.find(this._items).create((_index, item) => item);\n }\n\n this._collectionView.items = this._items;\n }\n\n private _collectionView: CollectionView;\n private _items: any;\n private _differ: IterableDiffer<KeyedTemplate>;\n private _itemTemplate: TemplateRef<ItemContext>;\n private _templateMap: Map<string, KeyedTemplate>;\n private _loaders: ComponentRef<DetachedLoader>[];\n\n constructor(\n @Inject(ElementRef) private _elementRef: ElementRef,\n @Inject(IterableDiffers) private _iterableDiffers: IterableDiffers,\n @Inject(NativeScriptRendererFactory) private _renderer: NativeScriptRendererFactory,\n @Inject(NgZone) private _ngZone: NgZone\n ) {\n this._collectionView = _elementRef.nativeElement;\n\n this._collectionView.on(CollectionView.itemLoadingEvent, this.onItemLoading, this);\n this._collectionView.itemViewLoader = this.itemViewLoader;\n this._loaders = [];\n }\n\n private itemViewLoader = (viewType) =>\n this._ngZone.run(() => {\n switch (viewType) {\n case ListViewViewTypes.ItemView:\n if (this._itemTemplate && this.loader) {\n const typedView = this.getOrCreate(this._itemTemplate);\n return typedView;\n }\n break;\n }\n return null;\n });\n\n public ngAfterContentInit() {\n if (Trace.isEnabled()) {\n CLog(CLogTypes.info, 'CollectionView.ngAfterContentInit()');\n }\n this.setItemTemplates();\n }\n\n public ngOnDestroy() {\n this._collectionView.off(CollectionView.itemLoadingEvent, this.onItemLoading, this);\n this._collectionView = null;\n this._loaders.forEach((l) => l.destroy());\n this._loaders = null;\n this.viewToLoader = null;\n this.viewToTemplate = null;\n this.viewPool = null;\n\n this._items = null;\n this._differ = null;\n this._itemTemplate = null;\n if (this._templateMap) {\n this._templateMap.clear();\n }\n this._templateMap = null;\n }\n\n public ngDoCheck() {\n if (Trace.isEnabled()) {\n CLog(CLogTypes.info, 'ngDoCheck() - execute differ? ' + this._differ);\n }\n if (this._differ) {\n if (Trace.isEnabled()) {\n CLog(CLogTypes.info, 'ngDoCheck() - execute differ');\n }\n const changes = this._differ.diff(this._items);\n if (changes) {\n if (Trace.isEnabled()) {\n CLog(CLogTypes.info, 'ngDoCheck() - refresh');\n }\n this.refresh();\n }\n }\n }\n\n public registerTemplate(key: string, template: TemplateRef<ItemContext>) {\n if (Trace.isEnabled()) {\n CLog(CLogTypes.info, 'registerTemplate for key: ' + key);\n }\n if (!this._templateMap) {\n this._templateMap = new Map<string, KeyedTemplate>();\n }\n\n const keyedTemplate = {\n key,\n createView: this.getItemTemplateViewFactory(template)\n };\n\n this._templateMap.set(key, keyedTemplate);\n }\n\n @HostListener('itemLoading', ['$event'])\n public onItemLoading(args: CollectionViewItemEventData) {\n if (!args.view && !this.itemTemplate) {\n return;\n }\n if (!this.items) return;\n const index = args.index;\n const items = (args.object as any).items;\n const currentItem = typeof items.getItem === 'function' ? items.getItem(index) : items[index];\n let viewRef: EmbeddedViewRef<ItemContext>;\n\n if (Trace.isEnabled()) {\n CLog(CLogTypes.info, `onItemLoading: ${index} - Reusing existing view`);\n }\n\n viewRef = args.view[NG_VIEW];\n // Getting angular view from original element (in cases when ProxyViewContainer\n // is used NativeScript internally wraps it in a StackLayout)\n if (!viewRef && args.view instanceof LayoutBase && args.view.getChildrenCount() > 0) {\n viewRef = args.view.getChildAt(0)[NG_VIEW];\n }\n\n if (!viewRef && Trace.isEnabled()) {\n if (Trace.isEnabled()) {\n CLog(CLogTypes.info, `ViewReference not found for item ${index}. View recycling is not working`);\n }\n }\n\n if (!viewRef) {\n if (Trace.isEnabled()) {\n CLog(CLogTypes.info, `onItemLoading: ${index} - Creating view from template`);\n }\n\n viewRef = this.loader.createEmbeddedView(this.itemTemplate, new ItemContext(), 0);\n args.view = getItemViewRoot(viewRef);\n args.view[NG_VIEW] = viewRef;\n }\n\n this.setupViewRef(viewRef, currentItem, index);\n\n this.detectChangesOnChild(viewRef, index);\n }\n @HostListener('itemRecycling', ['$event'])\n public onItemRecyclingInternal(args: any) {\n if (!args.view) {\n return;\n }\n let ngView: EmbeddedViewRef<any> = args.view[NG_VIEW];\n\n // Getting angular view from original element (in cases when ProxyViewContainer\n // is used NativeScript internally wraps it in a StackLayout)\n if (!ngView && args.view instanceof LayoutBase && args.view.getChildrenCount() > 0) {\n ngView = args.view.getChildAt(0)[NG_VIEW];\n }\n // console.log('recycling', args.view);\n\n if (ngView) {\n ngView.detach();\n }\n }\n\n @HostListener('itemDisposing', ['$event'])\n public onItemDisposingInternal(args: any) {\n if (!args.view) {\n return;\n }\n let ngView: EmbeddedViewRef<any> = args.view[NG_VIEW];\n\n // Getting angular view from original element (in cases when ProxyViewContainer\n // is used NativeScript internally wraps it in a StackLayout)\n if (!ngView && args.view instanceof LayoutBase && args.view.getChildrenCount() > 0) {\n ngView = args.view.getChildAt(0)[NG_VIEW];\n }\n\n if (ngView) {\n ngView.detach();\n this.storeViewRef(ngView);\n }\n }\n\n public setupViewRef(view: EmbeddedViewRef<ItemContext>, data: any, index: number): void {\n const context = view.context;\n context.$implicit = data;\n context.item = data;\n context.index = index;\n context.even = index % 2 === 0;\n context.odd = !context.even;\n\n this.setupItemView.next({\n context,\n data,\n index,\n view\n });\n }\n\n protected getItemTemplateViewFactory(template: TemplateRef<ItemContext>): () => View {\n return () => {\n const viewRef = this.loader.createEmbeddedView(template, new ItemContext(), 0);\n const resultView = getItemViewRoot(viewRef);\n resultView[NG_VIEW] = viewRef;\n\n return resultView;\n };\n }\n viewPool = new Map<\n TemplateRef<ItemContext>,\n {\n scrapSize: number;\n scrapHead: Set<EmbeddedViewRef<ItemContext>>;\n }\n >();\n private storeViewRef(viewRef: EmbeddedViewRef<any>) {\n const templateRef = this.viewToTemplate.get(viewRef);\n if (templateRef) {\n const scrap = this.viewPool.get(templateRef);\n if (scrap) {\n if (scrap.scrapHead.size >= scrap.scrapSize) {\n viewRef.destroy();\n this.viewToLoader.get(viewRef)?.destroy();\n } else {\n scrap.scrapHead.add(viewRef);\n }\n }\n }\n }\n viewToTemplate = new WeakMap<EmbeddedViewRef<any>, TemplateRef<any>>();\n viewToLoader = new WeakMap<EmbeddedViewRef<any>, ComponentRef<DetachedLoader>>();\n\n private getOrCreate(templateRef: TemplateRef<ItemContext>) {\n return this._ngZone.run(() => {\n let viewRef = this.getView(templateRef);\n if (!viewRef) {\n const loader = this.detachedLoaderFactory();\n // viewRef = this.loader.createEmbeddedView(templateRef, new ItemContext(), 0);\n viewRef = loader.instance.vc.createEmbeddedView(templateRef, new ItemContext(), 0);\n this.viewToLoader.set(viewRef, loader);\n this.viewToTemplate.set(viewRef, templateRef);\n }\n viewRef.detach();\n const resultView = getItemViewRoot(viewRef);\n resultView[NG_VIEW] = viewRef;\n resultView.reusable = this.autoReuseViews;\n return resultView;\n });\n }\n private getView(templateRef: TemplateRef<ItemContext>) {\n const pool = this.getViewPool(templateRef);\n while (pool.scrapHead.size > 0) {\n const viewRef: EmbeddedViewRef<ItemContext> = pool.scrapHead.values().next().value;\n pool.scrapHead.delete(viewRef);\n if (!viewRef.destroyed) {\n return viewRef;\n }\n }\n return null;\n }\n\n private getViewPool(templateRef: TemplateRef<ItemContext>) {\n if (!this.viewPool.has(templateRef)) {\n this.viewPool.set(templateRef, {\n scrapSize: this.autoReuseViews ? Infinity : 0,\n scrapHead: new Set<EmbeddedViewRef<ItemContext>>()\n });\n }\n return this.viewPool.get(templateRef);\n }\n\n private setItemTemplates() {\n // The itemTemplateQuery may be changed after list items are added that contain <template> inside,\n // so cache and use only the original template to avoid errors.\n this.itemTemplate = this.itemTemplateQuery;\n\n if (this._templateMap) {\n if (Trace.isEnabled()) {\n CLog(CLogTypes.info, 'Setting templates');\n }\n\n const templates: KeyedTemplate[] = [];\n this._templateMap.forEach((value) => {\n templates.push(value);\n });\n this._collectionView.itemTemplates = templates;\n } else {\n // If the map was not initialized this means that there are no named templates, so we register the default one.\n this._collectionView.itemTemplate = this.getItemTemplateViewFactory(this.itemTemplate);\n }\n }\n\n private detectChangesOnChild(viewRef: EmbeddedViewRef<ItemContext>, index: number) {\n if (Trace.isEnabled()) {\n CLog(CLogTypes.info, 'Manually detect changes in child: ' + index);\n }\n viewRef.markForCheck();\n viewRef.detectChanges();\n }\n\n private refresh() {\n if (this._collectionView) {\n this._collectionView.refresh();\n }\n }\n}\n\nexport interface ComponentView {\n rootNodes: any[];\n destroy(): void;\n}\n\nexport type RootLocator = (nodes: any[], nestLevel: number) => View;\n\nexport function getItemViewRoot(viewRef: ComponentView, rootLocator: RootLocator = extractSingleViewRecursive): View {\n const rootView = rootLocator(viewRef.rootNodes, 0);\n return rootView;\n}\n\n@Directive({ selector: '[cvTemplateKey]' })\nexport class TemplateKeyDirective {\n constructor(private templateRef: TemplateRef<any>, @Host() private collectionView: CollectionViewComponent) {}\n\n @Input()\n set cvTemplateKey(value: any) {\n if (Trace.isEnabled()) {\n CLog(CLogTypes.info, 'cvTemplateKey: ' + value);\n }\n if (this.collectionView && this.templateRef) {\n this.collectionView.registerTemplate(value.toLowerCase(), this.templateRef);\n }\n }\n}\n","// External\nimport { NO_ERRORS_SCHEMA, NgModule } from '@angular/core';\n\nimport { CollectionViewComponent, TemplateKeyDirective } from './collectionview-comp';\nexport { CollectionViewComponent, TemplateKeyDirective } from './collectionview-comp';\n\n@NgModule({\n declarations: [CollectionViewComponent, TemplateKeyDirective],\n exports: [CollectionViewComponent, TemplateKeyDirective],\n schemas: [NO_ERRORS_SCHEMA]\n})\nexport class CollectionViewModule {}\n"],"names":["isListLikeIterable"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"nativescript-community-ui-collectionview-angular.mjs","sources":["../../../../src/collectionview/angular/collectionview-comp.ts","../../../../src/collectionview/angular/index.ts","../../../../src/collectionview/angular/nativescript-community-ui-collectionview-angular.ts"],"sourcesContent":["import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n ContentChild,\n Directive,\n DoCheck,\n ElementRef,\n EmbeddedViewRef,\n EventEmitter,\n Host,\n HostListener,\n Inject,\n Input,\n IterableDiffer,\n IterableDiffers,\n NgZone,\n OnDestroy,\n Output,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ɵisListLikeIterable as isListLikeIterable\n} from '@angular/core';\nimport { CLog, CLogTypes, CollectionView, CollectionViewItemEventData, ListViewViewTypes } from '@nativescript-community/ui-collectionview';\nimport { DetachedLoader, NativeScriptRendererFactory, extractSingleViewRecursive, registerElement } from '@nativescript/angular';\nimport { KeyedTemplate, LayoutBase, ObservableArray, Trace, View } from '@nativescript/core';\n\nregisterElement('CollectionView', () => CollectionView);\n\nconst NG_VIEW = '_ngViewRef';\n\nexport class ItemContext {\n constructor(public $implicit?: any, public item?: any, public index?: number, public even?: boolean, public odd?: boolean) {}\n}\n\nexport interface SetupItemViewArgs {\n view: EmbeddedViewRef<any>;\n data: any;\n index: number;\n context: ItemContext;\n}\n\n@Component({\n selector: 'CollectionView',\n template: `\n <DetachedContainer>\n <Placeholder #loader></Placeholder>\n </DetachedContainer>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CollectionViewComponent implements DoCheck, OnDestroy, AfterContentInit {\n public get nativeElement(): any {\n return this._collectionView;\n }\n public get listView(): any {\n return this._collectionView;\n }\n\n @ViewChild('loader', { read: ViewContainerRef, static: true }) public loader: ViewContainerRef;\n @Output() public setupItemView = new EventEmitter<SetupItemViewArgs>();\n @ContentChild(TemplateRef, { read: TemplateRef, static: true }) public itemTemplateQuery: TemplateRef<ItemContext>;\n\n @Input() autoReuseViews = false;\n\n detachedLoaderFactory() {\n const ref = this.loader.createComponent(DetachedLoader, {\n index: 0\n });\n this.loader.detach(0);\n this._loaders.push(ref);\n return ref;\n }\n\n @Input()\n public get itemTemplate() {\n return this._itemTemplate;\n }\n public set itemTemplate(value: any) {\n this._itemTemplate = value;\n this._collectionView.refresh();\n }\n @Input()\n public get items() {\n return this._items;\n }\n public set items(value: any) {\n this._items = value;\n let needDiffer = true;\n if (value instanceof ObservableArray) {\n needDiffer = false;\n }\n if (needDiffer && !this._differ && isListLikeIterable(value)) {\n this._differ = this._iterableDiffers.find(this._items).create((_index, item) => item);\n }\n\n this._collectionView.items = this._items;\n }\n\n private _collectionView: CollectionView;\n private _items: any;\n private _differ: IterableDiffer<KeyedTemplate>;\n private _itemTemplate: TemplateRef<ItemContext>;\n private _templateMap: Map<string, KeyedTemplate>;\n private _loaders: ComponentRef<DetachedLoader>[];\n\n constructor(\n @Inject(ElementRef) private _elementRef: ElementRef,\n @Inject(IterableDiffers) private _iterableDiffers: IterableDiffers,\n @Inject(NativeScriptRendererFactory) private _renderer: NativeScriptRendererFactory,\n @Inject(NgZone) private _ngZone: NgZone\n ) {\n this._collectionView = _elementRef.nativeElement;\n\n this._collectionView.on(CollectionView.itemLoadingEvent, this.onItemLoading, this);\n this._collectionView.itemViewLoader = this.itemViewLoader;\n this._loaders = [];\n }\n\n private itemViewLoader = (viewType) =>\n this._ngZone.run(() => {\n switch (viewType) {\n case ListViewViewTypes.ItemView:\n if (this._itemTemplate && this.loader) {\n const typedView = this.getOrCreate(this._itemTemplate);\n return typedView;\n }\n break;\n }\n return null;\n });\n\n public ngAfterContentInit() {\n if (Trace.isEnabled()) {\n CLog(CLogTypes.info, 'CollectionView.ngAfterContentInit()');\n }\n this.setItemTemplates();\n }\n\n public ngOnDestroy() {\n this._collectionView.off(CollectionView.itemLoadingEvent, this.onItemLoading, this);\n this._collectionView = null;\n this._loaders.forEach((l) => l.destroy());\n this._loaders = null;\n this.viewToLoader = null;\n this.viewToTemplate = null;\n this.viewPool = null;\n\n this._items = null;\n this._differ = null;\n this._itemTemplate = null;\n if (this._templateMap) {\n this._templateMap.clear();\n }\n this._templateMap = null;\n }\n\n public ngDoCheck() {\n if (Trace.isEnabled()) {\n CLog(CLogTypes.info, 'ngDoCheck() - execute differ? ' + this._differ);\n }\n if (this._differ) {\n if (Trace.isEnabled()) {\n CLog(CLogTypes.info, 'ngDoCheck() - execute differ');\n }\n const changes = this._differ.diff(this._items);\n if (changes) {\n if (Trace.isEnabled()) {\n CLog(CLogTypes.info, 'ngDoCheck() - refresh');\n }\n this.refresh();\n }\n }\n }\n\n public registerTemplate(key: string, template: TemplateRef<ItemContext>) {\n if (Trace.isEnabled()) {\n CLog(CLogTypes.info, 'registerTemplate for key: ' + key);\n }\n if (!this._templateMap) {\n this._templateMap = new Map<string, KeyedTemplate>();\n }\n\n const keyedTemplate = {\n key,\n createView: this.getItemTemplateViewFactory(template)\n };\n\n this._templateMap.set(key, keyedTemplate);\n }\n\n @HostListener('itemLoading', ['$event'])\n public onItemLoading(args: CollectionViewItemEventData) {\n if (!args.view && !this.itemTemplate) {\n return;\n }\n if (!this.items) return;\n const index = args.index;\n const items = (args.object as any).items;\n const currentItem = typeof items.getItem === 'function' ? items.getItem(index) : items[index];\n let viewRef: EmbeddedViewRef<ItemContext>;\n\n if (Trace.isEnabled()) {\n CLog(CLogTypes.info, `onItemLoading: ${index} - Reusing existing view`);\n }\n\n viewRef = args.view[NG_VIEW];\n // Getting angular view from original element (in cases when ProxyViewContainer\n // is used NativeScript internally wraps it in a StackLayout)\n if (!viewRef && args.view instanceof LayoutBase && args.view.getChildrenCount() > 0) {\n viewRef = args.view.getChildAt(0)[NG_VIEW];\n }\n\n if (!viewRef && Trace.isEnabled()) {\n if (Trace.isEnabled()) {\n CLog(CLogTypes.info, `ViewReference not found for item ${index}. View recycling is not working`);\n }\n }\n\n if (!viewRef) {\n if (Trace.isEnabled()) {\n CLog(CLogTypes.info, `onItemLoading: ${index} - Creating view from template`);\n }\n\n viewRef = this.loader.createEmbeddedView(this.itemTemplate, new ItemContext(), 0);\n args.view = getItemViewRoot(viewRef);\n args.view[NG_VIEW] = viewRef;\n }\n\n this.setupViewRef(viewRef, currentItem, index);\n\n this.detectChangesOnChild(viewRef, index);\n }\n @HostListener('itemRecycling', ['$event'])\n public onItemRecyclingInternal(args: any) {\n if (!args.view) {\n return;\n }\n let ngView: EmbeddedViewRef<any> = args.view[NG_VIEW];\n\n // Getting angular view from original element (in cases when ProxyViewContainer\n // is used NativeScript internally wraps it in a StackLayout)\n if (!ngView && args.view instanceof LayoutBase && args.view.getChildrenCount() > 0) {\n ngView = args.view.getChildAt(0)[NG_VIEW];\n }\n // console.log('recycling', args.view);\n\n if (ngView) {\n ngView.detach();\n }\n }\n\n @HostListener('itemDisposing', ['$event'])\n public onItemDisposingInternal(args: any) {\n if (!args.view) {\n return;\n }\n let ngView: EmbeddedViewRef<any> = args.view[NG_VIEW];\n\n // Getting angular view from original element (in cases when ProxyViewContainer\n // is used NativeScript internally wraps it in a StackLayout)\n if (!ngView && args.view instanceof LayoutBase && args.view.getChildrenCount() > 0) {\n ngView = args.view.getChildAt(0)[NG_VIEW];\n }\n\n if (ngView) {\n ngView.detach();\n this.storeViewRef(ngView);\n }\n }\n\n public setupViewRef(view: EmbeddedViewRef<ItemContext>, data: any, index: number): void {\n const context = view.context;\n context.$implicit = data;\n context.item = data;\n context.index = index;\n context.even = index % 2 === 0;\n context.odd = !context.even;\n\n this.setupItemView.next({\n context,\n data,\n index,\n view\n });\n }\n\n protected getItemTemplateViewFactory(template: TemplateRef<ItemContext>): () => View {\n return () => {\n const viewRef = this.loader.createEmbeddedView(template, new ItemContext(), 0);\n const resultView = getItemViewRoot(viewRef);\n resultView[NG_VIEW] = viewRef;\n\n return resultView;\n };\n }\n viewPool = new Map<\n TemplateRef<ItemContext>,\n {\n scrapSize: number;\n scrapHead: Set<EmbeddedViewRef<ItemContext>>;\n }\n >();\n private storeViewRef(viewRef: EmbeddedViewRef<any>) {\n const templateRef = this.viewToTemplate.get(viewRef);\n if (templateRef) {\n const scrap = this.viewPool.get(templateRef);\n if (scrap) {\n if (scrap.scrapHead.size >= scrap.scrapSize) {\n viewRef.destroy();\n this.viewToLoader.get(viewRef)?.destroy();\n } else {\n scrap.scrapHead.add(viewRef);\n }\n }\n }\n }\n viewToTemplate = new WeakMap<EmbeddedViewRef<any>, TemplateRef<any>>();\n viewToLoader = new WeakMap<EmbeddedViewRef<any>, ComponentRef<DetachedLoader>>();\n\n private getOrCreate(templateRef: TemplateRef<ItemContext>) {\n return this._ngZone.run(() => {\n let viewRef = this.getView(templateRef);\n if (!viewRef) {\n const loader = this.detachedLoaderFactory();\n // viewRef = this.loader.createEmbeddedView(templateRef, new ItemContext(), 0);\n viewRef = loader.instance.vc.createEmbeddedView(templateRef, new ItemContext(), 0);\n this.viewToLoader.set(viewRef, loader);\n this.viewToTemplate.set(viewRef, templateRef);\n }\n viewRef.detach();\n const resultView = getItemViewRoot(viewRef);\n resultView[NG_VIEW] = viewRef;\n resultView.reusable = this.autoReuseViews;\n return resultView;\n });\n }\n private getView(templateRef: TemplateRef<ItemContext>) {\n const pool = this.getViewPool(templateRef);\n while (pool.scrapHead.size > 0) {\n const viewRef: EmbeddedViewRef<ItemContext> = pool.scrapHead.values().next().value;\n pool.scrapHead.delete(viewRef);\n if (!viewRef.destroyed) {\n return viewRef;\n }\n }\n return null;\n }\n\n private getViewPool(templateRef: TemplateRef<ItemContext>) {\n if (!this.viewPool.has(templateRef)) {\n this.viewPool.set(templateRef, {\n scrapSize: this.autoReuseViews ? Infinity : 0,\n scrapHead: new Set<EmbeddedViewRef<ItemContext>>()\n });\n }\n return this.viewPool.get(templateRef);\n }\n\n private setItemTemplates() {\n // The itemTemplateQuery may be changed after list items are added that contain <template> inside,\n // so cache and use only the original template to avoid errors.\n this.itemTemplate = this.itemTemplateQuery;\n\n if (this._templateMap) {\n if (Trace.isEnabled()) {\n CLog(CLogTypes.info, 'Setting templates');\n }\n\n const templates: KeyedTemplate[] = [];\n this._templateMap.forEach((value) => {\n templates.push(value);\n });\n this._collectionView.itemTemplates = templates;\n } else {\n // If the map was not initialized this means that there are no named templates, so we register the default one.\n this._collectionView.itemTemplate = this.getItemTemplateViewFactory(this.itemTemplate);\n }\n }\n\n private detectChangesOnChild(viewRef: EmbeddedViewRef<ItemContext>, index: number) {\n if (Trace.isEnabled()) {\n CLog(CLogTypes.info, 'Manually detect changes in child: ' + index);\n }\n viewRef.markForCheck();\n viewRef.detectChanges();\n }\n\n private refresh() {\n if (this._collectionView) {\n this._collectionView.refresh();\n }\n }\n}\n\nexport interface ComponentView {\n rootNodes: any[];\n destroy(): void;\n}\n\nexport type RootLocator = (nodes: any[], nestLevel: number) => View;\n\nexport function getItemViewRoot(viewRef: ComponentView, rootLocator: RootLocator = extractSingleViewRecursive): View {\n const rootView = rootLocator(viewRef.rootNodes, 0);\n return rootView;\n}\n\n@Directive({ selector: '[cvTemplateKey]' })\nexport class TemplateKeyDirective {\n constructor(private templateRef: TemplateRef<any>, @Host() private collectionView: CollectionViewComponent) {}\n\n @Input()\n set cvTemplateKey(value: any) {\n if (Trace.isEnabled()) {\n CLog(CLogTypes.info, 'cvTemplateKey: ' + value);\n }\n if (this.collectionView && this.templateRef) {\n this.collectionView.registerTemplate(value.toLowerCase(), this.templateRef);\n }\n }\n}\n","// External\nimport { NO_ERRORS_SCHEMA, NgModule } from '@angular/core';\n\nimport { CollectionViewComponent, TemplateKeyDirective } from './collectionview-comp';\nexport { CollectionViewComponent, TemplateKeyDirective } from './collectionview-comp';\n\n@NgModule({\n declarations: [CollectionViewComponent, TemplateKeyDirective],\n exports: [CollectionViewComponent, TemplateKeyDirective],\n schemas: [NO_ERRORS_SCHEMA]\n})\nexport class CollectionViewModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["isListLikeIterable"],"mappings":"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"}
|