@stratio/egeo
Version:
229 lines • 17.5 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, 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="sth-header-logo">
* <!-- Logo as svg, image, etc. -->
* </div>
* <div class="sth-header-user-menu">
* <!-- Right header menu, with user menu, notifications, etc -->
* </div>
*
* </st-header>
* ```
*/
var StHeaderComponent = /** @class */ (function () {
function StHeaderComponent(_router, _windowServiceRef, _el) {
this._router = _router;
this._windowServiceRef = _windowServiceRef;
this._el = _el;
/**
* \@Input {StHeaderMenuOption[]} [menu] Array with menu option to show
*/
this.menu = [];
/**
* \@Input {StHeaderMenuOption[]} [menu] Array with menu option to show
*/
this.navigateByDefault = true;
/**
* \@Output {string} [selectMenu] Notify any menu option selection
*/
this.selectMenu = new EventEmitter();
this.showMenuNames = true;
this._headerSize = 0;
}
/**
* @return {?}
*/
StHeaderComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
this._headerSize = this.headerFixPart.nativeElement.getBoundingClientRect().width + this.userMenuElementWidth + 20;
this.checkMenuLabelVisibility();
};
/**
* @return {?}
*/
StHeaderComponent.prototype.onResize = /**
* @return {?}
*/
function () {
this.checkMenuLabelVisibility();
};
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.link);
};
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;
}
};
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=\"sth-header\" #headerDivElement>\n <div class=\"sth-header-container container\">\n <div class=\"sth-header-container-fix-part\" #headerFixPart>\n <ng-content select=\".sth-header-logo\"></ng-content>\n <st-header-menu class=\"sth-header-menu-component\" [menu]=\"menu\" [attr.id]=\"menuContainerId\" [showMenuNames]=\"showMenuNames\" (selectMenu)=\"onSelectMenu($event)\"></st-header-menu>\n </div>\n <div class=\"sth-header-user-menu-container\" #userMenuContainerElement>\n <ng-content select=\".sth-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 }
]; };
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 {StHeaderMenuOption[]} [menu] Array with menu option to show
* @type {?}
*/
StHeaderComponent.prototype.navigateByDefault;
/**
* \@Output {string} [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;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdHJhdGlvL2VnZW8vIiwic291cmNlcyI6WyJsaWIvc3QtaGVhZGVyL3N0LWhlYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBVUEsT0FBTyxFQUVKLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStCN0Q7SUFzQkcsMkJBQ1csT0FBZSxFQUNmLGlCQUFxQyxFQUNyQyxHQUFlO1FBRmYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBb0I7UUFDckMsUUFBRyxHQUFILEdBQUcsQ0FBWTs7OztRQWpCakIsU0FBSSxHQUF5QixFQUFFLENBQUM7Ozs7UUFFaEMsc0JBQWlCLEdBQVksSUFBSSxDQUFDOzs7O1FBRWpDLGVBQVUsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQU1qRSxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUU3QixnQkFBVyxHQUFXLENBQUMsQ0FBQztJQU01QixDQUFDOzs7O0lBRUUsMkNBQWU7OztJQUF0QjtRQUNHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUNuSCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNuQyxDQUFDOzs7O0lBR0Qsb0NBQVE7OztJQURSO1FBRUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELHNCQUFXLGlDQUFFOzs7O1FBQWI7WUFDRyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxXQUFXLENBQUM7UUFDbkQsQ0FBQzs7O09BQUE7Ozs7O0lBRU0sd0NBQVk7Ozs7SUFBbkIsVUFBb0IsUUFBMkI7UUFDNUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDekIsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFO2dCQUNwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDdkc7aUJBQU07Z0JBQ0osSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUN6QztTQUNIO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxzQkFBVyw4Q0FBZTs7OztRQUExQjtZQUNHLE9BQVUsSUFBSSxDQUFDLEVBQUUsVUFBTyxDQUFDO1FBQzVCLENBQUM7OztPQUFBO0lBRUQsc0JBQVcsbURBQW9COzs7O1FBQS9COztnQkFDUyxpQkFBaUIsR0FBZ0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWE7WUFFM0UsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLElBQUksaUJBQWlCLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3RFLE9BQU8saUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDO2FBQ3JFO2lCQUFNO2dCQUNKLE9BQU8saUJBQWlCLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLENBQUM7YUFDekQ7UUFDSixDQUFDOzs7T0FBQTs7Ozs7SUFFTyxvREFBd0I7Ozs7SUFBaEM7O1lBQ1MsVUFBVSxHQUFXLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsVUFBVTs7WUFDbkUsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxVQUFVO1FBRXZELElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxnQkFBZ0IsRUFBRTtZQUMxQyxJQUFJLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDO1NBQ3hDO0lBQ0osQ0FBQzs7Z0JBMUVILFNBQVMsU0FBQztvQkFDUixRQUFRLEVBQUUsV0FBVztvQkFDckIsdWpDQUF5QztvQkFDekMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2pEOzs7O2dCQXRDUSxNQUFNO2dCQUdOLGtCQUFrQjtnQkFWeEIsVUFBVTs7O3VCQWlEVCxLQUFLO29DQUVMLEtBQUs7NkJBRUwsTUFBTTttQ0FFTixTQUFTLFNBQUMsa0JBQWtCLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDO2dDQUM3QyxTQUFTLFNBQUMsZUFBZSxFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztvQ0FDMUMsU0FBUyxTQUFDLDBCQUEwQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQzsyQkFpQnBELFlBQVksU0FBQyxlQUFlLEVBQUUsRUFBRTs7SUEwQ3BDLHdCQUFDO0NBQUEsQUEzRUQsSUEyRUM7U0F0RVksaUJBQWlCOzs7Ozs7SUFHM0IsaUNBQXlDOzs7OztJQUV6Qyw4Q0FBMkM7Ozs7O0lBRTNDLHVDQUF3RTs7SUFFeEUsNkNBQTZFOztJQUM3RSwwQ0FBdUU7O0lBQ3ZFLDhDQUFxRjs7SUFFckYsMENBQXFDOzs7OztJQUVyQyx3Q0FBZ0M7Ozs7O0lBRzdCLG9DQUF1Qjs7Ozs7SUFDdkIsOENBQTZDOzs7OztJQUM3QyxnQ0FBdUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogwqkgMjAxNyBTdHJhdGlvIEJpZyBEYXRhIEluYy4sIFN1Y3Vyc2FsIGVuIEVzcGHDsWEuXG4gKlxuICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTtcbiAqIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG4gKiBTZWUgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAuXG4gKi9cbmltcG9ydCB7XG4gICBBZnRlclZpZXdJbml0LFxuICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICBDb21wb25lbnQsXG4gICBFbGVtZW50UmVmLFxuICAgRXZlbnRFbWl0dGVyLFxuICAgSG9zdExpc3RlbmVyLFxuICAgSW5wdXQsXG4gICBPdXRwdXQsXG4gICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBTdEhlYWRlck1lbnVPcHRpb24sIFN0SGVhZGVyU2VsZWN0aW9uIH0gZnJvbSAnLi9zdC1oZWFkZXIubW9kZWwnO1xuaW1wb3J0IHsgU3RXaW5kb3dSZWZTZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMvd2luZG93LXNlcnZpY2UnO1xuXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIHtDb21wb25lbnR9IFtIZWFkZXJdXG4gKlxuICogVGhlIGhlYWRlciBjb21wb25lbnQgaXMgYSBtYWluIGNvbXBvbmVudCBvZiBhbiBhcHBsaWNhdGlvbi5cbiAqIFRoaXMgY29tcG9uZW50IG11c3QgYmUgb24gdG9wIGFuZCBzY3JvbGwgd2l0aCBwYWdlLCB3aGVuIHNjcm9sbCBpcyBpbiBhIGNhbGN1bGF0ZWQgcG9zaXRpb24sXG4gKiB0aGUgaGVhZGVyIHNocmlua3MgYW5kIGZpeCB0byB0b3AuXG4gKlxuICogQG1vZGVsXG4gKlxuICogICBbSGVhZGVyIG1lbnUgb3B0aW9uc10gey4vc3QtaGVhZGVyLm1vZGVsLnRzI1N0SGVhZGVyTWVudU9wdGlvbn1cbiAqICAgW1N1Ym1lbnUgb3B0aW9uc10gey4vc3QtaGVhZGVyLm1vZGVsLnRzI1N0SGVhZGVyU3ViTWVudU9wdGlvbn1cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHtodG1sfVxuICpcbiAqIGBgYFxuICogPHN0LWhlYWRlciBbbWVudV09XCJoZWFkZXJNZW51U2NoZW1hXCIgaWQ9XCJoZWFkZXJcIj5cbiAqICAgICA8ZGl2IGNsYXNzPVwic3RoLWhlYWRlci1sb2dvXCI+XG4gKiAgICAgICAgPCEtLSBMb2dvIGFzIHN2ZywgaW1hZ2UsIGV0Yy4gLS0+XG4gKiAgICAgPC9kaXY+XG4gKiAgICAgPGRpdiBjbGFzcz1cInN0aC1oZWFkZXItdXNlci1tZW51XCI+XG4gKiAgICAgICAgPCEtLSBSaWdodCBoZWFkZXIgbWVudSwgd2l0aCB1c2VyIG1lbnUsIG5vdGlmaWNhdGlvbnMsIGV0YyAtLT5cbiAqICAgICA8L2Rpdj5cbiAqXG4gKiAgPC9zdC1oZWFkZXI+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICBzZWxlY3RvcjogJ3N0LWhlYWRlcicsXG4gICB0ZW1wbGF0ZVVybDogJy4vc3QtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFN0SGVhZGVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgIC8qKiBASW5wdXQge1N0SGVhZGVyTWVudU9wdGlvbltdfSBbbWVudV0gQXJyYXkgd2l0aCBtZW51IG9wdGlvbiB0byBzaG93ICovXG4gICBASW5wdXQoKSBtZW51OiBTdEhlYWRlck1lbnVPcHRpb25bXSA9IFtdO1xuICAgLyoqIEBJbnB1dCB7U3RIZWFkZXJNZW51T3B0aW9uW119IFttZW51XSBBcnJheSB3aXRoIG1lbnUgb3B0aW9uIHRvIHNob3cgKi9cbiAgIEBJbnB1dCgpIG5hdmlnYXRlQnlEZWZhdWx0OiBib29sZWFuID0gdHJ1ZTtcbiAgIC8qKiBAT3V0cHV0IHtzdHJpbmd9IFtzZWxlY3RNZW51XSBOb3RpZnkgYW55IG1lbnUgb3B0aW9uIHNlbGVjdGlvbiAqL1xuICAgQE91dHB1dCgpIHNlbGVjdE1lbnU6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgIEBWaWV3Q2hpbGQoJ2hlYWRlckRpdkVsZW1lbnQnLCB7c3RhdGljOiBmYWxzZX0pIGhlYWRlckRpdkVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gICBAVmlld0NoaWxkKCdoZWFkZXJGaXhQYXJ0Jywge3N0YXRpYzogZmFsc2V9KSBoZWFkZXJGaXhQYXJ0OiBFbGVtZW50UmVmO1xuICAgQFZpZXdDaGlsZCgndXNlck1lbnVDb250YWluZXJFbGVtZW50Jywge3N0YXRpYzogdHJ1ZX0pIHVzZXJNZW51Q29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gICBwdWJsaWMgc2hvd01lbnVOYW1lczogYm9vbGVhbiA9IHRydWU7XG5cbiAgIHByaXZhdGUgX2hlYWRlclNpemU6IG51bWJlciA9IDA7XG5cbiAgIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgICBwcml2YXRlIF93aW5kb3dTZXJ2aWNlUmVmOiBTdFdpbmRvd1JlZlNlcnZpY2UsXG4gICAgICBwcml2YXRlIF9lbDogRWxlbWVudFJlZlxuICAgKSB7IH1cblxuICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgIHRoaXMuX2hlYWRlclNpemUgPSB0aGlzLmhlYWRlckZpeFBhcnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCArIHRoaXMudXNlck1lbnVFbGVtZW50V2lkdGggKyAyMDtcbiAgICAgIHRoaXMuY2hlY2tNZW51TGFiZWxWaXNpYmlsaXR5KCk7XG4gICB9XG5cbiAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbXSlcbiAgIG9uUmVzaXplKCk6IHZvaWQge1xuICAgICAgdGhpcy5jaGVja01lbnVMYWJlbFZpc2liaWxpdHkoKTtcbiAgIH1cblxuICAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQuaWQgfHwgJ3N0LWhlYWRlcic7XG4gICB9XG5cbiAgIHB1YmxpYyBvblNlbGVjdE1lbnUoc2VsZWN0ZWQ6IFN0SGVhZGVyU2VsZWN0aW9uKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5uYXZpZ2F0ZUJ5RGVmYXVsdCkge1xuICAgICAgICAgaWYgKHNlbGVjdGVkLmV4dGVybmFsKSB7XG4gICAgICAgICAgICB0aGlzLl93aW5kb3dTZXJ2aWNlUmVmLm5hdGl2ZVdpbmRvdy5vcGVuKHNlbGVjdGVkLmxpbmssIHNlbGVjdGVkLm9wZW5Jbk5ld1BhZ2UgPyAnX2JsYW5rJyA6ICdfc2VsZicpO1xuICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbc2VsZWN0ZWQubGlua10pO1xuICAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RNZW51LmVtaXQoc2VsZWN0ZWQubGluayk7XG4gICB9XG5cbiAgIHB1YmxpYyBnZXQgbWVudUNvbnRhaW5lcklkKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5pZH0tbWVudWA7XG4gICB9XG5cbiAgIHB1YmxpYyBnZXQgdXNlck1lbnVFbGVtZW50V2lkdGgoKTogbnVtYmVyIHtcbiAgICAgIGNvbnN0IHVzZXJNZW51Q29udGFpbmVyOiBIVE1MRWxlbWVudCA9IHRoaXMudXNlck1lbnVDb250YWluZXIubmF0aXZlRWxlbWVudDtcblxuICAgICAgaWYgKHVzZXJNZW51Q29udGFpbmVyLmNoaWxkcmVuICYmIHVzZXJNZW51Q29udGFpbmVyLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgIHJldHVybiB1c2VyTWVudUNvbnRhaW5lci5jaGlsZHJlblswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICByZXR1cm4gdXNlck1lbnVDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICB9XG4gICB9XG5cbiAgIHByaXZhdGUgY2hlY2tNZW51TGFiZWxWaXNpYmlsaXR5KCk6IHZvaWQge1xuICAgICAgY29uc3Qgd2luZG93U2l6ZTogbnVtYmVyID0gdGhpcy5fd2luZG93U2VydmljZVJlZi5uYXRpdmVXaW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgIGNvbnN0IGNhblNob3dNZW51TmFtZXMgPSB0aGlzLl9oZWFkZXJTaXplIDw9IHdpbmRvd1NpemU7XG5cbiAgICAgIGlmICh0aGlzLnNob3dNZW51TmFtZXMgIT09IGNhblNob3dNZW51TmFtZXMpIHtcbiAgICAgICAgIHRoaXMuc2hvd01lbnVOYW1lcyA9IGNhblNob3dNZW51TmFtZXM7XG4gICAgICB9XG4gICB9XG59XG4iXX0=