UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

299 lines 26.3 kB
/** * @fileoverview added by tsickle * Generated from: modal.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { animate, state, style, transition, trigger } from '@angular/animations'; import { Component, ElementRef, Input, Renderer2, ViewChild } from '@angular/core'; import { DocumentRef } from '@duoduo-oba/ng-devui/window-ref'; import { isUndefined } from 'lodash-es'; import { fromEvent, Subscription } from 'rxjs'; import { ModalContainerDirective } from './modal.directive'; var ModalComponent = /** @class */ (function () { function ModalComponent(documentRef, renderer) { var _this = this; this.documentRef = documentRef; this.renderer = renderer; this.placement = 'center'; this.animateState = this.showAnimate ? 'void' : ''; this.ignoreBackDropClick = false; this.pressEscToClose = new Subscription(); this.onModalClick = (/** * @param {?} $event * @return {?} */ function ($event) { // 一定要document.contains($event.target),因为$event.target可能已经不在document里了,这个时候就不能进hide了,使用document.body兼容IE if (_this.backdropCloseable && !_this.ignoreBackDropClick && (!_this.dialogElement.nativeElement.contains($event.target) && document.body.contains($event.target))) { _this.hide(); } _this.ignoreBackDropClick = false; }); this.modalMouseDown = (/** * @param {?} $event * @return {?} */ function ($event) { _this.mouseDwonEl = $event.target; }); this.modalMouseUp = (/** * @param {?} $event * @return {?} */ function ($event) { if ($event.target !== _this.mouseDwonEl) { _this.ignoreBackDropClick = true; } }); this.backdropCloseable = isUndefined(this.backdropCloseable) ? true : this.backdropCloseable; } /** * @return {?} */ ModalComponent.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; this.pressEscToClose.add(fromEvent(window, 'keydown').subscribe((/** * @param {?} event * @return {?} */ function (event) { if (event['keyCode'] === 27) { _this.hide(); } }))); /** @type {?} */ var handle = document.getElementById('d-modal-header'); if (handle) { this.draggableHandleEl = handle; } }; /** * @param {?} event * @return {?} */ ModalComponent.prototype.onAnimationDone = /** * @param {?} event * @return {?} */ function (event) { if (event.toState === 'void') { this.onHidden(); } }; // Will overwrite this method in modal service // Will overwrite this method in modal service /** * @return {?} */ ModalComponent.prototype.onHidden = // Will overwrite this method in modal service /** * @return {?} */ function () { }; /** * @return {?} */ ModalComponent.prototype.canHideModel = /** * @return {?} */ function () { /** @type {?} */ var hiddenResult = Promise.resolve(true); if (this.beforeHidden) { /** @type {?} */ var result = this.beforeHidden(); if (typeof result !== 'undefined') { if (result.then) { hiddenResult = result; } else if (result.subscribe) { hiddenResult = ((/** @type {?} */ (result))).toPromise(); } else { hiddenResult = Promise.resolve(result); } } } return hiddenResult; }; /** * @return {?} */ ModalComponent.prototype.hide = /** * @return {?} */ function () { var _this = this; this.canHideModel().then((/** * @param {?} canHide * @return {?} */ function (canHide) { if (!canHide) { return; } if (!_this.bodyScrollable) { _this.renderer.removeClass(_this.documentRef.body, 'modal-open'); } if (!_this.showAnimate) { _this.onHidden(); return; } _this.animateState = 'void'; })); }; /** * @return {?} */ ModalComponent.prototype.show = /** * @return {?} */ function () { if (!this.bodyScrollable) { this.renderer.addClass(this.documentRef.body, 'modal-open'); } this.dialogElement.nativeElement.focus(); if (this.showAnimate) { this.animateState = 'in'; } }; /** * @return {?} */ ModalComponent.prototype.resolveTransformTranslate = /** * @return {?} */ function () { /** @type {?} */ var autoOffsetYByPlacement; switch (this.placement) { case 'top': autoOffsetYByPlacement = '40px'; break; case 'bottom': autoOffsetYByPlacement = '-40px'; break; case 'center': default: autoOffsetYByPlacement = '0'; break; } /** @type {?} */ var offsetX = !!this.offsetX ? this.offsetX : '0'; /** @type {?} */ var offsetY = !!this.offsetY ? this.offsetY : autoOffsetYByPlacement; return 'translate(' + offsetX + ',' + offsetY + ')'; }; /** * @return {?} */ ModalComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this.pressEscToClose.unsubscribe(); }; ModalComponent.decorators = [ { type: Component, args: [{ selector: 'd-modal', template: "<div class=\"modal-backdrop\" [@backdropAnimation]=\"animateState\"></div>\r\n<div class=\"modal in\" [attr.id]=\"id\" (mousedown)=\"modalMouseDown($event)\" (mouseup)=\"modalMouseUp($event)\" (click)=\"onModalClick($event)\">\r\n <div\r\n class=\"modal-dialog\"\r\n [ngClass]=\"{\r\n 'place-at-top': placement === 'top',\r\n 'place-at-bottom': placement === 'bottom',\r\n 'place-at-center': placement === 'center'\r\n }\"\r\n [ngStyle]=\"{ width: width }\"\r\n [@modalAnimation]=\"animateState\"\r\n (@modalAnimation.done)=\"onAnimationDone($event)\"\r\n tabindex=\"1\"\r\n #dialog\r\n >\r\n <div class=\"modal-content\" [dMovable]=\"draggable\" [handle]=\"draggableHandleEl\" [ngStyle]=\"{ transform: resolveTransformTranslate() }\">\r\n <ng-template dModalContainerHost></ng-template>\r\n </div>\r\n </div>\r\n</div>\r\n", animations: [ trigger('backdropAnimation', [ state('void', style({ opacity: 0 })), state('in', style({ opacity: 0.2 })), transition('void => in', animate('400ms cubic-bezier(0.23, 1, 0.32, 1)')), transition('in => void', animate('300ms cubic-bezier(0.755, 0.05, 0.855, 0.06)')), ]), trigger('modalAnimation', [ state('void', style({ opacity: 0, transform: 'scale(0.9)' })), state('in', style({ opacity: 1, transform: 'scale(1)' })), transition('void => in', animate('400ms cubic-bezier(0.23, 1, 0.32, 1)')), transition('in => void', animate('300ms cubic-bezier(0.755, 0.05, 0.855, 0.06)')), ]) ], styles: [".modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;outline:0;overflow-y:auto;display:block;display:-webkit-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:0 auto}.modal-dialog.place-at-center{margin:auto}.modal-dialog.place-at-top{margin-bottom:auto}.modal-dialog.place-at-bottom{margin-top:auto}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;opacity:.2;background-color:#000}:host ::ng-deep .modal-content{position:relative;border-radius:2px;border:none;background-color:#fff;background-clip:padding-box;outline:0;box-shadow:5px 5px 20px 0 rgba(41,48,64,.2)}:host ::ng-deep .modal-content .modal-body{padding:24px 24px 16px}:host ::ng-deep .modal-content .modal-footer{border-top:none;padding:7px;text-align:center}:host ::ng-deep .modal-content .modal-footer button{margin:5px;padding:5px 20px;width:auto}:host ::ng-deep .modal-content .modal-footer button.pull-left{padding-left:5px;padding-right:5px;position:relative;left:-5px}:host ::ng-deep .modal-content .modal-footer button+button{margin-bottom:16px}:host ::ng-deep .d-btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;white-space:nowrap;font-size:14px;line-height:1.42857143;border-radius:2px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:focus{outline:0}"] }] } ]; /** @nocollapse */ ModalComponent.ctorParameters = function () { return [ { type: DocumentRef }, { type: Renderer2 } ]; }; ModalComponent.propDecorators = { id: [{ type: Input }], showAnimate: [{ type: Input }], width: [{ type: Input }], backdropCloseable: [{ type: Input }], beforeHidden: [{ type: Input }], draggable: [{ type: Input }], placement: [{ type: Input }], offsetX: [{ type: Input }], offsetY: [{ type: Input }], bodyScrollable: [{ type: Input }], modalContainerHost: [{ type: ViewChild, args: [ModalContainerDirective, { static: true },] }], dialogElement: [{ type: ViewChild, args: ['dialog', { static: true },] }] }; return ModalComponent; }()); export { ModalComponent }; if (false) { /** @type {?} */ ModalComponent.prototype.id; /** @type {?} */ ModalComponent.prototype.showAnimate; /** @type {?} */ ModalComponent.prototype.width; /** @type {?} */ ModalComponent.prototype.backdropCloseable; /** @type {?} */ ModalComponent.prototype.beforeHidden; /** @type {?} */ ModalComponent.prototype.draggable; /** @type {?} */ ModalComponent.prototype.placement; /** @type {?} */ ModalComponent.prototype.offsetX; /** @type {?} */ ModalComponent.prototype.offsetY; /** @type {?} */ ModalComponent.prototype.bodyScrollable; /** @type {?} */ ModalComponent.prototype.modalContainerHost; /** @type {?} */ ModalComponent.prototype.dialogElement; /** @type {?} */ ModalComponent.prototype.animateState; /** @type {?} */ ModalComponent.prototype.draggableHandleEl; /** @type {?} */ ModalComponent.prototype.mouseDwonEl; /** @type {?} */ ModalComponent.prototype.ignoreBackDropClick; /** @type {?} */ ModalComponent.prototype.pressEscToClose; /** @type {?} */ ModalComponent.prototype.onModalClick; /** @type {?} */ ModalComponent.prototype.modalMouseDown; /** @type {?} */ ModalComponent.prototype.modalMouseUp; /** * @type {?} * @private */ ModalComponent.prototype.documentRef; /** * @type {?} * @private */ ModalComponent.prototype.renderer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZGV2dWkvbW9kYWwvIiwic291cmNlcyI6WyJtb2RhbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN4QyxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU1RDtJQXdDRSx3QkFBb0IsV0FBd0IsRUFBVSxRQUFtQjtRQUF6RSxpQkFJQztRQUptQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVc7UUFiaEUsY0FBUyxHQUFnQyxRQUFRLENBQUM7UUFPM0QsaUJBQVksR0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUl0RCx3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDNUIsb0JBQWUsR0FBaUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQWlEbkQsaUJBQVk7Ozs7UUFBRyxVQUFDLE1BQU07WUFDcEIsd0dBQXdHO1lBQ3hHLElBQUksS0FBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsS0FBSSxDQUFDLG1CQUFtQjtnQkFDckQsQ0FBQyxDQUFDLEtBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFFB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SztpQ0FDTCxLQUFLO3FDQUVMLFNBQVMsU0FBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0NBQ25ELFNBQVMsU0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOztJQTJIdkMscUJBQUM7Q0FBQSxBQTVKRCxJQTRKQztTQXpJWSxjQUFjOzs7SUFFekIsNEJBQW9COztJQUNwQixxQ0FBOEI7O0lBQzlCLCtCQUF1Qjs7SUFDdkIsMkNBQW9DOztJQUNwQyxzQ0FBOEU7O0lBQzlFLG1DQUE0Qjs7SUFDNUIsbUNBQTJEOztJQUMzRCxpQ0FBeUI7O0lBQ3pCLGlDQUF5Qjs7SUFDekIsd0NBQWlDOztJQUVqQyw0Q0FBa0c7O0lBQ2xHLHVDQUFpRTs7SUFDakUsc0NBQXNEOztJQUN0RCwyQ0FBK0I7O0lBRS9CLHFDQUF3Qjs7SUFDeEIsNkNBQTRCOztJQUM1Qix5Q0FBbUQ7O0lBaURuRCxzQ0FPQzs7SUFFRCx3Q0FFQzs7SUFFRCxzQ0FJQzs7Ozs7SUFqRVcscUNBQWdDOzs7OztJQUFFLGtDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRG9jdW1lbnRSZWYgfSBmcm9tICduZy1kZXZ1aS93aW5kb3ctcmVmJztcclxuaW1wb3J0IHsgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gtZXMnO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBNb2RhbENvbnRhaW5lckRpcmVjdGl2ZSB9IGZyb20gJy4vbW9kYWwuZGlyZWN0aXZlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZC1tb2RhbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21vZGFsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tb2RhbC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ2JhY2tkcm9wQW5pbWF0aW9uJywgW1xyXG4gICAgICBzdGF0ZSgndm9pZCcsIHN0eWxlKHsgb3BhY2l0eTogMCB9KSksXHJcbiAgICAgIHN0YXRlKCdpbicsIHN0eWxlKHsgb3BhY2l0eTogMC4yIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiBpbicsIGFuaW1hdGUoJzQwMG1zICBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSknKSksXHJcbiAgICAgIHRyYW5zaXRpb24oJ2luID0+IHZvaWQnLCBhbmltYXRlKCczMDBtcyBjdWJpYy1iZXppZXIoMC43NTUsIDAuMDUsIDAuODU1LCAwLjA2KScpKSxcclxuICAgIF0pLFxyXG4gICAgdHJpZ2dlcignbW9kYWxBbmltYXRpb24nLCBbXHJcbiAgICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdzY2FsZSgwLjkpJyB9KSksXHJcbiAgICAgIHN0YXRlKCdpbicsIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAnc2NhbGUoMSknIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiBpbicsIGFuaW1hdGUoJzQwMG1zICBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSknKSksXHJcbiAgICAgIHRyYW5zaXRpb24oJ2luID0+IHZvaWQnLCBhbmltYXRlKCczMDBtcyBjdWJpYy1iZXppZXIoMC43NTUsIDAuMDUsIDAuODU1LCAwLjA2KScpKSxcclxuICAgIF0pXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2hvd0FuaW1hdGU6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgd2lkdGg6IHN0cmluZztcclxuICBASW5wdXQoKSBiYWNrZHJvcENsb3NlYWJsZTogYm9vbGVhbjtcclxuICBASW5wdXQoKSBiZWZvcmVIaWRkZW46ICgpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+IHwgT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICBASW5wdXQoKSBkcmFnZ2FibGU6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgcGxhY2VtZW50OiAnY2VudGVyJyB8ICd0b3AnIHwgJ2JvdHRvbScgPSAnY2VudGVyJztcclxuICBASW5wdXQoKSBvZmZzZXRYOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgb2Zmc2V0WTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGJvZHlTY3JvbGxhYmxlOiBib29sZWFuOyAvLyDmiZPlvIDlvLnnqpdib2R55piv5ZCm5Y+v5rua5YqoXHJcblxyXG4gIEBWaWV3Q2hpbGQoTW9kYWxDb250YWluZXJEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIG1vZGFsQ29udGFpbmVySG9zdDogTW9kYWxDb250YWluZXJEaXJlY3RpdmU7XHJcbiAgQFZpZXdDaGlsZCgnZGlhbG9nJywgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nRWxlbWVudDogRWxlbWVudFJlZjtcclxuICBhbmltYXRlU3RhdGU6IHN0cmluZyA9IHRoaXMuc2hvd0FuaW1hdGUgPyAndm9pZCcgOiAnJztcclxuICBkcmFnZ2FibGVIYW5kbGVFbDogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIG1vdXNlRHdvbkVsOiBFbGVtZW50UmVmO1xyXG4gIGlnbm9yZUJhY2tEcm9wQ2xpY2sgPSBmYWxzZTtcclxuICBwcmVzc0VzY1RvQ2xvc2U6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRvY3VtZW50UmVmOiBEb2N1bWVudFJlZiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7XHJcbiAgICB0aGlzLmJhY2tkcm9wQ2xvc2VhYmxlID0gaXNVbmRlZmluZWQodGhpcy5iYWNrZHJvcENsb3NlYWJsZSlcclxuICAgICAgPyB0cnVlXHJcbiAgICAgIDogdGhpcy5iYWNrZHJvcENsb3NlYWJsZTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5wcmVzc0VzY1RvQ2xvc2UuYWRkKGZyb21FdmVudCh3aW5kb3csICdrZXlkb3duJykuc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG4gICAgICBpZiAoZXZlbnRbJ2tleUNvZGUnXSA9PT0gMjcpIHtcclxuICAgICAgICB0aGlzLmhpZGUoKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gICAgY29uc3QgaGFuZGxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2QtbW9kYWwtaGVhZGVyJyk7XHJcbiAgICBpZiAoaGFuZGxlKSB7XHJcbiAgICAgIHRoaXMuZHJhZ2dhYmxlSGFuZGxlRWwgPSBoYW5kbGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkFuaW1hdGlvbkRvbmUoZXZlbnQpIHtcclxuICAgIGlmIChldmVudC50b1N0YXRlID09PSAndm9pZCcpIHtcclxuICAgICAgdGhpcy5vbkhpZGRlbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gV2lsbCBvdmVyd3JpdGUgdGhpcyBtZXRob2QgaW4gbW9kYWwgc2VydmljZVxyXG4gIG9uSGlkZGVuKCkge1xyXG4gIH1cclxuXHJcblxyXG4gIGNhbkhpZGVNb2RlbCgpIHtcclxuICAgIGxldCBoaWRkZW5SZXN1bHQgPSBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcblxyXG4gICAgaWYgKHRoaXMuYmVmb3JlSGlkZGVuKSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0gdGhpcy5iZWZvcmVIaWRkZW4oKTtcclxuICAgICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC50aGVuKSB7XHJcbiAgICAgICAgICBoaWRkZW5SZXN1bHQgPSByZXN1bHQ7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuc3Vic2NyaWJlKSB7XHJcbiAgICAgICAgICBoaWRkZW5SZXN1bHQgPSAocmVzdWx0IGFzIE9ic2VydmFibGU8Ym9vbGVhbj4pLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBoaWRkZW5SZXN1bHQgPSBQcm9taXNlLnJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGlkZGVuUmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgb25Nb2RhbENsaWNrID0gKCRldmVudCkgPT4ge1xyXG4gICAgLy8g5LiA5a6a6KaBZG9jdW1lbnQuY29udGFpbnMoJGV2ZW50LnRhcmdldCnvvIzlm6DkuLokZXZlbnQudGFyZ2V05Y+v6IO95bey57uP5LiN5ZyoZG9jdW1lbnTph4zkuobvvIzov5nkuKrml7blgJnlsLHkuI3og73ov5toaWRl5LqGLOS9v+eUqGRvY3VtZW50LmJvZHnlhbzlrrlJRVxyXG4gICAgaWYgKHRoaXMuYmFja2Ryb3BDbG9zZWFibGUgJiYgIXRoaXMuaWdub3JlQmFja0Ryb3BDbGljayAmJlxyXG4gICAgICAoIXRoaXMuZGlhbG9nRWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKCRldmVudC50YXJnZXQpICYmIGRvY3VtZW50LmJvZHkuY29udGFpbnMoJGV2ZW50LnRhcmdldCkpKSB7XHJcbiAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pZ25vcmVCYWNrRHJvcENsaWNrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb2RhbE1vdXNlRG93biA9ICgkZXZlbnQpID0+IHtcclxuICAgIHRoaXMubW91c2VEd29uRWwgPSAkZXZlbnQudGFyZ2V0O1xyXG4gIH1cclxuXHJcbiAgbW9kYWxNb3VzZVVwID0gKCRldmVudCkgPT4ge1xyXG4gICAgaWYgKCRldmVudC50YXJnZXQgIT09IHRoaXMubW91c2VEd29uRWwpIHtcclxuICAgICAgdGhpcy5pZ25vcmVCYWNrRHJvcENsaWNrID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhpZGUoKSB7XHJcbiAgICB0aGlzLmNhbkhpZGVNb2RlbCgpLnRoZW4oKGNhbkhpZGUpID0+IHtcclxuICAgICAgaWYgKCFjYW5IaWRlKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5ib2R5U2Nyb2xsYWJsZSkge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5kb2N1bWVudFJlZi5ib2R5LCAnbW9kYWwtb3BlbicpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXRoaXMuc2hvd0FuaW1hdGUpIHtcclxuICAgICAgICB0aGlzLm9uSGlkZGVuKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYW5pbWF0ZVN0YXRlID0gJ3ZvaWQnO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzaG93KCkge1xyXG4gICAgaWYgKCF0aGlzLmJvZHlTY3JvbGxhYmxlKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5kb2N1bWVudFJlZi5ib2R5LCAnbW9kYWwtb3BlbicpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlhbG9nRWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICBpZiAodGhpcy5zaG93QW5pbWF0ZSkge1xyXG4gICAgICB0aGlzLmFuaW1hdGVTdGF0ZSA9ICdpbic7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNvbHZlVHJhbnNmb3JtVHJhbnNsYXRlKCkge1xyXG4gICAgbGV0IGF1dG9PZmZzZXRZQnlQbGFjZW1lbnQ7XHJcbiAgICBzd2l0Y2ggKHRoaXMucGxhY2VtZW50KSB7XHJcbiAgICAgIGNhc2UgJ3RvcCc6XHJcbiAgICAgICAgYXV0b09mZnNldFlCeVBsYWNlbWVudCA9ICc0MHB4JztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnYm90dG9tJzpcclxuICAgICAgICBhdXRvT2Zmc2V0WUJ5UGxhY2VtZW50ID0gJy00MHB4JztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2VudGVyJzpcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBhdXRvT2Zmc2V0WUJ5UGxhY2VtZW50ID0gJzAnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2Zmc2V0WCA9ICEhdGhpcy5vZmZzZXRYID8gdGhpcy5vZmZzZXRYIDogJzAnO1xyXG4gICAgY29uc3Qgb2Zmc2V0WSA9ICEhdGhpcy5vZmZzZXRZID8gdGhpcy5vZmZzZXRZIDogYXV0b09mZnNldFlCeVBsYWNlbWVudDtcclxuICAgIHJldHVybiAndHJhbnNsYXRlKCcgKyBvZmZzZXRYICsgJywnICsgb2Zmc2V0WSArICcpJztcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnByZXNzRXNjVG9DbG9zZS51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=