UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

270 lines 25.1 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'; export class ModalComponent { /** * @param {?} documentRef * @param {?} renderer */ constructor(documentRef, renderer) { 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 {?} */ ($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 {?} */ ($event) => { this.mouseDwonEl = $event.target; }); this.modalMouseUp = (/** * @param {?} $event * @return {?} */ ($event) => { if ($event.target !== this.mouseDwonEl) { this.ignoreBackDropClick = true; } }); this.backdropCloseable = isUndefined(this.backdropCloseable) ? true : this.backdropCloseable; } /** * @return {?} */ ngOnInit() { this.pressEscToClose.add(fromEvent(window, 'keydown').subscribe((/** * @param {?} event * @return {?} */ (event) => { if (event['keyCode'] === 27) { this.hide(); } }))); /** @type {?} */ const handle = document.getElementById('d-modal-header'); if (handle) { this.draggableHandleEl = handle; } } /** * @param {?} event * @return {?} */ onAnimationDone(event) { if (event.toState === 'void') { this.onHidden(); } } // Will overwrite this method in modal service /** * @return {?} */ onHidden() { } /** * @return {?} */ canHideModel() { /** @type {?} */ let hiddenResult = Promise.resolve(true); if (this.beforeHidden) { /** @type {?} */ const 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 {?} */ hide() { this.canHideModel().then((/** * @param {?} canHide * @return {?} */ (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 {?} */ show() { if (!this.bodyScrollable) { this.renderer.addClass(this.documentRef.body, 'modal-open'); } this.dialogElement.nativeElement.focus(); if (this.showAnimate) { this.animateState = 'in'; } } /** * @return {?} */ resolveTransformTranslate() { /** @type {?} */ let autoOffsetYByPlacement; switch (this.placement) { case 'top': autoOffsetYByPlacement = '40px'; break; case 'bottom': autoOffsetYByPlacement = '-40px'; break; case 'center': default: autoOffsetYByPlacement = '0'; break; } /** @type {?} */ const offsetX = !!this.offsetX ? this.offsetX : '0'; /** @type {?} */ const offsetY = !!this.offsetY ? this.offsetY : autoOffsetYByPlacement; return 'translate(' + offsetX + ',' + offsetY + ')'; } /** * @return {?} */ ngOnDestroy() { 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 = () => [ { 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 },] }] }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZGV2dWkvbW9kYWwvIiwic291cmNlcyI6WyJtb2RhbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN4QyxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQXFCNUQsTUFBTSxPQUFPLGNBQWM7Ozs7O0lBcUJ6QixZQUFvQixXQUF3QixFQUFVLFFBQW1CO1FBQXJELGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQWJoRSxjQUFTLEdBQWdDLFFBQVEsQ0FBQztRQU8zRCxpQkFBWSxHQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBSXRELHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1QixvQkFBZSxHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBaURuRCxpQkFBWTs7OztRQUFHLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDeEIsd0dBQXdHO1lBQ3hHLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQjtnQkFDckQsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFh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QUFNLEVBQUUsSUFBSSxFQUFFOzRCQUNuRCxTQUFTLFNBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTs7OztJQVpyQyw0QkFBb0I7O0lBQ3BCLHFDQUE4Qjs7SUFDOUIsK0JBQXVCOztJQUN2QiwyQ0FBb0M7O0lBQ3BDLHNDQUE4RTs7SUFDOUUsbUNBQTRCOztJQUM1QixtQ0FBMkQ7O0lBQzNELGlDQUF5Qjs7SUFDekIsaUNBQXlCOztJQUN6Qix3Q0FBaUM7O0lBRWpDLDRDQUFrRzs7SUFDbEcsdUNBQWlFOztJQUNqRSxzQ0FBc0Q7O0lBQ3RELDJDQUErQjs7SUFFL0IscUNBQXdCOztJQUN4Qiw2Q0FBNEI7O0lBQzVCLHlDQUFtRDs7SUFpRG5ELHNDQU9DOztJQUVELHdDQUVDOztJQUVELHNDQUlDOzs7OztJQWpFVyxxQ0FBZ0M7Ozs7O0lBQUUsa0NBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb2N1bWVudFJlZiB9IGZyb20gJ25nLWRldnVpL3dpbmRvdy1yZWYnO1xyXG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaC1lcyc7XHJcbmltcG9ydCB7IGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1vZGFsQ29udGFpbmVyRGlyZWN0aXZlIH0gZnJvbSAnLi9tb2RhbC5kaXJlY3RpdmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdkLW1vZGFsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL21vZGFsLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignYmFja2Ryb3BBbmltYXRpb24nLCBbXHJcbiAgICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoeyBvcGFjaXR5OiAwIH0pKSxcclxuICAgICAgc3RhdGUoJ2luJywgc3R5bGUoeyBvcGFjaXR5OiAwLjIgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IGluJywgYW5pbWF0ZSgnNDAwbXMgIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKScpKSxcclxuICAgICAgdHJhbnNpdGlvbignaW4gPT4gdm9pZCcsIGFuaW1hdGUoJzMwMG1zIGN1YmljLWJlemllcigwLjc1NSwgMC4wNSwgMC44NTUsIDAuMDYpJykpLFxyXG4gICAgXSksXHJcbiAgICB0cmlnZ2VyKCdtb2RhbEFuaW1hdGlvbicsIFtcclxuICAgICAgc3RhdGUoJ3ZvaWQnLCBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3NjYWxlKDAuOSknIH0pKSxcclxuICAgICAgc3RhdGUoJ2luJywgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICdzY2FsZSgxKScgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IGluJywgYW5pbWF0ZSgnNDAwbXMgIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKScpKSxcclxuICAgICAgdHJhbnNpdGlvbignaW4gPT4gdm9pZCcsIGFuaW1hdGUoJzMwMG1zIGN1YmljLWJlemllcigwLjc1NSwgMC4wNSwgMC44NTUsIDAuMDYpJykpLFxyXG4gICAgXSlcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KCkgaWQ6IHN0cmluZztcclxuICBASW5wdXQoKSBzaG93QW5pbWF0ZTogYm9vbGVhbjtcclxuICBASW5wdXQoKSB3aWR0aDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGJhY2tkcm9wQ2xvc2VhYmxlOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGJlZm9yZUhpZGRlbjogKCkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4gfCBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gIEBJbnB1dCgpIGRyYWdnYWJsZTogYm9vbGVhbjtcclxuICBASW5wdXQoKSBwbGFjZW1lbnQ6ICdjZW50ZXInIHwgJ3RvcCcgfCAnYm90dG9tJyA9ICdjZW50ZXInO1xyXG4gIEBJbnB1dCgpIG9mZnNldFg6IHN0cmluZztcclxuICBASW5wdXQoKSBvZmZzZXRZOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYm9keVNjcm9sbGFibGU6IGJvb2xlYW47IC8vIOaJk+W8gOW8ueeql2JvZHnmmK/lkKblj6/mu5rliqhcclxuXHJcbiAgQFZpZXdDaGlsZChNb2RhbENvbnRhaW5lckRpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgbW9kYWxDb250YWluZXJIb3N0OiBNb2RhbENvbnRhaW5lckRpcmVjdGl2ZTtcclxuICBAVmlld0NoaWxkKCdkaWFsb2cnLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dFbGVtZW50OiBFbGVtZW50UmVmO1xyXG4gIGFuaW1hdGVTdGF0ZTogc3RyaW5nID0gdGhpcy5zaG93QW5pbWF0ZSA/ICd2b2lkJyA6ICcnO1xyXG4gIGRyYWdnYWJsZUhhbmRsZUVsOiBIVE1MRWxlbWVudDtcclxuXHJcbiAgbW91c2VEd29uRWw6IEVsZW1lbnRSZWY7XHJcbiAgaWdub3JlQmFja0Ryb3BDbGljayA9IGZhbHNlO1xyXG4gIHByZXNzRXNjVG9DbG9zZTogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZG9jdW1lbnRSZWY6IERvY3VtZW50UmVmLCBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHtcclxuICAgIHRoaXMuYmFja2Ryb3BDbG9zZWFibGUgPSBpc1VuZGVmaW5lZCh0aGlzLmJhY2tkcm9wQ2xvc2VhYmxlKVxyXG4gICAgICA/IHRydWVcclxuICAgICAgOiB0aGlzLmJhY2tkcm9wQ2xvc2VhYmxlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnByZXNzRXNjVG9DbG9zZS5hZGQoZnJvbUV2ZW50KHdpbmRvdywgJ2tleWRvd24nKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmIChldmVudFsna2V5Q29kZSddID09PSAyNykge1xyXG4gICAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcbiAgICBjb25zdCBoYW5kbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZC1tb2RhbC1oZWFkZXInKTtcclxuICAgIGlmIChoYW5kbGUpIHtcclxuICAgICAgdGhpcy5kcmFnZ2FibGVIYW5kbGVFbCA9IGhhbmRsZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQW5pbWF0aW9uRG9uZShldmVudCkge1xyXG4gICAgaWYgKGV2ZW50LnRvU3RhdGUgPT09ICd2b2lkJykge1xyXG4gICAgICB0aGlzLm9uSGlkZGVuKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBXaWxsIG92ZXJ3cml0ZSB0aGlzIG1ldGhvZCBpbiBtb2RhbCBzZXJ2aWNlXHJcbiAgb25IaWRkZW4oKSB7XHJcbiAgfVxyXG5cclxuXHJcbiAgY2FuSGlkZU1vZGVsKCkge1xyXG4gICAgbGV0IGhpZGRlblJlc3VsdCA9IFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuXHJcbiAgICBpZiAodGhpcy5iZWZvcmVIaWRkZW4pIHtcclxuICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSB0aGlzLmJlZm9yZUhpZGRlbigpO1xyXG4gICAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBpZiAocmVzdWx0LnRoZW4pIHtcclxuICAgICAgICAgIGhpZGRlblJlc3VsdCA9IHJlc3VsdDtcclxuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5zdWJzY3JpYmUpIHtcclxuICAgICAgICAgIGhpZGRlblJlc3VsdCA9IChyZXN1bHQgYXMgT2JzZXJ2YWJsZTxib29sZWFuPikudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGhpZGRlblJlc3VsdCA9IFByb21pc2UucmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBoaWRkZW5SZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBvbk1vZGFsQ2xpY2sgPSAoJGV2ZW50KSA9PiB7XHJcbiAgICAvLyDkuIDlrpropoFkb2N1bWVudC5jb250YWlucygkZXZlbnQudGFyZ2V0Ke+8jOWboOS4uiRldmVudC50YXJnZXTlj6/og73lt7Lnu4/kuI3lnKhkb2N1bWVudOmHjOS6hu+8jOi/meS4quaXtuWAmeWwseS4jeiDvei/m2hpZGXkuoYs5L2/55SoZG9jdW1lbnQuYm9keeWFvOWuuUlFXHJcbiAgICBpZiAodGhpcy5iYWNrZHJvcENsb3NlYWJsZSAmJiAhdGhpcy5pZ25vcmVCYWNrRHJvcENsaWNrICYmXHJcbiAgICAgICghdGhpcy5kaWFsb2dFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoJGV2ZW50LnRhcmdldCkgJiYgZG9jdW1lbnQuYm9keS5jb250YWlucygkZXZlbnQudGFyZ2V0KSkpIHtcclxuICAgICAgdGhpcy5oaWRlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlnbm9yZUJhY2tEcm9wQ2xpY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG1vZGFsTW91c2VEb3duID0gKCRldmVudCkgPT4ge1xyXG4gICAgdGhpcy5tb3VzZUR3b25FbCA9ICRldmVudC50YXJnZXQ7XHJcbiAgfVxyXG5cclxuICBtb2RhbE1vdXNlVXAgPSAoJGV2ZW50KSA9PiB7XHJcbiAgICBpZiAoJGV2ZW50LnRhcmdldCAhPT0gdGhpcy5tb3VzZUR3b25FbCkge1xyXG4gICAgICB0aGlzLmlnbm9yZUJhY2tEcm9wQ2xpY2sgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGlkZSgpIHtcclxuICAgIHRoaXMuY2FuSGlkZU1vZGVsKCkudGhlbigoY2FuSGlkZSkgPT4ge1xyXG4gICAgICBpZiAoIWNhbkhpZGUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmJvZHlTY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmRvY3VtZW50UmVmLmJvZHksICdtb2RhbC1vcGVuJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghdGhpcy5zaG93QW5pbWF0ZSkge1xyXG4gICAgICAgIHRoaXMub25IaWRkZW4oKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hbmltYXRlU3RhdGUgPSAndm9pZCc7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNob3coKSB7XHJcbiAgICBpZiAoIXRoaXMuYm9keVNjcm9sbGFibGUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmRvY3VtZW50UmVmLmJvZHksICdtb2RhbC1vcGVuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kaWFsb2dFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIGlmICh0aGlzLnNob3dBbmltYXRlKSB7XHJcbiAgICAgIHRoaXMuYW5pbWF0ZVN0YXRlID0gJ2luJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc29sdmVUcmFuc2Zvcm1UcmFuc2xhdGUoKSB7XHJcbiAgICBsZXQgYXV0b09mZnNldFlCeVBsYWNlbWVudDtcclxuICAgIHN3aXRjaCAodGhpcy5wbGFjZW1lbnQpIHtcclxuICAgICAgY2FzZSAndG9wJzpcclxuICAgICAgICBhdXRvT2Zmc2V0WUJ5UGxhY2VtZW50ID0gJzQwcHgnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdib3R0b20nOlxyXG4gICAgICAgIGF1dG9PZmZzZXRZQnlQbGFjZW1lbnQgPSAnLTQwcHgnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjZW50ZXInOlxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGF1dG9PZmZzZXRZQnlQbGFjZW1lbnQgPSAnMCc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBjb25zdCBvZmZzZXRYID0gISF0aGlzLm9mZnNldFggPyB0aGlzLm9mZnNldFggOiAnMCc7XHJcbiAgICBjb25zdCBvZmZzZXRZID0gISF0aGlzLm9mZnNldFkgPyB0aGlzLm9mZnNldFkgOiBhdXRvT2Zmc2V0WUJ5UGxhY2VtZW50O1xyXG4gICAgcmV0dXJuICd0cmFuc2xhdGUoJyArIG9mZnNldFggKyAnLCcgKyBvZmZzZXRZICsgJyknO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMucHJlc3NFc2NUb0Nsb3NlLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==