@wavemaker/app-ng-runtime 12.0.0-next.141184 → 12.0.0-next.141186
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.
- app-ng-runtime/components/data/table/bundles/index.umd.js +5 -1
- app-ng-runtime/components/data/table/esm2022/table.component.mjs +5 -2
- app-ng-runtime/components/data/table/esm2022/table.props.mjs +2 -1
- app-ng-runtime/components/data/table/fesm2022/index.mjs +5 -1
- app-ng-runtime/components/data/table/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/table/table.component.d.ts +2 -0
- app-ng-runtime/components/input/default/bundles/index.umd.js +3 -3
- app-ng-runtime/components/input/default/esm2022/number/number.component.mjs +4 -4
- app-ng-runtime/components/input/default/fesm2022/index.mjs +3 -3
- app-ng-runtime/components/input/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/popover/bundles/index.umd.js +20 -4
- app-ng-runtime/components/navigation/popover/esm2022/popover.component.mjs +22 -6
- app-ng-runtime/components/navigation/popover/fesm2022/index.mjs +20 -4
- app-ng-runtime/components/navigation/popover/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/popover/popover.component.d.ts +4 -3
- app-ng-runtime/package.json +1 -1
- app-ng-runtime/scripts/datatable/datatable.js +23 -26
|
@@ -78,9 +78,10 @@
|
|
|
78
78
|
class PopoverComponent extends base.StylableComponent {
|
|
79
79
|
static { this.initializeProps = registerProps(); }
|
|
80
80
|
static { this.activePopovers = []; }
|
|
81
|
-
constructor(inj, app, explicitContext) {
|
|
81
|
+
constructor(inj, app, explicitContext, cdr) {
|
|
82
82
|
super(inj, WIDGET_CONFIG, explicitContext);
|
|
83
83
|
this.app = app;
|
|
84
|
+
this.cdr = cdr;
|
|
84
85
|
this.isOpen = false;
|
|
85
86
|
this.canPopoverOpen = true;
|
|
86
87
|
this.isClosingProgrammatically = false;
|
|
@@ -94,10 +95,23 @@
|
|
|
94
95
|
if (!this.isOpen)
|
|
95
96
|
return;
|
|
96
97
|
const target = event.target;
|
|
98
|
+
// Check if the clicked element or any of its parents is part of the datepicker, dropdown, or typeahead containers
|
|
99
|
+
const isInsideSpecialContainer = !!(target.closest('.bs-datepicker-container') ||
|
|
100
|
+
target.closest(".dropdown-menu"));
|
|
101
|
+
if (isInsideSpecialContainer) {
|
|
102
|
+
// If the click was inside one of these containers, we do not close the popover
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
97
105
|
const clickedPopoverIndex = PopoverComponent.activePopovers.findIndex(popover => {
|
|
98
106
|
const popoverContainer = document.querySelector(`.${popover.popoverContainerCls}`);
|
|
99
107
|
return popoverContainer?.contains(target);
|
|
100
108
|
});
|
|
109
|
+
if (this.anchorRef.nativeElement.contains(target)) {
|
|
110
|
+
event.preventDefault();
|
|
111
|
+
event.stopPropagation();
|
|
112
|
+
this.isOpen ? this.close() : this.open();
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
101
115
|
if (clickedPopoverIndex === -1) {
|
|
102
116
|
// Click is outside all popovers
|
|
103
117
|
if (this.outsideclick) {
|
|
@@ -137,6 +151,7 @@
|
|
|
137
151
|
if (!PopoverComponent.activePopovers.includes(this)) {
|
|
138
152
|
PopoverComponent.activePopovers.push(this);
|
|
139
153
|
}
|
|
154
|
+
this.cdr.detectChanges();
|
|
140
155
|
}
|
|
141
156
|
// This mehtod is used to hide/close the popover.
|
|
142
157
|
close() {
|
|
@@ -148,6 +163,7 @@
|
|
|
148
163
|
if (index > -1) {
|
|
149
164
|
PopoverComponent.activePopovers.splice(index, 1);
|
|
150
165
|
}
|
|
166
|
+
this.cdr.detectChanges();
|
|
151
167
|
}
|
|
152
168
|
}
|
|
153
169
|
// Trigger on hiding popover
|
|
@@ -379,7 +395,7 @@
|
|
|
379
395
|
PopoverComponent.activePopovers.splice(index, 1);
|
|
380
396
|
}
|
|
381
397
|
}
|
|
382
|
-
static { this.ɵfac = function PopoverComponent_Factory(t) { return new (t || PopoverComponent)(i0__namespace.ɵɵdirectiveInject(i0__namespace.Injector), i0__namespace.ɵɵdirectiveInject(i1__namespace.App), i0__namespace.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
|
|
398
|
+
static { this.ɵfac = function PopoverComponent_Factory(t) { return new (t || PopoverComponent)(i0__namespace.ɵɵdirectiveInject(i0__namespace.Injector), i0__namespace.ɵɵdirectiveInject(i1__namespace.App), i0__namespace.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8), i0__namespace.ɵɵdirectiveInject(i0__namespace.ChangeDetectorRef)); }; }
|
|
383
399
|
static { this.ɵcmp = /*@__PURE__*/ i0__namespace.ɵɵdefineComponent({ type: PopoverComponent, selectors: [["wm-popover"]], contentQueries: function PopoverComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
|
|
384
400
|
i0__namespace.ɵɵcontentQuery(dirIndex, i0.TemplateRef, 5);
|
|
385
401
|
i0__namespace.ɵɵcontentQuery(dirIndex, _c0, 5);
|
|
@@ -418,7 +434,7 @@
|
|
|
418
434
|
args: ['EXPLICIT_CONTEXT']
|
|
419
435
|
}, {
|
|
420
436
|
type: i0.Optional
|
|
421
|
-
}] }], { bsPopoverDirective: [{
|
|
437
|
+
}] }, { type: i0__namespace.ChangeDetectorRef }], { bsPopoverDirective: [{
|
|
422
438
|
type: i0.ViewChild,
|
|
423
439
|
args: [i4.PopoverDirective]
|
|
424
440
|
}], anchorRef: [{
|
|
@@ -431,7 +447,7 @@
|
|
|
431
447
|
type: i0.ContentChild,
|
|
432
448
|
args: ['partial']
|
|
433
449
|
}] }); })();
|
|
434
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0__namespace.ɵsetClassDebugInfo(PopoverComponent, { className: "PopoverComponent", filePath: "popover.component.ts", lineNumber:
|
|
450
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0__namespace.ɵsetClassDebugInfo(PopoverComponent, { className: "PopoverComponent", filePath: "popover.component.ts", lineNumber: 60 }); })();
|
|
435
451
|
|
|
436
452
|
const components = [
|
|
437
453
|
PopoverComponent
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, ContentChild, ElementRef, Inject, Injector, Optional, TemplateRef, ViewChild } from '@angular/core';
|
|
1
|
+
import { ChangeDetectorRef, Component, ContentChild, ElementRef, Inject, Injector, Optional, TemplateRef, ViewChild } from '@angular/core';
|
|
2
2
|
import { PopoverDirective } from 'ngx-bootstrap/popover';
|
|
3
3
|
import { addClass, adjustContainerPosition, adjustContainerRightEdges, App, findRootContainer, setCSSFromObj } from '@wm/core';
|
|
4
4
|
import { AUTOCLOSE_TYPE, getContainerTargetClass, provideAsWidgetRef, StylableComponent, styler } from '@wm/components/base';
|
|
@@ -25,9 +25,10 @@ let activePopover;
|
|
|
25
25
|
export class PopoverComponent extends StylableComponent {
|
|
26
26
|
static { this.initializeProps = registerProps(); }
|
|
27
27
|
static { this.activePopovers = []; }
|
|
28
|
-
constructor(inj, app, explicitContext) {
|
|
28
|
+
constructor(inj, app, explicitContext, cdr) {
|
|
29
29
|
super(inj, WIDGET_CONFIG, explicitContext);
|
|
30
30
|
this.app = app;
|
|
31
|
+
this.cdr = cdr;
|
|
31
32
|
this.isOpen = false;
|
|
32
33
|
this.canPopoverOpen = true;
|
|
33
34
|
this.isClosingProgrammatically = false;
|
|
@@ -41,10 +42,23 @@ export class PopoverComponent extends StylableComponent {
|
|
|
41
42
|
if (!this.isOpen)
|
|
42
43
|
return;
|
|
43
44
|
const target = event.target;
|
|
45
|
+
// Check if the clicked element or any of its parents is part of the datepicker, dropdown, or typeahead containers
|
|
46
|
+
const isInsideSpecialContainer = !!(target.closest('.bs-datepicker-container') ||
|
|
47
|
+
target.closest(".dropdown-menu"));
|
|
48
|
+
if (isInsideSpecialContainer) {
|
|
49
|
+
// If the click was inside one of these containers, we do not close the popover
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
44
52
|
const clickedPopoverIndex = PopoverComponent.activePopovers.findIndex(popover => {
|
|
45
53
|
const popoverContainer = document.querySelector(`.${popover.popoverContainerCls}`);
|
|
46
54
|
return popoverContainer?.contains(target);
|
|
47
55
|
});
|
|
56
|
+
if (this.anchorRef.nativeElement.contains(target)) {
|
|
57
|
+
event.preventDefault();
|
|
58
|
+
event.stopPropagation();
|
|
59
|
+
this.isOpen ? this.close() : this.open();
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
48
62
|
if (clickedPopoverIndex === -1) {
|
|
49
63
|
// Click is outside all popovers
|
|
50
64
|
if (this.outsideclick) {
|
|
@@ -84,6 +98,7 @@ export class PopoverComponent extends StylableComponent {
|
|
|
84
98
|
if (!PopoverComponent.activePopovers.includes(this)) {
|
|
85
99
|
PopoverComponent.activePopovers.push(this);
|
|
86
100
|
}
|
|
101
|
+
this.cdr.detectChanges();
|
|
87
102
|
}
|
|
88
103
|
// This mehtod is used to hide/close the popover.
|
|
89
104
|
close() {
|
|
@@ -95,6 +110,7 @@ export class PopoverComponent extends StylableComponent {
|
|
|
95
110
|
if (index > -1) {
|
|
96
111
|
PopoverComponent.activePopovers.splice(index, 1);
|
|
97
112
|
}
|
|
113
|
+
this.cdr.detectChanges();
|
|
98
114
|
}
|
|
99
115
|
}
|
|
100
116
|
// Trigger on hiding popover
|
|
@@ -326,7 +342,7 @@ export class PopoverComponent extends StylableComponent {
|
|
|
326
342
|
PopoverComponent.activePopovers.splice(index, 1);
|
|
327
343
|
}
|
|
328
344
|
}
|
|
329
|
-
static { this.ɵfac = function PopoverComponent_Factory(t) { return new (t || PopoverComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.App), i0.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
|
|
345
|
+
static { this.ɵfac = function PopoverComponent_Factory(t) { return new (t || PopoverComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.App), i0.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
|
|
330
346
|
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PopoverComponent, selectors: [["wm-popover"]], contentQueries: function PopoverComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
|
|
331
347
|
i0.ɵɵcontentQuery(dirIndex, TemplateRef, 5);
|
|
332
348
|
i0.ɵɵcontentQuery(dirIndex, _c0, 5);
|
|
@@ -365,7 +381,7 @@ export class PopoverComponent extends StylableComponent {
|
|
|
365
381
|
args: ['EXPLICIT_CONTEXT']
|
|
366
382
|
}, {
|
|
367
383
|
type: Optional
|
|
368
|
-
}] }], { bsPopoverDirective: [{
|
|
384
|
+
}] }, { type: i0.ChangeDetectorRef }], { bsPopoverDirective: [{
|
|
369
385
|
type: ViewChild,
|
|
370
386
|
args: [PopoverDirective]
|
|
371
387
|
}], anchorRef: [{
|
|
@@ -378,5 +394,5 @@ export class PopoverComponent extends StylableComponent {
|
|
|
378
394
|
type: ContentChild,
|
|
379
395
|
args: ['partial']
|
|
380
396
|
}] }); })();
|
|
381
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PopoverComponent, { className: "PopoverComponent", filePath: "popover.component.ts", lineNumber:
|
|
382
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvbmF2aWdhdGlvbi9wb3BvdmVyL3NyYy9wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9uYXZpZ2F0aW9uL3BvcG92ZXIvc3JjL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBRVIsUUFBUSxFQUNSLFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsT0FBTyxFQUNILFFBQVEsRUFDUix1QkFBdUIsRUFDdkIseUJBQXlCLEVBQ3pCLEdBQUcsRUFDSCxpQkFBaUIsRUFDakIsYUFBYSxFQUNoQixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQ0gsY0FBYyxFQUNkLHVCQUF1QixFQUV2QixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDVCxNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7O0FBSTlDLE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFDO0FBQzFDLE1BQU0sYUFBYSxHQUFrQjtJQUNqQyxVQUFVLEVBQUUsWUFBWTtJQUN4QixTQUFTLEVBQUUsV0FBVztDQUN6QixDQUFDO0FBRUYsTUFBTSxTQUFTLEdBQUc7SUFDZCxLQUFLLEVBQUUsT0FBTztJQUNkLEtBQUssRUFBRSxrQkFBa0I7SUFDekIsT0FBTyxFQUFFLGtCQUFrQjtDQUM5QixDQUFDO0FBRUYsSUFBSSxhQUErQixDQUFDO0FB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REEsQUFEQSxBQURBLEFBREEsQUFERCw2Q0FBMkIsK0JBQ0EsMkJBQ0osbUNBQ1Esa0NBQ0QsdUJBQ1gsK0NBSXdCLHNCQUN6QiwwQkFDSSxrQkFDUiw2REFFbUMsMENBQ1g7Ozs7aUZEMkM1QixnQkFBZ0I7Y0FSNUIsU0FBUzsyQkFDSSxZQUFZLGFBRVg7b0JBQ1Asa0JBQWtCLGtCQUFrQjtpQkFDdkM7O3NCQTZDNkMsTUFBTTt1QkFBQyxrQkFBa0I7O3NCQUFHLFFBQVE7cUJBTDdDLGtCQUFrQjtrQkFBdEQsU0FBUzttQkFBQyxnQkFBZ0I7WUFDWSxTQUFTO2tCQUEvQyxTQUFTO21CQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFDVixlQUFlO2tCQUF6QyxZQUFZO21CQUFDLFdBQVc7WUFDQSxVQUFVO2tCQUFsQyxZQUFZO21CQUFDLFNBQVM7O2tGQXhDZCxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1BvcG92ZXJEaXJlY3RpdmV9IGZyb20gJ25neC1ib290c3RyYXAvcG9wb3Zlcic7XG5cbmltcG9ydCB7XG4gICAgYWRkQ2xhc3MsXG4gICAgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24sXG4gICAgYWRqdXN0Q29udGFpbmVyUmlnaHRFZGdlcyxcbiAgICBBcHAsXG4gICAgZmluZFJvb3RDb250YWluZXIsXG4gICAgc2V0Q1NTRnJvbU9ialxufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQge1xuICAgIEFVVE9DTE9TRV9UWVBFLFxuICAgIGdldENvbnRhaW5lclRhcmdldENsYXNzLFxuICAgIElXaWRnZXRDb25maWcsXG4gICAgcHJvdmlkZUFzV2lkZ2V0UmVmLFxuICAgIFN0eWxhYmxlQ29tcG9uZW50LFxuICAgIHN0eWxlclxufSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcblxuaW1wb3J0IHtyZWdpc3RlclByb3BzfSBmcm9tICcuL3BvcG92ZXIucHJvcHMnO1xuXG5kZWNsYXJlIGNvbnN0ICQ7XG5cbmNvbnN0IERFRkFVTFRfQ0xTID0gJ2FwcC1wb3BvdmVyLXdyYXBwZXInO1xuY29uc3QgV0lER0VUX0NPTkZJRzogSVdpZGdldENvbmZpZyA9IHtcbiAgICB3aWRnZXRUeXBlOiAnd20tcG9wb3ZlcicsXG4gICAgaG9zdENsYXNzOiBERUZBVUxUX0NMU1xufTtcblxuY29uc3QgZXZlbnRzTWFwID0ge1xuICAgIGNsaWNrOiAnY2xpY2snLFxuICAgIGhvdmVyOiAnbW91c2VlbnRlcjpjbGljaycsXG4gICAgZGVmYXVsdDogJ2NsaWNrIG1vdXNlZW50ZXInXG59O1xuXG5sZXQgYWN0aXZlUG9wb3ZlcjogUG9wb3ZlckNvbXBvbmVudDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd3bS1wb3BvdmVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcG9wb3Zlci5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihQb3BvdmVyQ29tcG9uZW50KVxuICAgIF1cbn0pXG5cbmV4cG9ydCBjbGFzcyBQb3BvdmVyQ29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG5cbiAgICBwdWJsaWMgZXZlbnQ6IHN0cmluZztcbiAgICBwdWJsaWMgaXNPcGVuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBjbG9zZVBvcG92ZXJUaW1lb3V0O1xuICAgIHB1YmxpYyByZWFkb25seSBwb3BvdmVyQ29udGFpbmVyQ2xzO1xuICAgIHB1YmxpYyBjYW5Qb3BvdmVyT3BlbiA9IHRydWU7XG4gICAgcHJpdmF0ZSBXaWRnZXRzO1xuICAgIHByaXZhdGUgVmFyaWFibGVzO1xuICAgIHByaXZhdGUgQWN0aW9ucztcblxuICAgIHB1YmxpYyBpbnRlcmFjdGlvbjogc3RyaW5nO1xuICAgIHB1YmxpYyBwb3BvdmVyYXJyb3c6IGJvb2xlYW47XG4gICAgcHVibGljIHBvcG92ZXJ3aWR0aDogc3RyaW5nO1xuICAgIHB1YmxpYyBwb3BvdmVyaGVpZ2h0OiBzdHJpbmc7XG4gICAgcHVibGljIGNvbnRlbnRhbmltYXRpb246IHN0cmluZztcbiAgICBwdWJsaWMgY29udGVudHNvdXJjZTogc3RyaW5nO1xuICAgIHB1YmxpYyBjb250ZW50OiBzdHJpbmc7XG4gICAgcHVibGljIHBvcG92ZXJwbGFjZW1lbnQ6IHN0cmluZztcbiAgICBwdWJsaWMgb3V0c2lkZWNsaWNrOiBib29sZWFuO1xuICAgIHB1YmxpYyBhdXRvY2xvc2U6IHN0cmluZztcblxuICAgIHB1YmxpYyBjbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyB0aXRsZTogc3RyaW5nO1xuICAgIHB1YmxpYyB0YWJpbmRleDogYW55O1xuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG4gICAgcHVibGljIGFkYXB0aXZlcG9zaXRpb246Ym9vbGVhbjtcbiAgICBwdWJsaWMgY29udGFpbmVyVGFyZ2V0OiBzdHJpbmc7XG4gICAgcHVibGljIGhpbnQ6IHN0cmluZztcbiAgICBwdWJsaWMgYXJpYWxhYmVsOiBzdHJpbmc7XG4gICAgcHVibGljIGNhcHRpb246IHN0cmluZztcbiAgICBwdWJsaWMgYmFkZ2V2YWx1ZTogc3RyaW5nO1xuICAgIHByaXZhdGUgZG9jdW1lbnRDbGlja0hhbmRsZXI6IChlOiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICAgIHByaXZhdGUgaXNDbG9zaW5nUHJvZ3JhbW1hdGljYWxseSA9IGZhbHNlO1xuICAgIHByaXZhdGUgc3RhdGljIGFjdGl2ZVBvcG92ZXJzOiBQb3BvdmVyQ29tcG9uZW50W10gPSBbXTtcblxuICAgIEBWaWV3Q2hpbGQoUG9wb3ZlckRpcmVjdGl2ZSkgcHJpdmF0ZSBic1BvcG92ZXJEaXJlY3RpdmU7XG4gICAgQFZpZXdDaGlsZCgnYW5jaG9yJywgeyBzdGF0aWM6IHRydWUgfSkgYW5jaG9yUmVmOiBFbGVtZW50UmVmO1xuICAgIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpIHBvcG92ZXJUZW1wbGF0ZTtcbiAgICBAQ29udGVudENoaWxkKCdwYXJ0aWFsJykgcGFydGlhbFJlZjtcblxuICAgIGNvbnN0cnVjdG9yKGluajogSW5qZWN0b3IsIHByaXZhdGUgYXBwOiBBcHAsIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueSkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCk7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbnRhaW5lckNscyA9IGBhcHAtcG9wb3Zlci0ke3RoaXMud2lkZ2V0SWR9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwRG9jdW1lbnRDbGlja0hhbmRsZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50Q2xpY2tIYW5kbGVyKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZG9jdW1lbnRDbGlja0hhbmRsZXIsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kb2N1bWVudENsaWNrSGFuZGxlciA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzT3BlbikgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBjbGlja2VkUG9wb3ZlckluZGV4ID0gUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5maW5kSW5kZXgocG9wb3ZlciA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9wb3ZlckNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke3BvcG92ZXIucG9wb3ZlckNvbnRhaW5lckNsc31gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcG9wb3ZlckNvbnRhaW5lcj8uY29udGFpbnModGFyZ2V0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoY2xpY2tlZFBvcG92ZXJJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAvLyBDbGljayBpcyBvdXRzaWRlIGFsbCBwb3BvdmVyc1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm91dHNpZGVjbGljaykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQWxsUG9wb3ZlcnMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIENsaWNrIGlzIGluc2lkZSBhIHBvcG92ZXJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlSW5uZXJQb3BvdmVycyhjbGlja2VkUG9wb3ZlckluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZG9jdW1lbnRDbGlja0hhbmRsZXIsIHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VBbGxQb3BvdmVycygpIHtcbiAgICAgICAgUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5mb3JFYWNoKHBvcG92ZXIgPT4ge1xuICAgICAgICAgICAgaWYgKHBvcG92ZXIub3V0c2lkZWNsaWNrKSB7XG4gICAgICAgICAgICAgICAgcG9wb3Zlci5pc0Nsb3NpbmdQcm9ncmFtbWF0aWNhbGx5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwb3BvdmVyLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VJbm5lclBvcG92ZXJzKGNsaWNrZWRJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSBjbGlja2VkSW5kZXggKyAxOyBpIDwgUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcG9wb3ZlciA9IFBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnNbaV07XG4gICAgICAgICAgICBpZiAocG9wb3Zlci5vdXRzaWRlY2xpY2spIHtcbiAgICAgICAgICAgICAgICBwb3BvdmVyLmlzQ2xvc2luZ1Byb2dyYW1tYXRpY2FsbHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHBvcG92ZXIuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNDaGlsZFBvcG92ZXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhISQodGhpcy5uYXRpdmVFbGVtZW50KS5jbG9zZXN0KCcucG9wb3ZlcicpLmxlbmd0aDtcbiAgICB9XG4gICAgLy8gVGhpcyBtZWh0b2QgaXMgdXNlZCB0byBzaG93L29wZW4gdGhlIHBvcG92ZXIuIFRoaXMgcmVmZXJzIHRvIHRoZSBzYW1lIG1ldGhvZCBzaG93UG9wb3Zlci5cbiAgICBwdWJsaWMgb3BlbigpIHtcbiAgICAgICAgdGhpcy5zaG93UG9wb3ZlcigpO1xuICAgICAgICBpZiAoIVBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnMuaW5jbHVkZXModGhpcykpIHtcbiAgICAgICAgICAgIFBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnMucHVzaCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgbWVodG9kIGlzIHVzZWQgdG8gaGlkZS9jbG9zZSB0aGUgcG9wb3Zlci5cbiAgICBwdWJsaWMgY2xvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5pc0Nsb3NpbmdQcm9ncmFtbWF0aWNhbGx5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmJzUG9wb3ZlckRpcmVjdGl2ZS5oaWRlKCk7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IFBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnMuaW5kZXhPZih0aGlzKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlciBvbiBoaWRpbmcgcG9wb3ZlclxuICAgIHB1YmxpYyBvbkhpZGRlbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ2hpbGRQb3BvdmVyKCkgfHwgdGhpcy5pc0Nsb3NpbmdQcm9ncmFtbWF0aWNhbGx5KSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2hpZGUnLCB7JGV2ZW50OiB7dHlwZTogJ2hpZGUnfX0pO1xuICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChhY3RpdmVQb3BvdmVyID09PSB0aGlzKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlUG9wb3ZlciA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0Nsb3NpbmdQcm9ncmFtbWF0aWNhbGx5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRGb2N1c1RvUG9wb3ZlckxpbmsoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hbmNob3JSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpLCAxMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGp1c3RQb3BvdmVyQXJyb3dQb3NpdGlvbihwb3BvdmVyRWxlbSwgcG9wb3ZlckxlZnRTaGlmdCkge1xuICAgICAgICB0aGlzLmJzUG9wb3ZlckRpcmVjdGl2ZS5fcG9wb3Zlci5fbmdab25lLm9uU3RhYmxlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBwb3BvdmVyRWxlbS5maW5kKCcucG9wb3Zlci1hcnJvdycpLmNzcygnbGVmdCcsIHBvcG92ZXJMZWZ0U2hpZnQgKyAncHgnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVQb3BvdmVyUG9zdGlvbihlbGVtZW50KSB7XG5cbiAgICAgICAgY29uc3QgcG9wb3ZlckVsZW0gPSAkKGVsZW1lbnQpO1xuICAgICAgICBsZXQgcG9wb3ZlckxlZnQgPSAgcG9wb3ZlckVsZW0ub2Zmc2V0KCkubGVmdDtcbiAgICAgICAgY29uc3QgcG9wb3ZlcldpZHRoID0gcG9wb3ZlckVsZW1bMF0ub2Zmc2V0V2lkdGg7XG4gICAgICAgIGNvbnN0IHZpZXdQb3J0V2lkdGggPSAkKHdpbmRvdykud2lkdGgoKTtcbiAgICAgICAgY29uc3QgcGFyZW50RGltZXNpb24gPSB0aGlzLmFuY2hvclJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAvLyBBZGp1c3RpbmcgcG9wb3ZlciBwb3NpdGlvbiwgaWYgaXQgaXMgbm90IHZpc2libGUgYXQgbGVmdCBzaWRlXG4gICAgICAgIGlmIChwb3BvdmVyTGVmdCA8IDApIHtcbiAgICAgICAgICAgIGFkanVzdENvbnRhaW5lclBvc2l0aW9uKHBvcG92ZXJFbGVtLCB0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLl9wb3BvdmVyKTtcbiAgICAgICAgICAgIGNvbnN0IHBvcG92ZXJMZWZ0U2hpZnQgPSA0O1xuICAgICAgICAgICAgY29uc3QgYXJyb3dMZWZ0U2hpZnQgPSAocGFyZW50RGltZXNpb24ubGVmdCArIChwYXJlbnREaW1lc2lvbi53aWR0aCAvIDIpKSAtIHBvcG92ZXJMZWZ0U2hpZnQ7XG4gICAgICAgICAgICB0aGlzLmFkanVzdFBvcG92ZXJBcnJvd1Bvc2l0aW9uKHBvcG92ZXJFbGVtLCBhcnJvd0xlZnRTaGlmdCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWRqdXN0aW5nIHBvcG92ZXIgcG9zaXRpb24sIGlmIGl0IGlzIG5vdCB2aXNpYmxlIGF0IHJpZ2h0IHNpZGVcbiAgICAgICAgaWYgKHBvcG92ZXJMZWZ0ICsgcG9wb3ZlcldpZHRoID4gdmlld1BvcnRXaWR0aCkge1xuICAgICAgICAgICAgYWRqdXN0Q29udGFpbmVyUmlnaHRFZGdlcyhwb3BvdmVyRWxlbSwgdGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzLmJzUG9wb3ZlckRpcmVjdGl2ZS5fcG9wb3Zlcik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBwb3BvdmVyTGVmdCA9IHBvcG92ZXJFbGVtLm9mZnNldCgpLmxlZnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9wb3ZlckxlZnRBZGp1c3QgPSAocG9wb3ZlckxlZnQgKyBwb3BvdmVyV2lkdGgpIC0gdmlld1BvcnRXaWR0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3BvdmVyTGVmdFNoaWZ0ID0gIHBvcG92ZXJMZWZ0IC0gcG9wb3ZlckxlZnRBZGp1c3Q7XG4gICAgICAgICAgICAgICAgbGV0IGFycm93TGVmdFNoaWZ0IDtcbiAgICAgICAgICAgICAgICBpZihwb3BvdmVyTGVmdDw9MTAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXJyb3dMZWZ0U2hpZnQgPSAgKHBhcmVudERpbWVzaW9uLmxlZnQgKyAocGFyZW50RGltZXNpb24ud2lkdGggLyAyKSkgLSBwb3BvdmVyTGVmdDtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgYXJyb3dMZWZ0U2hpZnQgPSAocGFyZW50RGltZXNpb24ubGVmdCArIChwYXJlbnREaW1lc2lvbi53aWR0aCAvIDIpKSAtIHBvcG92ZXJMZWZ0U2hpZnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKHZpZXdQb3J0V2lkdGggPiA1MDApe1xuICAgICAgICAgICAgICAgICAgICBhcnJvd0xlZnRTaGlmdCArPSAzMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICB0aGlzLmFkanVzdFBvcG92ZXJBcnJvd1Bvc2l0aW9uKHBvcG92ZXJFbGVtLCBhcnJvd0xlZnRTaGlmdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRyaWdnZXIgb24gc2hvd2luZyBwb3BvdmVyXG4gICAgcHVibGljIG9uU2hvd24oKSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBmaW5kUm9vdENvbnRhaW5lcih0aGlzLiRlbGVtZW50KTtcbiAgICAgICAgLy8gaWYgcGFnZSBzdHlsZXMgaGF2ZSB0byBiZSBhcHBsaWVkIHRvIHBvcG92ZXIgdGhlbiBwb3BvdmVyIGhhcyB0byBiZSBjaGlsZCBvZiBwYWdlIGVsZW1lbnQuXG4gICAgICAgIGlmIChyb290KSB7XG4gICAgICAgICAgICAkKCdib2R5ID4gcG9wb3Zlci1jb250YWluZXInKS53cmFwKCc8JyArIHJvb3QgKyAnLz4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGaXggZm9yIFtXTVMtMjUxMjVdOiBOb3QgY2xvc2luZyB0aGUgZXhpc3Rpbmcgb3BlbmVkIHBvcG92ZXJzIHdoZW4gdGhlIGF1dG9jbG9zZSBwcm9wZXJ0eSBpcyBESVNBQkxFRFxuICAgICAgICBpZiAoIXRoaXMuaXNDaGlsZFBvcG92ZXIoKSkge1xuICAgICAgICAgICAgaWYgKGFjdGl2ZVBvcG92ZXIgJiYgYWN0aXZlUG9wb3ZlciAhPT0gdGhpcyAmJiBcbiAgICAgICAgICAgICAgICBhY3RpdmVQb3BvdmVyLmF1dG9jbG9zZSAhPT0gQVVUT0NMT1NFX1RZUEUuRElTQUJMRUQpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVQb3BvdmVyLmlzQ2xvc2luZ1Byb2dyYW1tYXRpY2FsbHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGFjdGl2ZVBvcG92ZXIuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjdGl2ZVBvcG92ZXIgPSB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgICAgICBpZiAoIVBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnMuaW5jbHVkZXModGhpcykpIHtcbiAgICAgICAgICAgIFBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnMucHVzaCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb3BvdmVyQ29udGFpbmVyICA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke3RoaXMucG9wb3ZlckNvbnRhaW5lckNsc31gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKHBvcG92ZXJDb250YWluZXIpIHtcbiAgICAgICAgICAgIHBvcG92ZXJDb250YWluZXIuc2V0QXR0cmlidXRlKCdkYXRhLXBvcG92ZXItaWQnLCB0aGlzLndpZGdldElkKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gQWRkIGNsaWNrIGV2ZW50IGxpc3RlbmVyIHRvIHN0b3AgcHJvcGFnYXRpb25cbiAgICAgICAgICAgIHBvcG92ZXJDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzZXRDU1NGcm9tT2JqKHBvcG92ZXJDb250YWluZXIsIHtcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5wb3BvdmVyaGVpZ2h0LFxuICAgICAgICAgICAgbWluV2lkdGg6IHRoaXMucG9wb3ZlcndpZHRoLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMucG9wb3ZlcndpZHRoXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXRoaXMucG9wb3ZlcmFycm93KSB7XG4gICAgICAgICAgICBhZGRDbGFzcyhwb3BvdmVyQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5hcnJvdycpIGFzIEhUTUxFbGVtZW50LCAnaGlkZGVuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW50ZXJhY3Rpb24gPT09ICdob3ZlcicgfHwgdGhpcy5pbnRlcmFjdGlvbiA9PT0gJ2RlZmF1bHQnKSB7XG5cbiAgICAgICAgICAgIC8vIGRvIG5vdCB1c2UgYWRkRXZlbnRMaXN0ZW5lciBoZXJlXG4gICAgICAgICAgICAvLyBhdHRhY2hpbmcgdGhlIGV2ZW50IHRoaXMgd2F5IHdpbGwgb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIGV2ZW50IGhhbmRsZXJzXG4gICAgICAgICAgICBwb3BvdmVyQ29udGFpbmVyLm9ubW91c2VlbnRlciA9ICgpID0+IGNsZWFyVGltZW91dCh0aGlzLmNsb3NlUG9wb3ZlclRpbWVvdXQpO1xuICAgICAgICAgICAgcG9wb3ZlckNvbnRhaW5lci5vbm1vdXNlbGVhdmUgPSAoKSA9PiB0aGlzLmhpZGVQb3BvdmVyKCk7XG4gICAgICAgICAgICB0aGlzLmFuY2hvclJlZi5uYXRpdmVFbGVtZW50Lm9ubW91c2VlbnRlciA9ICgpID0+IGNsZWFyVGltZW91dCh0aGlzLmNsb3NlUG9wb3ZlclRpbWVvdXQpO1xuICAgICAgICAgICAgdGhpcy5hbmNob3JSZWYubmF0aXZlRWxlbWVudC5vbm1vdXNlbGVhdmUgPSAoKSA9PiB0aGlzLmhpZGVQb3BvdmVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3V0c2lkZWNsaWNrKSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwRG9jdW1lbnRDbGlja0hhbmRsZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYW5jaG9yUmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5Jyk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkZVJlZ2lzdGVyID0gdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihwb3BvdmVyQ29udGFpbmVyLCAna2V5ZG93bi5lc2MnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zZXRGb2N1c1RvUG9wb3ZlckxpbmsoKTtcbiAgICAgICAgICAgIGRlUmVnaXN0ZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBvcG92ZXJTdGFydEJ0bjogSFRNTEVsZW1lbnQgPSBwb3BvdmVyQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5wb3BvdmVyLXN0YXJ0Jyk7XG4gICAgICAgIGNvbnN0IHBvcG92ZXJFbmRCdG46IEhUTUxFbGVtZW50ID0gcG9wb3ZlckNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcucG9wb3Zlci1lbmQnKTtcbiAgICAgICAgcG9wb3ZlclN0YXJ0QnRuLm9ua2V5ZG93biA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIFNoaWZ0K1RhYiBrZXlcbiAgICAgICAgICAgIGlmIChldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ic1BvcG92ZXJEaXJlY3RpdmUuaGlkZSgpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGb2N1c1RvUG9wb3ZlckxpbmsoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOyAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcG9wb3ZlckVuZEJ0bi5vbmtleWRvd24gPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBUYWIga2V5XG4gICAgICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJzUG9wb3ZlckRpcmVjdGl2ZS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzVG9Qb3BvdmVyTGluaygpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7ICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vV2hlbmV2ZXIgYXV0b2Nsb3NlIHByb3BlcnR5IGlzIHNldCB0byAnYWx3YXlzJywgYWRkaW5nIHRoZSBvbmNsaWNrIGxpc3RlbmVyIHRvIHRoZSBwb3BvdmVyIGNvbnRhaW5lciB0byBjbG9zZSB0aGUgcG9wb3Zlci5cbiAgICAgICAgaWYgKHRoaXMuYXV0b2Nsb3NlID09PSBBVVRPQ0xPU0VfVFlQRS5BTFdBWVMpIHtcbiAgICAgICAgICAgIHBvcG92ZXJDb250YWluZXIub25jbGljayA9ICgpID0+IHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcG9wb3ZlclN0YXJ0QnRuLmZvY3VzKCksIDUwKTtcbiAgICAgICAgLy8gQWRqdXN0aW5nIHBvcG92ZXIgcG9zaXRpb24gaWYgdGhlIHBvcG92ZXIgcGxhY2VtZW50IGlzIHRvcCBvciBib3R0b21cbiAgICAgICAgc2V0VGltZW91dCggKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmFkYXB0aXZlcG9zaXRpb24gKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVQb3BvdmVyUG9zdGlvbihwb3BvdmVyQ29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRyaWdnZXJpbmcgb25sb2FkIGFuZCBvbnNob3cgZXZlbnRzIGFmdGVyIHBvcG92ZXIgY29udGVudCBoYXMgcmVuZGVyZWRcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlclBvcG92ZXJFdmVudHMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdHJpZ2dlclBvcG92ZXJFdmVudHMoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRzb3VyY2UgPT09ICdwYXJ0aWFsJykge1xuICAgICAgICAgICAgY29uc3QgY2FuY2VsU3Vic2NyaXB0aW9uID0gdGhpcy5hcHAuc3Vic2NyaWJlKCdwYXJ0aWFsTG9hZGVkJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJFbGUgPSB0aGlzLnBhcnRpYWxSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICBsZXQgcGFydGlhbFNjb3BlO1xuXG4gICAgICAgICAgICAgICAgaWYgKHBhckVsZSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsU2NvcGUgID0gcGFyRWxlLndpZGdldDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5XaWRnZXRzICAgPSBwYXJ0aWFsU2NvcGUuV2lkZ2V0cztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5WYXJpYWJsZXMgPSBwYXJ0aWFsU2NvcGUuVmFyaWFibGVzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLkFjdGlvbnMgICA9IHBhcnRpYWxTY29wZS5BY3Rpb25zO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2xvYWQnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzaG93JywgeyRldmVudDoge3R5cGU6ICdzaG93J319KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FuY2VsU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuV2lkZ2V0cyAgID0gdGhpcy52aWV3UGFyZW50LldpZGdldHM7XG4gICAgICAgICAgICB0aGlzLlZhcmlhYmxlcyA9IHRoaXMudmlld1BhcmVudC5WYXJpYWJsZXM7XG4gICAgICAgICAgICB0aGlzLkFjdGlvbnMgICA9IHRoaXMudmlld1BhcmVudC5BY3Rpb25zO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzaG93JywgeyRldmVudDoge3R5cGU6ICdzaG93J319KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGlkZVBvcG92ZXIoKSB7XG4gICAgICAgIHRoaXMuaXNDbG9zaW5nUHJvZ3JhbW1hdGljYWxseSA9IHRydWU7XG4gICAgICAgIHRoaXMuY2xvc2VQb3BvdmVyVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pc09wZW4gPSBmYWxzZSwgNTAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dQb3BvdmVyKCkge1xuICAgICAgICB0aGlzLmJzUG9wb3ZlckRpcmVjdGl2ZS5zaG93KCk7XG4gICAgfVxuXG4gICAgb25Qb3BvdmVyQW5jaG9yS2V5ZG93bigkZXZlbnQpIHtcbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gY29udGVudCBhdmFpbGFibGUsIHRoZSBwb3BvdmVyIHNob3VsZCBub3Qgb3BlbiB0aHJvdWdoIGVudGVyIGtleS4gU28gY2hlY2tpbmcgd2hldGhlciB0aGUgY2FuUG9wb3Zlck9wZW4gZmxhZyBpcyB0cnVlIG9yIG5vdC5cbiAgICAgICAgaWYgKCF0aGlzLmNhblBvcG92ZXJPcGVuKSB7XG4gICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3BvdmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleTogc3RyaW5nLCBudjogYW55LCBvdj86IGFueSkge1xuICAgICAgICBpZiAoa2V5ID09PSAnY2xhc3MnIHx8IGtleSA9PT0gJ3RhYmluZGV4Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdjb250ZW50c291cmNlJykge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gcGFydGlhbCBjb250ZW50IGF2YWlsYWJsZSwgdGhlIHBvcG92ZXIgc2hvdWxkIG5vdCBvcGVuXG4gICAgICAgICAgICBpZiAodGhpcy5jb250ZW50c291cmNlID09PSAncGFydGlhbCcgJiYgIXRoaXMuY29udGVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuUG9wb3Zlck9wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnY29udGVudCcgJiYgbnYpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuUG9wb3Zlck9wZW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdhdXRvY2xvc2UnKSB7XG4gICAgICAgICAgICB0aGlzLm91dHNpZGVjbGljayA9IChudiA9PT0gQVVUT0NMT1NFX1RZUEUuT1VUU0lERUNMSUNLIHx8IG52ID09PSBBVVRPQ0xPU0VfVFlQRS5BTFdBWVMpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLmV2ZW50ID0gZXZlbnRzTWFwW3RoaXMuaW50ZXJhY3Rpb25dO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIHN0eWxlcih0aGlzLmFuY2hvclJlZi5uYXRpdmVFbGVtZW50LCB0aGlzKTtcbiAgICAgICAgdGhpcy5jb250YWluZXJUYXJnZXQgPSBnZXRDb250YWluZXJUYXJnZXRDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAvLyBsZXQgcGFyZW50RWxlbVBvcG92ZXIgPSAkKHRoaXMubmF0aXZlRWxlbWVudCkucGFyZW50cygpO1xuICAgICAgICAvLyBpZiAocGFyZW50RWxlbVBvcG92ZXIuY2xvc2VzdCgnW3dtVGFibGVdJykubGVuZ3RoIHx8XG4gICAgICAgIC8vICAgICBwYXJlbnRFbGVtUG9wb3Zlci5jbG9zZXN0KCdbd210YWJzXScpLmxlbmd0aCB8fFxuICAgICAgICAvLyAgICAgcGFyZW50RWxlbVBvcG92ZXIuY2xvc2VzdCgnbW9kYWwtY29udGFpbmVyJykubGVuZ3RoKSB7XG4gICAgICAgIC8vICAgICB0aGlzLmFkYXB0aXZlcG9zaXRpb24gPSBmYWxzZTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIG5nT25EZXRhY2goKSB7XG4gICAgICAgIC8vIEhpZGUgdGhlIHBvcG92ZXIgY29udGFpbmVyIHdoaWxlIGF0dGFjaGluZyB0aGUgbmV4dCBjb21wb25lbnQgYXMgcGFydCBvZiBwYWdlIHJldXNlIHN0cmF0ZWd5LlxuICAgICAgICB0aGlzLmJzUG9wb3ZlckRpcmVjdGl2ZS5oaWRlKCk7XG4gICAgfVxuXG4gICAgT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5kb2N1bWVudENsaWNrSGFuZGxlcikge1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmRvY3VtZW50Q2xpY2tIYW5kbGVyLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IFBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnMuaW5kZXhPZih0aGlzKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIFBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxhIFtwb3BvdmVyXT1cInBvcG92ZXJUZW1wbGF0ZVwiXG4gICAgW3BvcG92ZXJDb250ZXh0XT1cImNvbnRleHRcIlxuICAgIFtwb3BvdmVyVGl0bGVdPVwidGl0bGVcIlxuICAgIFtwbGFjZW1lbnRdPVwicG9wb3ZlcnBsYWNlbWVudFwiXG4gICAgW291dHNpZGVDbGlja109XCJvdXRzaWRlY2xpY2tcIlxuICAgIFt0cmlnZ2Vyc109XCJldmVudFwiXG4gICAgKG9uU2hvd24pPVwib25TaG93bigpXCJcbiAgICAob25IaWRkZW4pPVwib25IaWRkZW4oKVwiXG4gICAgY29udGFpbmVyQ2xhc3M9XCJhcHAtcG9wb3ZlciBhbmltYXRlZCB7e2NvbnRlbnRhbmltYXRpb259fSB7e3BvcG92ZXJDb250YWluZXJDbHN9fVwiXG4gICAgW2NvbnRhaW5lcl09XCJjb250YWluZXJUYXJnZXQgfHwgJy53bS1hcHAnXCJcbiAgICBbaXNPcGVuXT1cImlzT3BlblwiXG4gICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICBbbmFtZV09XCJuYW1lXCJcbiAgICBbY2xhc3NdPVwiY2xhc3NcIlxuICAgIFtuZ0NsYXNzXT1cInsnZGlzYWJsZS1wb3BvdmVyJzogIWNhblBvcG92ZXJPcGVufVwiXG4gICAgW2FkYXB0aXZlUG9zaXRpb25dPVwiYWRhcHRpdmVwb3NpdGlvblwiXG4gICBib3VuZGFyaWVzRWxlbWVudD1cIndpbmRvd1wiXG4gICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFsYWJlbCB8fCAoYmFkZ2V2YWx1ZSA/IGNhcHRpb24gKyAnICcgKyBiYWRnZXZhbHVlIDogY2FwdGlvbikgfHwgJ1BvcG92ZXIgbWVudSdcIlxuICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCJcbiAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAjYW5jaG9yXG4gICAgbmFtZS5iaW5kPVwibmFtZVwiXG4gICAgd21BbmNob3JcbiAgICBhbmltYXRpb24uYmluZD1cImFuaW1hdGlvblwiXG4gICAgYmFkZ2V2YWx1ZS5iaW5kPVwiYmFkZ2V2YWx1ZVwiXG4gICAgY2FwdGlvbi5iaW5kPVwiY2FwdGlvblwiXG4gICAgZW5jb2RldXJsLmJpbmQ9XCJlbmNvZGV1cmxcIlxuICAgIGhpbnQuYmluZD1cImhpbnRcIlxuICAgIGh5cGVybGluay5iaW5kPVwiaHlwZXJsaW5rXCJcbiAgICBpY29udXJsLmJpbmQ9XCJpY29udXJsXCJcbiAgICBpY29ud2lkdGguYmluZD1cImljb253aWR0aFwiXG4gICAgaWNvbmhlaWdodC5iaW5kPVwiaWNvbmhlaWdodFwiXG4gICAgaWNvbm1hcmdpbi5iaW5kPVwiaWNvbm1hcmdpblwiXG4gICAgaWNvbmNsYXNzLmJpbmQ9XCJpY29uY2xhc3NcIlxuICAgIGljb25wb3NpdGlvbi5iaW5kPVwiaWNvbnBvc2l0aW9uXCJcbiAgICBzaG9ydGN1dGtleS5iaW5kPVwic2hvcnRjdXRrZXlcIlxuICAgIHRhYmluZGV4LmJpbmQ9XCJ0YWJpbmRleFwiXG4gICAgKGtleWRvd24pPVwib25Qb3BvdmVyQW5jaG9yS2V5ZG93bigkZXZlbnQpXCI+XG48L2E+XG4iXX0=
|
|
397
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PopoverComponent, { className: "PopoverComponent", filePath: "popover.component.ts", lineNumber: 60 }); })();
|
|
398
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvbmF2aWdhdGlvbi9wb3BvdmVyL3NyYy9wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9uYXZpZ2F0aW9uL3BvcG92ZXIvc3JjL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sUUFBUSxFQUVSLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE9BQU8sRUFDSCxRQUFRLEVBQ1IsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6QixHQUFHLEVBQ0gsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDaEIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUNILGNBQWMsRUFDZCx1QkFBdUIsRUFFdkIsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixNQUFNLEVBQ1QsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7OztBQUk5QyxNQUFNLFdBQVcsR0FBRyxxQkFBcUIsQ0FBQztBQUMxQyxNQUFNLGFBQWEsR0FBa0I7SUFDakMsVUFBVSxFQUFFLFlBQVk7SUFDeEIsU0FBUyxFQUFFLFdBQVc7Q0FDekIsQ0FBQztBQUVGLE1BQU0sU0FBUyxHQUFHO0lBQ2QsS0FBSyxFQUFFLE9BQU87SUFDZCxLQUFLLEVBQUUsa0JBQWtCO0lBQ3pCLE9BQU8sRUFBRSxrQkFBa0I7Q0FDOUIsQ0FBQztBQUVGLElBQUks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QUFlO2tCQUF6QyxZQUFZO21CQUFDLFdBQVc7WUFDQSxVQUFVO2tCQUFsQyxZQUFZO21CQUFDLFNBQVM7O2tGQXhDZCxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1BvcG92ZXJEaXJlY3RpdmV9IGZyb20gJ25neC1ib290c3RyYXAvcG9wb3Zlcic7XG5cbmltcG9ydCB7XG4gICAgYWRkQ2xhc3MsXG4gICAgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24sXG4gICAgYWRqdXN0Q29udGFpbmVyUmlnaHRFZGdlcyxcbiAgICBBcHAsXG4gICAgZmluZFJvb3RDb250YWluZXIsXG4gICAgc2V0Q1NTRnJvbU9ialxufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQge1xuICAgIEFVVE9DTE9TRV9UWVBFLFxuICAgIGdldENvbnRhaW5lclRhcmdldENsYXNzLFxuICAgIElXaWRnZXRDb25maWcsXG4gICAgcHJvdmlkZUFzV2lkZ2V0UmVmLFxuICAgIFN0eWxhYmxlQ29tcG9uZW50LFxuICAgIHN0eWxlclxufSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcblxuaW1wb3J0IHtyZWdpc3RlclByb3BzfSBmcm9tICcuL3BvcG92ZXIucHJvcHMnO1xuXG5kZWNsYXJlIGNvbnN0ICQ7XG5cbmNvbnN0IERFRkFVTFRfQ0xTID0gJ2FwcC1wb3BvdmVyLXdyYXBwZXInO1xuY29uc3QgV0lER0VUX0NPTkZJRzogSVdpZGdldENvbmZpZyA9IHtcbiAgICB3aWRnZXRUeXBlOiAnd20tcG9wb3ZlcicsXG4gICAgaG9zdENsYXNzOiBERUZBVUxUX0NMU1xufTtcblxuY29uc3QgZXZlbnRzTWFwID0ge1xuICAgIGNsaWNrOiAnY2xpY2snLFxuICAgIGhvdmVyOiAnbW91c2VlbnRlcjpjbGljaycsXG4gICAgZGVmYXVsdDogJ2NsaWNrIG1vdXNlZW50ZXInXG59O1xuXG5sZXQgYWN0aXZlUG9wb3ZlcjogUG9wb3ZlckNvbXBvbmVudDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd3bS1wb3BvdmVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcG9wb3Zlci5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihQb3BvdmVyQ29tcG9uZW50KVxuICAgIF1cbn0pXG5cbmV4cG9ydCBjbGFzcyBQb3BvdmVyQ29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG5cbiAgICBwdWJsaWMgZXZlbnQ6IHN0cmluZztcbiAgICBwdWJsaWMgaXNPcGVuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBjbG9zZVBvcG92ZXJUaW1lb3V0O1xuICAgIHB1YmxpYyByZWFkb25seSBwb3BvdmVyQ29udGFpbmVyQ2xzO1xuICAgIHB1YmxpYyBjYW5Qb3BvdmVyT3BlbiA9IHRydWU7XG4gICAgcHJpdmF0ZSBXaWRnZXRzO1xuICAgIHByaXZhdGUgVmFyaWFibGVzO1xuICAgIHByaXZhdGUgQWN0aW9ucztcblxuICAgIHB1YmxpYyBpbnRlcmFjdGlvbjogc3RyaW5nO1xuICAgIHB1YmxpYyBwb3BvdmVyYXJyb3c6IGJvb2xlYW47XG4gICAgcHVibGljIHBvcG92ZXJ3aWR0aDogc3RyaW5nO1xuICAgIHB1YmxpYyBwb3BvdmVyaGVpZ2h0OiBzdHJpbmc7XG4gICAgcHVibGljIGNvbnRlbnRhbmltYXRpb246IHN0cmluZztcbiAgICBwdWJsaWMgY29udGVudHNvdXJjZTogc3RyaW5nO1xuICAgIHB1YmxpYyBjb250ZW50OiBzdHJpbmc7XG4gICAgcHVibGljIHBvcG92ZXJwbGFjZW1lbnQ6IHN0cmluZztcbiAgICBwdWJsaWMgb3V0c2lkZWNsaWNrOiBib29sZWFuO1xuICAgIHB1YmxpYyBhdXRvY2xvc2U6IHN0cmluZztcblxuICAgIHB1YmxpYyBjbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyB0aXRsZTogc3RyaW5nO1xuICAgIHB1YmxpYyB0YWJpbmRleDogYW55O1xuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG4gICAgcHVibGljIGFkYXB0aXZlcG9zaXRpb246Ym9vbGVhbjtcbiAgICBwdWJsaWMgY29udGFpbmVyVGFyZ2V0OiBzdHJpbmc7XG4gICAgcHVibGljIGhpbnQ6IHN0cmluZztcbiAgICBwdWJsaWMgYXJpYWxhYmVsOiBzdHJpbmc7XG4gICAgcHVibGljIGNhcHRpb246IHN0cmluZztcbiAgICBwdWJsaWMgYmFkZ2V2YWx1ZTogc3RyaW5nO1xuICAgIHByaXZhdGUgZG9jdW1lbnRDbGlja0hhbmRsZXI6IChlOiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICAgIHByaXZhdGUgaXNDbG9zaW5nUHJvZ3JhbW1hdGljYWxseSA9IGZhbHNlO1xuICAgIHByaXZhdGUgc3RhdGljIGFjdGl2ZVBvcG92ZXJzOiBQb3BvdmVyQ29tcG9uZW50W10gPSBbXTtcblxuICAgIEBWaWV3Q2hpbGQoUG9wb3ZlckRpcmVjdGl2ZSkgcHJpdmF0ZSBic1BvcG92ZXJEaXJlY3RpdmU7XG4gICAgQFZpZXdDaGlsZCgnYW5jaG9yJywgeyBzdGF0aWM6IHRydWUgfSkgYW5jaG9yUmVmOiBFbGVtZW50UmVmO1xuICAgIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpIHBvcG92ZXJUZW1wbGF0ZTtcbiAgICBAQ29udGVudENoaWxkKCdwYXJ0aWFsJykgcGFydGlhbFJlZjtcblxuICAgIGNvbnN0cnVjdG9yKGluajogSW5qZWN0b3IsIHByaXZhdGUgYXBwOiBBcHAsIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueSwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRywgZXhwbGljaXRDb250ZXh0KTtcbiAgICAgICAgdGhpcy5wb3BvdmVyQ29udGFpbmVyQ2xzID0gYGFwcC1wb3BvdmVyLSR7dGhpcy53aWRnZXRJZH1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBEb2N1bWVudENsaWNrSGFuZGxlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRDbGlja0hhbmRsZXIpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5kb2N1bWVudENsaWNrSGFuZGxlciwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgdGhpcy5kb2N1bWVudENsaWNrSGFuZGxlciA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzT3BlbikgcmV0dXJuO1xuICAgIFxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIFxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNsaWNrZWQgZWxlbWVudCBvciBhbnkgb2YgaXRzIHBhcmVudHMgaXMgcGFydCBvZiB0aGUgZGF0ZXBpY2tlciwgZHJvcGRvd24sIG9yIHR5cGVhaGVhZCBjb250YWluZXJzXG4gICAgICAgICAgICBjb25zdCBpc0luc2lkZVNwZWNpYWxDb250YWluZXIgPSAhIShcbiAgICAgICAgICAgICAgICB0YXJnZXQuY2xvc2VzdCgnLmJzLWRhdGVwaWNrZXItY29udGFpbmVyJykgfHwgXG4gICAgICAgICAgICAgICAgdGFyZ2V0LmNsb3Nlc3QoXCIuZHJvcGRvd24tbWVudVwiKVxuICAgICAgICAgICAgKTtcbiAgICBcbiAgICAgICAgICAgIGlmIChpc0luc2lkZVNwZWNpYWxDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2xpY2sgd2FzIGluc2lkZSBvbmUgb2YgdGhlc2UgY29udGFpbmVycywgd2UgZG8gbm90IGNsb3NlIHRoZSBwb3BvdmVyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgY29uc3QgY2xpY2tlZFBvcG92ZXJJbmRleCA9IFBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnMuZmluZEluZGV4KHBvcG92ZXIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcG92ZXJDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHtwb3BvdmVyLnBvcG92ZXJDb250YWluZXJDbHN9YCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvcG92ZXJDb250YWluZXI/LmNvbnRhaW5zKHRhcmdldCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYW5jaG9yUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW4gPyB0aGlzLmNsb3NlKCkgOiB0aGlzLm9wZW4oKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIGlmIChjbGlja2VkUG9wb3ZlckluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIC8vIENsaWNrIGlzIG91dHNpZGUgYWxsIHBvcG92ZXJzXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3V0c2lkZWNsaWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VBbGxQb3BvdmVycygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gQ2xpY2sgaXMgaW5zaWRlIGEgcG9wb3ZlclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VJbm5lclBvcG92ZXJzKGNsaWNrZWRQb3BvdmVySW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIFxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZG9jdW1lbnRDbGlja0hhbmRsZXIsIHRydWUpO1xuICAgIH1cbiAgICBcblxuICAgIHByaXZhdGUgY2xvc2VBbGxQb3BvdmVycygpIHtcbiAgICAgICAgUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5mb3JFYWNoKHBvcG92ZXIgPT4ge1xuICAgICAgICAgICAgaWYgKHBvcG92ZXIub3V0c2lkZWNsaWNrKSB7XG4gICAgICAgICAgICAgICAgcG9wb3Zlci5pc0Nsb3NpbmdQcm9ncmFtbWF0aWNhbGx5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwb3BvdmVyLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VJbm5lclBvcG92ZXJzKGNsaWNrZWRJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSBjbGlja2VkSW5kZXggKyAxOyBpIDwgUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcG9wb3ZlciA9IFBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnNbaV07XG4gICAgICAgICAgICBpZiAocG9wb3Zlci5vdXRzaWRlY2xpY2spIHtcbiAgICAgICAgICAgICAgICBwb3BvdmVyLmlzQ2xvc2luZ1Byb2dyYW1tYXRpY2FsbHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHBvcG92ZXIuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNDaGlsZFBvcG92ZXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhISQodGhpcy5uYXRpdmVFbGVtZW50KS5jbG9zZXN0KCcucG9wb3ZlcicpLmxlbmd0aDtcbiAgICB9XG4gICAgLy8gVGhpcyBtZWh0b2QgaXMgdXNlZCB0byBzaG93L29wZW4gdGhlIHBvcG92ZXIuIFRoaXMgcmVmZXJzIHRvIHRoZSBzYW1lIG1ldGhvZCBzaG93UG9wb3Zlci5cbiAgICBwdWJsaWMgb3BlbigpIHtcbiAgICAgICAgdGhpcy5zaG93UG9wb3ZlcigpO1xuICAgICAgICBpZiAoIVBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnMuaW5jbHVkZXModGhpcykpIHtcbiAgICAgICAgICAgIFBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnMucHVzaCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBtZWh0b2QgaXMgdXNlZCB0byBoaWRlL2Nsb3NlIHRoZSBwb3BvdmVyLlxuICAgIHB1YmxpYyBjbG9zZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmlzQ2xvc2luZ1Byb2dyYW1tYXRpY2FsbHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLmhpZGUoKTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5pbmRleE9mKHRoaXMpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBQb3BvdmVyQ29tcG9uZW50LmFjdGl2ZVBvcG92ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyIG9uIGhpZGluZyBwb3BvdmVyXG4gICAgcHVibGljIG9uSGlkZGVuKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNDaGlsZFBvcG92ZXIoKSB8fCB0aGlzLmlzQ2xvc2luZ1Byb2dyYW1tYXRpY2FsbHkpIHtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnaGlkZScsIHskZXZlbnQ6IHt0eXBlOiAnaGlkZSd9fSk7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGFjdGl2ZVBvcG92ZXIgPT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVQb3BvdmVyID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzQ2xvc2luZ1Byb2dyYW1tYXRpY2FsbHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEZvY3VzVG9Qb3BvdmVyTGluaygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFuY2hvclJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCksIDEwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkanVzdFBvcG92ZXJBcnJvd1Bvc2l0aW9uKHBvcG92ZXJFbGVtLCBwb3BvdmVyTGVmdFNoaWZ0KSB7XG4gICAgICAgIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLl9wb3BvdmVyLl9uZ1pvbmUub25TdGFibGUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHBvcG92ZXJFbGVtLmZpbmQoJy5wb3BvdmVyLWFycm93JykuY3NzKCdsZWZ0JywgcG9wb3ZlckxlZnRTaGlmdCArICdweCcpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZVBvcG92ZXJQb3N0aW9uKGVsZW1lbnQpIHtcblxuICAgICAgICBjb25zdCBwb3BvdmVyRWxlbSA9ICQoZWxlbWVudCk7XG4gICAgICAgIGxldCBwb3BvdmVyTGVmdCA9ICBwb3BvdmVyRWxlbS5vZmZzZXQoKS5sZWZ0O1xuICAgICAgICBjb25zdCBwb3BvdmVyV2lkdGggPSBwb3BvdmVyRWxlbVswXS5vZmZzZXRXaWR0aDtcbiAgICAgICAgY29uc3Qgdmlld1BvcnRXaWR0aCA9ICQod2luZG93KS53aWR0aCgpO1xuICAgICAgICBjb25zdCBwYXJlbnREaW1lc2lvbiA9IHRoaXMuYW5jaG9yUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIC8vIEFkanVzdGluZyBwb3BvdmVyIHBvc2l0aW9uLCBpZiBpdCBpcyBub3QgdmlzaWJsZSBhdCBsZWZ0IHNpZGVcbiAgICAgICAgaWYgKHBvcG92ZXJMZWZ0IDwgMCkge1xuICAgICAgICAgICAgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24ocG9wb3ZlckVsZW0sIHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcy5ic1BvcG92ZXJEaXJlY3RpdmUuX3BvcG92ZXIpO1xuICAgICAgICAgICAgY29uc3QgcG9wb3ZlckxlZnRTaGlmdCA9IDQ7XG4gICAgICAgICAgICBjb25zdCBhcnJvd0xlZnRTaGlmdCA9IChwYXJlbnREaW1lc2lvbi5sZWZ0ICsgKHBhcmVudERpbWVzaW9uLndpZHRoIC8gMikpIC0gcG9wb3ZlckxlZnRTaGlmdDtcbiAgICAgICAgICAgIHRoaXMuYWRqdXN0UG9wb3ZlckFycm93UG9zaXRpb24ocG9wb3ZlckVsZW0sIGFycm93TGVmdFNoaWZ0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBZGp1c3RpbmcgcG9wb3ZlciBwb3NpdGlvbiwgaWYgaXQgaXMgbm90IHZpc2libGUgYXQgcmlnaHQgc2lkZVxuICAgICAgICBpZiAocG9wb3ZlckxlZnQgKyBwb3BvdmVyV2lkdGggPiB2aWV3UG9ydFdpZHRoKSB7XG4gICAgICAgICAgICBhZGp1c3RDb250YWluZXJSaWdodEVkZ2VzKHBvcG92ZXJFbGVtLCB0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLl9wb3BvdmVyKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHBvcG92ZXJMZWZ0ID0gcG9wb3ZlckVsZW0ub2Zmc2V0KCkubGVmdDtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3BvdmVyTGVmdEFkanVzdCA9IChwb3BvdmVyTGVmdCArIHBvcG92ZXJXaWR0aCkgLSB2aWV3UG9ydFdpZHRoO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcG92ZXJMZWZ0U2hpZnQgPSAgcG9wb3ZlckxlZnQgLSBwb3BvdmVyTGVmdEFkanVzdDtcbiAgICAgICAgICAgICAgICBsZXQgYXJyb3dMZWZ0U2hpZnQgO1xuICAgICAgICAgICAgICAgIGlmKHBvcG92ZXJMZWZ0PD0xMDApe1xuICAgICAgICAgICAgICAgICAgICBhcnJvd0xlZnRTaGlmdCA9ICAocGFyZW50RGltZXNpb24ubGVmdCArIChwYXJlbnREaW1lc2lvbi53aWR0aCAvIDIpKSAtIHBvcG92ZXJMZWZ0O1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBhcnJvd0xlZnRTaGlmdCA9IChwYXJlbnREaW1lc2lvbi5sZWZ0ICsgKHBhcmVudERpbWVzaW9uLndpZHRoIC8gMikpIC0gcG9wb3ZlckxlZnRTaGlmdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYodmlld1BvcnRXaWR0aCA+IDUwMCl7XG4gICAgICAgICAgICAgICAgICAgIGFycm93TGVmdFNoaWZ0ICs9IDMwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0UG9wb3ZlckFycm93UG9zaXRpb24ocG9wb3ZlckVsZW0sIGFycm93TGVmdFNoaWZ0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlciBvbiBzaG93aW5nIHBvcG92ZXJcbiAgICBwdWJsaWMgb25TaG93bigpIHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IGZpbmRSb290Q29udGFpbmVyKHRoaXMuJGVsZW1lbnQpO1xuICAgICAgICAvLyBpZiBwYWdlIHN0eWxlcyBoYXZlIHRvIGJlIGFwcGxpZWQgdG8gcG9wb3ZlciB0aGVuIHBvcG92ZXIgaGFzIHRvIGJlIGNoaWxkIG9mIHBhZ2UgZWxlbWVudC5cbiAgICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgICAgICQoJ2JvZHkgPiBwb3BvdmVyLWNvbnRhaW5lcicpLndyYXAoJzwnICsgcm9vdCArICcvPicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yNTEyNV06IE5vdCBjbG9zaW5nIHRoZSBleGlzdGluZyBvcGVuZWQgcG9wb3ZlcnMgd2hlbiB0aGUgYXV0b2Nsb3NlIHByb3BlcnR5IGlzIERJU0FCTEVEXG4gICAgICAgIGlmICghdGhpcy5pc0NoaWxkUG9wb3ZlcigpKSB7XG4gICAgICAgICAgICBpZiAoYWN0aXZlUG9wb3ZlciAmJiBhY3RpdmVQb3BvdmVyICE9PSB0aGlzICYmIFxuICAgICAgICAgICAgICAgIGFjdGl2ZVBvcG92ZXIuYXV0b2Nsb3NlICE9PSBBVVRPQ0xPU0VfVFlQRS5ESVNBQkxFRCkge1xuICAgICAgICAgICAgICAgIGFjdGl2ZVBvcG92ZXIuaXNDbG9zaW5nUHJvZ3JhbW1hdGljYWxseSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYWN0aXZlUG9wb3Zlci5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWN0aXZlUG9wb3ZlciA9IHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgICAgIGlmICghUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5pbmNsdWRlcyh0aGlzKSkge1xuICAgICAgICAgICAgUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5wdXNoKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvcG92ZXJDb250YWluZXIgID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7dGhpcy5wb3BvdmVyQ29udGFpbmVyQ2xzfWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAocG9wb3ZlckNvbnRhaW5lcikge1xuICAgICAgICAgICAgcG9wb3ZlckNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2RhdGEtcG9wb3Zlci1pZCcsIHRoaXMud2lkZ2V0SWQpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBBZGQgY2xpY2sgZXZlbnQgbGlzdGVuZXIgdG8gc3RvcCBwcm9wYWdhdGlvblxuICAgICAgICAgICAgcG9wb3ZlckNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNldENTU0Zyb21PYmoocG9wb3ZlckNvbnRhaW5lciwge1xuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLnBvcG92ZXJoZWlnaHQsXG4gICAgICAgICAgICBtaW5XaWR0aDogdGhpcy5wb3BvdmVyd2lkdGgsXG4gICAgICAgICAgICB3aWR0aDogdGhpcy5wb3BvdmVyd2lkdGhcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdGhpcy5wb3BvdmVyYXJyb3cpIHtcbiAgICAgICAgICAgIGFkZENsYXNzKHBvcG92ZXJDb250YWluZXIucXVlcnlTZWxlY3RvcignLmFycm93JykgYXMgSFRNTEVsZW1lbnQsICdoaWRkZW4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnRlcmFjdGlvbiA9PT0gJ2hvdmVyJyB8fCB0aGlzLmludGVyYWN0aW9uID09PSAnZGVmYXVsdCcpIHtcblxuICAgICAgICAgICAgLy8gZG8gbm90IHVzZSBhZGRFdmVudExpc3RlbmVyIGhlcmVcbiAgICAgICAgICAgIC8vIGF0dGFjaGluZyB0aGUgZXZlbnQgdGhpcyB3YXkgd2lsbCBvdmVycmlkZSB0aGUgZXhpc3RpbmcgZXZlbnQgaGFuZGxlcnNcbiAgICAgICAgICAgIHBvcG92ZXJDb250YWluZXIub25tb3VzZWVudGVyID0gKCkgPT4gY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2VQb3BvdmVyVGltZW91dCk7XG4gICAgICAgICAgICBwb3BvdmVyQ29udGFpbmVyLm9ubW91c2VsZWF2ZSA9ICgpID0+IHRoaXMuaGlkZVBvcG92ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuYW5jaG9yUmVmLm5hdGl2ZUVsZW1lbnQub25tb3VzZWVudGVyID0gKCkgPT4gY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2VQb3BvdmVyVGltZW91dCk7XG4gICAgICAgICAgICB0aGlzLmFuY2hvclJlZi5uYXRpdmVFbGVtZW50Lm9ubW91c2VsZWF2ZSA9ICgpID0+IHRoaXMuaGlkZVBvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vdXRzaWRlY2xpY2spIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBEb2N1bWVudENsaWNrSGFuZGxlcigpO1xuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hbmNob3JSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRlUmVnaXN0ZXIgPSB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHBvcG92ZXJDb250YWluZXIsICdrZXlkb3duLmVzYycsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNldEZvY3VzVG9Qb3BvdmVyTGluaygpO1xuICAgICAgICAgICAgZGVSZWdpc3RlcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcG9wb3ZlclN0YXJ0QnRuOiBIVE1MRWxlbWVudCA9IHBvcG92ZXJDb250YWluZXIucXVlcnlTZWxlY3RvcignLnBvcG92ZXItc3RhcnQnKTtcbiAgICAgICAgY29uc3QgcG9wb3ZlckVuZEJ0bjogSFRNTEVsZW1lbnQgPSBwb3BvdmVyQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5wb3BvdmVyLWVuZCcpO1xuICAgICAgICBwb3BvdmVyU3RhcnRCdG4ub25rZXlkb3duID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBDaGVjayBmb3IgU2hpZnQrVGFiIGtleVxuICAgICAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJzUG9wb3ZlckRpcmVjdGl2ZS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzVG9Qb3BvdmVyTGluaygpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7ICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBwb3BvdmVyRW5kQnRuLm9ua2V5ZG93biA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIFRhYiBrZXlcbiAgICAgICAgICAgIGlmICghZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgICAgICAgICAgIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLmhpZGUoKTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNUb1BvcG92ZXJMaW5rKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy9XaGVuZXZlciBhdXRvY2xvc2UgcHJvcGVydHkgaXMgc2V0IHRvICdhbHdheXMnLCBhZGRpbmcgdGhlIG9uY2xpY2sgbGlzdGVuZXIgdG8gdGhlIHBvcG92ZXIgY29udGFpbmVyIHRvIGNsb3NlIHRoZSBwb3BvdmVyLlxuICAgICAgICBpZiAodGhpcy5hdXRvY2xvc2UgPT09IEFVVE9DTE9TRV9UWVBFLkFMV0FZUykge1xuICAgICAgICAgICAgcG9wb3ZlckNvbnRhaW5lci5vbmNsaWNrID0gKCkgPT4gdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBwb3BvdmVyU3RhcnRCdG4uZm9jdXMoKSwgNTApO1xuICAgICAgICAvLyBBZGp1c3RpbmcgcG9wb3ZlciBwb3NpdGlvbiBpZiB0aGUgcG9wb3ZlciBwbGFjZW1lbnQgaXMgdG9wIG9yIGJvdHRvbVxuICAgICAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWRhcHRpdmVwb3NpdGlvbiApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVBvcG92ZXJQb3N0aW9uKHBvcG92ZXJDb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdHJpZ2dlcmluZyBvbmxvYWQgYW5kIG9uc2hvdyBldmVudHMgYWZ0ZXIgcG9wb3ZlciBjb250ZW50IGhhcyByZW5kZXJlZFxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyUG9wb3ZlckV2ZW50cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0cmlnZ2VyUG9wb3ZlckV2ZW50cygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGVudHNvdXJjZSA9PT0gJ3BhcnRpYWwnKSB7XG4gICAgICAgICAgICBjb25zdCBjYW5jZWxTdWJzY3JpcHRpb24gPSB0aGlzLmFwcC5zdWJzY3JpYmUoJ3BhcnRpYWxMb2FkZWQnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhckVsZSA9IHRoaXMucGFydGlhbFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgIGxldCBwYXJ0aWFsU2NvcGU7XG5cbiAgICAgICAgICAgICAgICBpZiAocGFyRWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRpYWxTY29wZSAgPSBwYXJFbGUud2lkZ2V0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLldpZGdldHMgICA9IHBhcnRpYWxTY29wZS5XaWRnZXRzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLlZhcmlhYmxlcyA9IHBhcnRpYWxTY29wZS5WYXJpYWJsZXM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuQWN0aW9ucyAgID0gcGFydGlhbFNjb3BlLkFjdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnbG9hZCcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Nob3cnLCB7JGV2ZW50OiB7dHlwZTogJ3Nob3cnfX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYW5jZWxTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5XaWRnZXRzICAgPSB0aGlzLnZpZXdQYXJlbnQuV2lkZ2V0cztcbiAgICAgICAgICAgIHRoaXMuVmFyaWFibGVzID0gdGhpcy52aWV3UGFyZW50LlZhcmlhYmxlcztcbiAgICAgICAgICAgIHRoaXMuQWN0aW9ucyAgID0gdGhpcy52aWV3UGFyZW50LkFjdGlvbnM7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Nob3cnLCB7JGV2ZW50OiB7dHlwZTogJ3Nob3cnfX0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaWRlUG9wb3ZlcigpIHtcbiAgICAgICAgdGhpcy5pc0Nsb3NpbmdQcm9ncmFtbWF0aWNhbGx5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jbG9zZVBvcG92ZXJUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmlzT3BlbiA9IGZhbHNlLCA1MDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd1BvcG92ZXIoKSB7XG4gICAgICAgIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLnNob3coKTtcbiAgICB9XG5cbiAgICBvblBvcG92ZXJBbmNob3JLZXlkb3duKCRldmVudCkge1xuICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBjb250ZW50IGF2YWlsYWJsZSwgdGhlIHBvcG92ZXIgc2hvdWxkIG5vdCBvcGVuIHRocm91Z2ggZW50ZXIga2V5LiBTbyBjaGVja2luZyB3aGV0aGVyIHRoZSBjYW5Qb3BvdmVyT3BlbiBmbGFnIGlzIHRydWUgb3Igbm90LlxuICAgICAgICBpZiAoIXRoaXMuY2FuUG9wb3Zlck9wZW4pIHtcbiAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92PzogYW55KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdjbGFzcycgfHwga2V5ID09PSAndGFiaW5kZXgnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2NvbnRlbnRzb3VyY2UnKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBwYXJ0aWFsIGNvbnRlbnQgYXZhaWxhYmxlLCB0aGUgcG9wb3ZlciBzaG91bGQgbm90IG9wZW5cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnRzb3VyY2UgPT09ICdwYXJ0aWFsJyAmJiAhdGhpcy5jb250ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5Qb3BvdmVyT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdjb250ZW50JyAmJiBudikge1xuICAgICAgICAgICAgdGhpcy5jYW5Qb3BvdmVyT3BlbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2F1dG9jbG9zZScpIHtcbiAgICAgICAgICAgIHRoaXMub3V0c2lkZWNsaWNrID0gKG52ID09PSBBVVRPQ0xPU0VfVFlQRS5PVVRTSURFQ0xJQ0sgfHwgbnYgPT09IEFVVE9DTE9TRV9UWVBFLkFMV0FZUykgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuZXZlbnQgPSBldmVudHNNYXBbdGhpcy5pbnRlcmFjdGlvbl07XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgc3R5bGVyKHRoaXMuYW5jaG9yUmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lclRhcmdldCA9IGdldENvbnRhaW5lclRhcmdldENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIC8vIGxldCBwYXJlbnRFbGVtUG9wb3ZlciA9ICQodGhpcy5uYXRpdmVFbGVtZW50KS5wYXJlbnRzKCk7XG4gICAgICAgIC8vIGlmIChwYXJlbnRFbGVtUG9wb3Zlci5jbG9zZXN0KCdbd21UYWJsZV0nKS5sZW5ndGggfHxcbiAgICAgICAgLy8gICAgIHBhcmVudEVsZW1Qb3BvdmVyLmNsb3Nlc3QoJ1t3bXRhYnNdJykubGVuZ3RoIHx8XG4gICAgICAgIC8vICAgICBwYXJlbnRFbGVtUG9wb3Zlci5jbG9zZXN0KCdtb2RhbC1jb250YWluZXInKS5sZW5ndGgpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuYWRhcHRpdmVwb3NpdGlvbiA9IGZhbHNlO1xuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgbmdPbkRldGFjaCgpIHtcbiAgICAgICAgLy8gSGlkZSB0aGUgcG9wb3ZlciBjb250YWluZXIgd2hpbGUgYXR0YWNoaW5nIHRoZSBuZXh0IGNvbXBvbmVudCBhcyBwYXJ0IG9mIHBhZ2UgcmV1c2Ugc3RyYXRlZ3kuXG4gICAgICAgIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLmhpZGUoKTtcbiAgICB9XG5cbiAgICBPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50Q2xpY2tIYW5kbGVyKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZG9jdW1lbnRDbGlja0hhbmRsZXIsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5pbmRleE9mKHRoaXMpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGEgW3BvcG92ZXJdPVwicG9wb3ZlclRlbXBsYXRlXCJcbiAgICBbcG9wb3ZlckNvbnRleHRdPVwiY29udGV4dFwiXG4gICAgW3BvcG92ZXJUaXRsZV09XCJ0aXRsZVwiXG4gICAgW3BsYWNlbWVudF09XCJwb3BvdmVycGxhY2VtZW50XCJcbiAgICBbb3V0c2lkZUNsaWNrXT1cIm91dHNpZGVjbGlja1wiXG4gICAgW3RyaWdnZXJzXT1cImV2ZW50XCJcbiAgICAob25TaG93bik9XCJvblNob3duKClcIlxuICAgIChvbkhpZGRlbik9XCJvbkhpZGRlbigpXCJcbiAgICBjb250YWluZXJDbGFzcz1cImFwcC1wb3BvdmVyIGFuaW1hdGVkIHt7Y29udGVudGFuaW1hdGlvbn19IHt7cG9wb3ZlckNvbnRhaW5lckNsc319XCJcbiAgICBbY29udGFpbmVyXT1cImNvbnRhaW5lclRhcmdldCB8fCAnLndtLWFwcCdcIlxuICAgIFtpc09wZW5dPVwiaXNPcGVuXCJcbiAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgIFtjbGFzc109XCJjbGFzc1wiXG4gICAgW25nQ2xhc3NdPVwieydkaXNhYmxlLXBvcG92ZXInOiAhY2FuUG9wb3Zlck9wZW59XCJcbiAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJhZGFwdGl2ZXBvc2l0aW9uXCJcbiAgIGJvdW5kYXJpZXNFbGVtZW50PVwid2luZG93XCJcbiAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYWxhYmVsIHx8IChiYWRnZXZhbHVlID8gY2FwdGlvbiArICcgJyArIGJhZGdldmFsdWUgOiBjYXB0aW9uKSB8fCAnUG9wb3ZlciBtZW51J1wiXG4gICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW5cIlxuICAgIHJvbGU9XCJidXR0b25cIlxuICAgICNhbmNob3JcbiAgICBuYW1lLmJpbmQ9XCJuYW1lXCJcbiAgICB3bUFuY2hvclxuICAgIGFuaW1hdGlvbi5iaW5kPVwiYW5pbWF0aW9uXCJcbiAgICBiYWRnZXZhbHVlLmJpbmQ9XCJiYWRnZXZhbHVlXCJcbiAgICBjYXB0aW9uLmJpbmQ9XCJjYXB0aW9uXCJcbiAgICBlbmNvZGV1cmwuYmluZD1cImVuY29kZXVybFwiXG4gICAgaGludC5iaW5kPVwiaGludFwiXG4gICAgaHlwZXJsaW5rLmJpbmQ9XCJoeXBlcmxpbmtcIlxuICAgIGljb251cmwuYmluZD1cImljb251cmxcIlxuICAgIGljb253aWR0aC5iaW5kPVwiaWNvbndpZHRoXCJcbiAgICBpY29uaGVpZ2h0LmJpbmQ9XCJpY29uaGVpZ2h0XCJcbiAgICBpY29ubWFyZ2luLmJpbmQ9XCJpY29ubWFyZ2luXCJcbiAgICBpY29uY2xhc3MuYmluZD1cImljb25jbGFzc1wiXG4gICAgaWNvbnBvc2l0aW9uLmJpbmQ9XCJpY29ucG9zaXRpb25cIlxuICAgIHNob3J0Y3V0a2V5LmJpbmQ9XCJzaG9ydGN1dGtleVwiXG4gICAgdGFiaW5kZXguYmluZD1cInRhYmluZGV4XCJcbiAgICAoa2V5ZG93bik9XCJvblBvcG92ZXJBbmNob3JLZXlkb3duKCRldmVudClcIj5cbjwvYT5cbiJdfQ==
|
|
@@ -61,9 +61,10 @@ let activePopover;
|
|
|
61
61
|
class PopoverComponent extends StylableComponent {
|
|
62
62
|
static { this.initializeProps = registerProps(); }
|
|
63
63
|
static { this.activePopovers = []; }
|
|
64
|
-
constructor(inj, app, explicitContext) {
|
|
64
|
+
constructor(inj, app, explicitContext, cdr) {
|
|
65
65
|
super(inj, WIDGET_CONFIG, explicitContext);
|
|
66
66
|
this.app = app;
|
|
67
|
+
this.cdr = cdr;
|
|
67
68
|
this.isOpen = false;
|
|
68
69
|
this.canPopoverOpen = true;
|
|
69
70
|
this.isClosingProgrammatically = false;
|
|
@@ -77,10 +78,23 @@ class PopoverComponent extends StylableComponent {
|
|
|
77
78
|
if (!this.isOpen)
|
|
78
79
|
return;
|
|
79
80
|
const target = event.target;
|
|
81
|
+
// Check if the clicked element or any of its parents is part of the datepicker, dropdown, or typeahead containers
|
|
82
|
+
const isInsideSpecialContainer = !!(target.closest('.bs-datepicker-container') ||
|
|
83
|
+
target.closest(".dropdown-menu"));
|
|
84
|
+
if (isInsideSpecialContainer) {
|
|
85
|
+
// If the click was inside one of these containers, we do not close the popover
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
80
88
|
const clickedPopoverIndex = PopoverComponent.activePopovers.findIndex(popover => {
|
|
81
89
|
const popoverContainer = document.querySelector(`.${popover.popoverContainerCls}`);
|
|
82
90
|
return popoverContainer?.contains(target);
|
|
83
91
|
});
|
|
92
|
+
if (this.anchorRef.nativeElement.contains(target)) {
|
|
93
|
+
event.preventDefault();
|
|
94
|
+
event.stopPropagation();
|
|
95
|
+
this.isOpen ? this.close() : this.open();
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
84
98
|
if (clickedPopoverIndex === -1) {
|
|
85
99
|
// Click is outside all popovers
|
|
86
100
|
if (this.outsideclick) {
|
|
@@ -120,6 +134,7 @@ class PopoverComponent extends StylableComponent {
|
|
|
120
134
|
if (!PopoverComponent.activePopovers.includes(this)) {
|
|
121
135
|
PopoverComponent.activePopovers.push(this);
|
|
122
136
|
}
|
|
137
|
+
this.cdr.detectChanges();
|
|
123
138
|
}
|
|
124
139
|
// This mehtod is used to hide/close the popover.
|
|
125
140
|
close() {
|
|
@@ -131,6 +146,7 @@ class PopoverComponent extends StylableComponent {
|
|
|
131
146
|
if (index > -1) {
|
|
132
147
|
PopoverComponent.activePopovers.splice(index, 1);
|
|
133
148
|
}
|
|
149
|
+
this.cdr.detectChanges();
|
|
134
150
|
}
|
|
135
151
|
}
|
|
136
152
|
// Trigger on hiding popover
|
|
@@ -362,7 +378,7 @@ class PopoverComponent extends StylableComponent {
|
|
|
362
378
|
PopoverComponent.activePopovers.splice(index, 1);
|
|
363
379
|
}
|
|
364
380
|
}
|
|
365
|
-
static { this.ɵfac = function PopoverComponent_Factory(t) { return new (t || PopoverComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.App), i0.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
|
|
381
|
+
static { this.ɵfac = function PopoverComponent_Factory(t) { return new (t || PopoverComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.App), i0.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
|
|
366
382
|
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PopoverComponent, selectors: [["wm-popover"]], contentQueries: function PopoverComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
|
|
367
383
|
i0.ɵɵcontentQuery(dirIndex, TemplateRef, 5);
|
|
368
384
|
i0.ɵɵcontentQuery(dirIndex, _c0, 5);
|
|
@@ -401,7 +417,7 @@ class PopoverComponent extends StylableComponent {
|
|
|
401
417
|
args: ['EXPLICIT_CONTEXT']
|
|
402
418
|
}, {
|
|
403
419
|
type: Optional
|
|
404
|
-
}] }], { bsPopoverDirective: [{
|
|
420
|
+
}] }, { type: i0.ChangeDetectorRef }], { bsPopoverDirective: [{
|
|
405
421
|
type: ViewChild,
|
|
406
422
|
args: [PopoverDirective]
|
|
407
423
|
}], anchorRef: [{
|
|
@@ -414,7 +430,7 @@ class PopoverComponent extends StylableComponent {
|
|
|
414
430
|
type: ContentChild,
|
|
415
431
|
args: ['partial']
|
|
416
432
|
}] }); })();
|
|
417
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PopoverComponent, { className: "PopoverComponent", filePath: "popover.component.ts", lineNumber:
|
|
433
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PopoverComponent, { className: "PopoverComponent", filePath: "popover.component.ts", lineNumber: 60 }); })();
|
|
418
434
|
|
|
419
435
|
const components = [
|
|
420
436
|
PopoverComponent
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../../projects/components/widgets/navigation/popover/src/popover.props.ts","../../../../../projects/components/widgets/navigation/popover/src/popover.component.ts","../../../../../projects/components/widgets/navigation/popover/src/popover.component.html","../../../../../projects/components/widgets/navigation/popover/src/popover.module.ts","../../../../../projects/components/widgets/navigation/popover/src/index.ts"],"sourcesContent":["import {PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register} from '@wm/components/base';\n\nexport const registerProps = () => {\n register(\n 'wm-popover',\n new Map(\n [\n ['autoclose', {value: 'outsideClick', ...PROP_STRING}],\n ['badgevalue', PROP_STRING],\n ['caption', {value: 'Link', ...PROP_STRING}],\n ['class', PROP_STRING],\n ['conditionalclass', PROP_ANY],\n ['content', PROP_STRING],\n ['contentanimation', PROP_STRING],\n ['contentsource', {value: 'partial', ...PROP_STRING}],\n ['encodeurl', PROP_BOOLEAN],\n ['hint', PROP_STRING],\n ['arialabel', PROP_STRING],\n ['hyperlink', {value: 'javascript:void(0)', PROP_STRING}],\n ['iconclass', PROP_STRING],\n ['iconheight', PROP_STRING],\n ['iconmargin', PROP_STRING],\n ['iconposition', PROP_STRING],\n ['iconurl', PROP_STRING],\n ['iconwidth', PROP_STRING],\n ['interaction', {value: 'click', ...PROP_STRING}],\n ['name', PROP_STRING],\n ['popoverarrow', {value: true, ...PROP_BOOLEAN}],\n ['popoverheight', PROP_STRING],\n ['popoverplacement', {value: 'bottom', ... PROP_STRING}],\n ['popoverwidth', PROP_STRING],\n ['shortcutkey', PROP_STRING],\n ['show', {value: true, ...PROP_BOOLEAN}],\n ['tabindex', {value: 0, ...PROP_NUMBER}],\n ['title', PROP_STRING],\n ['adaptiveposition', {value: true, ...PROP_BOOLEAN}]\n\n ]\n )\n );\n};\n","import {\n AfterViewInit,\n Component,\n ContentChild,\n ElementRef,\n Inject,\n Injector,\n OnInit,\n Optional,\n TemplateRef,\n ViewChild\n} from '@angular/core';\n\nimport {PopoverDirective} from 'ngx-bootstrap/popover';\n\nimport {\n addClass,\n adjustContainerPosition,\n adjustContainerRightEdges,\n App,\n findRootContainer,\n setCSSFromObj\n} from '@wm/core';\nimport {\n AUTOCLOSE_TYPE,\n getContainerTargetClass,\n IWidgetConfig,\n provideAsWidgetRef,\n StylableComponent,\n styler\n} from '@wm/components/base';\n\nimport {registerProps} from './popover.props';\n\ndeclare const $;\n\nconst DEFAULT_CLS = 'app-popover-wrapper';\nconst WIDGET_CONFIG: IWidgetConfig = {\n widgetType: 'wm-popover',\n hostClass: DEFAULT_CLS\n};\n\nconst eventsMap = {\n click: 'click',\n hover: 'mouseenter:click',\n default: 'click mouseenter'\n};\n\nlet activePopover: PopoverComponent;\n\n@Component({\n selector: 'wm-popover',\n templateUrl: './popover.component.html',\n providers: [\n provideAsWidgetRef(PopoverComponent)\n ]\n})\n\nexport class PopoverComponent extends StylableComponent implements OnInit, AfterViewInit {\n static initializeProps = registerProps();\n\n public event: string;\n public isOpen = false;\n private closePopoverTimeout;\n public readonly popoverContainerCls;\n public canPopoverOpen = true;\n private Widgets;\n private Variables;\n private Actions;\n\n public interaction: string;\n public popoverarrow: boolean;\n public popoverwidth: string;\n public popoverheight: string;\n public contentanimation: string;\n public contentsource: string;\n public content: string;\n public popoverplacement: string;\n public outsideclick: boolean;\n public autoclose: string;\n\n public class: string;\n public title: string;\n public tabindex: any;\n public name: string;\n public adaptiveposition:boolean;\n public containerTarget: string;\n public hint: string;\n public arialabel: string;\n public caption: string;\n public badgevalue: string;\n private documentClickHandler: (e: MouseEvent) => void;\n private isClosingProgrammatically = false;\n private static activePopovers: PopoverComponent[] = [];\n\n @ViewChild(PopoverDirective) private bsPopoverDirective;\n @ViewChild('anchor', { static: true }) anchorRef: ElementRef;\n @ContentChild(TemplateRef) popoverTemplate;\n @ContentChild('partial') partialRef;\n\n constructor(inj: Injector, private app: App, @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any) {\n super(inj, WIDGET_CONFIG, explicitContext);\n this.popoverContainerCls = `app-popover-${this.widgetId}`;\n }\n\n private setupDocumentClickHandler() {\n if (this.documentClickHandler) {\n document.removeEventListener('click', this.documentClickHandler, true);\n }\n\n this.documentClickHandler = (event: MouseEvent) => {\n if (!this.isOpen) return;\n\n const target = event.target as HTMLElement;\n const clickedPopoverIndex = PopoverComponent.activePopovers.findIndex(popover => {\n const popoverContainer = document.querySelector(`.${popover.popoverContainerCls}`);\n return popoverContainer?.contains(target);\n });\n\n if (clickedPopoverIndex === -1) {\n // Click is outside all popovers\n if (this.outsideclick) {\n this.closeAllPopovers();\n }\n } else {\n // Click is inside a popover\n this.closeInnerPopovers(clickedPopoverIndex);\n }\n };\n\n document.addEventListener('click', this.documentClickHandler, true);\n }\n\n private closeAllPopovers() {\n PopoverComponent.activePopovers.forEach(popover => {\n if (popover.outsideclick) {\n popover.isClosingProgrammatically = true;\n popover.close();\n }\n });\n }\n\n private closeInnerPopovers(clickedIndex: number) {\n for (let i = clickedIndex + 1; i < PopoverComponent.activePopovers.length; i++) {\n const popover = PopoverComponent.activePopovers[i];\n if (popover.outsideclick) {\n popover.isClosingProgrammatically = true;\n popover.close();\n }\n }\n }\n\n private isChildPopover(): boolean {\n return !!$(this.nativeElement).closest('.popover').length;\n }\n // This mehtod is used to show/open the popover. This refers to the same method showPopover.\n public open() {\n this.showPopover();\n if (!PopoverComponent.activePopovers.includes(this)) {\n PopoverComponent.activePopovers.push(this);\n }\n }\n\n // This mehtod is used to hide/close the popover.\n public close() {\n if (this.isOpen) {\n this.isClosingProgrammatically = true;\n this.isOpen = false;\n this.bsPopoverDirective.hide();\n const index = PopoverComponent.activePopovers.indexOf(this);\n if (index > -1) {\n PopoverComponent.activePopovers.splice(index, 1);\n }\n }\n }\n\n // Trigger on hiding popover\n public onHidden() {\n if (!this.isChildPopover() || this.isClosingProgrammatically) {\n this.invokeEventCallback('hide', {$event: {type: 'hide'}});\n this.isOpen = false;\n if (activePopover === this) {\n activePopover = null;\n }\n }\n this.isClosingProgrammatically = false;\n }\n\n private setFocusToPopoverLink() {\n setTimeout(() => this.anchorRef.nativeElement.focus(), 10);\n }\n\n private adjustPopoverArrowPosition(popoverElem, popoverLeftShift) {\n this.bsPopoverDirective._popover._ngZone.onStable.subscribe(() => {\n popoverElem.find('.popover-arrow').css('left', popoverLeftShift + 'px');\n });\n }\n\n private calculatePopoverPostion(element) {\n\n const popoverElem = $(element);\n let popoverLeft = popoverElem.offset().left;\n const popoverWidth = popoverElem[0].offsetWidth;\n const viewPortWidth = $(window).width();\n const parentDimesion = this.anchorRef.nativeElement.getBoundingClientRect();\n // Adjusting popover position, if it is not visible at left side\n if (popoverLeft < 0) {\n adjustContainerPosition(popoverElem, this.nativeElement, this.bsPopoverDirective._popover);\n const popoverLeftShift = 4;\n const arrowLeftShift = (parentDimesion.left + (parentDimesion.width / 2)) - popoverLeftShift;\n this.adjustPopoverArrowPosition(popoverElem, arrowLeftShift);\n }\n // Adjusting popover position, if it is not visible at right side\n if (popoverLeft + popoverWidth > viewPortWidth) {\n adjustContainerRightEdges(popoverElem, this.nativeElement, this.bsPopoverDirective._popover);\n setTimeout(() => {\n popoverLeft = popoverElem.offset().left;\n const popoverLeftAdjust = (popoverLeft + popoverWidth) - viewPortWidth;\n const popoverLeftShift = popoverLeft - popoverLeftAdjust;\n let arrowLeftShift ;\n if(popoverLeft<=100){\n arrowLeftShift = (parentDimesion.left + (parentDimesion.width / 2)) - popoverLeft;\n }else{\n arrowLeftShift = (parentDimesion.left + (parentDimesion.width / 2)) - popoverLeftShift;\n }\n if(viewPortWidth > 500){\n arrowLeftShift += 30;\n }\n this.adjustPopoverArrowPosition(popoverElem, arrowLeftShift);\n });\n }\n }\n\n // Trigger on showing popover\n public onShown() {\n const root = findRootContainer(this.$element);\n // if page styles have to be applied to popover then popover has to be child of page element.\n if (root) {\n $('body > popover-container').wrap('<' + root + '/>');\n }\n // Fix for [WMS-25125]: Not closing the existing opened popovers when the autoclose property is DISABLED\n if (!this.isChildPopover()) {\n if (activePopover && activePopover !== this && \n activePopover.autoclose !== AUTOCLOSE_TYPE.DISABLED) {\n activePopover.isClosingProgrammatically = true;\n activePopover.close();\n }\n activePopover = this;\n }\n\n this.isOpen = true;\n if (!PopoverComponent.activePopovers.includes(this)) {\n PopoverComponent.activePopovers.push(this);\n }\n const popoverContainer = document.querySelector(`.${this.popoverContainerCls}`) as HTMLElement;\n if (popoverContainer) {\n popoverContainer.setAttribute('data-popover-id', this.widgetId);\n \n // Add click event listener to stop propagation\n popoverContainer.addEventListener('click', (event: Event) => {\n event.stopPropagation();\n });\n }\n setCSSFromObj(popoverContainer, {\n height: this.popoverheight,\n minWidth: this.popoverwidth,\n width: this.popoverwidth\n });\n if (!this.popoverarrow) {\n addClass(popoverContainer.querySelector('.arrow') as HTMLElement, 'hidden');\n }\n if (this.interaction === 'hover' || this.interaction === 'default') {\n\n // do not use addEventListener here\n // attaching the event this way will override the existing event handlers\n popoverContainer.onmouseenter = () => clearTimeout(this.closePopoverTimeout);\n popoverContainer.onmouseleave = () => this.hidePopover();\n this.anchorRef.nativeElement.onmouseenter = () => clearTimeout(this.closePopoverTimeout);\n this.anchorRef.nativeElement.onmouseleave = () => this.hidePopover();\n }\n if (this.outsideclick) {\n this.setupDocumentClickHandler();\n }\n setTimeout(() => {\n this.anchorRef.nativeElement.removeAttribute('aria-describedby');\n });\n const deRegister = this.eventManager.addEventListener(popoverContainer, 'keydown.esc', () => {\n this.isOpen = false;\n this.setFocusToPopoverLink();\n deRegister();\n });\n const popoverStartBtn: HTMLElement = popoverContainer.querySelector('.popover-start');\n const popoverEndBtn: HTMLElement = popoverContainer.querySelector('.popover-end');\n popoverStartBtn.onkeydown = (event) => {\n // Check for Shift+Tab key\n if (event.shiftKey && event.key === 'Tab') {\n this.bsPopoverDirective.hide();\n event.preventDefault();\n this.setFocusToPopoverLink();\n this.isOpen = false; }\n };\n popoverEndBtn.onkeydown = (event) => {\n // Check for Tab key\n if (!event.shiftKey && event.key === 'Tab') {\n this.bsPopoverDirective.hide();\n event.preventDefault();\n this.setFocusToPopoverLink();\n this.isOpen = false; }\n };\n\n //Whenever autoclose property is set to 'always', adding the onclick listener to the popover container to close the popover.\n if (this.autoclose === AUTOCLOSE_TYPE.ALWAYS) {\n popoverContainer.onclick = () => this.close();\n }\n\n setTimeout(() => popoverStartBtn.focus(), 50);\n // Adjusting popover position if the popover placement is top or bottom\n setTimeout( () => {\n if (!this.adaptiveposition ) {\n this.calculatePopoverPostion(popoverContainer);\n }\n // triggering onload and onshow events after popover content has rendered\n this.triggerPopoverEvents();\n });\n }\n\n triggerPopoverEvents() {\n if (this.contentsource === 'partial') {\n const cancelSubscription = this.app.subscribe('partialLoaded', (data) => {\n const parEle = this.partialRef.nativeElement;\n let partialScope;\n\n if (parEle) {\n partialScope = parEle.widget;\n this.Widgets = partialScope.Widgets;\n this.Variables = partialScope.Variables;\n this.Actions = partialScope.Actions;\n this.invokeEventCallback('load');\n this.invokeEventCallback('show', {$event: {type: 'show'}});\n }\n cancelSubscription();\n });\n } else {\n this.Widgets = this.viewParent.Widgets;\n this.Variables = this.viewParent.Variables;\n this.Actions = this.viewParent.Actions;\n this.invokeEventCallback('show', {$event: {type: 'show'}});\n }\n }\n\n private hidePopover() {\n this.isClosingProgrammatically = true;\n this.closePopoverTimeout = setTimeout(() => this.isOpen = false, 500);\n }\n\n private showPopover() {\n this.bsPopoverDirective.show();\n }\n\n onPopoverAnchorKeydown($event) {\n // if there is no content available, the popover should not open through enter key. So checking whether the canPopoverOpen flag is true or not.\n if (!this.canPopoverOpen) {\n return;\n }\n if ($event.key === 'Enter') {\n $event.stopPropagation();\n $event.preventDefault();\n this.showPopover();\n }\n }\n\n onPropertyChange(key: string, nv: any, ov?: any) {\n if (key === 'class' || key === 'tabindex') {\n return;\n }\n if (key === 'contentsource') {\n // if there is no partial content available, the popover should not open\n if (this.contentsource === 'partial' && !this.content) {\n this.canPopoverOpen = false;\n }\n }\n if (key === 'content' && nv) {\n this.canPopoverOpen = true;\n }\n if (key === 'autoclose') {\n this.outsideclick = (nv === AUTOCLOSE_TYPE.OUTSIDECLICK || nv === AUTOCLOSE_TYPE.ALWAYS) ? true : false;\n }\n super.onPropertyChange(key, nv, ov);\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.event = eventsMap[this.interaction];\n }\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n styler(this.anchorRef.nativeElement, this);\n this.containerTarget = getContainerTargetClass(this.nativeElement);\n // let parentElemPopover = $(this.nativeElement).parents();\n // if (parentElemPopover.closest('[wmTable]').length ||\n // parentElemPopover.closest('[wmtabs]').length ||\n // parentElemPopover.closest('modal-container').length) {\n // this.adaptiveposition = false;\n // }\n }\n\n ngOnDetach() {\n // Hide the popover container while attaching the next component as part of page reuse strategy.\n this.bsPopoverDirective.hide();\n }\n\n OnDestroy() {\n if (this.documentClickHandler) {\n document.removeEventListener('click', this.documentClickHandler, true);\n }\n const index = PopoverComponent.activePopovers.indexOf(this);\n if (index > -1) {\n PopoverComponent.activePopovers.splice(index, 1);\n }\n }\n}\n","<a [popover]=\"popoverTemplate\"\n [popoverContext]=\"context\"\n [popoverTitle]=\"title\"\n [placement]=\"popoverplacement\"\n [outsideClick]=\"outsideclick\"\n [triggers]=\"event\"\n (onShown)=\"onShown()\"\n (onHidden)=\"onHidden()\"\n containerClass=\"app-popover animated {{contentanimation}} {{popoverContainerCls}}\"\n [container]=\"containerTarget || '.wm-app'\"\n [isOpen]=\"isOpen\"\n [tabindex]=\"tabindex\"\n [name]=\"name\"\n [class]=\"class\"\n [ngClass]=\"{'disable-popover': !canPopoverOpen}\"\n [adaptivePosition]=\"adaptiveposition\"\n boundariesElement=\"window\"\n [attr.aria-label]=\"arialabel || (badgevalue ? caption + ' ' + badgevalue : caption) || 'Popover menu'\"\n [attr.aria-expanded]=\"isOpen\"\n role=\"button\"\n #anchor\n name.bind=\"name\"\n wmAnchor\n animation.bind=\"animation\"\n badgevalue.bind=\"badgevalue\"\n caption.bind=\"caption\"\n encodeurl.bind=\"encodeurl\"\n hint.bind=\"hint\"\n hyperlink.bind=\"hyperlink\"\n iconurl.bind=\"iconurl\"\n iconwidth.bind=\"iconwidth\"\n iconheight.bind=\"iconheight\"\n iconmargin.bind=\"iconmargin\"\n iconclass.bind=\"iconclass\"\n iconposition.bind=\"iconposition\"\n shortcutkey.bind=\"shortcutkey\"\n tabindex.bind=\"tabindex\"\n (keydown)=\"onPopoverAnchorKeydown($event)\">\n</a>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { PopoverModule as NgxPopoverModule } from 'ngx-bootstrap/popover';\n\nimport { WmComponentsModule } from '@wm/components/base';\nimport { BasicModule } from '@wm/components/basic';\n\nimport { PopoverComponent } from './popover.component';\n\nconst components = [\n PopoverComponent\n];\n\n@NgModule({\n imports: [\n CommonModule,\n BasicModule,\n NgxPopoverModule,\n WmComponentsModule\n ],\n declarations: [...components],\n exports: [...components]\n})\nexport class PopoverModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["NgxPopoverModule"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../../projects/components/widgets/navigation/popover/src/popover.props.ts","../../../../../projects/components/widgets/navigation/popover/src/popover.component.ts","../../../../../projects/components/widgets/navigation/popover/src/popover.component.html","../../../../../projects/components/widgets/navigation/popover/src/popover.module.ts","../../../../../projects/components/widgets/navigation/popover/src/index.ts"],"sourcesContent":["import {PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register} from '@wm/components/base';\n\nexport const registerProps = () => {\n register(\n 'wm-popover',\n new Map(\n [\n ['autoclose', {value: 'outsideClick', ...PROP_STRING}],\n ['badgevalue', PROP_STRING],\n ['caption', {value: 'Link', ...PROP_STRING}],\n ['class', PROP_STRING],\n ['conditionalclass', PROP_ANY],\n ['content', PROP_STRING],\n ['contentanimation', PROP_STRING],\n ['contentsource', {value: 'partial', ...PROP_STRING}],\n ['encodeurl', PROP_BOOLEAN],\n ['hint', PROP_STRING],\n ['arialabel', PROP_STRING],\n ['hyperlink', {value: 'javascript:void(0)', PROP_STRING}],\n ['iconclass', PROP_STRING],\n ['iconheight', PROP_STRING],\n ['iconmargin', PROP_STRING],\n ['iconposition', PROP_STRING],\n ['iconurl', PROP_STRING],\n ['iconwidth', PROP_STRING],\n ['interaction', {value: 'click', ...PROP_STRING}],\n ['name', PROP_STRING],\n ['popoverarrow', {value: true, ...PROP_BOOLEAN}],\n ['popoverheight', PROP_STRING],\n ['popoverplacement', {value: 'bottom', ... PROP_STRING}],\n ['popoverwidth', PROP_STRING],\n ['shortcutkey', PROP_STRING],\n ['show', {value: true, ...PROP_BOOLEAN}],\n ['tabindex', {value: 0, ...PROP_NUMBER}],\n ['title', PROP_STRING],\n ['adaptiveposition', {value: true, ...PROP_BOOLEAN}]\n\n ]\n )\n );\n};\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n Inject,\n Injector,\n OnInit,\n Optional,\n TemplateRef,\n ViewChild\n} from '@angular/core';\n\nimport {PopoverDirective} from 'ngx-bootstrap/popover';\n\nimport {\n addClass,\n adjustContainerPosition,\n adjustContainerRightEdges,\n App,\n findRootContainer,\n setCSSFromObj\n} from '@wm/core';\nimport {\n AUTOCLOSE_TYPE,\n getContainerTargetClass,\n IWidgetConfig,\n provideAsWidgetRef,\n StylableComponent,\n styler\n} from '@wm/components/base';\n\nimport {registerProps} from './popover.props';\n\ndeclare const $;\n\nconst DEFAULT_CLS = 'app-popover-wrapper';\nconst WIDGET_CONFIG: IWidgetConfig = {\n widgetType: 'wm-popover',\n hostClass: DEFAULT_CLS\n};\n\nconst eventsMap = {\n click: 'click',\n hover: 'mouseenter:click',\n default: 'click mouseenter'\n};\n\nlet activePopover: PopoverComponent;\n\n@Component({\n selector: 'wm-popover',\n templateUrl: './popover.component.html',\n providers: [\n provideAsWidgetRef(PopoverComponent)\n ]\n})\n\nexport class PopoverComponent extends StylableComponent implements OnInit, AfterViewInit {\n static initializeProps = registerProps();\n\n public event: string;\n public isOpen = false;\n private closePopoverTimeout;\n public readonly popoverContainerCls;\n public canPopoverOpen = true;\n private Widgets;\n private Variables;\n private Actions;\n\n public interaction: string;\n public popoverarrow: boolean;\n public popoverwidth: string;\n public popoverheight: string;\n public contentanimation: string;\n public contentsource: string;\n public content: string;\n public popoverplacement: string;\n public outsideclick: boolean;\n public autoclose: string;\n\n public class: string;\n public title: string;\n public tabindex: any;\n public name: string;\n public adaptiveposition:boolean;\n public containerTarget: string;\n public hint: string;\n public arialabel: string;\n public caption: string;\n public badgevalue: string;\n private documentClickHandler: (e: MouseEvent) => void;\n private isClosingProgrammatically = false;\n private static activePopovers: PopoverComponent[] = [];\n\n @ViewChild(PopoverDirective) private bsPopoverDirective;\n @ViewChild('anchor', { static: true }) anchorRef: ElementRef;\n @ContentChild(TemplateRef) popoverTemplate;\n @ContentChild('partial') partialRef;\n\n constructor(inj: Injector, private app: App, @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any, private cdr: ChangeDetectorRef) {\n super(inj, WIDGET_CONFIG, explicitContext);\n this.popoverContainerCls = `app-popover-${this.widgetId}`;\n }\n\n private setupDocumentClickHandler() {\n if (this.documentClickHandler) {\n document.removeEventListener('click', this.documentClickHandler, true);\n }\n \n this.documentClickHandler = (event: MouseEvent) => {\n if (!this.isOpen) return;\n \n const target = event.target as HTMLElement;\n \n // Check if the clicked element or any of its parents is part of the datepicker, dropdown, or typeahead containers\n const isInsideSpecialContainer = !!(\n target.closest('.bs-datepicker-container') || \n target.closest(\".dropdown-menu\")\n );\n \n if (isInsideSpecialContainer) {\n // If the click was inside one of these containers, we do not close the popover\n return;\n }\n \n const clickedPopoverIndex = PopoverComponent.activePopovers.findIndex(popover => {\n const popoverContainer = document.querySelector(`.${popover.popoverContainerCls}`);\n return popoverContainer?.contains(target);\n });\n\n if (this.anchorRef.nativeElement.contains(target)) {\n event.preventDefault();\n event.stopPropagation();\n this.isOpen ? this.close() : this.open()\n return;\n }\n \n if (clickedPopoverIndex === -1) {\n // Click is outside all popovers\n if (this.outsideclick) {\n this.closeAllPopovers();\n }\n } else {\n // Click is inside a popover\n this.closeInnerPopovers(clickedPopoverIndex);\n }\n };\n \n document.addEventListener('click', this.documentClickHandler, true);\n }\n \n\n private closeAllPopovers() {\n PopoverComponent.activePopovers.forEach(popover => {\n if (popover.outsideclick) {\n popover.isClosingProgrammatically = true;\n popover.close();\n }\n });\n }\n\n private closeInnerPopovers(clickedIndex: number) {\n for (let i = clickedIndex + 1; i < PopoverComponent.activePopovers.length; i++) {\n const popover = PopoverComponent.activePopovers[i];\n if (popover.outsideclick) {\n popover.isClosingProgrammatically = true;\n popover.close();\n }\n }\n }\n\n private isChildPopover(): boolean {\n return !!$(this.nativeElement).closest('.popover').length;\n }\n // This mehtod is used to show/open the popover. This refers to the same method showPopover.\n public open() {\n this.showPopover();\n if (!PopoverComponent.activePopovers.includes(this)) {\n PopoverComponent.activePopovers.push(this);\n }\n this.cdr.detectChanges();\n }\n\n // This mehtod is used to hide/close the popover.\n public close() {\n if (this.isOpen) {\n this.isClosingProgrammatically = true;\n this.isOpen = false;\n this.bsPopoverDirective.hide();\n const index = PopoverComponent.activePopovers.indexOf(this);\n if (index > -1) {\n PopoverComponent.activePopovers.splice(index, 1);\n }\n this.cdr.detectChanges();\n }\n }\n\n // Trigger on hiding popover\n public onHidden() {\n if (!this.isChildPopover() || this.isClosingProgrammatically) {\n this.invokeEventCallback('hide', {$event: {type: 'hide'}});\n this.isOpen = false;\n if (activePopover === this) {\n activePopover = null;\n }\n }\n this.isClosingProgrammatically = false;\n }\n\n private setFocusToPopoverLink() {\n setTimeout(() => this.anchorRef.nativeElement.focus(), 10);\n }\n\n private adjustPopoverArrowPosition(popoverElem, popoverLeftShift) {\n this.bsPopoverDirective._popover._ngZone.onStable.subscribe(() => {\n popoverElem.find('.popover-arrow').css('left', popoverLeftShift + 'px');\n });\n }\n\n private calculatePopoverPostion(element) {\n\n const popoverElem = $(element);\n let popoverLeft = popoverElem.offset().left;\n const popoverWidth = popoverElem[0].offsetWidth;\n const viewPortWidth = $(window).width();\n const parentDimesion = this.anchorRef.nativeElement.getBoundingClientRect();\n // Adjusting popover position, if it is not visible at left side\n if (popoverLeft < 0) {\n adjustContainerPosition(popoverElem, this.nativeElement, this.bsPopoverDirective._popover);\n const popoverLeftShift = 4;\n const arrowLeftShift = (parentDimesion.left + (parentDimesion.width / 2)) - popoverLeftShift;\n this.adjustPopoverArrowPosition(popoverElem, arrowLeftShift);\n }\n // Adjusting popover position, if it is not visible at right side\n if (popoverLeft + popoverWidth > viewPortWidth) {\n adjustContainerRightEdges(popoverElem, this.nativeElement, this.bsPopoverDirective._popover);\n setTimeout(() => {\n popoverLeft = popoverElem.offset().left;\n const popoverLeftAdjust = (popoverLeft + popoverWidth) - viewPortWidth;\n const popoverLeftShift = popoverLeft - popoverLeftAdjust;\n let arrowLeftShift ;\n if(popoverLeft<=100){\n arrowLeftShift = (parentDimesion.left + (parentDimesion.width / 2)) - popoverLeft;\n }else{\n arrowLeftShift = (parentDimesion.left + (parentDimesion.width / 2)) - popoverLeftShift;\n }\n if(viewPortWidth > 500){\n arrowLeftShift += 30;\n }\n this.adjustPopoverArrowPosition(popoverElem, arrowLeftShift);\n });\n }\n }\n\n // Trigger on showing popover\n public onShown() {\n const root = findRootContainer(this.$element);\n // if page styles have to be applied to popover then popover has to be child of page element.\n if (root) {\n $('body > popover-container').wrap('<' + root + '/>');\n }\n // Fix for [WMS-25125]: Not closing the existing opened popovers when the autoclose property is DISABLED\n if (!this.isChildPopover()) {\n if (activePopover && activePopover !== this && \n activePopover.autoclose !== AUTOCLOSE_TYPE.DISABLED) {\n activePopover.isClosingProgrammatically = true;\n activePopover.close();\n }\n activePopover = this;\n }\n\n this.isOpen = true;\n if (!PopoverComponent.activePopovers.includes(this)) {\n PopoverComponent.activePopovers.push(this);\n }\n const popoverContainer = document.querySelector(`.${this.popoverContainerCls}`) as HTMLElement;\n if (popoverContainer) {\n popoverContainer.setAttribute('data-popover-id', this.widgetId);\n \n // Add click event listener to stop propagation\n popoverContainer.addEventListener('click', (event: Event) => {\n event.stopPropagation();\n });\n }\n setCSSFromObj(popoverContainer, {\n height: this.popoverheight,\n minWidth: this.popoverwidth,\n width: this.popoverwidth\n });\n if (!this.popoverarrow) {\n addClass(popoverContainer.querySelector('.arrow') as HTMLElement, 'hidden');\n }\n if (this.interaction === 'hover' || this.interaction === 'default') {\n\n // do not use addEventListener here\n // attaching the event this way will override the existing event handlers\n popoverContainer.onmouseenter = () => clearTimeout(this.closePopoverTimeout);\n popoverContainer.onmouseleave = () => this.hidePopover();\n this.anchorRef.nativeElement.onmouseenter = () => clearTimeout(this.closePopoverTimeout);\n this.anchorRef.nativeElement.onmouseleave = () => this.hidePopover();\n }\n if (this.outsideclick) {\n this.setupDocumentClickHandler();\n }\n setTimeout(() => {\n this.anchorRef.nativeElement.removeAttribute('aria-describedby');\n });\n const deRegister = this.eventManager.addEventListener(popoverContainer, 'keydown.esc', () => {\n this.isOpen = false;\n this.setFocusToPopoverLink();\n deRegister();\n });\n const popoverStartBtn: HTMLElement = popoverContainer.querySelector('.popover-start');\n const popoverEndBtn: HTMLElement = popoverContainer.querySelector('.popover-end');\n popoverStartBtn.onkeydown = (event) => {\n // Check for Shift+Tab key\n if (event.shiftKey && event.key === 'Tab') {\n this.bsPopoverDirective.hide();\n event.preventDefault();\n this.setFocusToPopoverLink();\n this.isOpen = false; }\n };\n popoverEndBtn.onkeydown = (event) => {\n // Check for Tab key\n if (!event.shiftKey && event.key === 'Tab') {\n this.bsPopoverDirective.hide();\n event.preventDefault();\n this.setFocusToPopoverLink();\n this.isOpen = false; }\n };\n\n //Whenever autoclose property is set to 'always', adding the onclick listener to the popover container to close the popover.\n if (this.autoclose === AUTOCLOSE_TYPE.ALWAYS) {\n popoverContainer.onclick = () => this.close();\n }\n\n setTimeout(() => popoverStartBtn.focus(), 50);\n // Adjusting popover position if the popover placement is top or bottom\n setTimeout( () => {\n if (!this.adaptiveposition ) {\n this.calculatePopoverPostion(popoverContainer);\n }\n // triggering onload and onshow events after popover content has rendered\n this.triggerPopoverEvents();\n });\n }\n\n triggerPopoverEvents() {\n if (this.contentsource === 'partial') {\n const cancelSubscription = this.app.subscribe('partialLoaded', (data) => {\n const parEle = this.partialRef.nativeElement;\n let partialScope;\n\n if (parEle) {\n partialScope = parEle.widget;\n this.Widgets = partialScope.Widgets;\n this.Variables = partialScope.Variables;\n this.Actions = partialScope.Actions;\n this.invokeEventCallback('load');\n this.invokeEventCallback('show', {$event: {type: 'show'}});\n }\n cancelSubscription();\n });\n } else {\n this.Widgets = this.viewParent.Widgets;\n this.Variables = this.viewParent.Variables;\n this.Actions = this.viewParent.Actions;\n this.invokeEventCallback('show', {$event: {type: 'show'}});\n }\n }\n\n private hidePopover() {\n this.isClosingProgrammatically = true;\n this.closePopoverTimeout = setTimeout(() => this.isOpen = false, 500);\n }\n\n private showPopover() {\n this.bsPopoverDirective.show();\n }\n\n onPopoverAnchorKeydown($event) {\n // if there is no content available, the popover should not open through enter key. So checking whether the canPopoverOpen flag is true or not.\n if (!this.canPopoverOpen) {\n return;\n }\n if ($event.key === 'Enter') {\n $event.stopPropagation();\n $event.preventDefault();\n this.showPopover();\n }\n }\n\n onPropertyChange(key: string, nv: any, ov?: any) {\n if (key === 'class' || key === 'tabindex') {\n return;\n }\n if (key === 'contentsource') {\n // if there is no partial content available, the popover should not open\n if (this.contentsource === 'partial' && !this.content) {\n this.canPopoverOpen = false;\n }\n }\n if (key === 'content' && nv) {\n this.canPopoverOpen = true;\n }\n if (key === 'autoclose') {\n this.outsideclick = (nv === AUTOCLOSE_TYPE.OUTSIDECLICK || nv === AUTOCLOSE_TYPE.ALWAYS) ? true : false;\n }\n super.onPropertyChange(key, nv, ov);\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.event = eventsMap[this.interaction];\n }\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n styler(this.anchorRef.nativeElement, this);\n this.containerTarget = getContainerTargetClass(this.nativeElement);\n // let parentElemPopover = $(this.nativeElement).parents();\n // if (parentElemPopover.closest('[wmTable]').length ||\n // parentElemPopover.closest('[wmtabs]').length ||\n // parentElemPopover.closest('modal-container').length) {\n // this.adaptiveposition = false;\n // }\n }\n\n ngOnDetach() {\n // Hide the popover container while attaching the next component as part of page reuse strategy.\n this.bsPopoverDirective.hide();\n }\n\n OnDestroy() {\n if (this.documentClickHandler) {\n document.removeEventListener('click', this.documentClickHandler, true);\n }\n const index = PopoverComponent.activePopovers.indexOf(this);\n if (index > -1) {\n PopoverComponent.activePopovers.splice(index, 1);\n }\n }\n}\n","<a [popover]=\"popoverTemplate\"\n [popoverContext]=\"context\"\n [popoverTitle]=\"title\"\n [placement]=\"popoverplacement\"\n [outsideClick]=\"outsideclick\"\n [triggers]=\"event\"\n (onShown)=\"onShown()\"\n (onHidden)=\"onHidden()\"\n containerClass=\"app-popover animated {{contentanimation}} {{popoverContainerCls}}\"\n [container]=\"containerTarget || '.wm-app'\"\n [isOpen]=\"isOpen\"\n [tabindex]=\"tabindex\"\n [name]=\"name\"\n [class]=\"class\"\n [ngClass]=\"{'disable-popover': !canPopoverOpen}\"\n [adaptivePosition]=\"adaptiveposition\"\n boundariesElement=\"window\"\n [attr.aria-label]=\"arialabel || (badgevalue ? caption + ' ' + badgevalue : caption) || 'Popover menu'\"\n [attr.aria-expanded]=\"isOpen\"\n role=\"button\"\n #anchor\n name.bind=\"name\"\n wmAnchor\n animation.bind=\"animation\"\n badgevalue.bind=\"badgevalue\"\n caption.bind=\"caption\"\n encodeurl.bind=\"encodeurl\"\n hint.bind=\"hint\"\n hyperlink.bind=\"hyperlink\"\n iconurl.bind=\"iconurl\"\n iconwidth.bind=\"iconwidth\"\n iconheight.bind=\"iconheight\"\n iconmargin.bind=\"iconmargin\"\n iconclass.bind=\"iconclass\"\n iconposition.bind=\"iconposition\"\n shortcutkey.bind=\"shortcutkey\"\n tabindex.bind=\"tabindex\"\n (keydown)=\"onPopoverAnchorKeydown($event)\">\n</a>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { PopoverModule as NgxPopoverModule } from 'ngx-bootstrap/popover';\n\nimport { WmComponentsModule } from '@wm/components/base';\nimport { BasicModule } from '@wm/components/basic';\n\nimport { PopoverComponent } from './popover.component';\n\nconst components = [\n PopoverComponent\n];\n\n@NgModule({\n imports: [\n CommonModule,\n BasicModule,\n NgxPopoverModule,\n WmComponentsModule\n ],\n declarations: [...components],\n exports: [...components]\n})\nexport class PopoverModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["NgxPopoverModule"],"mappings":"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"}
|