com.phloxui
Version:
PhloxUI Ng2+ Framework
252 lines (251 loc) • 23.4 kB
JavaScript
/**
* @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=