@energycap/components 0.26.11 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/energycap-components.umd.js +7247 -6296
- package/bundles/energycap-components.umd.js.map +1 -1
- package/bundles/energycap-components.umd.min.js +16 -1
- package/bundles/energycap-components.umd.min.js.map +1 -1
- package/energycap-components.d.ts +2 -4
- package/energycap-components.metadata.json +1 -1
- package/esm2015/energycap-components.js +3 -5
- package/esm2015/lib/components.module.js +52 -38
- package/esm2015/lib/core/cache.service.js +49 -4
- package/esm2015/lib/core/telemetry-tracker.service.js +14 -0
- package/esm2015/lib/core/telemetry.service.js +32 -7
- package/esm2015/lib/display/help/help-types.js +2 -0
- package/esm2015/lib/display/hierarchy/hierarchy-base.js +106 -0
- package/esm2015/lib/display/hierarchy/hierarchy-mocks.spec.js +58 -0
- package/esm2015/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.js +58 -0
- package/esm2015/lib/display/resizable/resizable.component.js +57 -0
- package/esm2015/lib/display/tree/tree.component.js +83 -0
- package/esm2015/lib/shared/page/page-base/page-base.component.js +69 -12
- package/esm2015/lib/shared/page/page-statuses.js +23 -0
- package/esm2015/lib/shared/testing/hierarchy-base-test-injector-factory.spec.js +17 -0
- package/esm2015/lib/shared/testing/page-base-component-test-injector-factory.spec.js +21 -1
- package/esm2015/lib/shared/wizard/wizard-base/wizard-base.component.js +260 -0
- package/esm2015/lib/shared/wizard/wizard-buttons/wizard-buttons.component.js +52 -0
- package/esm2015/lib/shared/wizard/wizard-progress/wizard-progress.component.js +18 -0
- package/esm2015/public-api.js +15 -3
- package/fesm2015/energycap-components.js +6867 -6000
- package/fesm2015/energycap-components.js.map +1 -1
- package/lib/components.module.d.ts +2 -3
- package/lib/core/cache.service.d.ts +11 -1
- package/lib/core/telemetry-tracker.service.d.ts +10 -0
- package/lib/core/telemetry.service.d.ts +19 -2
- package/lib/display/help/help-types.d.ts +33 -0
- package/lib/display/hierarchy/hierarchy-base.d.ts +72 -0
- package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +53 -0
- package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +29 -0
- package/lib/display/resizable/resizable.component.d.ts +28 -0
- package/lib/display/tree/tree.component.d.ts +51 -0
- package/lib/shared/page/page-base/page-base.component.d.ts +43 -1
- package/lib/shared/page/page-statuses.d.ts +13 -0
- package/lib/shared/testing/hierarchy-base-test-injector-factory.spec.d.ts +4 -0
- package/lib/shared/testing/page-base-component-test-injector-factory.spec.d.ts +9 -0
- package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +131 -0
- package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +23 -0
- package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +7 -0
- package/package.json +1 -1
- package/public-api.d.ts +14 -2
- package/src/assets/locales/en_US.json +3 -1
- package/src/styles/mixins/_resizable-base.scss +1 -2
- package/esm2015/lib/core/telemetry-base.service.js +0 -3
- package/lib/core/telemetry-base.service.d.ts +0 -25
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Component, Injector, Input, Output } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { ScrollService } from '../../../core/scroll.service';
|
|
4
|
+
import { HierarchyBase } from '../hierarchy-base';
|
|
5
|
+
export class HierarchyTreeComponent extends HierarchyBase {
|
|
6
|
+
constructor(scrollService, injector) {
|
|
7
|
+
super(injector);
|
|
8
|
+
this.scrollService = scrollService;
|
|
9
|
+
/** The value of the id attribute of the tree's root HTMLUListElement, suffixed with '_root' */
|
|
10
|
+
this.id = 'HierarchyTree';
|
|
11
|
+
/** Emits a HierarchyItem whenever one is selected by clicking */
|
|
12
|
+
this.itemSelected = new Subject();
|
|
13
|
+
/** The width of the spacing before a tree node, multipled by a HierarchyItem's level. Value is in pixels */
|
|
14
|
+
this.indent = 16;
|
|
15
|
+
/** The value of the id attribute of the tree's scroll container element, used to scroll a selected item into view. */
|
|
16
|
+
this.scrollContainerId = '';
|
|
17
|
+
}
|
|
18
|
+
ngOnInit() {
|
|
19
|
+
this.scrollContainerId = `${this.id}_root`;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Scroll to the item currently marked as is-selected. Wait a tick for the
|
|
23
|
+
* NavItemActiveDirective to update the selected class.
|
|
24
|
+
*/
|
|
25
|
+
scrollToSelectedItem() {
|
|
26
|
+
window.setTimeout(() => {
|
|
27
|
+
const linkSelector = `.item-wrapper.is-selected`;
|
|
28
|
+
this.scrollService.scrollToItem(`#${this.scrollContainerId}`, linkSelector);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* When a HierarchyItem is selected, update the value of the activeUrl property with the value
|
|
33
|
+
* of that item's url property and emit the item to any subscribers.
|
|
34
|
+
*/
|
|
35
|
+
selectItem(item) {
|
|
36
|
+
this.itemSelected.next(item);
|
|
37
|
+
if (item.display === 'heading' && !item.hideToggle) {
|
|
38
|
+
this.toggleItemClicked(item, !item.expanded);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
HierarchyTreeComponent.decorators = [
|
|
43
|
+
{ type: Component, args: [{
|
|
44
|
+
selector: 'ec-hierarchy-tree',
|
|
45
|
+
template: "<ul id=\"{{scrollContainerId}}\"\r\n class=\"flex-grow scroll-y\">\r\n\r\n <li *ngIf=\"!hideRootNode\">\r\n <div class=\"item-wrapper\"\r\n [ngClass]=\"{'is-heading': rootNode?.display === 'heading'}\"\r\n ecNavItemActive=\"is-selected\"\r\n [ecNavItemActiveUrl]=\"rootNode?.url\"\r\n [ecNavItemActiveExactMatch]='rootNode?.isActiveExactMatch'>\r\n <a id=\"rootNode_{{rootNode?.id}}_link\"\r\n class=\"item flex-grow d-flex align-items-center\"\r\n routerLink=\"{{rootNode?.url}}\"\r\n [queryParams]=\"rootNode?.queryParams\">\r\n <i class=\"ec-icon {{rootNode.icon}} mx-1 flex-shrink\"\r\n *ngIf=\"rootNode?.icon\"></i>\r\n <span class=\"mx-1\">{{rootNode?.label}}</span>\r\n </a>\r\n </div>\r\n </li>\r\n\r\n <ng-template #hierarchyView\r\n let-items>\r\n <li *ngFor=\"let item of items; index as index; first as isFirst\"\r\n id=\"treeItem_{{item.id}}\">\r\n <div class=\"item-wrapper\"\r\n [ngClass]=\"{'is-heading': item.display === 'heading'}\"\r\n ecNavItemActive=\"is-selected\"\r\n [ecNavItemActiveUrl]=\"item.url\"\r\n [ecNavItemActiveExactMatch]=\"item.isActiveExactMatch\"\r\n [ecNavItemActiveQueryParams]=\"item.queryParams\">\r\n\r\n <!-- This element provides the indentation for each level -->\r\n <span id=\"indent_{{item.id}}\"\r\n class=\"d-block h-100\"\r\n [style.width.px]=\"(indent) * (item.level - 1) + (item.level * 4) + (item.hasChildren ? 0 : indent)\">\r\n </span>\r\n\r\n <!-- Toggle the button icon to be a spinner when item.status is pending -->\r\n <ec-collapsible-toggle id=\"toggle_{{item.id}}\"\r\n class=\"flex-shrink\"\r\n [style.width.px]=\"indent\"\r\n *ngIf=\"item.hasChildren && !item.hideToggle\"\r\n [hidden]=\"item.status === 'pending'\"\r\n [expanded]=\"item.expanded\"\r\n (expandedChange)=\"toggleItemClicked(item, $event)\">\r\n </ec-collapsible-toggle>\r\n\r\n <i class=\"ec-icon icon-loading my-1\"\r\n [hidden]=\"item.status !== 'pending'\"></i>\r\n\r\n <a id=\"treeItem_{{item.id}}_link\"\r\n class=\"item\"\r\n *ngIf=\"item.url\"\r\n (click)=\"selectItem(item)\"\r\n [routerLink]=\"item.url\"\r\n [queryParams]=\"item.queryParams\"\r\n [queryParamsHandling]=\"item.queryParamsHandling || ''\">\r\n <i class=\"ec-icon {{item.icon}} mx-1 flex-shrink\"\r\n *ngIf=\"item.icon\"></i>\r\n <span class=\"mx-1\">{{item.label}}</span>\r\n </a>\r\n <div id=\"treeItem_{{item.id}}_heading\"\r\n class=\"item\"\r\n *ngIf=\"!item.url\"\r\n (click)=\"selectItem(item)\">\r\n <i class=\"ec-icon {{item.icon}} mx-1 flex-shrink\"\r\n *ngIf=\"item.icon\"></i>\r\n <span class=\"mx-1\">{{item.label}}</span>\r\n </div>\r\n </div>\r\n\r\n\r\n <ul *ngIf=\"item.children.length > 0 && item.expanded\">\r\n <ng-container *ngTemplateOutlet=\"hierarchyView; context:{ $implicit: item.children }\"></ng-container>\r\n </ul>\r\n </li>\r\n </ng-template>\r\n\r\n <ng-container *ngTemplateOutlet=\"hierarchyView; context:{ $implicit: rootNode?.children }\"></ng-container>\r\n</ul>\r\n",
|
|
46
|
+
styles: ["@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{display:block;font-size:.875rem}ul{list-style:none;margin:0;overflow-x:hidden;padding:0}ul li{white-space:nowrap}ul .item-wrapper{align-items:center;display:flex;height:1.75rem;padding:0 .25rem}ul .item-wrapper.is-heading{color:rgba(26,26,35,.38);cursor:pointer;font-size:.75rem;font-weight:700;text-transform:uppercase}ul .item-wrapper:hover{background-color:#bfe0e9}ul .item-wrapper.is-selected{font-weight:700}ul .item-wrapper a{text-decoration:none}ul .item{align-items:center;color:inherit;display:flex;flex:1 1;min-height:0;min-width:0}"]
|
|
47
|
+
},] }
|
|
48
|
+
];
|
|
49
|
+
HierarchyTreeComponent.ctorParameters = () => [
|
|
50
|
+
{ type: ScrollService },
|
|
51
|
+
{ type: Injector }
|
|
52
|
+
];
|
|
53
|
+
HierarchyTreeComponent.propDecorators = {
|
|
54
|
+
id: [{ type: Input }],
|
|
55
|
+
hideRootNode: [{ type: Input }],
|
|
56
|
+
itemSelected: [{ type: Output }]
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2h5LXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2Rpc3BsYXkvaGllcmFyY2h5L2hpZXJhcmNoeS10cmVlL2hpZXJhcmNoeS10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQWlCLE1BQU0sbUJBQW1CLENBQUM7QUFPakUsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGFBQWE7SUFpQnZELFlBQ1UsYUFBNEIsRUFDcEMsUUFBa0I7UUFDaEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRlYsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFoQnRDLCtGQUErRjtRQUMvRSxPQUFFLEdBQVcsZUFBZSxDQUFDO1FBSzdDLGlFQUFpRTtRQUNoRCxpQkFBWSxHQUEyQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRXRFLDRHQUE0RztRQUNyRyxXQUFNLEdBQUcsRUFBRSxDQUFDO1FBRW5CLHVIQUF1SDtRQUNoSCxzQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFLVCxDQUFDO0lBRWYsUUFBUTtRQUNiLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUM3QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksb0JBQW9CO1FBQ3pCLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ3JCLE1BQU0sWUFBWSxHQUFHLDJCQUEyQixDQUFDO1lBQ2pELElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksVUFBVSxDQUFDLElBQW1CO1FBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2xELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDOUM7SUFDSCxDQUFDOzs7WUFuREYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLDAvR0FBOEM7O2FBRS9DOzs7WUFQUSxhQUFhO1lBRkYsUUFBUTs7O2lCQWF6QixLQUFLOzJCQUdMLEtBQUs7MkJBR0wsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNjcm9sbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3Njcm9sbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSGllcmFyY2h5QmFzZSwgSGllcmFyY2h5SXRlbSB9IGZyb20gJy4uL2hpZXJhcmNoeS1iYXNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWMtaGllcmFyY2h5LXRyZWUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9oaWVyYXJjaHktdHJlZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaGllcmFyY2h5LXRyZWUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSGllcmFyY2h5VHJlZUNvbXBvbmVudCBleHRlbmRzIEhpZXJhcmNoeUJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAvKiogVGhlIHZhbHVlIG9mIHRoZSBpZCBhdHRyaWJ1dGUgb2YgdGhlIHRyZWUncyByb290IEhUTUxVTGlzdEVsZW1lbnQsIHN1ZmZpeGVkIHdpdGggJ19yb290JyAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpZDogc3RyaW5nID0gJ0hpZXJhcmNoeVRyZWUnO1xyXG5cclxuICAvKiogSGlkZSB0aGUgcm9vdCBub2RlICovXHJcbiAgQElucHV0KCkgcHVibGljIGhpZGVSb290Tm9kZT86IGJvb2xlYW47XHJcblxyXG4gIC8qKiBFbWl0cyBhIEhpZXJhcmNoeUl0ZW0gd2hlbmV2ZXIgb25lIGlzIHNlbGVjdGVkIGJ5IGNsaWNraW5nICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBpdGVtU2VsZWN0ZWQ6IFN1YmplY3Q8SGllcmFyY2h5SXRlbT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAvKiogVGhlIHdpZHRoIG9mIHRoZSBzcGFjaW5nIGJlZm9yZSBhIHRyZWUgbm9kZSwgbXVsdGlwbGVkIGJ5IGEgSGllcmFyY2h5SXRlbSdzIGxldmVsLiBWYWx1ZSBpcyBpbiBwaXhlbHMgKi9cclxuICBwdWJsaWMgaW5kZW50ID0gMTY7XHJcblxyXG4gIC8qKiBUaGUgdmFsdWUgb2YgdGhlIGlkIGF0dHJpYnV0ZSBvZiB0aGUgdHJlZSdzIHNjcm9sbCBjb250YWluZXIgZWxlbWVudCwgdXNlZCB0byBzY3JvbGwgYSBzZWxlY3RlZCBpdGVtIGludG8gdmlldy4gICovXHJcbiAgcHVibGljIHNjcm9sbENvbnRhaW5lcklkID0gJyc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzY3JvbGxTZXJ2aWNlOiBTY3JvbGxTZXJ2aWNlLFxyXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICkgeyBzdXBlcihpbmplY3Rvcik7IH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zY3JvbGxDb250YWluZXJJZCA9IGAke3RoaXMuaWR9X3Jvb3RgO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xsIHRvIHRoZSBpdGVtIGN1cnJlbnRseSBtYXJrZWQgYXMgaXMtc2VsZWN0ZWQuIFdhaXQgYSB0aWNrIGZvciB0aGVcclxuICAgKiBOYXZJdGVtQWN0aXZlRGlyZWN0aXZlIHRvIHVwZGF0ZSB0aGUgc2VsZWN0ZWQgY2xhc3MuXHJcbiAgICovXHJcbiAgcHVibGljIHNjcm9sbFRvU2VsZWN0ZWRJdGVtKCk6IHZvaWQge1xyXG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBsaW5rU2VsZWN0b3IgPSBgLml0ZW0td3JhcHBlci5pcy1zZWxlY3RlZGA7XHJcbiAgICAgIHRoaXMuc2Nyb2xsU2VydmljZS5zY3JvbGxUb0l0ZW0oYCMke3RoaXMuc2Nyb2xsQ29udGFpbmVySWR9YCwgbGlua1NlbGVjdG9yKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBhIEhpZXJhcmNoeUl0ZW0gaXMgc2VsZWN0ZWQsIHVwZGF0ZSB0aGUgdmFsdWUgb2YgdGhlIGFjdGl2ZVVybCBwcm9wZXJ0eSB3aXRoIHRoZSB2YWx1ZVxyXG4gICAqIG9mIHRoYXQgaXRlbSdzIHVybCBwcm9wZXJ0eSBhbmQgZW1pdCB0aGUgaXRlbSB0byBhbnkgc3Vic2NyaWJlcnMuXHJcbiAgICovXHJcbiAgcHVibGljIHNlbGVjdEl0ZW0oaXRlbTogSGllcmFyY2h5SXRlbSk6IHZvaWQge1xyXG4gICAgdGhpcy5pdGVtU2VsZWN0ZWQubmV4dChpdGVtKTtcclxuICAgIGlmIChpdGVtLmRpc3BsYXkgPT09ICdoZWFkaW5nJyAmJiAhaXRlbS5oaWRlVG9nZ2xlKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlSXRlbUNsaWNrZWQoaXRlbSwgIWl0ZW0uZXhwYW5kZWQpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { Component, ElementRef, Inject, Renderer2 } from '@angular/core';
|
|
3
|
+
import { CacheService } from '../../core/cache.service';
|
|
4
|
+
import { ResizableBase } from './resizable-base';
|
|
5
|
+
/**
|
|
6
|
+
* Make an element resizable horizontally by wrapping it in the ResizableComponent.
|
|
7
|
+
* Default widths / limits are applied but you can optionally override them
|
|
8
|
+
* with min-width and max-width with style attributes
|
|
9
|
+
* @example
|
|
10
|
+
* <ec-resizable [style.width.px]="200"
|
|
11
|
+
* [style.min-width.px]="75"
|
|
12
|
+
* [style.max-width.px]="300">
|
|
13
|
+
* <div> ... </div>
|
|
14
|
+
* </ec-resizable>
|
|
15
|
+
*/
|
|
16
|
+
export class ResizableComponent extends ResizableBase {
|
|
17
|
+
constructor(el, renderer, cacheService, document) {
|
|
18
|
+
super(renderer, cacheService, document);
|
|
19
|
+
this.el = el;
|
|
20
|
+
//default rememberWidth to true for standard resizable, resizable tables default to false
|
|
21
|
+
this.rememberWidth = true;
|
|
22
|
+
}
|
|
23
|
+
/** Store the host element to reference later */
|
|
24
|
+
ngOnInit() {
|
|
25
|
+
this.currentEl = this.el.nativeElement;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Set the new width of the element and emit the new width to subscribers
|
|
29
|
+
*/
|
|
30
|
+
setWidth(width) {
|
|
31
|
+
this.renderer.setStyle(this.currentEl, 'width', width + 'px');
|
|
32
|
+
this.saveWidths([width]);
|
|
33
|
+
}
|
|
34
|
+
/**Called from the base class when cached widths are available and restoring
|
|
35
|
+
* width is enabled. We only care about the first one because we only have one width
|
|
36
|
+
*/
|
|
37
|
+
restoreWidths(widths) {
|
|
38
|
+
this.setWidth(widths[0]);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
ResizableComponent.decorators = [
|
|
42
|
+
{ type: Component, args: [{
|
|
43
|
+
selector: 'ec-resizable',
|
|
44
|
+
template: `<div class="content">
|
|
45
|
+
<ng-content></ng-content>
|
|
46
|
+
</div>
|
|
47
|
+
<div class="handle" (mousedown)="startDrag($event)"></div>`,
|
|
48
|
+
styles: ["@-webkit-keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{border-right:1px solid #d2d7d9;display:flex;max-width:480px;min-width:100px;position:relative;width:240px}:host.is-active{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}:host.is-active .handle:after{background-color:#0084a9}.handle{height:100%;padding:0 5px;position:absolute;right:-7px;top:0;width:13px;z-index:30}.handle:after{content:\"\";display:block;height:100%;position:relative;transition:background-color .3s ease}.handle:hover{cursor:col-resize}.handle:hover:after{background-color:#0084a9}.content{display:flex;overflow:hidden}.content,.content ::ng-deep>*{flex:1 1;min-height:0;min-width:0}"]
|
|
49
|
+
},] }
|
|
50
|
+
];
|
|
51
|
+
ResizableComponent.ctorParameters = () => [
|
|
52
|
+
{ type: ElementRef },
|
|
53
|
+
{ type: Renderer2 },
|
|
54
|
+
{ type: CacheService },
|
|
55
|
+
{ type: Document, decorators: [{ type: Inject, args: [DOCUMENT,] }] }
|
|
56
|
+
];
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L3Jlc2l6YWJsZS9yZXNpemFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHakQ7Ozs7Ozs7Ozs7R0FVRztBQVNILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxhQUFhO0lBQ25ELFlBQ1UsRUFBYyxFQUN0QixRQUFtQixFQUNuQixZQUEwQixFQUNSLFFBQWtCO1FBRXBDLEtBQUssQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBTGhDLE9BQUUsR0FBRixFQUFFLENBQVk7UUFPdEIseUZBQXlGO1FBQ3pGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFRCxnREFBZ0Q7SUFDekMsUUFBUTtRQUNiLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ08sUUFBUSxDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNPLGFBQWEsQ0FBQyxNQUFnQjtRQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7OztZQXZDRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLFFBQVEsRUFBRTs7O3VFQUcyRDs7YUFFdEU7OztZQXhCbUIsVUFBVTtZQUFrQixTQUFTO1lBRWhELFlBQVk7WUE0QlcsUUFBUSx1QkFBbkMsTUFBTSxTQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBPbkluaXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9jYWNoZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVzaXphYmxlQmFzZSB9IGZyb20gJy4vcmVzaXphYmxlLWJhc2UnO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBNYWtlIGFuIGVsZW1lbnQgcmVzaXphYmxlIGhvcml6b250YWxseSBieSB3cmFwcGluZyBpdCBpbiB0aGUgUmVzaXphYmxlQ29tcG9uZW50LlxyXG4gKiBEZWZhdWx0IHdpZHRocyAvIGxpbWl0cyBhcmUgYXBwbGllZCBidXQgeW91IGNhbiBvcHRpb25hbGx5IG92ZXJyaWRlIHRoZW1cclxuICogd2l0aCBtaW4td2lkdGggYW5kIG1heC13aWR0aCB3aXRoIHN0eWxlIGF0dHJpYnV0ZXNcclxuICogQGV4YW1wbGVcclxuICogPGVjLXJlc2l6YWJsZSBbc3R5bGUud2lkdGgucHhdPVwiMjAwXCJcclxuICogICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cIjc1XCJcclxuICogICAgICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cIjMwMFwiPlxyXG4gKiAgICA8ZGl2PiAuLi4gPC9kaXY+XHJcbiAqIDwvZWMtcmVzaXphYmxlPlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlYy1yZXNpemFibGUnLFxyXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGFuZGxlXCIgKG1vdXNlZG93bik9XCJzdGFydERyYWcoJGV2ZW50KVwiPjwvZGl2PmAsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVzaXphYmxlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc2l6YWJsZUNvbXBvbmVudCBleHRlbmRzIFJlc2l6YWJsZUJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcclxuICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBjYWNoZVNlcnZpY2U6IENhY2hlU2VydmljZSxcclxuICAgIEBJbmplY3QoRE9DVU1FTlQpIGRvY3VtZW50OiBEb2N1bWVudClcclxuICB7XHJcbiAgICBzdXBlcihyZW5kZXJlciwgY2FjaGVTZXJ2aWNlLCBkb2N1bWVudCk7XHJcblxyXG4gICAgLy9kZWZhdWx0IHJlbWVtYmVyV2lkdGggdG8gdHJ1ZSBmb3Igc3RhbmRhcmQgcmVzaXphYmxlLCByZXNpemFibGUgdGFibGVzIGRlZmF1bHQgdG8gZmFsc2VcclxuICAgIHRoaXMucmVtZW1iZXJXaWR0aCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKiogU3RvcmUgdGhlIGhvc3QgZWxlbWVudCB0byByZWZlcmVuY2UgbGF0ZXIgKi9cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRFbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgbmV3IHdpZHRoIG9mIHRoZSBlbGVtZW50IGFuZCBlbWl0IHRoZSBuZXcgd2lkdGggdG8gc3Vic2NyaWJlcnNcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2V0V2lkdGgod2lkdGg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmN1cnJlbnRFbCwgJ3dpZHRoJywgd2lkdGggKyAncHgnKTtcclxuICAgIHRoaXMuc2F2ZVdpZHRocyhbd2lkdGhdKTtcclxuICB9XHJcblxyXG4gIC8qKkNhbGxlZCBmcm9tIHRoZSBiYXNlIGNsYXNzIHdoZW4gY2FjaGVkIHdpZHRocyBhcmUgYXZhaWxhYmxlIGFuZCByZXN0b3JpbmdcclxuICAgKiB3aWR0aCBpcyBlbmFibGVkLiBXZSBvbmx5IGNhcmUgYWJvdXQgdGhlIGZpcnN0IG9uZSBiZWNhdXNlIHdlIG9ubHkgaGF2ZSBvbmUgd2lkdGhcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgcmVzdG9yZVdpZHRocyh3aWR0aHM6IG51bWJlcltdKXtcclxuICAgIHRoaXMuc2V0V2lkdGgod2lkdGhzWzBdKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Component, Input, HostBinding, Output, EventEmitter, ViewChild } from '@angular/core';
|
|
2
|
+
import { MenuComponent } from '../../controls/menu/menu.component';
|
|
3
|
+
import { HierarchyItem } from '../hierarchy/hierarchy-base';
|
|
4
|
+
import { HierarchyTreeComponent } from '../hierarchy/hierarchy-tree/hierarchy-tree.component';
|
|
5
|
+
import { Overlay } from '../view-overlay/view-overlay.component';
|
|
6
|
+
export class TreeComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
/** The value of the host elements id attribute */
|
|
9
|
+
this.attrId = '';
|
|
10
|
+
this._id = '';
|
|
11
|
+
/** The tree's title displayed in the header */
|
|
12
|
+
this.treeTitle = '';
|
|
13
|
+
/** Tree overlay */
|
|
14
|
+
this.status = new Overlay('hasData');
|
|
15
|
+
/** Display the tree items with a MenuComponent or a HierarchyTreeComponent */
|
|
16
|
+
this.type = 'hierarchy';
|
|
17
|
+
/** Tree dropdown menu overlay */
|
|
18
|
+
this.menuStatus = new Overlay('hasData');
|
|
19
|
+
/** The menu item template */
|
|
20
|
+
this.menuTemplateType = "checkAndLabel";
|
|
21
|
+
/** Emits the item currently selected item in the tree */
|
|
22
|
+
this.treeSelection = new EventEmitter();
|
|
23
|
+
/** Emits when a hierarchy tree item is expanded as a hook to load the item's children */
|
|
24
|
+
this.getTreeItemChildren = new EventEmitter();
|
|
25
|
+
this.templateType = 'label';
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The ID of the component, bound to the host element's id attribute and passed
|
|
29
|
+
* to child components
|
|
30
|
+
*/
|
|
31
|
+
set id(value) {
|
|
32
|
+
this._id = value;
|
|
33
|
+
this.attrId = value;
|
|
34
|
+
}
|
|
35
|
+
;
|
|
36
|
+
get id() {
|
|
37
|
+
return this._id;
|
|
38
|
+
}
|
|
39
|
+
/** Emits when a tree item is selected */
|
|
40
|
+
onItemSelected(item) {
|
|
41
|
+
this.treeSelection.emit(item);
|
|
42
|
+
}
|
|
43
|
+
/** Emits when a hierarchy tree item is expanded to load the item's children */
|
|
44
|
+
onHierarchyGetItemChildren(item) {
|
|
45
|
+
this.getTreeItemChildren.emit(item);
|
|
46
|
+
}
|
|
47
|
+
/** Scroll to the tree item that is currently selected. */
|
|
48
|
+
scrollToSelectedItem() {
|
|
49
|
+
if (this.menuComponent) {
|
|
50
|
+
this.menuComponent.scrollToSelectedItem();
|
|
51
|
+
}
|
|
52
|
+
if (this.hierarchyTreeComponent) {
|
|
53
|
+
this.hierarchyTreeComponent.scrollToSelectedItem();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
TreeComponent.decorators = [
|
|
58
|
+
{ type: Component, args: [{
|
|
59
|
+
selector: 'ec-tree',
|
|
60
|
+
template: "<header class=\"flex-shrink d-flex align-items-center border-bottom bg-content\">\r\n <h2 id=\"{{id}}_title\"\r\n class=\"flex-grow m-0 mx-2 text-heading-1\">{{treeTitle | translate}}</h2>\r\n <ec-dropdown *ngIf=\"menuItems?.length\"\r\n id=\"{{id}}_dropdown\"\r\n class=\"flex-shrink fill\"\r\n icon=\"icon-menu\"\r\n [menuTemplateType]=\"menuTemplateType\"\r\n menuPosition=\"left\"\r\n [status]=\"menuStatus\"\r\n [popupFixed]=\"true\"\r\n [showArrow]=\"false\"\r\n [menuMinWidth]=\"240\"\r\n [items]=\"menuItems\">\r\n </ec-dropdown>\r\n</header>\r\n\r\n<div class=\"flex-grow d-flex\"\r\n ecOverlay\r\n [status]=\"status?.status\"\r\n [displayAsMask]=\"true\">\r\n <ng-container *ngIf=\"type === 'menu'\">\r\n <ec-menu [id]=\"id\"\r\n [items]=\"treeItems\"\r\n [templateType]=\"templateType\"\r\n (selectedChanged)=\"onItemSelected($event)\"\r\n class=\"flex-grow\">\r\n </ec-menu>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"type === 'hierarchy'\">\r\n <ec-hierarchy-tree [id]=\"id\"\r\n [rootNode]=\"treeHierarchy\"\r\n [hideRootNode]=\"treeHierarchyHideRootNode\"\r\n (getItemChildren)=\"onHierarchyGetItemChildren($event)\"\r\n (itemSelected)=\"onItemSelected($event)\"\r\n class=\"flex-grow d-flex\">\r\n </ec-hierarchy-tree>\r\n </ng-container>\r\n</div>",
|
|
61
|
+
styles: [":host{display:flex;flex-direction:column}header{height:3rem}ec-dropdown.fill{height:3rem;width:3rem}"]
|
|
62
|
+
},] }
|
|
63
|
+
];
|
|
64
|
+
TreeComponent.ctorParameters = () => [];
|
|
65
|
+
TreeComponent.propDecorators = {
|
|
66
|
+
attrId: [{ type: HostBinding, args: ['attr.id',] }],
|
|
67
|
+
id: [{ type: Input }],
|
|
68
|
+
treeTitle: [{ type: Input }],
|
|
69
|
+
treeItems: [{ type: Input }],
|
|
70
|
+
treeHierarchyHideRootNode: [{ type: Input }],
|
|
71
|
+
treeHierarchy: [{ type: Input }],
|
|
72
|
+
status: [{ type: Input }],
|
|
73
|
+
type: [{ type: Input }],
|
|
74
|
+
menuItems: [{ type: Input }],
|
|
75
|
+
menuStatus: [{ type: Input }],
|
|
76
|
+
menuTemplateType: [{ type: Input }],
|
|
77
|
+
treeSelection: [{ type: Output }],
|
|
78
|
+
getTreeItemChildren: [{ type: Output }],
|
|
79
|
+
menuComponent: [{ type: ViewChild, args: [MenuComponent,] }],
|
|
80
|
+
hierarchyTreeComponent: [{ type: ViewChild, args: [HierarchyTreeComponent,] }],
|
|
81
|
+
templateType: [{ type: Input }]
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90cmVlL3RyZWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsYUFBYSxFQUE4QixNQUFNLG9DQUFvQyxDQUFDO0FBQy9GLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFTakUsTUFBTSxPQUFPLGFBQWE7SUE0RHhCO1FBMURBLGtEQUFrRDtRQUNuQixXQUFNLEdBQVcsRUFBRSxDQUFDO1FBYzNDLFFBQUcsR0FBVyxFQUFFLENBQUM7UUFFekIsK0NBQStDO1FBQy9CLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFXdkMsbUJBQW1CO1FBQ0gsV0FBTSxHQUFhLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTFELDhFQUE4RTtRQUM5RCxTQUFJLEdBQWMsV0FBVyxDQUFDO1FBSzlDLGlDQUFpQztRQUNqQixlQUFVLEdBQWEsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFOUQsNkJBQTZCO1FBQ2IscUJBQWdCLEdBQXNCLGVBQWUsQ0FBQztRQUV0RSx5REFBeUQ7UUFDeEMsa0JBQWEsR0FBMkMsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUU1Rix5RkFBeUY7UUFDeEUsd0JBQW1CLEdBQWdDLElBQUksWUFBWSxFQUFFLENBQUM7UUFRdkUsaUJBQVksR0FBcUIsT0FBTyxDQUFDO0lBRXpDLENBQUM7SUF2RGpCOzs7T0FHRztJQUNILElBQ1csRUFBRSxDQUFDLEtBQWE7UUFDekIsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFXLEVBQUU7UUFDWCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEIsQ0FBQztJQThDRCx5Q0FBeUM7SUFDbEMsY0FBYyxDQUFDLElBQThCO1FBQ2xELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCwrRUFBK0U7SUFDeEUsMEJBQTBCLENBQUMsSUFBbUI7UUFDbkQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsMERBQTBEO0lBQ25ELG9CQUFvQjtRQUN6QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBQzNDO1FBRUQsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDL0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLG9CQUFvQixFQUFFLENBQUM7U0FDcEQ7SUFDSCxDQUFDOzs7WUF0RkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxTQUFTO2dCQUNuQixpbERBQW9DOzthQUVyQzs7OztxQkFJRSxXQUFXLFNBQUMsU0FBUztpQkFNckIsS0FBSzt3QkFXTCxLQUFLO3dCQUdMLEtBQUs7d0NBR0wsS0FBSzs0QkFHTCxLQUFLO3FCQUdMLEtBQUs7bUJBR0wsS0FBSzt3QkFHTCxLQUFLO3lCQUdMLEtBQUs7K0JBR0wsS0FBSzs0QkFHTCxNQUFNO2tDQUdOLE1BQU07NEJBR04sU0FBUyxTQUFDLGFBQWE7cUNBR3ZCLFNBQVMsU0FBQyxzQkFBc0I7MkJBRWhDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBIb3N0QmluZGluZywgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNZW51Q29tcG9uZW50LCBNZW51SXRlbSwgTWVudVRlbXBsYXRlVHlwZSB9IGZyb20gJy4uLy4uL2NvbnRyb2xzL21lbnUvbWVudS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBIaWVyYXJjaHlJdGVtIH0gZnJvbSAnLi4vaGllcmFyY2h5L2hpZXJhcmNoeS1iYXNlJztcclxuaW1wb3J0IHsgSGllcmFyY2h5VHJlZUNvbXBvbmVudCB9IGZyb20gJy4uL2hpZXJhcmNoeS9oaWVyYXJjaHktdHJlZS9oaWVyYXJjaHktdHJlZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBPdmVybGF5IH0gZnJvbSAnLi4vdmlldy1vdmVybGF5L3ZpZXctb3ZlcmxheS5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IHR5cGUgVHJlZVR5cGUgPSAnaGllcmFyY2h5JyB8ICdtZW51JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWMtdHJlZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RyZWUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJlZUNvbXBvbmVudCB7XHJcblxyXG4gIC8qKiBUaGUgdmFsdWUgb2YgdGhlIGhvc3QgZWxlbWVudHMgaWQgYXR0cmlidXRlICovXHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJykgcHVibGljIGF0dHJJZDogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBJRCBvZiB0aGUgY29tcG9uZW50LCBib3VuZCB0byB0aGUgaG9zdCBlbGVtZW50J3MgaWQgYXR0cmlidXRlIGFuZCBwYXNzZWRcclxuICAgKiB0byBjaGlsZCBjb21wb25lbnRzXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGlkKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2lkID0gdmFsdWU7XHJcbiAgICB0aGlzLmF0dHJJZCA9IHZhbHVlO1xyXG4gIH07XHJcbiAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lkO1xyXG4gIH1cclxuICBwcml2YXRlIF9pZDogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKiBUaGUgdHJlZSdzIHRpdGxlIGRpc3BsYXllZCBpbiB0aGUgaGVhZGVyICovXHJcbiAgQElucHV0KCkgcHVibGljIHRyZWVUaXRsZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKiBJdGVtcyB0byBkaXNwbGF5IGluIHRoZSB0cmVlIHdoZW4gdHlwZSBpcyAnbWVudScgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgdHJlZUl0ZW1zPzogTWVudUl0ZW1bXTtcclxuXHJcbiAgLyoqIEhpZGUgdGhlIHJvb3QgdHJlZSBpdGVtIHdoZW4gdHlwZSBpcyAnaGllcmFyY2h5JyAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0cmVlSGllcmFyY2h5SGlkZVJvb3ROb2RlPzogYm9vbGVhbjtcclxuXHJcbiAgLyoqIEl0ZW1zIHRvIGRpc3BsYXkgaW4gdGhlIHRyZWUgd2hlbiB0eXBlIGlzICdoaWVyYXJjaHknICovXHJcbiAgQElucHV0KCkgcHVibGljIHRyZWVIaWVyYXJjaHk/OiBIaWVyYXJjaHlJdGVtO1xyXG5cclxuICAvKiogVHJlZSBvdmVybGF5ICovXHJcbiAgQElucHV0KCkgcHVibGljIHN0YXR1cz86IE92ZXJsYXkgPSBuZXcgT3ZlcmxheSgnaGFzRGF0YScpO1xyXG5cclxuICAvKiogRGlzcGxheSB0aGUgdHJlZSBpdGVtcyB3aXRoIGEgTWVudUNvbXBvbmVudCBvciBhIEhpZXJhcmNoeVRyZWVDb21wb25lbnQgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgdHlwZT86IFRyZWVUeXBlID0gJ2hpZXJhcmNoeSc7XHJcblxyXG4gIC8qKiBJdGVtcyB0byBkaXNwbGF5IGluIHRoZSBkcm9wZG93biBtZW51ICovXHJcbiAgQElucHV0KCkgcHVibGljIG1lbnVJdGVtcz86IE1lbnVJdGVtW107XHJcblxyXG4gIC8qKiBUcmVlIGRyb3Bkb3duIG1lbnUgb3ZlcmxheSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51U3RhdHVzPzogT3ZlcmxheSA9IG5ldyBPdmVybGF5KCdoYXNEYXRhJyk7XHJcblxyXG4gIC8qKiBUaGUgbWVudSBpdGVtIHRlbXBsYXRlICovXHJcbiAgQElucHV0KCkgcHVibGljIG1lbnVUZW1wbGF0ZVR5cGU/OiBNZW51VGVtcGxhdGVUeXBlID0gXCJjaGVja0FuZExhYmVsXCI7XHJcblxyXG4gIC8qKiBFbWl0cyB0aGUgaXRlbSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbSBpbiB0aGUgdHJlZSAqL1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgdHJlZVNlbGVjdGlvbjogRXZlbnRFbWl0dGVyPE1lbnVJdGVtIHwgSGllcmFyY2h5SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKiBFbWl0cyB3aGVuIGEgaGllcmFyY2h5IHRyZWUgaXRlbSBpcyBleHBhbmRlZCBhcyBhIGhvb2sgdG8gbG9hZCB0aGUgaXRlbSdzIGNoaWxkcmVuICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBnZXRUcmVlSXRlbUNoaWxkcmVuOiBFdmVudEVtaXR0ZXI8SGllcmFyY2h5SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIE1lbnVDb21wb25lbnQgaW5zdGFuY2UgaW4gdGhlIHRlbXBsYXRlICovXHJcbiAgQFZpZXdDaGlsZChNZW51Q29tcG9uZW50KSBwdWJsaWMgbWVudUNvbXBvbmVudD86IE1lbnVDb21wb25lbnQ7XHJcblxyXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIEhpZXJhcmNoeVRyZWVDb21wb25lbnQgaW5zdGFuY2UgaW4gdGhlIHRlbXBsYXRlICovXHJcbiAgQFZpZXdDaGlsZChIaWVyYXJjaHlUcmVlQ29tcG9uZW50KSBwdWJsaWMgaGllcmFyY2h5VHJlZUNvbXBvbmVudD86IEhpZXJhcmNoeVRyZWVDb21wb25lbnQ7XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyB0ZW1wbGF0ZVR5cGU6IE1lbnVUZW1wbGF0ZVR5cGUgPSAnbGFiZWwnO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICAvKiogRW1pdHMgd2hlbiBhIHRyZWUgaXRlbSBpcyBzZWxlY3RlZCAqL1xyXG4gIHB1YmxpYyBvbkl0ZW1TZWxlY3RlZChpdGVtOiBNZW51SXRlbSB8IEhpZXJhcmNoeUl0ZW0pIHtcclxuICAgIHRoaXMudHJlZVNlbGVjdGlvbi5lbWl0KGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIEVtaXRzIHdoZW4gYSBoaWVyYXJjaHkgdHJlZSBpdGVtIGlzIGV4cGFuZGVkIHRvIGxvYWQgdGhlIGl0ZW0ncyBjaGlsZHJlbiAqL1xyXG4gIHB1YmxpYyBvbkhpZXJhcmNoeUdldEl0ZW1DaGlsZHJlbihpdGVtOiBIaWVyYXJjaHlJdGVtKSB7XHJcbiAgICB0aGlzLmdldFRyZWVJdGVtQ2hpbGRyZW4uZW1pdChpdGVtKTtcclxuICB9XHJcblxyXG4gIC8qKiBTY3JvbGwgdG8gdGhlIHRyZWUgaXRlbSB0aGF0IGlzIGN1cnJlbnRseSBzZWxlY3RlZC4gKi9cclxuICBwdWJsaWMgc2Nyb2xsVG9TZWxlY3RlZEl0ZW0oKSB7XHJcbiAgICBpZiAodGhpcy5tZW51Q29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMubWVudUNvbXBvbmVudC5zY3JvbGxUb1NlbGVjdGVkSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhpZXJhcmNoeVRyZWVDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5oaWVyYXJjaHlUcmVlQ29tcG9uZW50LnNjcm9sbFRvU2VsZWN0ZWRJdGVtKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -9,6 +9,7 @@ import { ErrorService } from '../../../core/error.service';
|
|
|
9
9
|
import { ScrollService } from '../../../core/scroll.service';
|
|
10
10
|
import { DialogService } from '../../../display/dialog/dialog.service';
|
|
11
11
|
import { Overlay } from '../../../display/view-overlay/view-overlay.component';
|
|
12
|
+
import { PageStatus, PageStatuses } from '../page-statuses';
|
|
12
13
|
export class PageInitResult {
|
|
13
14
|
constructor() {
|
|
14
15
|
this.title = '';
|
|
@@ -63,11 +64,17 @@ export class PageBaseComponent {
|
|
|
63
64
|
get errors() {
|
|
64
65
|
return this._errors;
|
|
65
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Optional lifecycle hook that is called as part of the Angular ngOnInit lifecycle hook.
|
|
69
|
+
* Called before onInit is called for the first time. Add setup logic here that does
|
|
70
|
+
* not need to be run on every reload.
|
|
71
|
+
*/
|
|
72
|
+
onFirstInit() { }
|
|
66
73
|
ngOnInit() {
|
|
67
|
-
var _a;
|
|
68
74
|
return __awaiter(this, void 0, void 0, function* () {
|
|
69
75
|
try {
|
|
70
|
-
|
|
76
|
+
this.showStatus(PageStatus.Loading);
|
|
77
|
+
this.onFirstInit();
|
|
71
78
|
this.initPromise = this.onInit();
|
|
72
79
|
yield this.initPromise;
|
|
73
80
|
}
|
|
@@ -89,7 +96,6 @@ export class PageBaseComponent {
|
|
|
89
96
|
}
|
|
90
97
|
;
|
|
91
98
|
ngAfterViewInit() {
|
|
92
|
-
var _a;
|
|
93
99
|
return __awaiter(this, void 0, void 0, function* () {
|
|
94
100
|
try {
|
|
95
101
|
const initResult = yield this.initPromise;
|
|
@@ -97,8 +103,9 @@ export class PageBaseComponent {
|
|
|
97
103
|
yield this.onAfterViewInit();
|
|
98
104
|
this._afterViewInitComplete.next();
|
|
99
105
|
this._afterViewInitComplete.complete();
|
|
100
|
-
|
|
101
|
-
|
|
106
|
+
yield this.onFormLoadComplete();
|
|
107
|
+
if (this.status.status === 'pending') {
|
|
108
|
+
this.showStatus(PageStatus.Loaded);
|
|
102
109
|
}
|
|
103
110
|
this.setUpRouterSubscriptions();
|
|
104
111
|
}
|
|
@@ -107,6 +114,18 @@ export class PageBaseComponent {
|
|
|
107
114
|
}
|
|
108
115
|
});
|
|
109
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* A lifecycle method that executes once all data has been loaded
|
|
119
|
+
* through ngAfterViewInit and from local storage if required.
|
|
120
|
+
* It is at this point that you can subscribe to changes on the form
|
|
121
|
+
* reliably
|
|
122
|
+
*
|
|
123
|
+
* @protected
|
|
124
|
+
* @memberof PageBaseComponent
|
|
125
|
+
*/
|
|
126
|
+
onFormLoadComplete() {
|
|
127
|
+
return __awaiter(this, void 0, void 0, function* () { });
|
|
128
|
+
}
|
|
110
129
|
/**
|
|
111
130
|
* A lifecycle hook that is called after every NavigationEnd event.
|
|
112
131
|
*/
|
|
@@ -154,11 +173,10 @@ export class PageBaseComponent {
|
|
|
154
173
|
* @param event
|
|
155
174
|
*/
|
|
156
175
|
onSave(event) {
|
|
157
|
-
var _a;
|
|
158
176
|
return __awaiter(this, void 0, void 0, function* () {
|
|
159
177
|
this.formGroup.markAllAsTouched();
|
|
160
178
|
if (this.formGroup.valid) {
|
|
161
|
-
|
|
179
|
+
this.showStatus(PageStatus.Saving);
|
|
162
180
|
try {
|
|
163
181
|
yield this.applyModelUpdates();
|
|
164
182
|
let entityId = (yield this.saveToApi()) || -1;
|
|
@@ -208,8 +226,7 @@ export class PageBaseComponent {
|
|
|
208
226
|
*/
|
|
209
227
|
showErrorOverlay(error) {
|
|
210
228
|
this.getErrorMessage(error).subscribe((translatedMessage) => {
|
|
211
|
-
|
|
212
|
-
(_a = this.status) === null || _a === void 0 ? void 0 : _a.setStatus('error', translatedMessage);
|
|
229
|
+
this.status.setStatus('error', translatedMessage);
|
|
213
230
|
});
|
|
214
231
|
}
|
|
215
232
|
/**
|
|
@@ -222,9 +239,8 @@ export class PageBaseComponent {
|
|
|
222
239
|
*/
|
|
223
240
|
showErrorBanner(error, unknownErrorDefault) {
|
|
224
241
|
this.getErrorMessage(error, unknownErrorDefault).subscribe((translatedMessage) => {
|
|
225
|
-
var _a;
|
|
226
242
|
this._errors = translatedMessage;
|
|
227
|
-
|
|
243
|
+
this.showStatus(PageStatus.Loaded);
|
|
228
244
|
});
|
|
229
245
|
}
|
|
230
246
|
/**
|
|
@@ -236,6 +252,46 @@ export class PageBaseComponent {
|
|
|
236
252
|
let extractedMessage = this.errorService.parseApiError(e, unknownErrorDefault);
|
|
237
253
|
return this.translateService.get(extractedMessage);
|
|
238
254
|
}
|
|
255
|
+
/**
|
|
256
|
+
* Clear the errors to hide the errors banner.
|
|
257
|
+
*/
|
|
258
|
+
hideErrorBanner() {
|
|
259
|
+
this._errors = '';
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Change the display status to overlay the whole page while loading or saving
|
|
263
|
+
* and clear it when the form is ready
|
|
264
|
+
* @protected
|
|
265
|
+
* @param {PageStatus} status
|
|
266
|
+
* @memberof FormBaseComponent
|
|
267
|
+
*/
|
|
268
|
+
showStatus(status) {
|
|
269
|
+
let knownStatus = PageStatuses[status];
|
|
270
|
+
if (knownStatus) {
|
|
271
|
+
this.status.setStatus(knownStatus.status, knownStatus.message, undefined, knownStatus.noDataTemplate, knownStatus.overlayClassList);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Allows the component to enter a pending status and execute a function that on completion will return the status
|
|
276
|
+
* to hasData. If an error occurs within the callback an error banner can be shown.
|
|
277
|
+
* @param callback
|
|
278
|
+
* @returns
|
|
279
|
+
*/
|
|
280
|
+
runBlockingAction(callback, pendingMessage) {
|
|
281
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
282
|
+
this.hideErrorBanner();
|
|
283
|
+
this.status.setStatus('pending', pendingMessage);
|
|
284
|
+
return callback().catch(error => {
|
|
285
|
+
this.showErrorBanner(error);
|
|
286
|
+
// Throw the error for any downstream components that may be listening and need to react
|
|
287
|
+
// to any errors happening within this callback
|
|
288
|
+
throw (error);
|
|
289
|
+
}).finally(() => {
|
|
290
|
+
this.showStatus(PageStatus.Loaded);
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
;
|
|
239
295
|
/**
|
|
240
296
|
* Parses the page init result and sets the necessary properties on the page
|
|
241
297
|
* @param result
|
|
@@ -244,6 +300,7 @@ export class PageBaseComponent {
|
|
|
244
300
|
this.initResult = result;
|
|
245
301
|
this.title = result.title;
|
|
246
302
|
this.breadcrumbs = result.breadcrumbs;
|
|
303
|
+
this.help = result.help;
|
|
247
304
|
}
|
|
248
305
|
/**
|
|
249
306
|
* Sets up the router event subscriptions
|
|
@@ -271,4 +328,4 @@ PageBaseComponent.ctorParameters = () => [
|
|
|
271
328
|
PageBaseComponent.propDecorators = {
|
|
272
329
|
classList: [{ type: HostBinding, args: ['class',] }]
|
|
273
330
|
};
|
|
274
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvcGFnZS9wYWdlLWJhc2UvcGFnZS1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBYyxhQUFhLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUUvRSxNQUFNLE9BQU8sY0FBYztJQUEzQjtRQUNFLFVBQUssR0FBWSxFQUFFLENBQUM7SUFFdEIsQ0FBQztDQUFBO0FBR0QsTUFBTSxPQUFnQixpQkFBaUI7SUF5RXJDLFlBQVksUUFBa0I7UUF4RTlCLGtEQUFrRDtRQUNsQixjQUFTLEdBQUcsa0JBQWtCLENBQUM7UUFFL0Q7O1dBRUc7UUFDSSxVQUFLLEdBQVksRUFBRSxDQUFDO1FBRTNCOztXQUVHO1FBQ0ksV0FBTSxHQUFhLElB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Z0IsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRDs7O09BR0c7SUFDSyxlQUFlLENBQUMsTUFBc0I7UUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSyx3QkFBd0I7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQzdELDZCQUE2QjtZQUM3QixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUN0RCxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUN6QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksYUFBYSxDQUFDLENBQ3hDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNkLElBQUk7b0JBQ0YsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2lCQUN4QjtnQkFBQyxPQUFPLEtBQUssRUFBRTtvQkFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNyQjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOzs7WUExU0YsU0FBUzs7O1lBakJzQyxRQUFROzs7d0JBb0JyRCxXQUFXLFNBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgSG9zdEJpbmRpbmcsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTmF2SXRlbSB9IGZyb20gJy4uLy4uLy4uL2NvbnRyb2xzL25hdmlnYXRpb24vbmF2LWl0ZW0nO1xyXG5pbXBvcnQgeyBFcnJvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2Vycm9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTY3JvbGxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zY3JvbGwuc2VydmljZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9kaXNwbGF5L2RpYWxvZy9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICcuLi8uLi8uLi9kaXNwbGF5L3ZpZXctb3ZlcmxheS92aWV3LW92ZXJsYXkuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWdlSW5pdFJlc3VsdCB7XHJcbiAgdGl0bGU/OiBzdHJpbmcgPSAnJztcclxuICBicmVhZGNydW1icz86IE5hdkl0ZW1bXVxyXG59XHJcblxyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBhZ2VCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8qKiBEZWZhdWx0IGNzcyBjbGFzc2VzIGFwcGxpZWQgdG8gaG9zdCBlbGVtZW50ICovXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIHByb3RlY3RlZCBjbGFzc0xpc3QgPSAnZC1mbGV4IGZsZXgtZ3Jvdyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRpdGxlIGZvciB0aGUgcGFnZSBkaXNwbGF5ZWQgaW4gdGhlIGhlYWRlclxyXG4gICAqL1xyXG4gIHB1YmxpYyB0aXRsZT86IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBTdGF0dXMgb3ZlcmxheSBmb3IgdGhlIHBhZ2VcclxuICAgKi9cclxuICBwdWJsaWMgc3RhdHVzPzogT3ZlcmxheSA9IG5ldyBPdmVybGF5KCdwZW5kaW5nJywgJ0xvYWRpbmcnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQnJlYWRjcnVtYnMgZGlzcGxheWVkIGluIHRoZSBoZWFkZXJcclxuICAgKi9cclxuICBwdWJsaWMgYnJlYWRjcnVtYnM/OiBOYXZJdGVtW107XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3VsdCByZXR1cm5lZCBmcm9tIHRoZSBvbkluaXQgZnVuY3Rpb25cclxuICAgKi9cclxuICBwdWJsaWMgaW5pdFJlc3VsdCE6IFBhZ2VJbml0UmVzdWx0O1xyXG5cclxuICAvKipcclxuICAgKiBGb3JtIGdyb3VwIHRvIGJlIHVzZWQgaWYgbmVlZGVkIGJ5IHRoZSBwYWdlXHJcbiAgICovXHJcbiAgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmF1bHQgaW52YWxpZCBmb3JtIG1lc3NhZ2UsIG92ZXJyaWRlIGlmIGEgbW9yZSBzcGVjaWZpYyBtZXNzYWdlIGlzIG5lZWRlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBkZWZhdWx0SW52YWxpZEZvcm1NZXNzYWdlOiBzdHJpbmcgPSAnUGxlYXNlQ29ycmVjdEZvcm1fU0MnO1xyXG5cclxuICAvKipcclxuICAgKiBEZWZhdWx0IHVua25vd24gc2F2ZSBlcnJvciBtZXNzYWdlLCBvdmVycmlkZSBpZiBhIG1vcmUgc3BlY2lmaWMgbWVzc2FnZSBpcyBuZWVkZWRcclxuICAgKi9cclxuICBwdWJsaWMgZGVmYXVsdFVua25vd25TYXZlRXJyb3I6IHN0cmluZyA9ICdQYWdlQmFzZVVua25vd25TYXZlRXJyb3JfU0MnO1xyXG5cclxuICAvKipcclxuICAgKiBVc2VkIHRvIHVuc3Vic2NyaWJlIGZyb20gb2JzZXJ2YWJsZXNcclxuICAgKi9cclxuICBwdWJsaWMgZGVzdHJveWVkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFVzZWQgdG8ga25vdyB3aGVuIHRoZSBwYWdlIGhhcyBiZWVuIGxvYWRlZCwgdGhpcyB3aWxsIGJlIGNvbXBsZXRlZFxyXG4gICAqIGFmdGVyIG9uQWZ0ZXJWaWV3SW5pdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2FmdGVyVmlld0luaXRDb21wbGV0ZTogUmVwbGF5U3ViamVjdDx2b2lkPiA9IG5ldyBSZXBsYXlTdWJqZWN0KCk7XHJcbiAgcHVibGljIGFmdGVyVmlld0luaXRDb21wbGV0ZTogT2JzZXJ2YWJsZTx2b2lkPiA9IHRoaXMuX2FmdGVyVmlld0luaXRDb21wbGV0ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgZGVmaW5lZCB0aGUgZm9ybSB3aWxsIGF1dG9tYXRpY2FsbHkgc2Nyb2xsIHRvIHRoZSBmaXJzdCBpbnZhbGlkIGZvcm0gY29udHJvbFxyXG4gICAqIGlmIGl0J3Mgb3V0c2lkZSBvZiB0aGUgdmlld1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBzY3JvbGxDb250YWluZXJTZWxlY3Rvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpcHRpb24gdG8gdGhlIHJvdXRlciBldmVudHMgTmF2aWdhdGlvbkVuZFxyXG4gICAqIFVzZWQgdG8ga25vdyBpZiBhbHJlYWR5IHN1YnNjcmliZWQgdG9cclxuICAgKi9cclxuICBwcml2YXRlIG5hdmlnYXRpb25FbmRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbW1vbiBzZXJ2aWNlcyB1c2VkIGJ5IHBhZ2UtYmFzZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBlcnJvclNlcnZpY2U6IEVycm9yU2VydmljZTtcclxuICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZTtcclxuICBwcm90ZWN0ZWQgc2Nyb2xsU2VydmljZTogU2Nyb2xsU2VydmljZTtcclxuICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXI7XHJcbiAgcHJvdGVjdGVkIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcclxuICBwcm90ZWN0ZWQgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZTtcclxuXHJcbiAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICB0aGlzLmVycm9yU2VydmljZSA9IGluamVjdG9yLmdldChFcnJvclNlcnZpY2UpO1xyXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpO1xyXG4gICAgdGhpcy5zY3JvbGxTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFNjcm9sbFNlcnZpY2UpO1xyXG4gICAgdGhpcy5yb3V0ZXIgPSBpbmplY3Rvci5nZXQoUm91dGVyKTtcclxuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUgPSBpbmplY3Rvci5nZXQoQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KERpYWxvZ1NlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXJyb3JzIHRvIGJlIHNob3duIGZvciB0aGUgY29tcG9uZW50LlxyXG4gICAqIEF1dG9tYXRpY2FsbHkgcG9wdWxhdGVkIG9uIHByb21pc2UgcmVqZWN0aW9uIGZyb20gc2F2ZSBhbmQgc2hhcmVkIHdpdGggdGhlIFVJLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2Vycm9yczogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGdldCBlcnJvcnMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9lcnJvcnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW4gdGhlIGRlcml2ZWQgY2xhc3MgYXMgcGFydCBvZiB0aGUgQW5ndWxhciBuZ09uSW5pdFxyXG4gICAqIGxpZmVjeWNsZSBob29rLiBJdCBtdXN0IHByb3ZpZGUgYSBQYWdlSW5pdFJlc3VsdCBiYWNrIHRvIHRoZSBiYXNlIGNsYXNzIHRvIHByb3Blcmx5XHJcbiAgICogc2V0IHVwIHRoZSBwYWdlLlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBvbkluaXQoKTogUHJvbWlzZTxQYWdlSW5pdFJlc3VsdD47XHJcbiAgcHJvdGVjdGVkIGluaXRQcm9taXNlITogUHJvbWlzZTxQYWdlSW5pdFJlc3VsdD47XHJcblxyXG4gIHB1YmxpYyBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzPy5zZXRTdGF0dXMoJ3BlbmRpbmcnLCAnTG9hZGluZycpO1xyXG4gICAgICB0aGlzLmluaXRQcm9taXNlID0gdGhpcy5vbkluaXQoKTtcclxuICAgICAgYXdhaXQgdGhpcy5pbml0UHJvbWlzZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMub25FcnJvcihlcnJvcik7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIgdGhlIEFuZ3VsYXIgTGlmZWN5Y2xlIGV2ZW50IG5nT25BZnRlclZpZXdJbml0LlxyXG4gICAqIEl0IGZpcmVzIGFmdGVyIGFsbCBzdWItY29tcG9uZW50cyBoYXZlIGdvbmUgdGhyb3VnaCB0aGVpciBpbml0aWFsaXphdGlvbiBwaGFzZS5cclxuICAgKiBJdCBpcyBpbiB0aGlzIHBoYXNlIHRoYXQgdGhlIHZpZXcgY29tcG9uZW50cyBzaG91bGQgYWxyZWFkeSBleGlzdCwgc28gYSBkZXJpdmVkIGNsYXNzIHNob3VsZFxyXG4gICAqIGxvYWQgZGF0YSBmcm9tIHRoZSBBUEkgdG8gcG9wdWxhdGUgYW55IHZpZXcgY29tcG9uZW50cy4gVGhlIHByb21pc2UgdGhhdFxyXG4gICAqIGlzIHJldHVybmVkIG11c3Qgbm90IHJlc29sdmUgdW50aWwgYWxsIHJlcXVpcmVkIGRhdGEgaGFzIGNvbXBsZXRlbHkgbG9hZGVkXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGFzeW5jIG9uQWZ0ZXJWaWV3SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHsgfTtcclxuICBwdWJsaWMgYXN5bmMgbmdBZnRlclZpZXdJbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgaW5pdFJlc3VsdCA9IGF3YWl0IHRoaXMuaW5pdFByb21pc2U7XHJcbiAgICAgIHRoaXMucGFyc2VJbml0UmVzdWx0KGluaXRSZXN1bHQpO1xyXG5cclxuICAgICAgYXdhaXQgdGhpcy5vbkFmdGVyVmlld0luaXQoKTtcclxuXHJcbiAgICAgIHRoaXMuX2FmdGVyVmlld0luaXRDb21wbGV0ZS5uZXh0KCk7XHJcbiAgICAgIHRoaXMuX2FmdGVyVmlld0luaXRDb21wbGV0ZS5jb21wbGV0ZSgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc3RhdHVzPy5zdGF0dXMgPT09ICdwZW5kaW5nJykge1xyXG4gICAgICAgIHRoaXMuc3RhdHVzLnNldFN0YXR1cygnaGFzRGF0YScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNldFVwUm91dGVyU3Vic2NyaXB0aW9ucygpO1xyXG5cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMub25FcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBIGxpZmVjeWNsZSBob29rIHRoYXQgaXMgY2FsbGVkIGFmdGVyIGV2ZXJ5IE5hdmlnYXRpb25FbmQgZXZlbnQuXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIG9uTmF2aWdhdGlvbkVuZCgpOiB2b2lkIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWxvYWQgdGhlIGNvbXBvbmVudCBraWNraW5nIG9mZiB0aGUgbmdPbkluaXQgYW5kIG5nQWZ0ZXJWaWV3SW5pdCBsaWZlY3ljbGUgaG9va3MuXHJcbiAgICogQW55IHN0YXRlIHRoYXQgbmVlZHMgdG8gYmUgcmVzZXQgc2hvdWxkIGJlIGRvbmUgc28gYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QuXHJcbiAgICovXHJcbiAgcHVibGljIHJlbG9hZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2FmdGVyVmlld0luaXRDb21wbGV0ZSA9IG5ldyBSZXBsYXlTdWJqZWN0KCk7XHJcblxyXG4gICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgdGhpcy5uZ0FmdGVyVmlld0luaXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gb3ZlcnJpZGRlbiBpbiBhIGRlcml2ZWQgY2xhc3MgdGhpcyBtZXRob2Qgd2lsbCBzeW5jIHRoZSBmb3JtIHN0YXRlXHJcbiAgICogaW50byB0aGUgb2JqZWN0IHRoYXQgd2lsbCBiZSBwZXJzaXN0ZWQgdG8gdGhlIEFQSS4gVGhlIHZhbHVlIHNob3VsZCBub3RcclxuICAgKiBhY3R1YWxseSBiZSBzZW50IHRvIHRoZSBBUEkgeWV0LlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBhc3luYyBhcHBseU1vZGVsVXBkYXRlcygpOiBQcm9taXNlPHZvaWQ+IHsgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2F2ZSB0aGUgbW9kZWwgc3RhdGUgdG8gdGhlIEFQSSBhbmQgcmV0dXJuIGEgcHJvbWlzZSB0aGF0XHJcbiAgICogY29udGFpbnMgdGhlIHVwZGF0ZWQgZW50aXR5SUQuIFRoZSBwcm9taXNlIHNob3VsZCBiZSByZWplY3RlZFxyXG4gICAqIGlmIHRoZSBzYXZlIGZhaWxzIGFuZCBlcnJvcnMgYW5kIHRoZSBvdmVybGF5IHN0YXR1cyB3aWxsIGJlIHVwZGF0ZWRcclxuICAgKiBhY2NvcmRpbmdseVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBhc3luYyBzYXZlVG9BcGkoKTogUHJvbWlzZTxudW1iZXIgfCB2b2lkPiB7IH07XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxlZCBhZnRlciB0aGUgc2F2ZSBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cclxuICAgKiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGRlcml2ZWQgY2xhc3MgdG8gbmF2aWdhdGVcclxuICAgKiB0byBhIHByb3BlcnRpZXMvc3RhdHVzIHBhZ2Ugb3IgZW1pdCBhcHByb3ByaWF0ZWx5IGlmIHdpdGhpbiBhIGRpYWxvZ1xyXG4gICAqIEBwYXJhbSBlbnRpdHlJZCBcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgb25TYXZlQ29tcGxldGUoZW50aXR5SWQ/OiBudW1iZXIpOiB2b2lkIHsgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHNhdmUuICBXZSB3aWxsIGZpcnN0IHRvdWNoIGFsbCBjb250cm9scyB0byBzaG93IHZhbGlkYXRpb24gbWVzc2FnZXNcclxuICAgKiBpZiB0aGUgZm9ybSBpcyBpbnZhbGlkLiAgSWYgdGhlIGZvcm0gaXMgdmFsaWQgd2Ugd2lsbCBhdHRlbXB0IHRvIHNhdmUgYW5kIGFueSBlcnJvcnMgd2lsbCBiZSByZXBvcnRlZFxyXG4gICAqIGJhY2sgdG8gdGhlIHVzZXJcclxuICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIG9uU2F2ZShldmVudDogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuZm9ybUdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcclxuICAgICAgdGhpcy5zdGF0dXM/LnNldFN0YXR1cygncGVuZGluZycsICdTYXZpbmcnKTtcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBseU1vZGVsVXBkYXRlcygpO1xyXG4gICAgICAgIGxldCBlbnRpdHlJZCA9IGF3YWl0IHRoaXMuc2F2ZVRvQXBpKCkgfHwgLTE7XHJcblxyXG4gICAgICAgIHRoaXMuX2Vycm9ycyA9ICcnO1xyXG5cclxuICAgICAgICB0aGlzLm9uU2F2ZUNvbXBsZXRlKGVudGl0eUlkKTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAvL2NsZWFyIHRoZSBcInNhdmluZ1wiIG92ZXJsYXkgYW5kIHNob3cgdGhlIG1lc3NhZ2UgYXQgdGhlIHRvcCBvZiB0aGUgdmlldyB0aHJvdWdoIHRoZSBlcnJvcnMgcHJvcGVydHlcclxuICAgICAgICB0aGlzLnNob3dFcnJvckJhbm5lcihlcnJvciwgdGhpcy5kZWZhdWx0VW5rbm93blNhdmVFcnJvcik7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIE9ubHkgc2hvdyB0aGUgYmFubmVyIHdpdGggdGhlIGdlbmVyaWMgbWVzc2FnZSBpZiB0aGUgcGFyZW50IGNvbXBvbmVudCBoYXNuJ3QgYWxyZWFkeSBzZXQgb25lXHJcbiAgICAgIC8vIGJ5IGltcGxlbWVudGluZyBvblNhdmUgZm9yIGFkZGl0aW9uYWwgdmFsaWRhdGlvblxyXG4gICAgICBpZiAodGhpcy5lcnJvcnMgPT09ICcnKSB7XHJcbiAgICAgICAgdGhpcy5zaG93RXJyb3JCYW5uZXIodGhpcy5kZWZhdWx0SW52YWxpZEZvcm1NZXNzYWdlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3IpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsU2VydmljZS5zY3JvbGxUb0l0ZW0odGhpcy5zY3JvbGxDb250YWluZXJTZWxlY3RvciEsIFwiLm5nLWludmFsaWRcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkXHJcbiAgICovXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95ZWQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95ZWQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bmN0aW9uIHRoYXQgd2lsbCBsb2cgYW4gZXJyb3IgdGhhdCBpcyBwYXNzZWQgaW4gdG8gdGhlIGNvbnNvbGVcclxuICAgKiBAcGFyYW0gZSBcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgb25FcnJvcihlcnJvcjogRXJyb3IpOiB2b2lkIHtcclxuICAgIHRoaXMuZXJyb3JTZXJ2aWNlLmxvZ0NvbnNvbGVFcnJvcihlcnJvcik7XHJcbiAgICB0aGlzLnNob3dFcnJvck92ZXJsYXkoZXJyb3IpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBhbiBlcnJvciBtZXNzYWdlIGluIGEgd2hvbGUtcGFnZSBvdmVybGF5LiBUaGlzIHdpbGwgcHJldmVudCBhbnkgbW9yZVxyXG4gICAqIGludGVyYWN0aW9ucyB3aXRoIHRoZSBwYWdlLiBJdCBjYW4gdGFrZSBhIHN0cmluZyBlcnJvciBtZXNzYWdlIG9yIGEgcmF3IEFQSVxyXG4gICAqIGVycm9yIHRoYXQgbmVlZHMgdG8gYmUgcGFyc2VkLiBJZiB0aGUgQVBJIGVycm9yIGlzbid0IHNvbWV0aGluZyB3ZSBjYW4gaGFuZGxlXHJcbiAgICogYSBnZW5lcmljIG1lc3NhZ2UgaXMgc2hvd24gaW5zdGVhZFxyXG4gICAqIEBwYXJhbSB7KEVycm9yIHwgc3RyaW5nKX0gZXJyb3JcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2hvd0Vycm9yT3ZlcmxheShlcnJvcjogRXJyb3IgfCBzdHJpbmcpIHtcclxuICAgIHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKS5zdWJzY3JpYmUoKHRyYW5zbGF0ZWRNZXNzYWdlOiBzdHJpbmcpID0+IHtcclxuICAgICAgdGhpcy5zdGF0dXM/LnNldFN0YXR1cygnZXJyb3InLCB0cmFuc2xhdGVkTWVzc2FnZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgYW4gZXJyb3IgaW4gdGhlIGJhbm5lciBhdCB0aGUgdG9wIG9mIHRoZSBzY3JlZW4uICBUaGlzIHdpbGwgbm90IHByb2R1Y2UgYVxyXG4gICAqIHdob2xlLXBhZ2Ugb3ZlcmxheSBsaWtlIHRoZSBmdW5jdGlvbiBzaG93RXJyb3Igd2lsbC4gIEl0IGNhbiB0YWtlIGEgc3RyaW5nIGVycm9yIG1lc3NhZ2VcclxuICAgKiBvciByYXcgQVBJIGVycm9yIHRoYXQgbmVlZHMgdG8gYmUgcGFyc2VkLiAgSWYgdGhlIEFQSSBlcnJvciBpc24ndCBzb21ldGhpbmcgd2UgY2FuIGhhbmRsZSxcclxuICAgKiBhIGdlbmVyaWMgbWVzc2FnZSAoY3VzdG9taXphYmxlIHZpYSB1bmtub3duRXJyb3JEZWZhdWx0KSBpcyBzaG93biBpbnN0ZWFkLlxyXG4gICAqIEBwYXJhbSBlcnJvciBcclxuICAgKiBAcGFyYW0gdW5rbm93bkVycm9yRGVmYXVsdCBcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2hvd0Vycm9yQmFubmVyKGVycm9yOiBFcnJvciB8IHN0cmluZywgdW5rbm93bkVycm9yRGVmYXVsdD86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IsIHVua25vd25FcnJvckRlZmF1bHQpLnN1YnNjcmliZSgodHJhbnNsYXRlZE1lc3NhZ2U6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLl9lcnJvcnMgPSB0cmFuc2xhdGVkTWVzc2FnZTtcclxuICAgICAgdGhpcy5zdGF0dXM/LnNldFN0YXR1cygnaGFzRGF0YScpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJzZXMgYW5kIHRyYW5zbGF0ZXMgYW4gQVBJIGVycm9yIG9yIGVycm9yIHN0cmluZy5cclxuICAgKiBAcGFyYW0gZSBcclxuICAgKiBAcGFyYW0gdW5rbm93bkVycm9yRGVmYXVsdCBcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZ2V0RXJyb3JNZXNzYWdlKGU6IEVycm9yIHwgc3RyaW5nLCB1bmtub3duRXJyb3JEZWZhdWx0Pzogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIGxldCBleHRyYWN0ZWRNZXNzYWdlID0gdGhpcy5lcnJvclNlcnZpY2UucGFyc2VBcGlFcnJvcihlLCB1bmtub3duRXJyb3JEZWZhdWx0KTtcclxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KGV4dHJhY3RlZE1lc3NhZ2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2VzIHRoZSBwYWdlIGluaXQgcmVzdWx0IGFuZCBzZXRzIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllcyBvbiB0aGUgcGFnZVxyXG4gICAqIEBwYXJhbSByZXN1bHQgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZUluaXRSZXN1bHQocmVzdWx0OiBQYWdlSW5pdFJlc3VsdCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0UmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgdGhpcy50aXRsZSA9IHJlc3VsdC50aXRsZTtcclxuICAgIHRoaXMuYnJlYWRjcnVtYnMgPSByZXN1bHQuYnJlYWRjcnVtYnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHVwIHRoZSByb3V0ZXIgZXZlbnQgc3Vic2NyaXB0aW9uc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0VXBSb3V0ZXJTdWJzY3JpcHRpb25zKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLm5hdmlnYXRpb25FbmRTdWJzY3JpcHRpb24gJiYgIXRoaXMuZGVzdHJveWVkLmNsb3NlZCkge1xyXG4gICAgICAvLyBSZWFjdCB0byBuYXZpZ2F0aW9uIGV2ZW50c1xyXG4gICAgICB0aGlzLm5hdmlnYXRpb25FbmRTdWJzY3JpcHRpb24gPSB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpLFxyXG4gICAgICAgIGZpbHRlcihlID0+IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcclxuICAgICAgKS5zdWJzY3JpYmUoZSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHRoaXMub25OYXZpZ2F0aW9uRW5kKCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIHRoaXMub25FcnJvcihlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
331
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvcGFnZS9wYWdlLWJhc2UvcGFnZS1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBYyxhQUFhLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTVELE1BQU0sT0FBTyxjQUFjO0lBQTNCO1FBQ0UsVUFBSyxHQUFZLEVBQUUsQ0FBQztJQUd0QixDQUFDO0NBQUE7QUFHRCxNQUFNLE9BQWdCLGlCQUFpQjtJQThFckMsWUFBWSxRQUFrQjtRQTdFOUIsa0RBQWtEO1FBQ2xCLGNBQVMsR0FBRyxrQkFBa0IsQ0FBQztRQUUvRDs7V0FFRztR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QyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7SUFBQSxDQUFDO0lBRUY7OztPQUdHO0lBQ0ssZUFBZSxDQUFDLE1BQXNCO1FBQzVDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNLLHdCQUF3QjtRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDN0QsNkJBQTZCO1lBQzdCLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3RELFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQ3pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxhQUFhLENBQUMsQ0FDeEMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2QsSUFBSTtvQkFDRixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7aUJBQ3hCO2dCQUFDLE9BQU8sS0FBSyxFQUFFO29CQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3JCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7OztZQTlXRixTQUFTOzs7WUFwQnNDLFFBQVE7Ozt3QkF1QnJELFdBQVcsU0FBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBIb3N0QmluZGluZywgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBOYXZJdGVtIH0gZnJvbSAnLi4vLi4vLi4vY29udHJvbHMvbmF2aWdhdGlvbi9uYXYtaXRlbSc7XHJcbmltcG9ydCB7IEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvZXJyb3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IFNjcm9sbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3Njcm9sbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2Rpc3BsYXkvZGlhbG9nL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSGVscCB9IGZyb20gJy4uLy4uLy4uL2Rpc3BsYXkvaGVscC9oZWxwLXR5cGVzJztcclxuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJy4uLy4uLy4uL2Rpc3BsYXkvdmlldy1vdmVybGF5L3ZpZXctb3ZlcmxheS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQYWdlU3RhdHVzLCBQYWdlU3RhdHVzZXMgfSBmcm9tICcuLi9wYWdlLXN0YXR1c2VzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYWdlSW5pdFJlc3VsdCB7XHJcbiAgdGl0bGU/OiBzdHJpbmcgPSAnJztcclxuICBicmVhZGNydW1icz86IE5hdkl0ZW1bXTtcclxuICBoZWxwPzogSGVscDtcclxufVxyXG5cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQYWdlQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICAvKiogRGVmYXVsdCBjc3MgY2xhc3NlcyBhcHBsaWVkIHRvIGhvc3QgZWxlbWVudCAqL1xyXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBwcm90ZWN0ZWQgY2xhc3NMaXN0ID0gJ2QtZmxleCBmbGV4LWdyb3cnO1xyXG5cclxuICAvKipcclxuICAgKiBUaXRsZSBmb3IgdGhlIHBhZ2UgZGlzcGxheWVkIGluIHRoZSBoZWFkZXJcclxuICAgKi9cclxuICBwdWJsaWMgdGl0bGU/OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqXHJcbiAgICogU3RhdHVzIG92ZXJsYXkgZm9yIHRoZSBwYWdlXHJcbiAgICovXHJcbiAgcHVibGljIHN0YXR1czogT3ZlcmxheSA9IG5ldyBPdmVybGF5KCdwZW5kaW5nJywgJ0xvYWRpbmcnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQnJlYWRjcnVtYnMgZGlzcGxheWVkIGluIHRoZSBoZWFkZXJcclxuICAgKi9cclxuICBwdWJsaWMgYnJlYWRjcnVtYnM/OiBOYXZJdGVtW107XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3VsdCByZXR1cm5lZCBmcm9tIHRoZSBvbkluaXQgZnVuY3Rpb25cclxuICAgKi9cclxuICBwdWJsaWMgaW5pdFJlc3VsdCE6IFBhZ2VJbml0UmVzdWx0O1xyXG5cclxuICAvKipcclxuICAgKiBIZWxwIGluZm9ybWF0aW9uIGZvciB0aGUgY29tcG9uZW50LCB3aGljaCBjYW4gb25seSBiZSBzZXQgdGhyb3VnaCBvbkluaXRcclxuICAgKi9cclxuICBwdWJsaWMgaGVscDogSGVscCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybSBncm91cCB0byBiZSB1c2VkIGlmIG5lZWRlZCBieSB0aGUgcGFnZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICAvKipcclxuICAgKiBEZWZhdWx0IGludmFsaWQgZm9ybSBtZXNzYWdlLCBvdmVycmlkZSBpZiBhIG1vcmUgc3BlY2lmaWMgbWVzc2FnZSBpcyBuZWVkZWRcclxuICAgKi9cclxuICBwdWJsaWMgZGVmYXVsdEludmFsaWRGb3JtTWVzc2FnZTogc3RyaW5nID0gJ1BsZWFzZUNvcnJlY3RGb3JtX1NDJztcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmYXVsdCB1bmtub3duIHNhdmUgZXJyb3IgbWVzc2FnZSwgb3ZlcnJpZGUgaWYgYSBtb3JlIHNwZWNpZmljIG1lc3NhZ2UgaXMgbmVlZGVkXHJcbiAgICovXHJcbiAgcHVibGljIGRlZmF1bHRVbmtub3duU2F2ZUVycm9yOiBzdHJpbmcgPSAnUGFnZUJhc2VVbmtub3duU2F2ZUVycm9yX1NDJztcclxuXHJcbiAgLyoqXHJcbiAgICogVXNlZCB0byB1bnN1YnNjcmliZSBmcm9tIG9ic2VydmFibGVzXHJcbiAgICovXHJcbiAgcHVibGljIGRlc3Ryb3llZDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICAvKipcclxuICAgKiBVc2VkIHRvIGtub3cgd2hlbiB0aGUgcGFnZSBoYXMgYmVlbiBsb2FkZWQsIHRoaXMgd2lsbCBiZSBjb21wbGV0ZWRcclxuICAgKiBhZnRlciBvbkFmdGVyVmlld0luaXRcclxuICAgKi9cclxuICBwcml2YXRlIF9hZnRlclZpZXdJbml0Q29tcGxldGU6IFJlcGxheVN1YmplY3Q8dm9pZD4gPSBuZXcgUmVwbGF5U3ViamVjdCgpO1xyXG4gIHB1YmxpYyBhZnRlclZpZXdJbml0Q29tcGxldGU6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9hZnRlclZpZXdJbml0Q29tcGxldGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGRlZmluZWQgdGhlIGZvcm0gd2lsbCBhdXRvbWF0aWNhbGx5IHNjcm9sbCB0byB0aGUgZmlyc3QgaW52YWxpZCBmb3JtIGNvbnRyb2xcclxuICAgKiBpZiBpdCdzIG91dHNpZGUgb2YgdGhlIHZpZXdcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqXHJcbiAgICogU3Vic2NyaXB0aW9uIHRvIHRoZSByb3V0ZXIgZXZlbnRzIE5hdmlnYXRpb25FbmRcclxuICAgKiBVc2VkIHRvIGtub3cgaWYgYWxyZWFkeSBzdWJzY3JpYmVkIHRvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBuYXZpZ2F0aW9uRW5kU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAvKipcclxuICAgKiBDb21tb24gc2VydmljZXMgdXNlZCBieSBwYWdlLWJhc2VcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIHNjcm9sbFNlcnZpY2U6IFNjcm9sbFNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyO1xyXG4gIHByb3RlY3RlZCBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGU7XHJcbiAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgdGhpcy5lcnJvclNlcnZpY2UgPSBpbmplY3Rvci5nZXQoRXJyb3JTZXJ2aWNlKTtcclxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZSA9IGluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKTtcclxuICAgIHRoaXMuc2Nyb2xsU2VydmljZSA9IGluamVjdG9yLmdldChTY3JvbGxTZXJ2aWNlKTtcclxuICAgIHRoaXMucm91dGVyID0gaW5qZWN0b3IuZ2V0KFJvdXRlcik7XHJcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlID0gaW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcclxuICAgIHRoaXMuZGlhbG9nU2VydmljZSA9IGluamVjdG9yLmdldChEaWFsb2dTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVycm9ycyB0byBiZSBzaG93biBmb3IgdGhlIGNvbXBvbmVudC5cclxuICAgKiBBdXRvbWF0aWNhbGx5IHBvcHVsYXRlZCBvbiBwcm9taXNlIHJlamVjdGlvbiBmcm9tIHNhdmUgYW5kIHNoYXJlZCB3aXRoIHRoZSBVSS5cclxuICAgKi9cclxuICBwcml2YXRlIF9lcnJvcnM6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBnZXQgZXJyb3JzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZXJyb3JzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgbGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYXMgcGFydCBvZiB0aGUgQW5ndWxhciBuZ09uSW5pdCBsaWZlY3ljbGUgaG9vay5cclxuICAgKiBDYWxsZWQgYmVmb3JlIG9uSW5pdCBpcyBjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lLiBBZGQgc2V0dXAgbG9naWMgaGVyZSB0aGF0IGRvZXNcclxuICAgKiBub3QgbmVlZCB0byBiZSBydW4gb24gZXZlcnkgcmVsb2FkLlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBvbkZpcnN0SW5pdCgpOiB2b2lkIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW4gdGhlIGRlcml2ZWQgY2xhc3MgYXMgcGFydCBvZiB0aGUgQW5ndWxhciBuZ09uSW5pdFxyXG4gICAqIGxpZmVjeWNsZSBob29rLiBJdCBtdXN0IHByb3ZpZGUgYSBQYWdlSW5pdFJlc3VsdCBiYWNrIHRvIHRoZSBiYXNlIGNsYXNzIHRvIHByb3Blcmx5XHJcbiAgICogc2V0IHVwIHRoZSBwYWdlLlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBvbkluaXQoKTogUHJvbWlzZTxQYWdlSW5pdFJlc3VsdD47XHJcbiAgcHJvdGVjdGVkIGluaXRQcm9taXNlITogUHJvbWlzZTxQYWdlSW5pdFJlc3VsdD47XHJcblxyXG4gIHB1YmxpYyBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2hvd1N0YXR1cyhQYWdlU3RhdHVzLkxvYWRpbmcpO1xyXG4gICAgICB0aGlzLm9uRmlyc3RJbml0KCk7XHJcbiAgICAgIHRoaXMuaW5pdFByb21pc2UgPSB0aGlzLm9uSW5pdCgpO1xyXG4gICAgICBhd2FpdCB0aGlzLmluaXRQcm9taXNlO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgdGhpcy5vbkVycm9yKGVycm9yKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQganVzdCBhZnRlciB0aGUgQW5ndWxhciBMaWZlY3ljbGUgZXZlbnQgbmdPbkFmdGVyVmlld0luaXQuXHJcbiAgICogSXQgZmlyZXMgYWZ0ZXIgYWxsIHN1Yi1jb21wb25lbnRzIGhhdmUgZ29uZSB0aHJvdWdoIHRoZWlyIGluaXRpYWxpemF0aW9uIHBoYXNlLlxyXG4gICAqIEl0IGlzIGluIHRoaXMgcGhhc2UgdGhhdCB0aGUgdmlldyBjb21wb25lbnRzIHNob3VsZCBhbHJlYWR5IGV4aXN0LCBzbyBhIGRlcml2ZWQgY2xhc3Mgc2hvdWxkXHJcbiAgICogbG9hZCBkYXRhIGZyb20gdGhlIEFQSSB0byBwb3B1bGF0ZSBhbnkgdmlldyBjb21wb25lbnRzLiBUaGUgcHJvbWlzZSB0aGF0XHJcbiAgICogaXMgcmV0dXJuZWQgbXVzdCBub3QgcmVzb2x2ZSB1bnRpbCBhbGwgcmVxdWlyZWQgZGF0YSBoYXMgY29tcGxldGVseSBsb2FkZWRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYXN5bmMgb25BZnRlclZpZXdJbml0KCk6IFByb21pc2U8dm9pZD4geyB9O1xyXG4gIHB1YmxpYyBhc3luYyBuZ0FmdGVyVmlld0luaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBpbml0UmVzdWx0ID0gYXdhaXQgdGhpcy5pbml0UHJvbWlzZTtcclxuICAgICAgdGhpcy5wYXJzZUluaXRSZXN1bHQoaW5pdFJlc3VsdCk7XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJWaWV3SW5pdCgpO1xyXG5cclxuICAgICAgdGhpcy5fYWZ0ZXJWaWV3SW5pdENvbXBsZXRlLm5leHQoKTtcclxuICAgICAgdGhpcy5fYWZ0ZXJWaWV3SW5pdENvbXBsZXRlLmNvbXBsZXRlKCk7XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLm9uRm9ybUxvYWRDb21wbGV0ZSgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc3RhdHVzLnN0YXR1cyA9PT0gJ3BlbmRpbmcnKSB7XHJcbiAgICAgICAgdGhpcy5zaG93U3RhdHVzKFBhZ2VTdGF0dXMuTG9hZGVkKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXRVcFJvdXRlclN1YnNjcmlwdGlvbnMoKTtcclxuXHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLm9uRXJyb3IoZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQSBsaWZlY3ljbGUgbWV0aG9kIHRoYXQgZXhlY3V0ZXMgb25jZSBhbGwgZGF0YSBoYXMgYmVlbiBsb2FkZWRcclxuICAgKiB0aHJvdWdoIG5nQWZ0ZXJWaWV3SW5pdCBhbmQgZnJvbSBsb2NhbCBzdG9yYWdlIGlmIHJlcXVpcmVkLlxyXG4gICAqIEl0IGlzIGF0IHRoaXMgcG9pbnQgdGhhdCB5b3UgY2FuIHN1YnNjcmliZSB0byBjaGFuZ2VzIG9uIHRoZSBmb3JtXHJcbiAgICogcmVsaWFibHlcclxuICAgKlxyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKiBAbWVtYmVyb2YgUGFnZUJhc2VDb21wb25lbnRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYXN5bmMgb25Gb3JtTG9hZENvbXBsZXRlKCk6IFByb21pc2U8YW55PiB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogQSBsaWZlY3ljbGUgaG9vayB0aGF0IGlzIGNhbGxlZCBhZnRlciBldmVyeSBOYXZpZ2F0aW9uRW5kIGV2ZW50LlxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBvbk5hdmlnYXRpb25FbmQoKTogdm9pZCB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVsb2FkIHRoZSBjb21wb25lbnQga2lja2luZyBvZmYgdGhlIG5nT25Jbml0IGFuZCBuZ0FmdGVyVmlld0luaXQgbGlmZWN5Y2xlIGhvb2tzLlxyXG4gICAqIEFueSBzdGF0ZSB0aGF0IG5lZWRzIHRvIGJlIHJlc2V0IHNob3VsZCBiZSBkb25lIHNvIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLlxyXG4gICAqL1xyXG4gIHB1YmxpYyByZWxvYWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9hZnRlclZpZXdJbml0Q29tcGxldGUgPSBuZXcgUmVwbGF5U3ViamVjdCgpO1xyXG5cclxuICAgIHRoaXMubmdPbkluaXQoKTtcclxuICAgIHRoaXMubmdBZnRlclZpZXdJbml0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIG92ZXJyaWRkZW4gaW4gYSBkZXJpdmVkIGNsYXNzIHRoaXMgbWV0aG9kIHdpbGwgc3luYyB0aGUgZm9ybSBzdGF0ZVxyXG4gICAqIGludG8gdGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgcGVyc2lzdGVkIHRvIHRoZSBBUEkuIFRoZSB2YWx1ZSBzaG91bGQgbm90XHJcbiAgICogYWN0dWFsbHkgYmUgc2VudCB0byB0aGUgQVBJIHlldC5cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYXN5bmMgYXBwbHlNb2RlbFVwZGF0ZXMoKTogUHJvbWlzZTx2b2lkPiB7IH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhdmUgdGhlIG1vZGVsIHN0YXRlIHRvIHRoZSBBUEkgYW5kIHJldHVybiBhIHByb21pc2UgdGhhdFxyXG4gICAqIGNvbnRhaW5zIHRoZSB1cGRhdGVkIGVudGl0eUlELiBUaGUgcHJvbWlzZSBzaG91bGQgYmUgcmVqZWN0ZWRcclxuICAgKiBpZiB0aGUgc2F2ZSBmYWlscyBhbmQgZXJyb3JzIGFuZCB0aGUgb3ZlcmxheSBzdGF0dXMgd2lsbCBiZSB1cGRhdGVkXHJcbiAgICogYWNjb3JkaW5nbHlcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYXN5bmMgc2F2ZVRvQXBpKCk6IFByb21pc2U8bnVtYmVyIHwgdm9pZD4geyB9O1xyXG5cclxuICAvKipcclxuICAgKiBDYWxsZWQgYWZ0ZXIgdGhlIHNhdmUgaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXHJcbiAgICogSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBkZXJpdmVkIGNsYXNzIHRvIG5hdmlnYXRlXHJcbiAgICogdG8gYSBwcm9wZXJ0aWVzL3N0YXR1cyBwYWdlIG9yIGVtaXQgYXBwcm9wcmlhdGVseSBpZiB3aXRoaW4gYSBkaWFsb2dcclxuICAgKiBAcGFyYW0gZW50aXR5SWQgXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIG9uU2F2ZUNvbXBsZXRlKGVudGl0eUlkPzogbnVtYmVyKTogdm9pZCB7IH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBzYXZlLiAgV2Ugd2lsbCBmaXJzdCB0b3VjaCBhbGwgY29udHJvbHMgdG8gc2hvdyB2YWxpZGF0aW9uIG1lc3NhZ2VzXHJcbiAgICogaWYgdGhlIGZvcm0gaXMgaW52YWxpZC4gIElmIHRoZSBmb3JtIGlzIHZhbGlkIHdlIHdpbGwgYXR0ZW1wdCB0byBzYXZlIGFuZCBhbnkgZXJyb3JzIHdpbGwgYmUgcmVwb3J0ZWRcclxuICAgKiBiYWNrIHRvIHRoZSB1c2VyXHJcbiAgICogQHBhcmFtIGV2ZW50IFxyXG4gICAqL1xyXG4gIHB1YmxpYyBhc3luYyBvblNhdmUoZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuc2hvd1N0YXR1cyhQYWdlU3RhdHVzLlNhdmluZyk7XHJcblxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYXBwbHlNb2RlbFVwZGF0ZXMoKTtcclxuICAgICAgICBsZXQgZW50aXR5SWQgPSBhd2FpdCB0aGlzLnNhdmVUb0FwaSgpIHx8IC0xO1xyXG5cclxuICAgICAgICB0aGlzLl9lcnJvcnMgPSAnJztcclxuXHJcbiAgICAgICAgdGhpcy5vblNhdmVDb21wbGV0ZShlbnRpdHlJZCk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgLy9jbGVhciB0aGUgXCJzYXZpbmdcIiBvdmVybGF5IGFuZCBzaG93IHRoZSBtZXNzYWdlIGF0IHRoZSB0b3Agb2YgdGhlIHZpZXcgdGhyb3VnaCB0aGUgZXJyb3JzIHByb3BlcnR5XHJcbiAgICAgICAgdGhpcy5zaG93RXJyb3JCYW5uZXIoZXJyb3IsIHRoaXMuZGVmYXVsdFVua25vd25TYXZlRXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBPbmx5IHNob3cgdGhlIGJhbm5lciB3aXRoIHRoZSBnZW5lcmljIG1lc3NhZ2UgaWYgdGhlIHBhcmVudCBjb21wb25lbnQgaGFzbid0IGFscmVhZHkgc2V0IG9uZVxyXG4gICAgICAvLyBieSBpbXBsZW1lbnRpbmcgb25TYXZlIGZvciBhZGRpdGlvbmFsIHZhbGlkYXRpb25cclxuICAgICAgaWYgKHRoaXMuZXJyb3JzID09PSAnJykge1xyXG4gICAgICAgIHRoaXMuc2hvd0Vycm9yQmFubmVyKHRoaXMuZGVmYXVsdEludmFsaWRGb3JtTWVzc2FnZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnNjcm9sbENvbnRhaW5lclNlbGVjdG9yKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbFNlcnZpY2Uuc2Nyb2xsVG9JdGVtKHRoaXMuc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3IhLCBcIi5uZy1pbnZhbGlkXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveWVkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveWVkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGdW5jdGlvbiB0aGF0IHdpbGwgbG9nIGFuIGVycm9yIHRoYXQgaXMgcGFzc2VkIGluIHRvIHRoZSBjb25zb2xlXHJcbiAgICogQHBhcmFtIGUgXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIG9uRXJyb3IoZXJyb3I6IEVycm9yKTogdm9pZCB7XHJcbiAgICB0aGlzLmVycm9yU2VydmljZS5sb2dDb25zb2xlRXJyb3IoZXJyb3IpO1xyXG4gICAgdGhpcy5zaG93RXJyb3JPdmVybGF5KGVycm9yKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgYW4gZXJyb3IgbWVzc2FnZSBpbiBhIHdob2xlLXBhZ2Ugb3ZlcmxheS4gVGhpcyB3aWxsIHByZXZlbnQgYW55IG1vcmVcclxuICAgKiBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcGFnZS4gSXQgY2FuIHRha2UgYSBzdHJpbmcgZXJyb3IgbWVzc2FnZSBvciBhIHJhdyBBUElcclxuICAgKiBlcnJvciB0aGF0IG5lZWRzIHRvIGJlIHBhcnNlZC4gSWYgdGhlIEFQSSBlcnJvciBpc24ndCBzb21ldGhpbmcgd2UgY2FuIGhhbmRsZVxyXG4gICAqIGEgZ2VuZXJpYyBtZXNzYWdlIGlzIHNob3duIGluc3RlYWRcclxuICAgKiBAcGFyYW0geyhFcnJvciB8IHN0cmluZyl9IGVycm9yXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHNob3dFcnJvck92ZXJsYXkoZXJyb3I6IEVycm9yIHwgc3RyaW5nKSB7XHJcbiAgICB0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcikuc3Vic2NyaWJlKCh0cmFuc2xhdGVkTWVzc2FnZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIHRoaXMuc3RhdHVzLnNldFN0YXR1cygnZXJyb3InLCB0cmFuc2xhdGVkTWVzc2FnZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgYW4gZXJyb3IgaW4gdGhlIGJhbm5lciBhdCB0aGUgdG9wIG9mIHRoZSBzY3JlZW4uICBUaGlzIHdpbGwgbm90IHByb2R1Y2UgYVxyXG4gICAqIHdob2xlLXBhZ2Ugb3ZlcmxheSBsaWtlIHRoZSBmdW5jdGlvbiBzaG93RXJyb3Igd2lsbC4gIEl0IGNhbiB0YWtlIGEgc3RyaW5nIGVycm9yIG1lc3NhZ2VcclxuICAgKiBvciByYXcgQVBJIGVycm9yIHRoYXQgbmVlZHMgdG8gYmUgcGFyc2VkLiAgSWYgdGhlIEFQSSBlcnJvciBpc24ndCBzb21ldGhpbmcgd2UgY2FuIGhhbmRsZSxcclxuICAgKiBhIGdlbmVyaWMgbWVzc2FnZSAoY3VzdG9taXphYmxlIHZpYSB1bmtub3duRXJyb3JEZWZhdWx0KSBpcyBzaG93biBpbnN0ZWFkLlxyXG4gICAqIEBwYXJhbSBlcnJvciBcclxuICAgKiBAcGFyYW0gdW5rbm93bkVycm9yRGVmYXVsdCBcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2hvd0Vycm9yQmFubmVyKGVycm9yOiBFcnJvciB8IHN0cmluZywgdW5rbm93bkVycm9yRGVmYXVsdD86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IsIHVua25vd25FcnJvckRlZmF1bHQpLnN1YnNjcmliZSgodHJhbnNsYXRlZE1lc3NhZ2U6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLl9lcnJvcnMgPSB0cmFuc2xhdGVkTWVzc2FnZTtcclxuICAgICAgdGhpcy5zaG93U3RhdHVzKFBhZ2VTdGF0dXMuTG9hZGVkKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2VzIGFuZCB0cmFuc2xhdGVzIGFuIEFQSSBlcnJvciBvciBlcnJvciBzdHJpbmcuXHJcbiAgICogQHBhcmFtIGUgXHJcbiAgICogQHBhcmFtIHVua25vd25FcnJvckRlZmF1bHQgXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGdldEVycm9yTWVzc2FnZShlOiBFcnJvciB8IHN0cmluZywgdW5rbm93bkVycm9yRGVmYXVsdD86IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICBsZXQgZXh0cmFjdGVkTWVzc2FnZSA9IHRoaXMuZXJyb3JTZXJ2aWNlLnBhcnNlQXBpRXJyb3IoZSwgdW5rbm93bkVycm9yRGVmYXVsdCk7XHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldChleHRyYWN0ZWRNZXNzYWdlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIHRoZSBlcnJvcnMgdG8gaGlkZSB0aGUgZXJyb3JzIGJhbm5lci5cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgaGlkZUVycm9yQmFubmVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZXJyb3JzID0gJyc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGFuZ2UgdGhlIGRpc3BsYXkgc3RhdHVzIHRvIG92ZXJsYXkgdGhlIHdob2xlIHBhZ2Ugd2hpbGUgbG9hZGluZyBvciBzYXZpbmdcclxuICAgKiBhbmQgY2xlYXIgaXQgd2hlbiB0aGUgZm9ybSBpcyByZWFkeVxyXG4gICAqIEBwcm90ZWN0ZWRcclxuICAgKiBAcGFyYW0ge1BhZ2VTdGF0dXN9IHN0YXR1c1xyXG4gICAqIEBtZW1iZXJvZiBGb3JtQmFzZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBzaG93U3RhdHVzKHN0YXR1czogUGFnZVN0YXR1cykge1xyXG4gICAgbGV0IGtub3duU3RhdHVzID0gUGFnZVN0YXR1c2VzW3N0YXR1c107XHJcbiAgICBpZiAoa25vd25TdGF0dXMpIHtcclxuICAgICAgdGhpcy5zdGF0dXMuc2V0U3RhdHVzKGtub3duU3RhdHVzLnN0YXR1cywga25vd25TdGF0dXMubWVzc2FnZSwgdW5kZWZpbmVkLCBrbm93blN0YXR1cy5ub0RhdGFUZW1wbGF0ZSwga25vd25TdGF0dXMub3ZlcmxheUNsYXNzTGlzdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGxvd3MgdGhlIGNvbXBvbmVudCB0byBlbnRlciBhIHBlbmRpbmcgc3RhdHVzIGFuZCBleGVjdXRlIGEgZnVuY3Rpb24gdGhhdCBvbiBjb21wbGV0aW9uIHdpbGwgcmV0dXJuIHRoZSBzdGF0dXNcclxuICAgKiB0byBoYXNEYXRhLiBJZiBhbiBlcnJvciBvY2N1cnMgd2l0aGluIHRoZSBjYWxsYmFjayBhbiBlcnJvciBiYW5uZXIgY2FuIGJlIHNob3duLlxyXG4gICAqIEBwYXJhbSBjYWxsYmFja1xyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGFzeW5jIHJ1bkJsb2NraW5nQWN0aW9uKGNhbGxiYWNrOiAoKSA9PiBQcm9taXNlPGFueT4sIHBlbmRpbmdNZXNzYWdlPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHRoaXMuaGlkZUVycm9yQmFubmVyKCk7XHJcbiAgICB0aGlzLnN0YXR1cy5zZXRTdGF0dXMoJ3BlbmRpbmcnLCBwZW5kaW5nTWVzc2FnZSk7XHJcblxyXG4gICAgcmV0dXJuIGNhbGxiYWNrKCkuY2F0Y2goZXJyb3IgPT4ge1xyXG4gICAgICB0aGlzLnNob3dFcnJvckJhbm5lcihlcnJvcik7XHJcbiAgICAgIC8vIFRocm93IHRoZSBlcnJvciBmb3IgYW55IGRvd25zdHJlYW0gY29tcG9uZW50cyB0aGF0IG1heSBiZSBsaXN0ZW5pbmcgYW5kIG5lZWQgdG8gcmVhY3RcclxuICAgICAgLy8gdG8gYW55IGVycm9ycyBoYXBwZW5pbmcgd2l0aGluIHRoaXMgY2FsbGJhY2tcclxuICAgICAgdGhyb3cgKGVycm9yKTtcclxuICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNob3dTdGF0dXMoUGFnZVN0YXR1cy5Mb2FkZWQpO1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2VzIHRoZSBwYWdlIGluaXQgcmVzdWx0IGFuZCBzZXRzIHRoZSBuZWNlc3NhcnkgcHJvcGVydGllcyBvbiB0aGUgcGFnZVxyXG4gICAqIEBwYXJhbSByZXN1bHQgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZUluaXRSZXN1bHQocmVzdWx0OiBQYWdlSW5pdFJlc3VsdCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0UmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgdGhpcy50aXRsZSA9IHJlc3VsdC50aXRsZTtcclxuICAgIHRoaXMuYnJlYWRjcnVtYnMgPSByZXN1bHQuYnJlYWRjcnVtYnM7XHJcbiAgICB0aGlzLmhlbHAgPSByZXN1bHQuaGVscDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdXAgdGhlIHJvdXRlciBldmVudCBzdWJzY3JpcHRpb25zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRVcFJvdXRlclN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubmF2aWdhdGlvbkVuZFN1YnNjcmlwdGlvbiAmJiAhdGhpcy5kZXN0cm95ZWQuY2xvc2VkKSB7XHJcbiAgICAgIC8vIFJlYWN0IHRvIG5hdmlnYXRpb24gZXZlbnRzXHJcbiAgICAgIHRoaXMubmF2aWdhdGlvbkVuZFN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLmV2ZW50cy5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCksXHJcbiAgICAgICAgZmlsdGVyKGUgPT4gZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxyXG4gICAgICApLnN1YnNjcmliZShlID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhpcy5vbk5hdmlnYXRpb25FbmQoKTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgdGhpcy5vbkVycm9yKGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export var PageStatus;
|
|
2
|
+
(function (PageStatus) {
|
|
3
|
+
PageStatus["Loading"] = "loading";
|
|
4
|
+
PageStatus["Loaded"] = "loaded";
|
|
5
|
+
PageStatus["Saving"] = "saving";
|
|
6
|
+
PageStatus["NoData"] = "noData";
|
|
7
|
+
})(PageStatus || (PageStatus = {}));
|
|
8
|
+
;
|
|
9
|
+
export class PageStatuses {
|
|
10
|
+
static get loading() {
|
|
11
|
+
return { status: "pending", message: "Loading" };
|
|
12
|
+
}
|
|
13
|
+
static get loaded() {
|
|
14
|
+
return { status: "hasData", message: "" };
|
|
15
|
+
}
|
|
16
|
+
static get saving() {
|
|
17
|
+
return { status: "pending", message: "Saving" };
|
|
18
|
+
}
|
|
19
|
+
static get noData() {
|
|
20
|
+
return { status: "noData", message: "No data is available" };
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1zdGF0dXNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvcGFnZS9wYWdlLXN0YXR1c2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBTixJQUFZLFVBS1g7QUFMRCxXQUFZLFVBQVU7SUFDcEIsaUNBQW1CLENBQUE7SUFDbkIsK0JBQWlCLENBQUE7SUFDakIsK0JBQWlCLENBQUE7SUFDakIsK0JBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUxXLFVBQVUsS0FBVixVQUFVLFFBS3JCO0FBQUEsQ0FBQztBQUVGLE1BQU0sT0FBTyxZQUFZO0lBQ2hCLE1BQU0sS0FBSyxPQUFPO1FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRU0sTUFBTSxLQUFLLE1BQU07UUFDdEIsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFTSxNQUFNLEtBQUssTUFBTTtRQUN0QixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVNLE1BQU0sS0FBSyxNQUFNO1FBQ3RCLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxDQUFDO0lBQy9ELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpc3BsYXlTdGF0dXMgfSBmcm9tICcuLi9kaXNwbGF5J1xyXG5cclxuZXhwb3J0IGVudW0gUGFnZVN0YXR1cyB7XHJcbiAgTG9hZGluZyA9ICdsb2FkaW5nJyxcclxuICBMb2FkZWQgPSAnbG9hZGVkJyxcclxuICBTYXZpbmcgPSAnc2F2aW5nJyxcclxuICBOb0RhdGEgPSAnbm9EYXRhJ1xyXG59O1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhZ2VTdGF0dXNlcyB7XHJcbiAgcHVibGljIHN0YXRpYyBnZXQgbG9hZGluZygpOiBEaXNwbGF5U3RhdHVzIHtcclxuICAgIHJldHVybiB7IHN0YXR1czogXCJwZW5kaW5nXCIsIG1lc3NhZ2U6IFwiTG9hZGluZ1wiIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldCBsb2FkZWQoKTogRGlzcGxheVN0YXR1cyB7XHJcbiAgICByZXR1cm4geyBzdGF0dXM6IFwiaGFzRGF0YVwiLCBtZXNzYWdlOiBcIlwiIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldCBzYXZpbmcoKTogRGlzcGxheVN0YXR1cyB7XHJcbiAgICByZXR1cm4geyBzdGF0dXM6IFwicGVuZGluZ1wiLCBtZXNzYWdlOiBcIlNhdmluZ1wiIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldCBub0RhdGEoKTogRGlzcGxheVN0YXR1cyB7XHJcbiAgICByZXR1cm4geyBzdGF0dXM6IFwibm9EYXRhXCIsIG1lc3NhZ2U6IFwiTm8gZGF0YSBpcyBhdmFpbGFibGVcIiB9O1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Injector } from '@angular/core';
|
|
2
|
+
import { TelemetryService } from '../../core/telemetry.service';
|
|
3
|
+
import { SpyFactory } from './spy-factory.spec';
|
|
4
|
+
export class HierarchyBaseTestInjectorFactory {
|
|
5
|
+
static getComponentInjector() {
|
|
6
|
+
return Injector.create({
|
|
7
|
+
providers: [
|
|
8
|
+
{
|
|
9
|
+
provide: TelemetryService,
|
|
10
|
+
useFactory: () => SpyFactory.createSpy(TelemetryService),
|
|
11
|
+
deps: []
|
|
12
|
+
}
|
|
13
|
+
]
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2h5LWJhc2UtdGVzdC1pbmplY3Rvci1mYWN0b3J5LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL3Rlc3RpbmcvaGllcmFyY2h5LWJhc2UtdGVzdC1pbmplY3Rvci1mYWN0b3J5LnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsTUFBTSxPQUFPLGdDQUFnQztJQUVwQyxNQUFNLENBQUMsb0JBQW9CO1FBQ2hDLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNyQixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLGdCQUFnQjtvQkFDekIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7b0JBQ3hELElBQUksRUFBRSxFQUFFO2lCQUNUO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUZWxlbWV0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS90ZWxlbWV0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IFNweUZhY3RvcnkgfSBmcm9tICcuL3NweS1mYWN0b3J5LnNwZWMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEhpZXJhcmNoeUJhc2VUZXN0SW5qZWN0b3JGYWN0b3J5IHtcclxuICBcclxuICBwdWJsaWMgc3RhdGljIGdldENvbXBvbmVudEluamVjdG9yKCkge1xyXG4gICAgcmV0dXJuIEluamVjdG9yLmNyZWF0ZSh7XHJcbiAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHByb3ZpZGU6IFRlbGVtZXRyeVNlcnZpY2UsXHJcbiAgICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PiBTcHlGYWN0b3J5LmNyZWF0ZVNweShUZWxlbWV0cnlTZXJ2aWNlKSxcclxuICAgICAgICAgIGRlcHM6IFtdXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -3,6 +3,7 @@ import { ActivatedRoute, Router } from "@angular/router";
|
|
|
3
3
|
import { TranslateService } from "@ngx-translate/core";
|
|
4
4
|
import { ErrorService } from "../../core/error.service";
|
|
5
5
|
import { ScrollService } from "../../core/scroll.service";
|
|
6
|
+
import { TelemetryService } from '../../core/telemetry.service';
|
|
6
7
|
import { DialogService } from "../../display/dialog/dialog.service";
|
|
7
8
|
import { MockActivatedRoute, mockRouterFactory } from "./public-mocks.spec";
|
|
8
9
|
import { SpyFactory } from "./spy-factory.spec";
|
|
@@ -17,6 +18,12 @@ export class PageBaseComponentTestInjectorFactory {
|
|
|
17
18
|
static getComponentInjector() {
|
|
18
19
|
return Injector.create({ providers: [...this.CoreProviders, ...this.ComponentProviders] });
|
|
19
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Get an injector which provides spy and mock objects needed by the @see WizardBaseComponent
|
|
23
|
+
*/
|
|
24
|
+
static getWizardBaseComponentInjector() {
|
|
25
|
+
return Injector.create({ providers: [...this.CoreProviders, ...this.ComponentProviders, ...this.WizardProviders] });
|
|
26
|
+
}
|
|
20
27
|
}
|
|
21
28
|
/**
|
|
22
29
|
* Core services retrieved via the @see Injector in our base classes.
|
|
@@ -61,4 +68,17 @@ PageBaseComponentTestInjectorFactory.ComponentProviders = [
|
|
|
61
68
|
deps: []
|
|
62
69
|
}
|
|
63
70
|
];
|
|
64
|
-
|
|
71
|
+
/**
|
|
72
|
+
* Services and such retrieved by @see WizardBaseComponent via the @see Injector
|
|
73
|
+
* in addition to our core and @see PageBaseComponent services
|
|
74
|
+
*/
|
|
75
|
+
PageBaseComponentTestInjectorFactory.WizardProviders = [
|
|
76
|
+
{
|
|
77
|
+
provide: TelemetryService,
|
|
78
|
+
useFactory: () => {
|
|
79
|
+
return SpyFactory.createSpy(TelemetryService);
|
|
80
|
+
},
|
|
81
|
+
deps: []
|
|
82
|
+
}
|
|
83
|
+
];
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1iYXNlLWNvbXBvbmVudC10ZXN0LWluamVjdG9yLWZhY3Rvcnkuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvdGVzdGluZy9wYWdlLWJhc2UtY29tcG9uZW50LXRlc3QtaW5qZWN0b3ItZmFjdG9yeS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWhFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG9DQUFvQztJQTZEN0M7O09BRUc7SUFDSSxNQUFNLENBQUMsb0JBQW9CO1FBQzlCLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQ7O09BRUc7SUFDSyxNQUFNLENBQUMsOEJBQThCO1FBQ3pDLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEgsQ0FBQzs7QUF2RUQ7O0dBRUc7QUFDWSxrREFBYSxHQUFxQjtJQUM3QztRQUNJLE9BQU8sRUFBRSxNQUFNO1FBQ2YsVUFBVSxFQUFFLGlCQUFpQjtRQUM3QixJQUFJLEVBQUUsRUFBRTtLQUNYO0lBQ0Q7UUFDSSxPQUFPLEVBQUUsYUFBYTtRQUN0QixVQUFVLEVBQUUsR0FBRyxFQUFFO1lBQ2IsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQzlDLENBQUM7UUFDRCxJQUFJLEVBQUUsRUFBRTtLQUNYO0lBQ0Q7UUFDSSxPQUFPLEVBQUUsY0FBYztRQUN2QixVQUFVLEVBQUUsR0FBRyxFQUFFO1lBQ2IsT0FBTyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDcEMsQ0FBQztRQUNELElBQUksRUFBRSxFQUFFO0tBQ1g7Q0FDSixDQUFDO0FBRUY7OztHQUdHO0FBQ1ksdURBQWtCLEdBQXFCO0lBQ2xEO1FBQ0ksT0FBTyxFQUFFLGdCQUFnQjtRQUN6QixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7UUFDaEQsSUFBSSxFQUFFLEVBQUU7S0FDWDtJQUNELEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO0lBQ25DO1FBQ0ksT0FBTyxFQUFFLGFBQWE7UUFDdEIsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUNiLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUM5QyxDQUFDO1FBQ0QsSUFBSSxFQUFFLEVBQUU7S0FDWDtDQUNKLENBQUM7QUFFRjs7O0dBR0c7QUFDWSxvREFBZSxHQUFxQjtJQUMvQztRQUNJLE9BQU8sRUFBRSxnQkFBZ0I7UUFDekIsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUNiLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFDRCxJQUFJLEVBQUUsRUFBRTtLQUNYO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yLCBTdGF0aWNQcm92aWRlciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xyXG5pbXBvcnQgeyBFcnJvclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9lcnJvci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNjcm9sbFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9zY3JvbGwuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBUZWxlbWV0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS90ZWxlbWV0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vZGlzcGxheS9kaWFsb2cvZGlhbG9nLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTW9ja0FjdGl2YXRlZFJvdXRlLCBtb2NrUm91dGVyRmFjdG9yeSB9IGZyb20gXCIuL3B1YmxpYy1tb2Nrcy5zcGVjXCI7XHJcbmltcG9ydCB7IFNweUZhY3RvcnkgfSBmcm9tIFwiLi9zcHktZmFjdG9yeS5zcGVjXCI7XHJcbmltcG9ydCB7IE1vY2tUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIi4vdHJhbnNsYXRpb24tbW9ja3Muc3BlY1wiO1xyXG5cclxuLyoqXHJcbiAqIENvbnRhaW5zIHN0YXRpYyBtZXRob2RzIHRvIGNyZWF0ZSBjb21tb24gaW5qZWN0b3JzIGZvciB1bml0IHRlc3RpbmdcclxuICovXHJcbmV4cG9ydCBjbGFzcyBQYWdlQmFzZUNvbXBvbmVudFRlc3RJbmplY3RvckZhY3Rvcnkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29yZSBzZXJ2aWNlcyByZXRyaWV2ZWQgdmlhIHRoZSBAc2VlIEluamVjdG9yIGluIG91ciBiYXNlIGNsYXNzZXMuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3RhdGljIENvcmVQcm92aWRlcnM6IFN0YXRpY1Byb3ZpZGVyW10gPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBSb3V0ZXIsXHJcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IG1vY2tSb3V0ZXJGYWN0b3J5LFxyXG4gICAgICAgICAgICBkZXBzOiBbXSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogU2Nyb2xsU2VydmljZSxcclxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFNweUZhY3RvcnkuY3JlYXRlU3B5KFNjcm9sbFNlcnZpY2UpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRlcHM6IFtdXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1vY2tBY3RpdmF0ZWRSb3V0ZSgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkZXBzOiBbXSxcclxuICAgICAgICB9XHJcbiAgICBdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VydmljZXMgYW5kIHN1Y2ggcmV0cmlldmVkIGJ5IEBzZWUgUGFnZUJhc2VDb21wb25lbnQgdmlhIHRoZSBAc2VlIEluamVjdG9yXHJcbiAgICAgKiBpbiBhZGRpdGlvbiB0byBvdXIgY29yZSBzZXJ2aWNlc1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN0YXRpYyBDb21wb25lbnRQcm92aWRlcnM6IFN0YXRpY1Byb3ZpZGVyW10gPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PiBuZXcgTW9ja1RyYW5zbGF0ZVNlcnZpY2UoJy1UJyksXHJcbiAgICAgICAgICAgIGRlcHM6IFtdXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IHByb3ZpZGU6IEVycm9yU2VydmljZSwgZGVwczogW10gfSxcclxuICAgICAgICB7IFxyXG4gICAgICAgICAgICBwcm92aWRlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gU3B5RmFjdG9yeS5jcmVhdGVTcHkoRGlhbG9nU2VydmljZSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZGVwczogW11cclxuICAgICAgICB9XHJcbiAgICBdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VydmljZXMgYW5kIHN1Y2ggcmV0cmlldmVkIGJ5IEBzZWUgV2l6YXJkQmFzZUNvbXBvbmVudCB2aWEgdGhlIEBzZWUgSW5qZWN0b3JcclxuICAgICAqIGluIGFkZGl0aW9uIHRvIG91ciBjb3JlIGFuZCBAc2VlIFBhZ2VCYXNlQ29tcG9uZW50IHNlcnZpY2VzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3RhdGljIFdpemFyZFByb3ZpZGVyczogU3RhdGljUHJvdmlkZXJbXSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IFRlbGVtZXRyeVNlcnZpY2UsXHJcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBTcHlGYWN0b3J5LmNyZWF0ZVNweShUZWxlbWV0cnlTZXJ2aWNlKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZGVwczogW11cclxuICAgICAgICB9XHJcbiAgICBdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGFuIGluamVjdG9yIHdoaWNoIHByb3ZpZGVzIHNweSBhbmQgbW9jayBvYmplY3RzIG5lZWRlZCBieSB0aGUgQHNlZSBQYWdlQmFzZUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldENvbXBvbmVudEluamVjdG9yKCk6IEluamVjdG9yIHtcclxuICAgICAgICByZXR1cm4gSW5qZWN0b3IuY3JlYXRlKHsgcHJvdmlkZXJzOiBbLi4udGhpcy5Db3JlUHJvdmlkZXJzLCAuLi50aGlzLkNvbXBvbmVudFByb3ZpZGVyc10gfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYW4gaW5qZWN0b3Igd2hpY2ggcHJvdmlkZXMgc3B5IGFuZCBtb2NrIG9iamVjdHMgbmVlZGVkIGJ5IHRoZSBAc2VlIFdpemFyZEJhc2VDb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgIHB1YmxpYyBzdGF0aWMgZ2V0V2l6YXJkQmFzZUNvbXBvbmVudEluamVjdG9yKCk6IEluamVjdG9yIHtcclxuICAgICAgICByZXR1cm4gSW5qZWN0b3IuY3JlYXRlKHsgcHJvdmlkZXJzOiBbLi4udGhpcy5Db3JlUHJvdmlkZXJzLCAuLi50aGlzLkNvbXBvbmVudFByb3ZpZGVycywgLi4udGhpcy5XaXphcmRQcm92aWRlcnNdIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|