UNPKG

@stratio/egeo

Version:
206 lines 16.4 kB
/** * @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> * ``` */ export class StHeaderComponent { /** * @param {?} _router * @param {?} _windowServiceRef * @param {?} _el */ constructor(_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 {?} */ ngAfterViewInit() { this._headerSize = this.headerFixPart.nativeElement.getBoundingClientRect().width + this.userMenuElementWidth + 20; this.checkMenuLabelVisibility(); } /** * @return {?} */ onResize() { this.checkMenuLabelVisibility(); } /** * @return {?} */ get id() { return this._el.nativeElement.id || 'st-header'; } /** * @param {?} selected * @return {?} */ onSelectMenu(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); } /** * @return {?} */ get menuContainerId() { return `${this.id}-menu`; } /** * @return {?} */ get userMenuElementWidth() { /** @type {?} */ const userMenuContainer = this.userMenuContainer.nativeElement; if (userMenuContainer.children && userMenuContainer.children.length > 0) { return userMenuContainer.children[0].getBoundingClientRect().width; } else { return userMenuContainer.getBoundingClientRect().width; } } /** * @private * @return {?} */ checkMenuLabelVisibility() { /** @type {?} */ const windowSize = this._windowServiceRef.nativeWindow.innerWidth; /** @type {?} */ const 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 = () => [ { 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', [],] }] }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdHJhdGlvL2VnZW8vIiwic291cmNlcyI6WyJsaWIvc3QtaGVhZGVyL3N0LWhlYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBVUEsT0FBTyxFQUVKLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9DN0QsTUFBTSxPQUFPLGlCQUFpQjs7Ozs7O0lBaUIzQixZQUNXLE9BQWUsRUFDZixpQkFBcUMsRUFDckMsR0FBZTtRQUZmLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW9CO1FBQ3JDLFFBQUcsR0FBSCxHQUFHLENBQVk7Ozs7UUFqQmpCLFNBQUksR0FBeUIsRUFBRSxDQUFDOzs7O1FBRWhDLHNCQUFpQixHQUFZLElBQUksQ0FBQzs7OztRQUVqQyxlQUFVLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFNakUsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFFN0IsZ0JBQVcsR0FBVyxDQUFDLENBQUM7SUFNNUIsQ0FBQzs7OztJQUVFLGVBQWU7UUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO1FBQ25ILElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ25DLENBQUM7Ozs7SUFHRCxRQUFRO1FBQ0wsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDbkMsQ0FBQzs7OztJQUVELElBQVcsRUFBRTtRQUNWLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLFdBQVcsQ0FBQztJQUNuRCxDQUFDOzs7OztJQUVNLFlBQVksQ0FBQyxRQUEyQjtRQUM1QyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN6QixJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUN2RztpQkFBTTtnQkFDSixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ3pDO1NBQ0g7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQzs7OztJQUVELElBQVcsZUFBZTtRQUN2QixPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQzVCLENBQUM7Ozs7SUFFRCxJQUFXLG9CQUFvQjs7Y0FDdEIsaUJBQWlCLEdBQWdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhO1FBRTNFLElBQUksaUJBQWlCLENBQUMsUUFBUSxJQUFJLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3RFLE9BQU8saUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDO1NBQ3JFO2FBQU07WUFDSixPQUFPLGlCQUFpQixDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDO1NBQ3pEO0lBQ0osQ0FBQzs7Ozs7SUFFTyx3QkFBd0I7O2NBQ3ZCLFVBQVUsR0FBVyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFVBQVU7O2NBQ25FLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksVUFBVTtRQUV2RCxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssZ0JBQWdCLEVBQUU7WUFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQztTQUN4QztJQUNKLENBQUM7OztZQTFFSCxTQUFTLFNBQUM7Z0JBQ1IsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLHVqQ0FBeUM7Z0JBQ3pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2pEOzs7O1lBdENRLE1BQU07WUFHTixrQkFBa0I7WUFWeEIsVUFBVTs7O21CQWlEVCxLQUFLO2dDQUVMLEtBQUs7eUJBRUwsTUFBTTsrQkFFTixTQUFTLFNBQUMsa0JBQWtCLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDOzRCQUM3QyxTQUFTLFNBQUMsZUFBZSxFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztnQ0FDMUMsU0FBUyxTQUFDLDBCQUEwQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQzt1QkFpQnBELFlBQVksU0FBQyxlQUFlLEVBQUUsRUFBRTs7Ozs7OztJQXpCakMsaUNBQXlDOzs7OztJQUV6Qyw4Q0FBMkM7Ozs7O0lBRTNDLHVDQUF3RTs7SUFFeEUsNkNBQTZFOztJQUM3RSwwQ0FBdUU7O0lBQ3ZFLDhDQUFxRjs7SUFFckYsMENBQXFDOzs7OztJQUVyQyx3Q0FBZ0M7Ozs7O0lBRzdCLG9DQUF1Qjs7Ozs7SUFDdkIsOENBQTZDOzs7OztJQUM3QyxnQ0FBdUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogwqkgMjAxNyBTdHJhdGlvIEJpZyBEYXRhIEluYy4sIFN1Y3Vyc2FsIGVuIEVzcGHDsWEuXG4gKlxuICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTtcbiAqIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG4gKiBTZWUgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAuXG4gKi9cbmltcG9ydCB7XG4gICBBZnRlclZpZXdJbml0LFxuICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICBDb21wb25lbnQsXG4gICBFbGVtZW50UmVmLFxuICAgRXZlbnRFbWl0dGVyLFxuICAgSG9zdExpc3RlbmVyLFxuICAgSW5wdXQsXG4gICBPdXRwdXQsXG4gICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBTdEhlYWRlck1lbnVPcHRpb24sIFN0SGVhZGVyU2VsZWN0aW9uIH0gZnJvbSAnLi9zdC1oZWFkZXIubW9kZWwnO1xuaW1wb3J0IHsgU3RXaW5kb3dSZWZTZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMvd2luZG93LXNlcnZpY2UnO1xuXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIHtDb21wb25lbnR9IFtIZWFkZXJdXG4gKlxuICogVGhlIGhlYWRlciBjb21wb25lbnQgaXMgYSBtYWluIGNvbXBvbmVudCBvZiBhbiBhcHBsaWNhdGlvbi5cbiAqIFRoaXMgY29tcG9uZW50IG11c3QgYmUgb24gdG9wIGFuZCBzY3JvbGwgd2l0aCBwYWdlLCB3aGVuIHNjcm9sbCBpcyBpbiBhIGNhbGN1bGF0ZWQgcG9zaXRpb24sXG4gKiB0aGUgaGVhZGVyIHNocmlua3MgYW5kIGZpeCB0byB0b3AuXG4gKlxuICogQG1vZGVsXG4gKlxuICogICBbSGVhZGVyIG1lbnUgb3B0aW9uc10gey4vc3QtaGVhZGVyLm1vZGVsLnRzI1N0SGVhZGVyTWVudU9wdGlvbn1cbiAqICAgW1N1Ym1lbnUgb3B0aW9uc10gey4vc3QtaGVhZGVyLm1vZGVsLnRzI1N0SGVhZGVyU3ViTWVudU9wdGlvbn1cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHtodG1sfVxuICpcbiAqIGBgYFxuICogPHN0LWhlYWRlciBbbWVudV09XCJoZWFkZXJNZW51U2NoZW1hXCIgaWQ9XCJoZWFkZXJcIj5cbiAqICAgICA8ZGl2IGNsYXNzPVwic3RoLWhlYWRlci1sb2dvXCI+XG4gKiAgICAgICAgPCEtLSBMb2dvIGFzIHN2ZywgaW1hZ2UsIGV0Yy4gLS0+XG4gKiAgICAgPC9kaXY+XG4gKiAgICAgPGRpdiBjbGFzcz1cInN0aC1oZWFkZXItdXNlci1tZW51XCI+XG4gKiAgICAgICAgPCEtLSBSaWdodCBoZWFkZXIgbWVudSwgd2l0aCB1c2VyIG1lbnUsIG5vdGlmaWNhdGlvbnMsIGV0YyAtLT5cbiAqICAgICA8L2Rpdj5cbiAqXG4gKiAgPC9zdC1oZWFkZXI+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICBzZWxlY3RvcjogJ3N0LWhlYWRlcicsXG4gICB0ZW1wbGF0ZVVybDogJy4vc3QtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFN0SGVhZGVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgIC8qKiBASW5wdXQge1N0SGVhZGVyTWVudU9wdGlvbltdfSBbbWVudV0gQXJyYXkgd2l0aCBtZW51IG9wdGlvbiB0byBzaG93ICovXG4gICBASW5wdXQoKSBtZW51OiBTdEhlYWRlck1lbnVPcHRpb25bXSA9IFtdO1xuICAgLyoqIEBJbnB1dCB7U3RIZWFkZXJNZW51T3B0aW9uW119IFttZW51XSBBcnJheSB3aXRoIG1lbnUgb3B0aW9uIHRvIHNob3cgKi9cbiAgIEBJbnB1dCgpIG5hdmlnYXRlQnlEZWZhdWx0OiBib29sZWFuID0gdHJ1ZTtcbiAgIC8qKiBAT3V0cHV0IHtzdHJpbmd9IFtzZWxlY3RNZW51XSBOb3RpZnkgYW55IG1lbnUgb3B0aW9uIHNlbGVjdGlvbiAqL1xuICAgQE91dHB1dCgpIHNlbGVjdE1lbnU6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgIEBWaWV3Q2hpbGQoJ2hlYWRlckRpdkVsZW1lbnQnLCB7c3RhdGljOiBmYWxzZX0pIGhlYWRlckRpdkVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gICBAVmlld0NoaWxkKCdoZWFkZXJGaXhQYXJ0Jywge3N0YXRpYzogZmFsc2V9KSBoZWFkZXJGaXhQYXJ0OiBFbGVtZW50UmVmO1xuICAgQFZpZXdDaGlsZCgndXNlck1lbnVDb250YWluZXJFbGVtZW50Jywge3N0YXRpYzogdHJ1ZX0pIHVzZXJNZW51Q29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gICBwdWJsaWMgc2hvd01lbnVOYW1lczogYm9vbGVhbiA9IHRydWU7XG5cbiAgIHByaXZhdGUgX2hlYWRlclNpemU6IG51bWJlciA9IDA7XG5cbiAgIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgICBwcml2YXRlIF93aW5kb3dTZXJ2aWNlUmVmOiBTdFdpbmRvd1JlZlNlcnZpY2UsXG4gICAgICBwcml2YXRlIF9lbDogRWxlbWVudFJlZlxuICAgKSB7IH1cblxuICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgIHRoaXMuX2hlYWRlclNpemUgPSB0aGlzLmhlYWRlckZpeFBhcnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCArIHRoaXMudXNlck1lbnVFbGVtZW50V2lkdGggKyAyMDtcbiAgICAgIHRoaXMuY2hlY2tNZW51TGFiZWxWaXNpYmlsaXR5KCk7XG4gICB9XG5cbiAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbXSlcbiAgIG9uUmVzaXplKCk6IHZvaWQge1xuICAgICAgdGhpcy5jaGVja01lbnVMYWJlbFZpc2liaWxpdHkoKTtcbiAgIH1cblxuICAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQuaWQgfHwgJ3N0LWhlYWRlcic7XG4gICB9XG5cbiAgIHB1YmxpYyBvblNlbGVjdE1lbnUoc2VsZWN0ZWQ6IFN0SGVhZGVyU2VsZWN0aW9uKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5uYXZpZ2F0ZUJ5RGVmYXVsdCkge1xuICAgICAgICAgaWYgKHNlbGVjdGVkLmV4dGVybmFsKSB7XG4gICAgICAgICAgICB0aGlzLl93aW5kb3dTZXJ2aWNlUmVmLm5hdGl2ZVdpbmRvdy5vcGVuKHNlbGVjdGVkLmxpbmssIHNlbGVjdGVkLm9wZW5Jbk5ld1BhZ2UgPyAnX2JsYW5rJyA6ICdfc2VsZicpO1xuICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbc2VsZWN0ZWQubGlua10pO1xuICAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RNZW51LmVtaXQoc2VsZWN0ZWQubGluayk7XG4gICB9XG5cbiAgIHB1YmxpYyBnZXQgbWVudUNvbnRhaW5lcklkKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5pZH0tbWVudWA7XG4gICB9XG5cbiAgIHB1YmxpYyBnZXQgdXNlck1lbnVFbGVtZW50V2lkdGgoKTogbnVtYmVyIHtcbiAgICAgIGNvbnN0IHVzZXJNZW51Q29udGFpbmVyOiBIVE1MRWxlbWVudCA9IHRoaXMudXNlck1lbnVDb250YWluZXIubmF0aXZlRWxlbWVudDtcblxuICAgICAgaWYgKHVzZXJNZW51Q29udGFpbmVyLmNoaWxkcmVuICYmIHVzZXJNZW51Q29udGFpbmVyLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgIHJldHVybiB1c2VyTWVudUNvbnRhaW5lci5jaGlsZHJlblswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICByZXR1cm4gdXNlck1lbnVDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICB9XG4gICB9XG5cbiAgIHByaXZhdGUgY2hlY2tNZW51TGFiZWxWaXNpYmlsaXR5KCk6IHZvaWQge1xuICAgICAgY29uc3Qgd2luZG93U2l6ZTogbnVtYmVyID0gdGhpcy5fd2luZG93U2VydmljZVJlZi5uYXRpdmVXaW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgIGNvbnN0IGNhblNob3dNZW51TmFtZXMgPSB0aGlzLl9oZWFkZXJTaXplIDw9IHdpbmRvd1NpemU7XG5cbiAgICAgIGlmICh0aGlzLnNob3dNZW51TmFtZXMgIT09IGNhblNob3dNZW51TmFtZXMpIHtcbiAgICAgICAgIHRoaXMuc2hvd01lbnVOYW1lcyA9IGNhblNob3dNZW51TmFtZXM7XG4gICAgICB9XG4gICB9XG59XG4iXX0=