@duoduo-oba/ng-devui
Version:
DevUI components based on Angular
299 lines • 26.3 kB
JavaScript
/**
* @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=