UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

252 lines (251 loc) 23.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { Component, Input, ElementRef, ViewChild } from '@angular/core'; import { ConnectionManager } from '../service/ConnectionManager.service'; import { PhloxAppInfoService } from '../service/PhloxAppInfoService.service'; import { ComponentPopover } from './ComponentPopover.component'; import { ComponentPopoverModel } from './model/ComponentPopoverModel'; import { ConnectionStatusPane } from './ConnectionStatusPane.component'; const /** @type {?} */ TYPE_NAME = "phx-connection-status"; const /** @type {?} */ TOP = 'top'; const /** @type {?} */ BOTTOM = 'bottom'; const /** @type {?} */ LEFT = 'left'; const /** @type {?} */ RIGHT = 'right'; export class ConnectionStatus { /** * @param {?} connectionMgr * @param {?} phloxAppService * @param {?} elementRef */ constructor(connectionMgr, phloxAppService, elementRef) { this.connectionMgr = connectionMgr; this.elementRef = elementRef; phloxAppService.getAppInfo().then((result) => { this.connectionMgr.setPhloxAppInfo(result); }); this.arrowPosition = LEFT; // set as default this.popoverModel = new ComponentPopoverModel(ConnectionStatusPane, this.connectionPaneModel, 0, 0, '220pt', null, null, ['connectionStatus']); } /** * @return {?} */ ngOnInit() { let /** @type {?} */ percent = this.connectionMgr.getConnectionQuality(); this.setArrowPosition(this.popoverPosition); this.updatePosition(); } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { if (changes['popoverPosition'] !== null && typeof changes['popoverPosition'] !== 'undefined') { let /** @type {?} */ oldVal = changes['popoverPosition'].previousValue; let /** @type {?} */ newVal = changes['popoverPosition'].currentValue; if (oldVal !== newVal) { this.setArrowPosition(this.popoverPosition); this.updatePosition(); } } } /** * @param {?} popoverPosition * @return {?} */ setArrowPosition(popoverPosition) { if (popoverPosition !== null && typeof popoverPosition !== 'undefined') { if (popoverPosition === TOP) { // arrow as bottom this.arrowPosition = BOTTOM; } else if (popoverPosition === BOTTOM) { // arrow as top this.arrowPosition = TOP; } else if (popoverPosition === LEFT) { // arrow as right this.arrowPosition = RIGHT; } else { // default as right so arrow as left this.arrowPosition = LEFT; } } else { // default as right so arrow as left this.arrowPosition = LEFT; } } /** * @return {?} */ updatePosition() { let /** @type {?} */ left = 0; let /** @type {?} */ top = 0; let /** @type {?} */ width = 0; let /** @type {?} */ height = 0; this.popoverModel.popoverWidth = this.popoverWidth; this.popoverModel.popoverHeight = this.popoverHeight; this.popoverModel.showArrow = this.showArrow; if (this.elementRef !== null && typeof this.elementRef !== 'undefined') { if (typeof $(this.elementRef.nativeElement) !== 'undefined') { if (typeof $(this.elementRef.nativeElement).offset() !== 'undefined') { left = $(this.elementRef.nativeElement).offset().left; top = $(this.elementRef.nativeElement).offset().top; width = $(this.elementRef.nativeElement).outerWidth(); height = $(this.elementRef.nativeElement).outerHeight(); } } } if (this.arrowPosition === LEFT || this.arrowPosition === RIGHT) { this.popoverModel.top = top; this.popoverModel.left = (left + width) + 10; // 10 as a padding } else { this.popoverModel.top = (top + height) + 10; this.popoverModel.left = left + width; } } /** * @param {?} $event * @return {?} */ onBtnClicked($event) { $event.stopPropagation(); if (this.popover !== null && typeof this.popover !== 'undefined') { if (this.popover.isShow()) { this.popover.hide(); } else { this.updatePosition(); this.popover.show(); } } } /** * @param {?} event * @return {?} */ onFocus(event) { } /** * @param {?} event * @return {?} */ onLostFocus(event) { // do close popover if (this.popover !== null && typeof this.popover !== 'undefined') { this.popover.hide(); } } /** * @return {?} */ getStatusPercent() { if (this.connectionMgr !== null && typeof this.connectionMgr !== 'undefined') { return this.connectionMgr.getConnectionQuality(); } return 0; } /** * @return {?} */ isShowSignal() { let /** @type {?} */ percent = this.getStatusPercent(); if (percent !== null && typeof percent === 'number') { if (percent > 0) { return true; } } return false; } /** * @return {?} */ getPopoverModel() { return this.popoverModel; } /** * @return {?} */ getArrowPosition() { return this.arrowPosition; } } ConnectionStatus.TYPE_NAME = TYPE_NAME; ConnectionStatus.LEFT = LEFT; ConnectionStatus.RIGHT = RIGHT; ConnectionStatus.TOP = TOP; ConnectionStatus.BOTTOM = BOTTOM; ConnectionStatus.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: `<div class="phx-connection-status"> <div class="wrapper" (click)="onBtnClicked($event)"> <phx-signals-indicator [percent]="getStatusPercent()"></phx-signals-indicator> <div class="status status-one-bar" *ngIf="getStatusPercent() <= 25 && getStatusPercent() >= 1"></div> <div class="status status-zero-bar" *ngIf="getStatusPercent() === 0"></div> </div> <phx-component-popover #popover [model]="getPopoverModel()" [position]="getArrowPosition()" [anchor]="'.phx-signals-indicator'"></phx-component-popover> </div> ` },] }, ]; /** @nocollapse */ ConnectionStatus.ctorParameters = () => [ { type: ConnectionManager, }, { type: PhloxAppInfoService, }, { type: ElementRef, }, ]; ConnectionStatus.propDecorators = { "popoverPosition": [{ type: Input },], "popoverWidth": [{ type: Input },], "popoverHeight": [{ type: Input },], "showArrow": [{ type: Input },], "popover": [{ type: ViewChild, args: ['popover',] },], }; function ConnectionStatus_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ ConnectionStatus.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ ConnectionStatus.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ ConnectionStatus.propDecorators; /** @type {?} */ ConnectionStatus.TYPE_NAME; /** @type {?} */ ConnectionStatus.LEFT; /** @type {?} */ ConnectionStatus.RIGHT; /** @type {?} */ ConnectionStatus.TOP; /** @type {?} */ ConnectionStatus.BOTTOM; /** @type {?} */ ConnectionStatus.prototype.popoverPosition; /** @type {?} */ ConnectionStatus.prototype.popoverWidth; /** @type {?} */ ConnectionStatus.prototype.popoverHeight; /** @type {?} */ ConnectionStatus.prototype.showArrow; /** @type {?} */ ConnectionStatus.prototype.popover; /** @type {?} */ ConnectionStatus.prototype.connectionMgr; /** @type {?} */ ConnectionStatus.prototype.popoverModel; /** @type {?} */ ConnectionStatus.prototype.connectionPaneModel; /** @type {?} */ ConnectionStatus.prototype.elementRef; /** @type {?} */ ConnectionStatus.prototype.arrowPosition; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29ubmVjdGlvblN0YXR1cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvQ29ubmVjdGlvblN0YXR1cy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUF3QixVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTlGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBS3hFLHVCQUFNLFNBQVMsR0FBVyx1QkFBdUIsQ0FBQztBQUVsRCx1QkFBTSxHQUFHLEdBQVcsS0FBSyxDQUFDO0FBQzFCLHVCQUFNLE1BQU0sR0FBVyxRQUFRLENBQUM7QUFDaEMsdUJBQU0sSUFBSSxHQUFXLE1BQU0sQ0FBQztBQUM1Qix1QkFBTSxLQUFLLEdBQVcsT0FBTyxDQUFDO0FBZTlCLE1BQU07Ozs7OztJQTBCSixZQUFZLGFBQWdDLEVBQUUsZUFBb0MsRUFBRSxVQUFzQjtRQUN4RyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixlQUFlLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7WUFDaEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDNUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFB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QUFLLENBQUM7Ozs7O0lBR1IsZUFBZTtRQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQzs7Ozs7SUFHcEIsZ0JBQWdCO1FBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDOzs7NkJBM0plLFNBQVM7d0JBRWQsSUFBSTt5QkFDSCxLQUFLO3VCQUNQLEdBQUc7MEJBQ0EsTUFBTTs7WUFwQi9DLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7Z0JBQ25CLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixRQUFRLEVBQUU7Ozs7Ozs7O0NBUVg7YUFDQTs7OztZQTdCUSxpQkFBaUI7WUFDakIsbUJBQW1CO1lBSHFCLFVBQVU7OztnQ0F5Q3hELEtBQUs7NkJBRUwsS0FBSzs4QkFFTCxLQUFLOzBCQUVMLEtBQUs7d0JBR0wsU0FBUyxTQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIEhvc3RMaXN0ZW5lciwgRWxlbWVudFJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvbm5lY3Rpb25NYW5hZ2VyIH0gZnJvbSAnLi4vc2VydmljZS9Db25uZWN0aW9uTWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IFBobG94QXBwSW5mb1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL1BobG94QXBwSW5mb1NlcnZpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3BvdmVyIH0gZnJvbSAnLi9Db21wb25lbnRQb3BvdmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJTmVlZEZvY3VzIH0gZnJvbSAnLi9JTmVlZEZvY3VzJztcbmltcG9ydCB7IENvbXBvbmVudFBvcG92ZXJNb2RlbCB9IGZyb20gJy4vbW9kZWwvQ29tcG9uZW50UG9wb3Zlck1vZGVsJztcbmltcG9ydCB7IENvbm5lY3Rpb25TdGF0dXNQYW5lIH0gZnJvbSAnLi9Db25uZWN0aW9uU3RhdHVzUGFuZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vZGVjb3JhdG9yL09wdGlvbi5kZWNvcmF0b3InO1xuXG5kZWNsYXJlIHZhciAkOiBhbnk7XG5cbmNvbnN0IFRZUEVfTkFNRTogc3RyaW5nID0gXCJwaHgtY29ubmVjdGlvbi1zdGF0dXNcIjtcblxuY29uc3QgVE9QOiBzdHJpbmcgPSAndG9wJztcbmNvbnN0IEJPVFRPTTogc3RyaW5nID0gJ2JvdHRvbSc7XG5jb25zdCBMRUZUOiBzdHJpbmcgPSAnbGVmdCc7XG5jb25zdCBSSUdIVDogc3RyaW5nID0gJ3JpZ2h0JztcblxuQENvbXBvbmVudCh7XG4gIG1vZHVsZUlkOiBtb2R1bGUuaWQsXG4gIHNlbGVjdG9yOiBUWVBFX05BTUUsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInBoeC1jb25uZWN0aW9uLXN0YXR1c1wiPlxuXHQ8ZGl2IGNsYXNzPVwid3JhcHBlclwiIChjbGljayk9XCJvbkJ0bkNsaWNrZWQoJGV2ZW50KVwiPlxuXHRcdDxwaHgtc2lnbmFscy1pbmRpY2F0b3IgW3BlcmNlbnRdPVwiZ2V0U3RhdHVzUGVyY2VudCgpXCI+PC9waHgtc2lnbmFscy1pbmRpY2F0b3I+XG5cdFx0PGRpdiBjbGFzcz1cInN0YXR1cyBzdGF0dXMtb25lLWJhclwiICpuZ0lmPVwiZ2V0U3RhdHVzUGVyY2VudCgpIDw9IDI1ICYmIGdldFN0YXR1c1BlcmNlbnQoKSA+PSAxXCI+PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cInN0YXR1cyBzdGF0dXMtemVyby1iYXJcIiAqbmdJZj1cImdldFN0YXR1c1BlcmNlbnQoKSA9PT0gMFwiPjwvZGl2PlxuXHQ8L2Rpdj5cblx0PHBoeC1jb21wb25lbnQtcG9wb3ZlciAjcG9wb3ZlciBbbW9kZWxdPVwiZ2V0UG9wb3Zlck1vZGVsKClcIiBbcG9zaXRpb25dPVwiZ2V0QXJyb3dQb3NpdGlvbigpXCIgW2FuY2hvcl09XCInLnBoeC1zaWduYWxzLWluZGljYXRvcidcIj48L3BoeC1jb21wb25lbnQtcG9wb3Zlcj5cbjwvZGl2PlxuYFxufSlcbmV4cG9ydCBjbGFzcyBDb25uZWN0aW9uU3RhdHVzIGltcGxlbWVudHMgSU5lZWRGb2N1cyB7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUWVBFX05BTUU6IHN0cmluZyA9IFRZUEVfTkFNRTtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExFRlQ6IHN0cmluZyA9IExFRlQ7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUklHSFQ6IHN0cmluZyA9IFJJR0hUO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRPUDogc3RyaW5nID0gVE9QO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJPVFRPTTogc3RyaW5nID0gQk9UVE9NO1xuXG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgcG9wb3ZlclBvc2l0aW9uOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBwb3BvdmVyV2lkdGg6IHN0cmluZztcbiAgQElucHV0KClcbiAgcHVibGljIHBvcG92ZXJIZWlnaHQ6IHN0cmluZztcbiAgQElucHV0KClcbiAgcHVibGljIHNob3dBcnJvdzogYm9vbGVhbjtcblxuICBAVmlld0NoaWxkKCdwb3BvdmVyJylcbiAgcHJpdmF0ZSBwb3BvdmVyOiBDb21wb25lbnRQb3BvdmVyO1xuICBwcml2YXRlIGNvbm5lY3Rpb25NZ3I6IENvbm5lY3Rpb25NYW5hZ2VyO1xuICBwcml2YXRlIHBvcG92ZXJNb2RlbDogQ29tcG9uZW50UG9wb3Zlck1vZGVsO1xuICBwcml2YXRlIGNvbm5lY3Rpb25QYW5lTW9kZWw6IGFueTtcbiAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICBwcml2YXRlIGFycm93UG9zaXRpb246IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihjb25uZWN0aW9uTWdyOiBDb25uZWN0aW9uTWFuYWdlciwgcGhsb3hBcHBTZXJ2aWNlOiBQaGxveEFwcEluZm9TZXJ2aWNlLCBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uTWdyID0gY29ubmVjdGlvbk1ncjtcbiAgICB0aGlzLmVsZW1lbnRSZWYgPSBlbGVtZW50UmVmO1xuICAgIHBobG94QXBwU2VydmljZS5nZXRBcHBJbmZvKCkudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbk1nci5zZXRQaGxveEFwcEluZm8ocmVzdWx0KTtcbiAgICB9KTtcbiAgICB0aGlzLmFycm93UG9zaXRpb24gPSBMRUZUOyAvLyBzZXQgYXMgZGVmYXVsdFxuXG4gICAgdGhpcy5wb3BvdmVyTW9kZWwgPSBuZXcgQ29tcG9uZW50UG9wb3Zlck1vZGVsKENvbm5lY3Rpb25TdGF0dXNQYW5lLCB0aGlzLmNvbm5lY3Rpb25QYW5lTW9kZWwsIDAsIDAsICcyMjBwdCcsIG51bGwsIG51bGwsIFsnY29ubmVjdGlvblN0YXR1cyddKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcblxuICAgIGxldCBwZXJjZW50ID0gdGhpcy5jb25uZWN0aW9uTWdyLmdldENvbm5lY3Rpb25RdWFsaXR5KCk7XG5cbiAgICB0aGlzLnNldEFycm93UG9zaXRpb24odGhpcy5wb3BvdmVyUG9zaXRpb24pO1xuICAgIHRoaXMudXBkYXRlUG9zaXRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBhbnkpIHtcblxuICAgIGlmIChjaGFuZ2VzWydwb3BvdmVyUG9zaXRpb24nXSAhPT0gbnVsbCAmJiB0eXBlb2YgY2hhbmdlc1sncG9wb3ZlclBvc2l0aW9uJ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsZXQgb2xkVmFsID0gY2hhbmdlc1sncG9wb3ZlclBvc2l0aW9uJ10ucHJldmlvdXNWYWx1ZTtcbiAgICAgIGxldCBuZXdWYWwgPSBjaGFuZ2VzWydwb3BvdmVyUG9zaXRpb24nXS5jdXJyZW50VmFsdWU7XG5cbiAgICAgIGlmIChvbGRWYWwgIT09IG5ld1ZhbCkge1xuICAgICAgICB0aGlzLnNldEFycm93UG9zaXRpb24odGhpcy5wb3BvdmVyUG9zaXRpb24pO1xuICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRBcnJvd1Bvc2l0aW9uKHBvcG92ZXJQb3NpdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHBvcG92ZXJQb3NpdGlvbiAhPT0gbnVsbCAmJiB0eXBlb2YgcG9wb3ZlclBvc2l0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHBvcG92ZXJQb3NpdGlvbiA9PT0gVE9QKSB7XG4gICAgICAgIC8vIGFycm93IGFzIGJvdHRvbVxuICAgICAgICB0aGlzLmFycm93UG9zaXRpb24gPSBCT1RUT007XG4gICAgICB9IGVsc2UgaWYgKHBvcG92ZXJQb3NpdGlvbiA9PT0gQk9UVE9NKSB7XG4gICAgICAgIC8vIGFycm93IGFzIHRvcFxuICAgICAgICB0aGlzLmFycm93UG9zaXRpb24gPSBUT1A7XG4gICAgICB9IGVsc2UgaWYgKHBvcG92ZXJQb3NpdGlvbiA9PT0gTEVGVCkge1xuICAgICAgICAvLyBhcnJvdyBhcyByaWdodFxuICAgICAgICB0aGlzLmFycm93UG9zaXRpb24gPSBSSUdIVDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRlZmF1bHQgYXMgcmlnaHQgc28gYXJyb3cgYXMgbGVmdFxuICAgICAgICB0aGlzLmFycm93UG9zaXRpb24gPSBMRUZUO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkZWZhdWx0IGFzIHJpZ2h0IHNvIGFycm93IGFzIGxlZnRcbiAgICAgIHRoaXMuYXJyb3dQb3NpdGlvbiA9IExFRlQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQb3NpdGlvbigpOiB2b2lkIHtcbiAgICBsZXQgbGVmdDogbnVtYmVyID0gMDtcbiAgICBsZXQgdG9wOiBudW1iZXIgPSAwO1xuICAgIGxldCB3aWR0aDogbnVtYmVyID0gMDtcbiAgICBsZXQgaGVpZ2h0OiBudW1iZXIgPSAwO1xuXG4gICAgdGhpcy5wb3BvdmVyTW9kZWwucG9wb3ZlcldpZHRoID0gdGhpcy5wb3BvdmVyV2lkdGg7XG4gICAgdGhpcy5wb3BvdmVyTW9kZWwucG9wb3ZlckhlaWdodCA9IHRoaXMucG9wb3ZlckhlaWdodDtcbiAgICB0aGlzLnBvcG92ZXJNb2RlbC5zaG93QXJyb3cgPSB0aGlzLnNob3dBcnJvdztcblxuICAgIGlmICh0aGlzLmVsZW1lbnRSZWYgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZWxlbWVudFJlZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0eXBlb2YgJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkgIT09ICd1bmRlZmluZWQnKSB7XG5cbiAgICAgICAgaWYgKHR5cGVvZiAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5vZmZzZXQoKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBsZWZ0ID0gJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkub2Zmc2V0KCkubGVmdDtcbiAgICAgICAgICB0b3AgPSAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5vZmZzZXQoKS50b3A7XG5cbiAgICAgICAgICB3aWR0aCA9ICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLm91dGVyV2lkdGgoKTtcbiAgICAgICAgICBoZWlnaHQgPSAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5vdXRlckhlaWdodCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXJyb3dQb3NpdGlvbiA9PT0gTEVGVCB8fCB0aGlzLmFycm93UG9zaXRpb24gPT09IFJJR0hUKSB7XG4gICAgICB0aGlzLnBvcG92ZXJNb2RlbC50b3AgPSB0b3A7XG4gICAgICB0aGlzLnBvcG92ZXJNb2RlbC5sZWZ0ID0gKGxlZnQgKyB3aWR0aCkgKyAxMDsgLy8gMTAgYXMgYSBwYWRkaW5nXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucG9wb3Zlck1vZGVsLnRvcCA9ICh0b3AgKyBoZWlnaHQpICsgMTA7XG4gICAgICB0aGlzLnBvcG92ZXJNb2RlbC5sZWZ0ID0gbGVmdCArIHdpZHRoO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkJ0bkNsaWNrZWQoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICh0aGlzLnBvcG92ZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMucG9wb3ZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0aGlzLnBvcG92ZXIuaXNTaG93KCkpIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyLmhpZGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgdGhpcy5wb3BvdmVyLnNob3coKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25Gb2N1cyhldmVudDogYW55KTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgb25Mb3N0Rm9jdXMoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIC8vIGRvIGNsb3NlIHBvcG92ZXJcbiAgICBpZiAodGhpcy5wb3BvdmVyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLnBvcG92ZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLnBvcG92ZXIuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTdGF0dXNQZXJjZW50KCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuY29ubmVjdGlvbk1nciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5jb25uZWN0aW9uTWdyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbk1nci5nZXRDb25uZWN0aW9uUXVhbGl0eSgpO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHB1YmxpYyBpc1Nob3dTaWduYWwoKTogYm9vbGVhbiB7XG4gICAgbGV0IHBlcmNlbnQgPSB0aGlzLmdldFN0YXR1c1BlcmNlbnQoKTtcblxuICAgIGlmIChwZXJjZW50ICE9PSBudWxsICYmIHR5cGVvZiBwZXJjZW50ID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKHBlcmNlbnQgPiAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0UG9wb3Zlck1vZGVsKCk6IENvbXBvbmVudFBvcG92ZXJNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucG9wb3Zlck1vZGVsO1xuICB9XG5cbiAgcHVibGljIGdldEFycm93UG9zaXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hcnJvd1Bvc2l0aW9uO1xuICB9XG59XG4iXX0=