@stratio/egeo
Version:
241 lines • 16.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/st-menu/st-menu.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 { Component, Output, EventEmitter, Input, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';
import { FormControl } from '@angular/forms';
import { StMenuPosition } from './st-menu.model';
/**
* \@description {Component} Menu
*
* This components shows a dropdown menu with nested submenus
*
* \@model
*
* [Menu model] {./st-menu.model.ts#StMenuModel}
* [Menu status] {./st-menu.model.ts#StMenuStatus}
* [Menu position] {./st-menu.model.ts#StMenuPosition}
*
* \@example
*
* {html}
*
* ```
* <st-menu
* qaTag="menu-example"
* [menuOptions]="options"
* [dynamicHeight]="true"
* (selectedOption)="onSelectMenuOption(event)">
* </st-menu>
* ```
* @template T
*/
export class StMenuComponent {
/**
* @param {?} _cd
*/
constructor(_cd) {
this._cd = _cd;
/**
* \@input {StMenuPosition} current menu position: left | right
*/
this.position = StMenuPosition.right;
/**
* \@input {string} search input custom label
*/
this.searchLabel = 'Search';
/**
* \@input {boolean} shows menu dropdown animation
*/
this.animate = true;
/**
* \@input {boolean} disable menu toggle
*/
this.disabled = false;
/**
* \@output {StMenuModel<T>} [selectedOption=''] Notify the selected menu option
*/
this.selectedOption = new EventEmitter();
/**
* \@output {string} [searchChange=''] Notify when the search input value changes
*/
this.searchChange = new EventEmitter();
this.showMenu = false;
}
/**
* @return {?}
*/
ngOnInit() {
if (this.search) {
this.searchFormControl = new FormControl('');
this._formControlSubscription = this.searchFormControl.valueChanges.subscribe((/**
* @param {?} value
* @return {?}
*/
value => {
this.searchChange.emit(value);
}));
}
}
/**
* @return {?}
*/
ngOnDestroy() {
if (this._formControlSubscription) {
this._formControlSubscription.unsubscribe();
}
}
/**
* Toggle menu activation
* @param {?} event
* @return {?}
*/
activateMenu(event) {
if (this.showMenu) {
this.hideMenu();
}
else {
setTimeout((/**
* @return {?}
*/
() => {
this.showMenu = true;
this._cd.markForCheck();
}));
}
}
/**
* Emits the selected menu option from childs
* @param {?} event
* @return {?}
*/
selectedMenuOption(event) {
this.selectedOption.emit(event);
this.hideMenu();
}
/**
* Hides the menu and reset the search input value if it's enabled
* @return {?}
*/
hideMenu() {
this.showMenu = false;
if (this.searchFormControl) {
this.searchFormControl.setValue('');
}
this._cd.markForCheck();
}
}
StMenuComponent.decorators = [
{ type: Component, args: [{
selector: 'st-menu',
template: "<div class=\"st-menu\" [ngClass]=\"{'st-menu--disabled': disabled}\">\n <div class=\"st-menu__action\">\n <div class=\"st-menu__link\"\n [ngClass]=\"{'st-menu__button--disabled': disabled}\"\n [id]=\"qaTag\"\n (click)=\"!disabled && activateMenu($event)\" >\n <ng-content></ng-content>\n </div>\n <div class=\"st-menu__options\"\n *ngIf=\"showMenu\"\n clickOutside\n (clickOutside)=\"hideMenu()\"\n [ngClass]=\"{'st-menu__options--left': position === 'left'}\">\n <st-menu-options\n [searchFormControl]=\"searchFormControl\"\n [searchLabel]=\"searchLabel\"\n [menuOptions]=\"menuOptions\"\n [animate]=\"animate\"\n [dynamicHeight]=\"dynamicHeight\"\n [activeOption]=\"activeOption\"\n [position]=\"position\"\n [marginTop]=\"marginTop\"\n [qaTag]=\"qaTag\"\n (selectedOption)=\"selectedMenuOption($event)\"></st-menu-options>\n </div>\n </div>\n</div>\n",
changeDetection: ChangeDetectionStrategy.OnPush,
styles: ["@charset \"UTF-8\";:host{display:inline-block}.st-menu__action{position:relative;display:inline-block}.st-menu__link{cursor:pointer;display:inline-block;position:relative}.st-menu__options{position:absolute;z-index:7500;-webkit-transform:translate3d(0,0,0);top:0;height:100%;margin-top:5px}.st-menu__options--left{right:0}.st-menu--disabled{cursor:not-allowed}.st-menu__button--disabled{pointer-events:none}"]
}] }
];
/** @nocollapse */
StMenuComponent.ctorParameters = () => [
{ type: ChangeDetectorRef }
];
StMenuComponent.propDecorators = {
qaTag: [{ type: Input }],
menuOptions: [{ type: Input }],
activeOption: [{ type: Input }],
position: [{ type: Input }],
search: [{ type: Input }],
searchLabel: [{ type: Input }],
dynamicHeight: [{ type: Input }],
marginTop: [{ type: Input }],
animate: [{ type: Input }],
disabled: [{ type: Input }],
selectedOption: [{ type: Output }],
searchChange: [{ type: Output }]
};
if (false) {
/**
* \@input {string} [qaTag=''] For set id for tests
* @type {?}
*/
StMenuComponent.prototype.qaTag;
/**
* \@input {StMenuModel<T>[]} list of menu items to show
* @type {?}
*/
StMenuComponent.prototype.menuOptions;
/**
* \@input {any} current selected option
* @type {?}
*/
StMenuComponent.prototype.activeOption;
/**
* \@input {StMenuPosition} current menu position: left | right
* @type {?}
*/
StMenuComponent.prototype.position;
/**
* \@input {boolean} show search input
* @type {?}
*/
StMenuComponent.prototype.search;
/**
* \@input {string} search input custom label
* @type {?}
*/
StMenuComponent.prototype.searchLabel;
/**
* \@input {boolean} Show menu in full height mode
* @type {?}
*/
StMenuComponent.prototype.dynamicHeight;
/**
* \@input {number} adjust menu options position
* @type {?}
*/
StMenuComponent.prototype.marginTop;
/**
* \@input {boolean} shows menu dropdown animation
* @type {?}
*/
StMenuComponent.prototype.animate;
/**
* \@input {boolean} disable menu toggle
* @type {?}
*/
StMenuComponent.prototype.disabled;
/**
* \@output {StMenuModel<T>} [selectedOption=''] Notify the selected menu option
* @type {?}
*/
StMenuComponent.prototype.selectedOption;
/**
* \@output {string} [searchChange=''] Notify when the search input value changes
* @type {?}
*/
StMenuComponent.prototype.searchChange;
/** @type {?} */
StMenuComponent.prototype.showMenu;
/** @type {?} */
StMenuComponent.prototype.searchFormControl;
/**
* @type {?}
* @private
*/
StMenuComponent.prototype._formControlSubscription;
/**
* @type {?}
* @private
*/
StMenuComponent.prototype._cd;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3RyYXRpby9lZ2VvLyIsInNvdXJjZXMiOlsibGliL3N0LW1lbnUvc3QtbWVudS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBV0EsT0FBTyxFQUNKLFNBQVMsRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFDOUMsdUJBQXVCLEVBQWEsaUJBQWlCLEVBQ3ZELE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc3QyxPQUFPLEVBQWUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0M5RCxNQUFNLE9BQU8sZUFBZTs7OztJQWlDekIsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7Ozs7UUF4QmpDLGFBQVEsR0FBbUIsY0FBYyxDQUFDLEtBQUssQ0FBQzs7OztRQUloRCxnQkFBVyxHQUFXLFFBQVEsQ0FBQzs7OztRQU0vQixZQUFPLEdBQVksSUFBSSxDQUFDOzs7O1FBRXhCLGFBQVEsR0FBWSxLQUFLLENBQUM7Ozs7UUFHekIsbUJBQWMsR0FBaUMsSUFBSSxZQUFZLEVBQWtCLENBQUM7Ozs7UUFFbEYsaUJBQVksR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUVuRSxhQUFRLEdBQVksS0FBSyxDQUFDO0lBS2EsQ0FBQzs7OztJQUUvQyxRQUFRO1FBQ0wsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFNBQVM7Ozs7WUFBQyxLQUFLLENBQUMsRUFBRTtnQkFDbkYsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsQ0FBQyxFQUFDLENBQUM7U0FDTDtJQUNKLENBQUM7Ozs7SUFFRCxXQUFXO1FBQ1IsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUU7WUFDaEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzlDO0lBQ0osQ0FBQzs7Ozs7O0lBTU0sWUFBWSxDQUFDLEtBQVk7UUFDN0IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNsQjthQUFNO1lBQ0osVUFBVTs7O1lBQUMsR0FBRyxFQUFFO2dCQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzNCLENBQUMsRUFBQyxDQUFDO1NBQ0w7SUFDSixDQUFDOzs7Ozs7SUFNTSxrQkFBa0IsQ0FBQyxLQUFxQjtRQUM1QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkIsQ0FBQzs7Ozs7SUFLTSxRQUFRO1FBQ1osSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDekIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN0QztRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7O1lBekZILFNBQVMsU0FBQztnQkFDUixRQUFRLEVBQUUsU0FBUztnQkFDbkIsaytCQUF1QztnQkFFdkMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O2FBQ2pEOzs7O1lBcENzQyxpQkFBaUI7OztvQkF3Q3BELEtBQUs7MEJBRUwsS0FBSzsyQkFFTCxLQUFLO3VCQUVMLEtBQUs7cUJBRUwsS0FBSzswQkFFTCxLQUFLOzRCQUVMLEtBQUs7d0JBRUwsS0FBSztzQkFFTCxLQUFLO3VCQUVMLEtBQUs7NkJBR0wsTUFBTTsyQkFFTixNQUFNOzs7Ozs7O0lBdkJQLGdDQUF1Qjs7Ozs7SUFFdkIsc0NBQXVDOzs7OztJQUV2Qyx1Q0FBMkI7Ozs7O0lBRTNCLG1DQUF5RDs7Ozs7SUFFekQsaUNBQXlCOzs7OztJQUV6QixzQ0FBd0M7Ozs7O0lBRXhDLHdDQUFnQzs7Ozs7SUFFaEMsb0NBQTJCOzs7OztJQUUzQixrQ0FBaUM7Ozs7O0lBRWpDLG1DQUFtQzs7Ozs7SUFHbkMseUNBQTRGOzs7OztJQUU1Rix1Q0FBMEU7O0lBRTFFLG1DQUFpQzs7SUFDakMsNENBQXNDOzs7OztJQUV0QyxtREFBK0M7Ozs7O0lBRW5DLDhCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiDCqSAyMDE3IFN0cmF0aW8gQmlnIERhdGEgSW5jLiwgU3VjdXJzYWwgZW4gRXNwYcOxYS5cbiAqXG4gKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZO1xuICogd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cbiAqIFNlZSB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMC5cbiAqL1xuXG5pbXBvcnQge1xuICAgQ29tcG9uZW50LCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgRWxlbWVudFJlZixcbiAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBPbkRlc3Ryb3ksIENoYW5nZURldGVjdG9yUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU3RNZW51TW9kZWwsIFN0TWVudVBvc2l0aW9uIH0gZnJvbSAnLi9zdC1tZW51Lm1vZGVsJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24ge0NvbXBvbmVudH0gTWVudVxuICpcbiAqIFRoaXMgY29tcG9uZW50cyBzaG93cyBhIGRyb3Bkb3duIG1lbnUgd2l0aCBuZXN0ZWQgc3VibWVudXNcbiAqXG4gKiAgQG1vZGVsXG4gKlxuICogICBbTWVudSBtb2RlbF0gey4vc3QtbWVudS5tb2RlbC50cyNTdE1lbnVNb2RlbH1cbiAqICAgW01lbnUgc3RhdHVzXSB7Li9zdC1tZW51Lm1vZGVsLnRzI1N0TWVudVN0YXR1c31cbiAqICAgW01lbnUgcG9zaXRpb25dIHsuL3N0LW1lbnUubW9kZWwudHMjU3RNZW51UG9zaXRpb259XG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiB7aHRtbH1cbiAqXG4gKiBgYGBcbiAqICAgIDxzdC1tZW51XG4gKiAgICAgICBxYVRhZz1cIm1lbnUtZXhhbXBsZVwiXG4gKiAgICAgICBbbWVudU9wdGlvbnNdPVwib3B0aW9uc1wiXG4gKiAgICAgICBbZHluYW1pY0hlaWdodF09XCJ0cnVlXCJcbiAqICAgICAgIChzZWxlY3RlZE9wdGlvbik9XCJvblNlbGVjdE1lbnVPcHRpb24oZXZlbnQpXCI+XG4gKiAgICA8L3N0LW1lbnU+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICBzZWxlY3RvcjogJ3N0LW1lbnUnLFxuICAgdGVtcGxhdGVVcmw6ICcuL3N0LW1lbnUuY29tcG9uZW50Lmh0bWwnLFxuICAgc3R5bGVVcmxzOiBbJy4vc3QtbWVudS5jb21wb25lbnQuc2NzcyddLFxuICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgU3RNZW51Q29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuXG4gICAvKiogQGlucHV0IHtzdHJpbmd9IFtxYVRhZz0nJ10gRm9yIHNldCBpZCBmb3IgdGVzdHMgKi9cbiAgIEBJbnB1dCgpIHFhVGFnOiBzdHJpbmc7XG4gICAvKiogQGlucHV0IHtTdE1lbnVNb2RlbDxUPltdfSBsaXN0IG9mIG1lbnUgaXRlbXMgdG8gc2hvdyAqL1xuICAgQElucHV0KCkgbWVudU9wdGlvbnM6IFN0TWVudU1vZGVsPFQ+W107XG4gICAvKiogQGlucHV0IHthbnl9IGN1cnJlbnQgc2VsZWN0ZWQgb3B0aW9uICovXG4gICBASW5wdXQoKSBhY3RpdmVPcHRpb246IGFueTtcbiAgIC8qKiBAaW5wdXQge1N0TWVudVBvc2l0aW9ufSBjdXJyZW50IG1lbnUgcG9zaXRpb246IGxlZnQgfCByaWdodCAqL1xuICAgQElucHV0KCkgcG9zaXRpb246IFN0TWVudVBvc2l0aW9uID0gU3RNZW51UG9zaXRpb24ucmlnaHQ7XG4gICAvKiogQGlucHV0IHtib29sZWFufSBzaG93IHNlYXJjaCBpbnB1dCAqL1xuICAgQElucHV0KCkgc2VhcmNoOiBib29sZWFuO1xuICAgLyoqIEBpbnB1dCB7c3RyaW5nfSBzZWFyY2ggaW5wdXQgY3VzdG9tIGxhYmVsICovXG4gICBASW5wdXQoKSBzZWFyY2hMYWJlbDogc3RyaW5nID0gJ1NlYXJjaCc7XG4gICAvKiogQGlucHV0IHtib29sZWFufSBTaG93IG1lbnUgaW4gZnVsbCBoZWlnaHQgbW9kZSAqL1xuICAgQElucHV0KCkgZHluYW1pY0hlaWdodDogYm9vbGVhbjtcbiAgIC8qKiBAaW5wdXQge251bWJlcn0gYWRqdXN0IG1lbnUgb3B0aW9ucyBwb3NpdGlvbiAqL1xuICAgQElucHV0KCkgbWFyZ2luVG9wOiBudW1iZXI7XG4gICAvKiogQGlucHV0IHtib29sZWFufSBzaG93cyBtZW51IGRyb3Bkb3duIGFuaW1hdGlvbiAqL1xuICAgQElucHV0KCkgYW5pbWF0ZTogYm9vbGVhbiA9IHRydWU7XG4gICAvKiogQGlucHV0IHtib29sZWFufSBkaXNhYmxlIG1lbnUgdG9nZ2xlICovXG4gICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAvKiogQG91dHB1dCB7U3RNZW51TW9kZWw8VD59IFtzZWxlY3RlZE9wdGlvbj0nJ10gTm90aWZ5IHRoZSBzZWxlY3RlZCBtZW51IG9wdGlvbiAqL1xuICAgQE91dHB1dCgpIHNlbGVjdGVkT3B0aW9uOiBFdmVudEVtaXR0ZXI8U3RNZW51TW9kZWw8VD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxTdE1lbnVNb2RlbDxUPj4oKTtcbiAgIC8qKiBAb3V0cHV0IHtzdHJpbmd9IFtzZWFyY2hDaGFuZ2U9JyddIE5vdGlmeSB3aGVuIHRoZSBzZWFyY2ggaW5wdXQgdmFsdWUgY2hhbmdlcyAqL1xuICAgQE91dHB1dCgpIHNlYXJjaENoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgcHVibGljIHNob3dNZW51OiBib29sZWFuID0gZmFsc2U7XG4gICBwdWJsaWMgc2VhcmNoRm9ybUNvbnRyb2w6IEZvcm1Db250cm9sO1xuXG4gICBwcml2YXRlIF9mb3JtQ29udHJvbFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxuXG4gICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaCkge1xuICAgICAgICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG4gICAgICAgICB0aGlzLl9mb3JtQ29udHJvbFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VhcmNoRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaENoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgIH0pO1xuICAgICAgfVxuICAgfVxuXG4gICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLl9mb3JtQ29udHJvbFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgdGhpcy5fZm9ybUNvbnRyb2xTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgIH1cblxuICAgLyoqXG4gICAgKiBUb2dnbGUgbWVudSBhY3RpdmF0aW9uXG4gICAgKiBAcGFyYW0gZXZlbnRcbiAgICAqL1xuICAgcHVibGljIGFjdGl2YXRlTWVudShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLnNob3dNZW51KSB7XG4gICAgICAgICB0aGlzLmhpZGVNZW51KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dNZW51ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgfSk7XG4gICAgICB9XG4gICB9XG5cbiAgIC8qKlxuICAgICogRW1pdHMgdGhlIHNlbGVjdGVkIG1lbnUgb3B0aW9uIGZyb20gY2hpbGRzXG4gICAgKiBAcGFyYW0gZXZlbnQ6IFN0TWVudU1vZGVsPFQ+XG4gICAgKi9cbiAgIHB1YmxpYyBzZWxlY3RlZE1lbnVPcHRpb24oZXZlbnQ6IFN0TWVudU1vZGVsPFQ+KTogdm9pZCB7XG4gICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uLmVtaXQoZXZlbnQpO1xuICAgICAgdGhpcy5oaWRlTWVudSgpO1xuICAgfVxuXG4gICAvKipcbiAgICAqIEhpZGVzIHRoZSBtZW51IGFuZCByZXNldCB0aGUgc2VhcmNoIGlucHV0IHZhbHVlIGlmIGl0J3MgZW5hYmxlZFxuICAgICovXG4gICBwdWJsaWMgaGlkZU1lbnUoKTogdm9pZCB7XG4gICAgICB0aGlzLnNob3dNZW51ID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5zZWFyY2hGb3JtQ29udHJvbCkge1xuICAgICAgICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgIH1cbn1cbiJdfQ==