UNPKG

@lunaeme/circe-modal

Version:
169 lines 18.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output } from '@angular/core'; import { BoxModelService, EventsService } from '@lunaeme/circe-core'; export class ModalComponent { /** * @param {?} ev * @param {?} _el * @param {?} _bm */ constructor(ev, _el, _bm) { this.ev = ev; this._el = _el; this._bm = _bm; this.clickOutside = false; this.clickOutsideExceptions = []; this.close = new EventEmitter(); this._element = _el.nativeElement; } /** * @private * @return {?} */ _adjustContentBody() { /** @type {?} */ const _modalContentBody = this._bm.getElement('content__body'); if (this._element.contains(_modalContentBody)) { /** @type {?} */ const _contentBody = this._bm.getBoxModel('content__body'); /** @type {?} */ let _headerAggregated = 0; if (this.title || this.closeButton) { /** @type {?} */ const _contentHeader = this._bm.getBoxModel('content__header'); _headerAggregated = _contentHeader.boxModelAggregated; } /** @type {?} */ const _cssCalcHeight = `calc(100% - ${_headerAggregated}px + ${_contentBody.boxModelAdditions}px)`; ((/** @type {?} */ (_modalContentBody))).style.height = _cssCalcHeight; ((/** @type {?} */ (_modalContentBody))).style.minHeight = _cssCalcHeight; } } /** * @return {?} */ ngOnInit() { this.titleAddClass = { [this.titleClass]: !!this.titleClass }; } /** * @return {?} */ ngAfterViewInit() { /** @type {?} */ const _modalComponent = document.getElementsByClassName('modal-component').item(0); /** @type {?} */ const _modalCanvas = document.getElementsByClassName('modal__canvas').item(0); if (this._element.contains(_modalComponent) && this._element.contains(_modalCanvas)) { /** @type {?} */ const _modalComponentRect = _modalComponent.getBoundingClientRect(); /** @type {?} */ const _modalCanvasRect = _modalCanvas.getBoundingClientRect(); /** @type {?} */ const _fixed = this._bm.processSizeString(this.fixed); if (_fixed && Object.keys(_fixed)) { /** @type {?} */ const _modalCanvasWidth = (_fixed.with.unit === '%') ? _modalComponentRect.width * _fixed.with.value / 100 : _fixed.with.value; /** @type {?} */ const _modalCanvasHeight = (_fixed.height.unit === '%') ? _modalComponentRect.height * _fixed.height.value / 100 : _fixed.height.value; ((/** @type {?} */ (_modalCanvas))).style.width = _modalCanvasWidth + 'px'; ((/** @type {?} */ (_modalCanvas))).style.minWidth = _modalCanvasWidth + 'px'; ((/** @type {?} */ (_modalCanvas))).style.height = _modalCanvasHeight + 'px'; ((/** @type {?} */ (_modalCanvas))).style.minHeight = _modalCanvasHeight + 'px'; this._adjustContentBody(); } else { /** @type {?} */ const _modalCanvasMaxWidth = _modalComponentRect.width * 0.9; /** @type {?} */ const _modalCanvasMaxHeight = _modalComponentRect.height * 0.9; if (_modalCanvasRect.width > _modalCanvasMaxWidth) { ((/** @type {?} */ (_modalCanvas))).style.width = _modalCanvasMaxWidth + 'px'; ((/** @type {?} */ (_modalCanvas))).style.minWidth = _modalCanvasMaxWidth + 'px'; } if (_modalCanvasRect.height > _modalCanvasMaxHeight) { ((/** @type {?} */ (_modalCanvas))).style.height = _modalCanvasMaxHeight + 'px'; ((/** @type {?} */ (_modalCanvas))).style.minHeight = _modalCanvasMaxHeight + 'px'; } } } } /** * @return {?} */ ngOnDestroy() { } } ModalComponent.decorators = [ { type: Component, args: [{ selector: 'cc-modal', template: "<div class=\"medea-tpl__layer modal-component\" [ngClass]=\"{noModalBg: !modalBackground}\">\n <div\n class=\"modal__canvas\"\n ccClickOutside\n [apply]=\"clickOutside\"\n [exceptions]=\"clickOutsideExceptions\"\n (clickOutside)=\"close.emit()\">\n <div class=\"modal__content\">\n <div class=\"content__header\" *ngIf=\"title || closeButton\" [ngClass]=\"{noBg: !titleBackground}\">\n <div class=\"header__left mda-fs__22\" [ngClass]=\"titleAddClass\">{{title}}</div>\n <div class=\"header__right\">\n <i\n class=\"mda-icon icon-cross mda-fs__18 modal__close\"\n *ngIf=\"closeButton\"\n (click)=\"ev.preventNoNeededEvent($event); close.emit();\"\n title=\"Close\">\n </i>\n </div>\n </div>\n <div\n class=\"content__body\"\n [ngStyle]=\"{\n padding: (noPadding) ? '0' : (!titleBackground) ? '0 20px 20px 20px' : '20px',\n 'box-sizing': (!titleBackground) ? 'content-box' : 'border-box'\n }\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n</div>\n", changeDetection: ChangeDetectionStrategy.OnPush, styles: [".modal-component{display:flex;display:-ms-flexbox;flex-flow:row nowrap;flex-shrink:0;-webkit-flex-shrink:0;align-items:center;-webkit-align-items:center;-ms-flex-align:center;justify-content:center;-webkit-justify-content:center;position:absolute;z-index:10;left:0;top:0;width:100%;height:100%;background-color:rgba(17,17,17,.3);overflow:hidden}.modal-component.noModalBg{background-color:transparent}.modal-component .modal__canvas{background-color:#fff;border:1px solid #fff;border-radius:5px;box-shadow:0 1px 10px 0 rgba(85,85,85,.8)}.modal-component .modal__canvas .modal__content{overflow:hidden;width:100%;min-width:100%;height:100%;min-height:100%}.modal-component .modal__canvas .modal__content .content__header{display:flex;display:-ms-flexbox;flex-flow:row nowrap;flex-shrink:0;-webkit-flex-shrink:0;align-items:center;-webkit-align-items:center;-ms-flex-align:center;justify-content:space-between;-webkit-justify-content:space-between;padding:20px;background-color:#f4f4f4}.modal-component .modal__canvas .modal__content .content__header.noBg{background-color:#fff}.modal-component .modal__canvas .modal__content .content__header .header__right .modal__close{margin-left:15px;cursor:pointer}.modal-component .modal__canvas .modal__content .content__body{padding:20px;position:relative}"] }] } ]; /** @nocollapse */ ModalComponent.ctorParameters = () => [ { type: EventsService }, { type: ElementRef }, { type: BoxModelService } ]; ModalComponent.propDecorators = { title: [{ type: Input }], titleClass: [{ type: Input }], titleBackground: [{ type: Input }], closeButton: [{ type: Input }], modalBackground: [{ type: Input }], clickOutside: [{ type: Input }], clickOutsideExceptions: [{ type: Input }], fixed: [{ type: Input }], noPadding: [{ type: Input }], close: [{ type: Output }] }; if (false) { /** @type {?} */ ModalComponent.prototype.title; /** @type {?} */ ModalComponent.prototype.titleClass; /** @type {?} */ ModalComponent.prototype.titleBackground; /** @type {?} */ ModalComponent.prototype.closeButton; /** @type {?} */ ModalComponent.prototype.modalBackground; /** @type {?} */ ModalComponent.prototype.clickOutside; /** @type {?} */ ModalComponent.prototype.clickOutsideExceptions; /** @type {?} */ ModalComponent.prototype.fixed; /** @type {?} */ ModalComponent.prototype.noPadding; /** @type {?} */ ModalComponent.prototype.close; /** @type {?} */ ModalComponent.prototype.titleAddClass; /** * @type {?} * @private */ ModalComponent.prototype._element; /** @type {?} */ ModalComponent.prototype.ev; /** * @type {?} * @private */ ModalComponent.prototype._el; /** * @type {?} * @private */ ModalComponent.prototype._bm; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGx1bmFlbWUvY2lyY2UtbW9kYWwvIiwic291cmNlcyI6WyJsaWIvbW9kYWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBc0IsYUFBYSxFQUFjLE1BQU0scUJBQXFCLENBQUM7QUFRckcsTUFBTSxPQUFPLGNBQWM7Ozs7OztJQWdCekIsWUFBbUIsRUFBaUIsRUFBVSxHQUFlLEVBQVUsR0FBb0I7UUFBeEUsT0FBRSxHQUFGLEVBQUUsQ0FBZTtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFpQjtRQVZsRixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QiwyQkFBc0IsR0FBa0IsRUFBRSxDQUFDO1FBRzFDLFVBQUssR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQU8xRCxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUM7SUFDcEMsQ0FBQzs7Ozs7SUFFTyxrQkFBa0I7O2NBQ2xCLGlCQUFpQixHQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQztRQUN2RSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7O2tCQUN2QyxZQUFZLEdBQXVCLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQzs7Z0JBQzFFLGlCQUFpQixHQUFXLENBQUM7WUFDakMsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7O3NCQUM1QixjQUFjLEdBQXVCLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxD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LElBQUksQ0FBQztvQkFDeEUsQ0FBQyxtQkFBQSxZQUFZLEVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO2lCQUM1RTtnQkFDRCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxxQkFBcUIsRUFBRTtvQkFDbkQsQ0FBQyxtQkFBQSxZQUFZLEVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcscUJBQXFCLEdBQUcsSUFBSSxDQUFDO29CQUMxRSxDQUFDLG1CQUFBLFlBQVksRUFBZSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7aUJBQzlFO2FBQ0Y7U0FDRjtJQUNILENBQUM7Ozs7SUFFRCxXQUFXLEtBQVUsQ0FBQzs7O1lBL0V2QixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLHNuQ0FBcUM7Z0JBRXJDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNOzthQUNoRDs7OztZQVA2QyxhQUFhO1lBUHpELFVBQVU7WUFPSCxlQUFlOzs7b0JBU3JCLEtBQUs7eUJBQ0wsS0FBSzs4QkFDTCxLQUFLOzBCQUNMLEtBQUs7OEJBQ0wsS0FBSzsyQkFDTCxLQUFLO3FDQUNMLEtBQUs7b0JBQ0wsS0FBSzt3QkFDTCxLQUFLO29CQUNMLE1BQU07Ozs7SUFUUCwrQkFBdUI7O0lBQ3ZCLG9DQUE0Qjs7SUFDNUIseUNBQWtDOztJQUNsQyxxQ0FBOEI7O0lBQzlCLHlDQUFrQzs7SUFDbEMsc0NBQXVDOztJQUN2QyxnREFBb0Q7O0lBQ3BELCtCQUF1Qjs7SUFDdkIsbUNBQTRCOztJQUM1QiwrQkFBNEQ7O0lBRTVELHVDQUEwQjs7Ozs7SUFFMUIsa0NBQXVDOztJQUUzQiw0QkFBd0I7Ozs7O0lBQUUsNkJBQXVCOzs7OztJQUFFLDZCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCb3hNb2RlbFNlcnZpY2UsIEJveE1vZGVsU3dhcE9iamVjdCwgRXZlbnRzU2VydmljZSwgU2l6ZU9iamVjdCB9IGZyb20gJ0BsdW5hZW1lL2NpcmNlLWNvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjYy1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSB0aXRsZUNsYXNzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRpdGxlQmFja2dyb3VuZDogYm9vbGVhbjtcbiAgQElucHV0KCkgY2xvc2VCdXR0b246IGJvb2xlYW47XG4gIEBJbnB1dCgpIG1vZGFsQmFja2dyb3VuZDogYm9vbGVhbjtcbiAgQElucHV0KCkgY2xpY2tPdXRzaWRlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNsaWNrT3V0c2lkZUV4Y2VwdGlvbnM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgQElucHV0KCkgZml4ZWQ6IHN0cmluZztcbiAgQElucHV0KCkgbm9QYWRkaW5nOiBib29sZWFuO1xuICBAT3V0cHV0KCkgY2xvc2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgdGl0bGVBZGRDbGFzczogYW55O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBldjogRXZlbnRzU2VydmljZSwgcHJpdmF0ZSBfZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgX2JtOiBCb3hNb2RlbFNlcnZpY2UpIHtcbiAgICB0aGlzLl9lbGVtZW50ID0gX2VsLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIF9hZGp1c3RDb250ZW50Qm9keSgpOiB2b2lkIHtcbiAgICBjb25zdCBfbW9kYWxDb250ZW50Qm9keTogRWxlbWVudCA9IHRoaXMuX2JtLmdldEVsZW1lbnQoJ2NvbnRlbnRfX2JvZHknKTtcbiAgICBpZiAodGhpcy5fZWxlbWVudC5jb250YWlucyhfbW9kYWxDb250ZW50Qm9keSkpIHtcbiAgICAgIGNvbnN0IF9jb250ZW50Qm9keTogQm94TW9kZWxTd2FwT2JqZWN0ID0gdGhpcy5fYm0uZ2V0Qm94TW9kZWwoJ2NvbnRlbnRfX2JvZHknKTtcbiAgICAgIGxldCBfaGVhZGVyQWdncmVnYXRlZDogbnVtYmVyID0gMDtcbiAgICAgIGlmICh0aGlzLnRpdGxlIHx8IHRoaXMuY2xvc2VCdXR0b24pIHtcbiAgICAgICAgY29uc3QgX2NvbnRlbnRIZWFkZXI6IEJveE1vZGVsU3dhcE9iamVjdCA9IHRoaXMuX2JtLmdldEJveE1vZGVsKCdjb250ZW50X19oZWFkZXInKTtcbiAgICAgICAgX2hlYWRlckFnZ3JlZ2F0ZWQgPSBfY29udGVudEhlYWRlci5ib3hNb2RlbEFnZ3JlZ2F0ZWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBfY3NzQ2FsY0hlaWdodDogc3RyaW5nID0gYGNhbGMoMTAwJSAtICR7X2hlYWRlckFnZ3JlZ2F0ZWR9cHggKyAke19jb250ZW50Qm9keS5ib3hNb2RlbEFkZGl0aW9uc31weClgO1xuICAgICAgKF9tb2RhbENvbnRlbnRCb2R5IGFzIEhUTUxFbGVtZW50KS5zdHlsZS5oZWlnaHQgPSBfY3NzQ2FsY0hlaWdodDtcbiAgICAgIChfbW9kYWxDb250ZW50Qm9keSBhcyBIVE1MRWxlbWVudCkuc3R5bGUubWluSGVpZ2h0ID0gX2Nzc0NhbGNIZWlnaHQ7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy50aXRsZUFkZENsYXNzID0ge1xuICAgICAgW3RoaXMudGl0bGVDbGFzc106ICEhdGhpcy50aXRsZUNsYXNzXG4gICAgfTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBfbW9kYWxDb21wb25lbnQ6IEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdtb2RhbC1jb21wb25lbnQnKS5pdGVtKDApO1xuICAgIGNvbnN0IF9tb2RhbENhbnZhczogRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ21vZGFsX19jYW52YXMnKS5pdGVtKDApO1xuICAgIGlmICh0aGlzLl9lbGVtZW50LmNvbnRhaW5zKF9tb2RhbENvbXBvbmVudCkgJiYgdGhpcy5fZWxlbWVudC5jb250YWlucyhfbW9kYWxDYW52YXMpKSB7XG4gICAgICBjb25zdCBfbW9kYWxDb21wb25lbnRSZWN0OiBET01SZWN0IHwgQ2xpZW50UmVjdCA9IF9tb2RhbENvbXBvbmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IF9tb2RhbENhbnZhc1JlY3Q6IERPTVJlY3QgfCBDbGllbnRSZWN0ID0gX21vZGFsQ2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgX2ZpeGVkOiBTaXplT2JqZWN0ID0gdGhpcy5fYm0ucHJvY2Vzc1NpemVTdHJpbmcodGhpcy5maXhlZCk7XG4gICAgICBpZiAoX2ZpeGVkICYmIE9iamVjdC5rZXlzKF9maXhlZCkpIHtcbiAgICAgICAgY29uc3QgX21vZGFsQ2FudmFzV2lkdGg6IG51bWJlciA9IChfZml4ZWQud2l0aC51bml0ID09PSAnJScpID9cbiAgICAgICAgICBfbW9kYWxDb21wb25lbnRSZWN0LndpZHRoICogX2ZpeGVkLndpdGgudmFsdWUgLyAxMDAgOiBfZml4ZWQud2l0aC52YWx1ZTtcbiAgICAgICAgY29uc3QgX21vZGFsQ2FudmFzSGVpZ2h0OiBudW1iZXIgPSAoX2ZpeGVkLmhlaWdodC51bml0ID09PSAnJScpID9cbiAgICAgICAgICBfbW9kYWxDb21wb25lbnRSZWN0LmhlaWdodCAqIF9maXhlZC5oZWlnaHQudmFsdWUgLyAxMDAgOiBfZml4ZWQuaGVpZ2h0LnZhbHVlO1xuICAgICAgICAoX21vZGFsQ2FudmFzIGFzIEhUTUxFbGVtZW50KS5zdHlsZS53aWR0aCA9IF9tb2RhbENhbnZhc1dpZHRoICsgJ3B4JztcbiAgICAgICAgKF9tb2RhbENhbnZhcyBhcyBIVE1MRWxlbWVudCkuc3R5bGUubWluV2lkdGggPSBfbW9kYWxDYW52YXNXaWR0aCArICdweCc7XG4gICAgICAgIChfbW9kYWxDYW52YXMgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmhlaWdodCA9IF9tb2RhbENhbnZhc0hlaWdodCArICdweCc7XG4gICAgICAgIChfbW9kYWxDYW52YXMgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLm1pbkhlaWdodCA9IF9tb2RhbENhbnZhc0hlaWdodCArICdweCc7XG4gICAgICAgIHRoaXMuX2FkanVzdENvbnRlbnRCb2R5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBfbW9kYWxDYW52YXNNYXhXaWR0aDogbnVtYmVyID0gX21vZGFsQ29tcG9uZW50UmVjdC53aWR0aCAqIDAuOTtcbiAgICAgICAgY29uc3QgX21vZGFsQ2FudmFzTWF4SGVpZ2h0OiBudW1iZXIgPSBfbW9kYWxDb21wb25lbnRSZWN0LmhlaWdodCAqIDAuOTtcbiAgICAgICAgaWYgKF9tb2RhbENhbnZhc1JlY3Qud2lkdGggPiBfbW9kYWxDYW52YXNNYXhXaWR0aCkge1xuICAgICAgICAgIChfbW9kYWxDYW52YXMgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLndpZHRoID0gX21vZGFsQ2FudmFzTWF4V2lkdGggKyAncHgnO1xuICAgICAgICAgIChfbW9kYWxDYW52YXMgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLm1pbldpZHRoID0gX21vZGFsQ2FudmFzTWF4V2lkdGggKyAncHgnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfbW9kYWxDYW52YXNSZWN0LmhlaWdodCA+IF9tb2RhbENhbnZhc01heEhlaWdodCkge1xuICAgICAgICAgIChfbW9kYWxDYW52YXMgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmhlaWdodCA9IF9tb2RhbENhbnZhc01heEhlaWdodCArICdweCc7XG4gICAgICAgICAgKF9tb2RhbENhbnZhcyBhcyBIVE1MRWxlbWVudCkuc3R5bGUubWluSGVpZ2h0ID0gX21vZGFsQ2FudmFzTWF4SGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge31cbn1cbiJdfQ==