UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

257 lines 27.3 kB
/** * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ import { __decorate, __rest } from "tslib"; import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, EventEmitter, Input, Output, TemplateRef, ViewContainerRef } from '@angular/core'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { InputBoolean } from 'ng-zorro-antd/core/util'; import { NzModalContentDirective } from './modal-content.directive'; import { NzModalFooterDirective } from './modal-footer.directive'; import { NzModalTitleDirective } from './modal-title.directive'; import { NzModalService } from './modal.service'; import { getConfigFromComponent } from './utils'; export class NzModalComponent { constructor(cdr, modal, viewContainerRef) { this.cdr = cdr; this.modal = modal; this.viewContainerRef = viewContainerRef; this.nzVisible = false; this.nzClosable = true; this.nzOkLoading = false; this.nzOkDisabled = false; this.nzCancelDisabled = false; this.nzCancelLoading = false; this.nzKeyboard = true; this.nzNoAnimation = false; this.nzCentered = false; this.nzZIndex = 1000; this.nzWidth = 520; this.nzCloseIcon = 'close'; this.nzOkType = 'primary'; this.nzOkDanger = false; this.nzIconType = 'question-circle'; // Confirm Modal ONLY this.nzModalType = 'default'; this.nzAutofocus = 'auto'; // TODO(@hsuanxyz) Input will not be supported this.nzOnOk = new EventEmitter(); // TODO(@hsuanxyz) Input will not be supported this.nzOnCancel = new EventEmitter(); this.nzAfterOpen = new EventEmitter(); this.nzAfterClose = new EventEmitter(); this.nzVisibleChange = new EventEmitter(); this.modalRef = null; this.destroy$ = new Subject(); } set modalTitle(value) { if (value) { this.setTitleWithTemplate(value); } } set modalFooter(value) { if (value) { this.setFooterWithTemplate(value); } } get afterOpen() { // Observable alias for nzAfterOpen return this.nzAfterOpen.asObservable(); } get afterClose() { // Observable alias for nzAfterClose return this.nzAfterClose.asObservable(); } open() { if (!this.nzVisible) { this.nzVisible = true; this.nzVisibleChange.emit(true); } if (!this.modalRef) { const config = this.getConfig(); this.modalRef = this.modal.create(config); // When the modal is implicitly closed (e.g. closeAll) the nzVisible needs to be set to the correct value and emit. this.modalRef.afterClose .asObservable() .pipe(takeUntil(this.destroy$)) .subscribe(() => { this.close(); }); } } close(result) { if (this.nzVisible) { this.nzVisible = false; this.nzVisibleChange.emit(false); } if (this.modalRef) { this.modalRef.close(result); this.modalRef = null; } } destroy(result) { this.close(result); } triggerOk() { var _a; (_a = this.modalRef) === null || _a === void 0 ? void 0 : _a.triggerOk(); } triggerCancel() { var _a; (_a = this.modalRef) === null || _a === void 0 ? void 0 : _a.triggerCancel(); } getContentComponent() { var _a; return (_a = this.modalRef) === null || _a === void 0 ? void 0 : _a.getContentComponent(); } getElement() { var _a; return (_a = this.modalRef) === null || _a === void 0 ? void 0 : _a.getElement(); } getModalRef() { return this.modalRef; } setTitleWithTemplate(templateRef) { this.nzTitle = templateRef; if (this.modalRef) { // If modalRef already created, set the title in next tick Promise.resolve().then(() => { this.modalRef.updateConfig({ nzTitle: this.nzTitle }); }); } } setFooterWithTemplate(templateRef) { this.nzFooter = templateRef; if (this.modalRef) { // If modalRef already created, set the footer in next tick Promise.resolve().then(() => { this.modalRef.updateConfig({ nzFooter: this.nzFooter }); }); } this.cdr.markForCheck(); } getConfig() { const componentConfig = getConfigFromComponent(this); componentConfig.nzViewContainerRef = this.viewContainerRef; componentConfig.nzContent = this.nzContent || this.contentFromContentChild; return componentConfig; } ngOnChanges(changes) { const { nzVisible } = changes, otherChanges = __rest(changes, ["nzVisible"]); if (Object.keys(otherChanges).length && this.modalRef) { this.modalRef.updateConfig(getConfigFromComponent(this)); } if (nzVisible) { if (this.nzVisible) { this.open(); } else { this.close(); } } } ngOnDestroy() { var _a; (_a = this.modalRef) === null || _a === void 0 ? void 0 : _a._finishDialogClose(); this.destroy$.next(); this.destroy$.complete(); } } NzModalComponent.decorators = [ { type: Component, args: [{ selector: 'nz-modal', exportAs: 'nzModal', template: ``, changeDetection: ChangeDetectionStrategy.OnPush },] } ]; NzModalComponent.ctorParameters = () => [ { type: ChangeDetectorRef }, { type: NzModalService }, { type: ViewContainerRef } ]; NzModalComponent.propDecorators = { nzMask: [{ type: Input }], nzMaskClosable: [{ type: Input }], nzCloseOnNavigation: [{ type: Input }], nzVisible: [{ type: Input }], nzClosable: [{ type: Input }], nzOkLoading: [{ type: Input }], nzOkDisabled: [{ type: Input }], nzCancelDisabled: [{ type: Input }], nzCancelLoading: [{ type: Input }], nzKeyboard: [{ type: Input }], nzNoAnimation: [{ type: Input }], nzCentered: [{ type: Input }], nzContent: [{ type: Input }], nzComponentParams: [{ type: Input }], nzFooter: [{ type: Input }], nzZIndex: [{ type: Input }], nzWidth: [{ type: Input }], nzWrapClassName: [{ type: Input }], nzClassName: [{ type: Input }], nzStyle: [{ type: Input }], nzTitle: [{ type: Input }], nzCloseIcon: [{ type: Input }], nzMaskStyle: [{ type: Input }], nzBodyStyle: [{ type: Input }], nzOkText: [{ type: Input }], nzCancelText: [{ type: Input }], nzOkType: [{ type: Input }], nzOkDanger: [{ type: Input }], nzIconType: [{ type: Input }], nzModalType: [{ type: Input }], nzAutofocus: [{ type: Input }], nzOnOk: [{ type: Input }, { type: Output }], nzOnCancel: [{ type: Input }, { type: Output }], nzAfterOpen: [{ type: Output }], nzAfterClose: [{ type: Output }], nzVisibleChange: [{ type: Output }], modalTitle: [{ type: ContentChild, args: [NzModalTitleDirective, { static: true, read: TemplateRef },] }], contentFromContentChild: [{ type: ContentChild, args: [NzModalContentDirective, { static: true, read: TemplateRef },] }], modalFooter: [{ type: ContentChild, args: [NzModalFooterDirective, { static: true, read: TemplateRef },] }] }; __decorate([ InputBoolean() ], NzModalComponent.prototype, "nzMask", void 0); __decorate([ InputBoolean() ], NzModalComponent.prototype, "nzMaskClosable", void 0); __decorate([ InputBoolean() ], NzModalComponent.prototype, "nzCloseOnNavigation", void 0); __decorate([ InputBoolean() ], NzModalComponent.prototype, "nzVisible", void 0); __decorate([ InputBoolean() ], NzModalComponent.prototype, "nzClosable", void 0); __decorate([ InputBoolean() ], NzModalComponent.prototype, "nzOkLoading", void 0); __decorate([ InputBoolean() ], NzModalComponent.prototype, "nzOkDisabled", void 0); __decorate([ InputBoolean() ], NzModalComponent.prototype, "nzCancelDisabled", void 0); __decorate([ InputBoolean() ], NzModalComponent.prototype, "nzCancelLoading", void 0); __decorate([ InputBoolean() ], NzModalComponent.prototype, "nzKeyboard", void 0); __decorate([ InputBoolean() ], NzModalComponent.prototype, "nzNoAnimation", void 0); __decorate([ InputBoolean() ], NzModalComponent.prototype, "nzCentered", void 0); __decorate([ InputBoolean() ], NzModalComponent.prototype, "nzOkDanger", void 0); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50cy9tb2RhbC9tb2RhbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHOztBQUVILE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sV0FBVyxFQUVYLGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUkzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQVFqRCxNQUFNLE9BQU8sZ0JBQWdCO0lBMkYzQixZQUNVLEdBQXNCLEVBQ3RCLEtBQXFCLEVBQ3JCLGdCQUFrQztRQUZsQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBNUVuQixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFDM0IsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0IsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIscUJBQWdC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RTtxREFBOEI7QUFDN0I7SUFBZixZQUFZLEVBQUU7c0RBQStCO0FBQzlCO0lBQWYsWUFBWSxFQUFFOzBEQUFtQztBQUNsQztJQUFmLFlBQVksRUFBRTt5REFBa0M7QUFDakM7SUFBZixZQUFZLEVBQUU7b0RBQTRCO0FBQzNCO0lBQWYsWUFBWSxFQUFFO3VEQUF1QjtBQUN0QjtJQUFmLFlBQVksRUFBRTtvREFBb0I7QUFnQm5CO0lBQWYsWUFBWSxFQUFFO29EQUE2QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBUeXBlLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBOekJ1dHRvblR5cGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2J1dHRvbic7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4gfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdXRpbCc7XG5cbmltcG9ydCB7IE56TW9kYWxDb250ZW50RGlyZWN0aXZlIH0gZnJvbSAnLi9tb2RhbC1jb250ZW50LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBOek1vZGFsRm9vdGVyRGlyZWN0aXZlIH0gZnJvbSAnLi9tb2RhbC1mb290ZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IE56TW9kYWxMZWdhY3lBUEkgfSBmcm9tICcuL21vZGFsLWxlZ2FjeS1hcGknO1xuaW1wb3J0IHsgTnpNb2RhbFJlZiB9IGZyb20gJy4vbW9kYWwtcmVmJztcbmltcG9ydCB7IE56TW9kYWxUaXRsZURpcmVjdGl2ZSB9IGZyb20gJy4vbW9kYWwtdGl0bGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IE1vZGFsQnV0dG9uT3B0aW9ucywgTW9kYWxPcHRpb25zLCBNb2RhbFR5cGVzLCBPbkNsaWNrQ2FsbGJhY2ssIFN0eWxlT2JqZWN0TGlrZSB9IGZyb20gJy4vbW9kYWwtdHlwZXMnO1xuaW1wb3J0IHsgTnpNb2RhbFNlcnZpY2UgfSBmcm9tICcuL21vZGFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0Q29uZmlnRnJvbUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduei1tb2RhbCcsXG4gIGV4cG9ydEFzOiAnbnpNb2RhbCcsXG4gIHRlbXBsYXRlOiBgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTnpNb2RhbENvbXBvbmVudDxUID0gTnpTYWZlQW55LCBSID0gTnpTYWZlQW55PiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgTnpNb2RhbExlZ2FjeUFQSTxULCBSPiwgT25EZXN0cm95IHtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX256TWFzazogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbnpNYXNrQ2xvc2FibGU6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX256Q2xvc2VPbk5hdmlnYXRpb246IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX256VmlzaWJsZTogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbnpDbG9zYWJsZTogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbnpPa0xvYWRpbmc6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX256T2tEaXNhYmxlZDogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbnpDYW5jZWxEaXNhYmxlZDogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbnpDYW5jZWxMb2FkaW5nOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9uektleWJvYXJkOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9uek5vQW5pbWF0aW9uOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9uek9rRGFuZ2VyOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9uekNlbnRlcmVkOiBCb29sZWFuSW5wdXQ7XG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIG56TWFzaz86IGJvb2xlYW47XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBuek1hc2tDbG9zYWJsZT86IGJvb2xlYW47XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBuekNsb3NlT25OYXZpZ2F0aW9uPzogYm9vbGVhbjtcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIG56VmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbnpDbG9zYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBuek9rTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbnpPa0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBuekNhbmNlbERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBuekNhbmNlbExvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIG56S2V5Ym9hcmQ6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbnpOb0FuaW1hdGlvbiA9IGZhbHNlO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbnpDZW50ZXJlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBuekNvbnRlbnQ/OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx7fT4gfCBUeXBlPFQ+O1xuICBASW5wdXQoKSBuekNvbXBvbmVudFBhcmFtcz86IFQ7XG4gIEBJbnB1dCgpIG56Rm9vdGVyPzogc3RyaW5nIHwgVGVtcGxhdGVSZWY8e30+IHwgQXJyYXk8TW9kYWxCdXR0b25PcHRpb25zPFQ+PiB8IG51bGw7XG4gIEBJbnB1dCgpIG56WkluZGV4OiBudW1iZXIgPSAxMDAwO1xuICBASW5wdXQoKSBueldpZHRoOiBudW1iZXIgfCBzdHJpbmcgPSA1MjA7XG4gIEBJbnB1dCgpIG56V3JhcENsYXNzTmFtZT86IHN0cmluZztcbiAgQElucHV0KCkgbnpDbGFzc05hbWU/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG56U3R5bGU/OiBvYmplY3Q7XG4gIEBJbnB1dCgpIG56VGl0bGU/OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx7fT47XG4gIEBJbnB1dCgpIG56Q2xvc2VJY29uOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx2b2lkPiA9ICdjbG9zZSc7XG4gIEBJbnB1dCgpIG56TWFza1N0eWxlPzogU3R5bGVPYmplY3RMaWtlO1xuICBASW5wdXQoKSBuekJvZHlTdHlsZT86IFN0eWxlT2JqZWN0TGlrZTtcbiAgQElucHV0KCkgbnpPa1RleHQ/OiBzdHJpbmcgfCBudWxsO1xuICBASW5wdXQoKSBuekNhbmNlbFRleHQ/OiBzdHJpbmcgfCBudWxsO1xuICBASW5wdXQoKSBuek9rVHlwZTogTnpCdXR0b25UeXBlID0gJ3ByaW1hcnknO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbnpPa0RhbmdlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBuekljb25UeXBlOiBzdHJpbmcgPSAncXVlc3Rpb24tY2lyY2xlJzsgLy8gQ29uZmlybSBNb2RhbCBPTkxZXG4gIEBJbnB1dCgpIG56TW9kYWxUeXBlOiBNb2RhbFR5cGVzID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBuekF1dG9mb2N1czogJ29rJyB8ICdjYW5jZWwnIHwgJ2F1dG8nIHwgbnVsbCA9ICdhdXRvJztcblxuICAvLyBUT0RPKEBoc3Vhbnh5eikgSW5wdXQgd2lsbCBub3QgYmUgc3VwcG9ydGVkXG4gIEBJbnB1dCgpXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBuek9uT2s6IEV2ZW50RW1pdHRlcjxUPiB8IE9uQ2xpY2tDYWxsYmFjazxUPiB8IE56U2FmZUFueSA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcblxuICAvLyBUT0RPKEBoc3Vhbnh5eikgSW5wdXQgd2lsbCBub3QgYmUgc3VwcG9ydGVkXG4gIEBJbnB1dCgpXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBuek9uQ2FuY2VsOiBFdmVudEVtaXR0ZXI8VD4gfCBPbkNsaWNrQ2FsbGJhY2s8VD4gfCBOelNhZmVBbnkgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IG56QWZ0ZXJPcGVuID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgbnpBZnRlckNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxSPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgbnpWaXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBDb250ZW50Q2hpbGQoTnpNb2RhbFRpdGxlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgc2V0IG1vZGFsVGl0bGUodmFsdWU6IFRlbXBsYXRlUmVmPE56U2FmZUFueT4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuc2V0VGl0bGVXaXRoVGVtcGxhdGUodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIEBDb250ZW50Q2hpbGQoTnpNb2RhbENvbnRlbnREaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBjb250ZW50RnJvbUNvbnRlbnRDaGlsZCE6IFRlbXBsYXRlUmVmPE56U2FmZUFueT47XG5cbiAgQENvbnRlbnRDaGlsZChOek1vZGFsRm9vdGVyRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgc2V0IG1vZGFsRm9vdGVyKHZhbHVlOiBUZW1wbGF0ZVJlZjxOelNhZmVBbnk+KSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnNldEZvb3RlcldpdGhUZW1wbGF0ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtb2RhbFJlZjogTnpNb2RhbFJlZiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBnZXQgYWZ0ZXJPcGVuKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIC8vIE9ic2VydmFibGUgYWxpYXMgZm9yIG56QWZ0ZXJPcGVuXG4gICAgcmV0dXJuIHRoaXMubnpBZnRlck9wZW4uYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgYWZ0ZXJDbG9zZSgpOiBPYnNlcnZhYmxlPFI+IHtcbiAgICAvLyBPYnNlcnZhYmxlIGFsaWFzIGZvciBuekFmdGVyQ2xvc2VcbiAgICByZXR1cm4gdGhpcy5uekFmdGVyQ2xvc2UuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBtb2RhbDogTnpNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmXG4gICkge31cblxuICBvcGVuKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5uelZpc2libGUpIHtcbiAgICAgIHRoaXMubnpWaXNpYmxlID0gdHJ1ZTtcbiAgICAgIHRoaXMubnpWaXNpYmxlQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm1vZGFsUmVmKSB7XG4gICAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldENvbmZpZygpO1xuICAgICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMubW9kYWwuY3JlYXRlKGNvbmZpZyk7XG5cbiAgICAgIC8vIFdoZW4gdGhlIG1vZGFsIGlzIGltcGxpY2l0bHkgY2xvc2VkIChlLmcuIGNsb3NlQWxsKSB0aGUgbnpWaXNpYmxlIG5lZWRzIHRvIGJlIHNldCB0byB0aGUgY29ycmVjdCB2YWx1ZSBhbmQgZW1pdC5cbiAgICAgIHRoaXMubW9kYWxSZWYuYWZ0ZXJDbG9zZVxuICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlKHJlc3VsdD86IFIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5uelZpc2libGUpIHtcbiAgICAgIHRoaXMubnpWaXNpYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLm56VmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tb2RhbFJlZikge1xuICAgICAgdGhpcy5tb2RhbFJlZi5jbG9zZShyZXN1bHQpO1xuICAgICAgdGhpcy5tb2RhbFJlZiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgZGVzdHJveShyZXN1bHQ/OiBSKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZShyZXN1bHQpO1xuICB9XG5cbiAgdHJpZ2dlck9rKCk6IHZvaWQge1xuICAgIHRoaXMubW9kYWxSZWY/LnRyaWdnZXJPaygpO1xuICB9XG5cbiAgdHJpZ2dlckNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsUmVmPy50cmlnZ2VyQ2FuY2VsKCk7XG4gIH1cblxuICBnZXRDb250ZW50Q29tcG9uZW50KCk6IFQgfCB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5tb2RhbFJlZj8uZ2V0Q29udGVudENvbXBvbmVudCgpO1xuICB9XG5cbiAgZ2V0RWxlbWVudCgpOiBIVE1MRWxlbWVudCB8IHZvaWQge1xuICAgIHJldHVybiB0aGlzLm1vZGFsUmVmPy5nZXRFbGVtZW50KCk7XG4gIH1cblxuICBnZXRNb2RhbFJlZigpOiBOek1vZGFsUmVmIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kYWxSZWY7XG4gIH1cblxuICBwcml2YXRlIHNldFRpdGxlV2l0aFRlbXBsYXRlKHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx7fT4pOiB2b2lkIHtcbiAgICB0aGlzLm56VGl0bGUgPSB0ZW1wbGF0ZVJlZjtcbiAgICBpZiAodGhpcy5tb2RhbFJlZikge1xuICAgICAgLy8gSWYgbW9kYWxSZWYgYWxyZWFkeSBjcmVhdGVkLCBzZXQgdGhlIHRpdGxlIGluIG5leHQgdGlja1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMubW9kYWxSZWYhLnVwZGF0ZUNvbmZpZyh7XG4gICAgICAgICAgbnpUaXRsZTogdGhpcy5uelRpdGxlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb290ZXJXaXRoVGVtcGxhdGUodGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPHt9Pik6IHZvaWQge1xuICAgIHRoaXMubnpGb290ZXIgPSB0ZW1wbGF0ZVJlZjtcbiAgICBpZiAodGhpcy5tb2RhbFJlZikge1xuICAgICAgLy8gSWYgbW9kYWxSZWYgYWxyZWFkeSBjcmVhdGVkLCBzZXQgdGhlIGZvb3RlciBpbiBuZXh0IHRpY2tcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLm1vZGFsUmVmIS51cGRhdGVDb25maWcoe1xuICAgICAgICAgIG56Rm9vdGVyOiB0aGlzLm56Rm9vdGVyXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbmZpZygpOiBNb2RhbE9wdGlvbnMge1xuICAgIGNvbnN0IGNvbXBvbmVudENvbmZpZyA9IGdldENvbmZpZ0Zyb21Db21wb25lbnQodGhpcyk7XG4gICAgY29tcG9uZW50Q29uZmlnLm56Vmlld0NvbnRhaW5lclJlZiA9IHRoaXMudmlld0NvbnRhaW5lclJlZjtcbiAgICBjb21wb25lbnRDb25maWcubnpDb250ZW50ID0gdGhpcy5uekNvbnRlbnQgfHwgdGhpcy5jb250ZW50RnJvbUNvbnRlbnRDaGlsZDtcbiAgICByZXR1cm4gY29tcG9uZW50Q29uZmlnO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IHsgbnpWaXNpYmxlLCAuLi5vdGhlckNoYW5nZXMgfSA9IGNoYW5nZXM7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMob3RoZXJDaGFuZ2VzKS5sZW5ndGggJiYgdGhpcy5tb2RhbFJlZikge1xuICAgICAgdGhpcy5tb2RhbFJlZi51cGRhdGVDb25maWcoZ2V0Q29uZmlnRnJvbUNvbXBvbmVudCh0aGlzKSk7XG4gICAgfVxuXG4gICAgaWYgKG56VmlzaWJsZSkge1xuICAgICAgaWYgKHRoaXMubnpWaXNpYmxlKSB7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubW9kYWxSZWY/Ll9maW5pc2hEaWFsb2dDbG9zZSgpO1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIl19