@stratio/egeo
Version:
245 lines • 19.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/st-header/st-header.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/*
* © 2017 Stratio Big Data Inc., Sucursal en España.
*
* This software is licensed under the Apache License, Version 2.0.
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the terms of the License for more details.
*
* SPDX-License-Identifier: Apache-2.0.
*/
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';
import { Router } from '@angular/router';
import { StWindowRefService } from '../utils/window-service';
/**
* \@description {Component} [Header]
*
* The header component is a main component of an application.
* This component must be on top and scroll with page, when scroll is in a calculated position,
* the header shrinks and fix to top.
*
* \@model
*
* [Header menu options] {./st-header.model.ts#StHeaderMenuOption}
* [Submenu options] {./st-header.model.ts#StHeaderSubMenuOption}
*
* \@example
*
* {html}
*
* ```
* <st-header [menu]="headerMenuSchema" id="header">
* <div class="st-header-logo">
* <!-- Logo as svg, image, etc. -->
* </div>
* <div class="st-header-user-menu">
* <!-- Right header menu, with user menu, notifications, etc -->
* </div>
*
* </st-header>
* ```
*/
var StHeaderComponent = /** @class */ (function () {
function StHeaderComponent(_router, _windowServiceRef, _el, _cd) {
this._router = _router;
this._windowServiceRef = _windowServiceRef;
this._el = _el;
this._cd = _cd;
/**
* \@Input {StHeaderMenuOption[]} [menu] Array with menu option to show
*/
this.menu = [];
/**
* \@Input {boolean} [navigateByDefault] True if we want menu to manage navigation, false if navigation will be managed from the outside
*/
this.navigateByDefault = true;
/**
* \@Output {StHeaderSelection} [selectMenu] Notify any menu option selection
*/
this.selectMenu = new EventEmitter();
this.showMenuNames = true;
this._headerSize = 0;
}
/**
* @return {?}
*/
StHeaderComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
var _this = this;
this._headerSize = this.headerFixPart.nativeElement.getBoundingClientRect().width + this.userMenuElementWidth + 20;
setTimeout((/**
* @return {?}
*/
function () {
_this.checkMenuLabelVisibility();
_this._cd.markForCheck();
}));
};
/**
* @return {?}
*/
StHeaderComponent.prototype.onResize = /**
* @return {?}
*/
function () {
this.checkMenuLabelVisibility();
this._cd.markForCheck();
};
Object.defineProperty(StHeaderComponent.prototype, "id", {
get: /**
* @return {?}
*/
function () {
return this._el.nativeElement.id || 'st-header';
},
enumerable: true,
configurable: true
});
/**
* @param {?} selected
* @return {?}
*/
StHeaderComponent.prototype.onSelectMenu = /**
* @param {?} selected
* @return {?}
*/
function (selected) {
if (this.navigateByDefault) {
if (selected.external) {
this._windowServiceRef.nativeWindow.open(selected.link, selected.openInNewPage ? '_blank' : '_self');
}
else {
this._router.navigate([selected.link]);
}
}
this.selectMenu.emit(selected);
};
Object.defineProperty(StHeaderComponent.prototype, "menuContainerId", {
get: /**
* @return {?}
*/
function () {
return this.id + "-menu";
},
enumerable: true,
configurable: true
});
Object.defineProperty(StHeaderComponent.prototype, "userMenuElementWidth", {
get: /**
* @return {?}
*/
function () {
/** @type {?} */
var userMenuContainer = this.userMenuContainer.nativeElement;
if (userMenuContainer.children && userMenuContainer.children.length > 0) {
return userMenuContainer.children[0].getBoundingClientRect().width;
}
else {
return userMenuContainer.getBoundingClientRect().width;
}
},
enumerable: true,
configurable: true
});
/**
* @private
* @return {?}
*/
StHeaderComponent.prototype.checkMenuLabelVisibility = /**
* @private
* @return {?}
*/
function () {
/** @type {?} */
var windowSize = this._windowServiceRef.nativeWindow.innerWidth;
/** @type {?} */
var canShowMenuNames = this._headerSize <= windowSize;
if (this.showMenuNames !== canShowMenuNames) {
this.showMenuNames = canShowMenuNames;
this._cd.markForCheck();
}
};
StHeaderComponent.decorators = [
{ type: Component, args: [{
selector: 'st-header',
template: "<!--\n\n \u00A9 2017 Stratio Big Data Inc., Sucursal en Espa\u00F1a.\n\n This software is licensed under the Apache License, Version 2.0.\n This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n See the terms of the License for more details.\n\n SPDX-License-Identifier: Apache-2.0.\n\n-->\n<header class=\"st-header\" #headerDivElement>\n <div class=\"st-header-container container\">\n <div class=\"st-header-container-fix-part\" #headerFixPart>\n <ng-content select=\".st-header-logo\"></ng-content>\n <st-header-menu class=\"st-header-menu-component\"\n [menu]=\"menu\"\n [attr.id]=\"menuContainerId\"\n [showMenuNames]=\"showMenuNames\"\n (selectMenu)=\"onSelectMenu($event)\">\n </st-header-menu>\n </div>\n <div class=\"st-header-shortcut-buttons-container\" #userMenuContainerElement>\n <ng-content select=\".st-header-shortcut-buttons\"></ng-content>\n </div>\n <div class=\"st-header-user-menu-container\" #userMenuContainerElement>\n <ng-content select=\".st-header-user-menu\"></ng-content>\n </div>\n </div>\n</header>\n",
changeDetection: ChangeDetectionStrategy.OnPush
}] }
];
/** @nocollapse */
StHeaderComponent.ctorParameters = function () { return [
{ type: Router },
{ type: StWindowRefService },
{ type: ElementRef },
{ type: ChangeDetectorRef }
]; };
StHeaderComponent.propDecorators = {
menu: [{ type: Input }],
navigateByDefault: [{ type: Input }],
selectMenu: [{ type: Output }],
headerDivElement: [{ type: ViewChild, args: ['headerDivElement', { static: false },] }],
headerFixPart: [{ type: ViewChild, args: ['headerFixPart', { static: false },] }],
userMenuContainer: [{ type: ViewChild, args: ['userMenuContainerElement', { static: true },] }],
onResize: [{ type: HostListener, args: ['window:resize', [],] }]
};
return StHeaderComponent;
}());
export { StHeaderComponent };
if (false) {
/**
* \@Input {StHeaderMenuOption[]} [menu] Array with menu option to show
* @type {?}
*/
StHeaderComponent.prototype.menu;
/**
* \@Input {boolean} [navigateByDefault] True if we want menu to manage navigation, false if navigation will be managed from the outside
* @type {?}
*/
StHeaderComponent.prototype.navigateByDefault;
/**
* \@Output {StHeaderSelection} [selectMenu] Notify any menu option selection
* @type {?}
*/
StHeaderComponent.prototype.selectMenu;
/** @type {?} */
StHeaderComponent.prototype.headerDivElement;
/** @type {?} */
StHeaderComponent.prototype.headerFixPart;
/** @type {?} */
StHeaderComponent.prototype.userMenuContainer;
/** @type {?} */
StHeaderComponent.prototype.showMenuNames;
/**
* @type {?}
* @private
*/
StHeaderComponent.prototype._headerSize;
/**
* @type {?}
* @private
*/
StHeaderComponent.prototype._router;
/**
* @type {?}
* @private
*/
StHeaderComponent.prototype._windowServiceRef;
/**
* @type {?}
* @private
*/
StHeaderComponent.prototype._el;
/**
* @type {?}
* @private
*/
StHeaderComponent.prototype._cd;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdHJhdGlvL2VnZW8vIiwic291cmNlcyI6WyJsaWIvc3QtaGVhZGVyL3N0LWhlYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBVUEsT0FBTyxFQUVKLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUd6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUErQjdEO0lBdUJHLDJCQUNXLE9BQWUsRUFDZixpQkFBcUMsRUFDckMsR0FBZSxFQUNmLEdBQXNCO1FBSHRCLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW9CO1FBQ3JDLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFDZixRQUFHLEdBQUgsR0FBRyxDQUFtQjs7OztRQW5CeEIsU0FBSSxHQUF5QixFQUFFLENBQUM7Ozs7UUFFaEMsc0JBQWlCLEdBQVksSUFBSSxDQUFDOzs7O1FBR2pDLGVBQVUsR0FBb0MsSUFBSSxZQUFZLEVBQXFCLENBQUM7UUFNdkYsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFFN0IsZ0JBQVcsR0FBVyxDQUFDLENBQUM7SUFPNUIsQ0FBQzs7OztJQUVFLDJDQUFlOzs7SUFBdEI7UUFBQSxpQkFNQztRQUxFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUNuSCxV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Ozs7O0lBRXpDLDhDQUEyQzs7Ozs7SUFHM0MsdUNBQThGOztJQUU5Riw2Q0FBK0U7O0lBQy9FLDBDQUF5RTs7SUFDekUsOENBQXVGOztJQUV2RiwwQ0FBcUM7Ozs7O0lBRXJDLHdDQUFnQzs7Ozs7SUFHN0Isb0NBQXVCOzs7OztJQUN2Qiw4Q0FBNkM7Ozs7O0lBQzdDLGdDQUF1Qjs7Ozs7SUFDdkIsZ0NBQThCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIMKpIDIwMTcgU3RyYXRpbyBCaWcgRGF0YSBJbmMuLCBTdWN1cnNhbCBlbiBFc3Bhw7FhLlxuICpcbiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC5cbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7XG4gKiB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLlxuICogU2VlIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wLlxuICovXG5pbXBvcnQge1xuICAgQWZ0ZXJWaWV3SW5pdCxcbiAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICBDb21wb25lbnQsXG4gICBFbGVtZW50UmVmLFxuICAgRXZlbnRFbWl0dGVyLFxuICAgSG9zdExpc3RlbmVyLFxuICAgSW5wdXQsXG4gICBPdXRwdXQsXG4gICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBTdEhlYWRlck1lbnVPcHRpb24sIFN0SGVhZGVyU2VsZWN0aW9uIH0gZnJvbSAnLi9zdC1oZWFkZXIubW9kZWwnO1xuaW1wb3J0IHsgU3RXaW5kb3dSZWZTZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMvd2luZG93LXNlcnZpY2UnO1xuXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIHtDb21wb25lbnR9IFtIZWFkZXJdXG4gKlxuICogVGhlIGhlYWRlciBjb21wb25lbnQgaXMgYSBtYWluIGNvbXBvbmVudCBvZiBhbiBhcHBsaWNhdGlvbi5cbiAqIFRoaXMgY29tcG9uZW50IG11c3QgYmUgb24gdG9wIGFuZCBzY3JvbGwgd2l0aCBwYWdlLCB3aGVuIHNjcm9sbCBpcyBpbiBhIGNhbGN1bGF0ZWQgcG9zaXRpb24sXG4gKiB0aGUgaGVhZGVyIHNocmlua3MgYW5kIGZpeCB0byB0b3AuXG4gKlxuICogQG1vZGVsXG4gKlxuICogICBbSGVhZGVyIG1lbnUgb3B0aW9uc10gey4vc3QtaGVhZGVyLm1vZGVsLnRzI1N0SGVhZGVyTWVudU9wdGlvbn1cbiAqICAgW1N1Ym1lbnUgb3B0aW9uc10gey4vc3QtaGVhZGVyLm1vZGVsLnRzI1N0SGVhZGVyU3ViTWVudU9wdGlvbn1cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHtodG1sfVxuICpcbiAqIGBgYFxuICogPHN0LWhlYWRlciBbbWVudV09XCJoZWFkZXJNZW51U2NoZW1hXCIgaWQ9XCJoZWFkZXJcIj5cbiAqICAgICA8ZGl2IGNsYXNzPVwic3QtaGVhZGVyLWxvZ29cIj5cbiAqICAgICAgICA8IS0tIExvZ28gYXMgc3ZnLCBpbWFnZSwgZXRjLiAtLT5cbiAqICAgICA8L2Rpdj5cbiAqICAgICA8ZGl2IGNsYXNzPVwic3QtaGVhZGVyLXVzZXItbWVudVwiPlxuICogICAgICAgIDwhLS0gUmlnaHQgaGVhZGVyIG1lbnUsIHdpdGggdXNlciBtZW51LCBub3RpZmljYXRpb25zLCBldGMgLS0+XG4gKiAgICAgPC9kaXY+XG4gKlxuICogIDwvc3QtaGVhZGVyPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgc2VsZWN0b3I6ICdzdC1oZWFkZXInLFxuICAgdGVtcGxhdGVVcmw6ICcuL3N0LWhlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBTdEhlYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuXG4gICAvKiogQElucHV0IHtTdEhlYWRlck1lbnVPcHRpb25bXX0gW21lbnVdIEFycmF5IHdpdGggbWVudSBvcHRpb24gdG8gc2hvdyAqL1xuICAgQElucHV0KCkgbWVudTogU3RIZWFkZXJNZW51T3B0aW9uW10gPSBbXTtcbiAgIC8qKiBASW5wdXQge2Jvb2xlYW59IFtuYXZpZ2F0ZUJ5RGVmYXVsdF0gVHJ1ZSBpZiB3ZSB3YW50IG1lbnUgdG8gbWFuYWdlIG5hdmlnYXRpb24sIGZhbHNlIGlmIG5hdmlnYXRpb24gd2lsbCBiZSBtYW5hZ2VkIGZyb20gdGhlIG91dHNpZGUgKi9cbiAgIEBJbnB1dCgpIG5hdmlnYXRlQnlEZWZhdWx0OiBib29sZWFuID0gdHJ1ZTtcblxuICAgLyoqIEBPdXRwdXQge1N0SGVhZGVyU2VsZWN0aW9ufSBbc2VsZWN0TWVudV0gTm90aWZ5IGFueSBtZW51IG9wdGlvbiBzZWxlY3Rpb24gKi9cbiAgIEBPdXRwdXQoKSBzZWxlY3RNZW51OiBFdmVudEVtaXR0ZXI8U3RIZWFkZXJTZWxlY3Rpb24+ID0gbmV3IEV2ZW50RW1pdHRlcjxTdEhlYWRlclNlbGVjdGlvbj4oKTtcblxuICAgQFZpZXdDaGlsZCgnaGVhZGVyRGl2RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBoZWFkZXJEaXZFbGVtZW50OiBFbGVtZW50UmVmO1xuICAgQFZpZXdDaGlsZCgnaGVhZGVyRml4UGFydCcsIHsgc3RhdGljOiBmYWxzZSB9KSBoZWFkZXJGaXhQYXJ0OiBFbGVtZW50UmVmO1xuICAgQFZpZXdDaGlsZCgndXNlck1lbnVDb250YWluZXJFbGVtZW50JywgeyBzdGF0aWM6IHRydWUgfSkgdXNlck1lbnVDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgIHB1YmxpYyBzaG93TWVudU5hbWVzOiBib29sZWFuID0gdHJ1ZTtcblxuICAgcHJpdmF0ZSBfaGVhZGVyU2l6ZTogbnVtYmVyID0gMDtcblxuICAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgICAgIHByaXZhdGUgX3dpbmRvd1NlcnZpY2VSZWY6IFN0V2luZG93UmVmU2VydmljZSxcbiAgICAgIHByaXZhdGUgX2VsOiBFbGVtZW50UmVmLFxuICAgICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmXG4gICApIHsgfVxuXG4gICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgdGhpcy5faGVhZGVyU2l6ZSA9IHRoaXMuaGVhZGVyRml4UGFydC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICsgdGhpcy51c2VyTWVudUVsZW1lbnRXaWR0aCArIDIwO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICB0aGlzLmNoZWNrTWVudUxhYmVsVmlzaWJpbGl0eSgpO1xuICAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgIH1cblxuICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFtdKVxuICAgb25SZXNpemUoKTogdm9pZCB7XG4gICAgICB0aGlzLmNoZWNrTWVudUxhYmVsVmlzaWJpbGl0eSgpO1xuICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICB9XG5cbiAgIHB1YmxpYyBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLl9lbC5uYXRpdmVFbGVtZW50LmlkIHx8ICdzdC1oZWFkZXInO1xuICAgfVxuXG4gICBwdWJsaWMgb25TZWxlY3RNZW51KHNlbGVjdGVkOiBTdEhlYWRlclNlbGVjdGlvbik6IHZvaWQge1xuICAgICAgaWYgKHRoaXMubmF2aWdhdGVCeURlZmF1bHQpIHtcbiAgICAgICAgIGlmIChzZWxlY3RlZC5leHRlcm5hbCkge1xuICAgICAgICAgICAgdGhpcy5fd2luZG93U2VydmljZVJlZi5uYXRpdmVXaW5kb3cub3BlbihzZWxlY3RlZC5saW5rLCBzZWxlY3RlZC5vcGVuSW5OZXdQYWdlID8gJ19ibGFuaycgOiAnX3NlbGYnKTtcbiAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW3NlbGVjdGVkLmxpbmtdKTtcbiAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0TWVudS5lbWl0KHNlbGVjdGVkKTtcbiAgIH1cblxuICAgcHVibGljIGdldCBtZW51Q29udGFpbmVySWQoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmlkfS1tZW51YDtcbiAgIH1cblxuICAgcHVibGljIGdldCB1c2VyTWVudUVsZW1lbnRXaWR0aCgpOiBudW1iZXIge1xuICAgICAgY29uc3QgdXNlck1lbnVDb250YWluZXI6IEhUTUxFbGVtZW50ID0gdGhpcy51c2VyTWVudUNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuXG4gICAgICBpZiAodXNlck1lbnVDb250YWluZXIuY2hpbGRyZW4gJiYgdXNlck1lbnVDb250YWluZXIuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgcmV0dXJuIHVzZXJNZW51Q29udGFpbmVyLmNoaWxkcmVuWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgIHJldHVybiB1c2VyTWVudUNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgIH1cbiAgIH1cblxuICAgcHJpdmF0ZSBjaGVja01lbnVMYWJlbFZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgICBjb25zdCB3aW5kb3dTaXplOiBudW1iZXIgPSB0aGlzLl93aW5kb3dTZXJ2aWNlUmVmLm5hdGl2ZVdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgY29uc3QgY2FuU2hvd01lbnVOYW1lcyA9IHRoaXMuX2hlYWRlclNpemUgPD0gd2luZG93U2l6ZTtcbiAgICAgIGlmICh0aGlzLnNob3dNZW51TmFtZXMgIT09IGNhblNob3dNZW51TmFtZXMpIHtcbiAgICAgICAgIHRoaXMuc2hvd01lbnVOYW1lcyA9IGNhblNob3dNZW51TmFtZXM7XG4gICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgIH1cbn1cbiJdfQ==