UNPKG

lamb-web-lib

Version:

LambWebLib. Es un proyecto angular de tipo Librería. que contiene una Suit de componentes reutilizables para el proyecto [Lamb Financial](https://lamb.upeu.edu.pe).

334 lines 28.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; /** * @license * Copyright Lamb Team. All Rights Reserved. * Licensed under the MIT License. See License.txt in the project root for license information. */ import { Component, Input, HostBinding } from '@angular/core'; import { convertToBoolProperty } from './helpers'; import { filter, takeWhile } from 'rxjs/operators'; import { Router, NavigationEnd } from '@angular/router'; import { LambMenuInternalService } from './menu-internal.service'; var LambMenuComponent = /** @class */ (function () { function LambMenuComponent(lambMenuInternalService, router) { this.lambMenuInternalService = lambMenuInternalService; this.router = router; /** * Lista de elementos de menú. */ // @Input() lambItems: LambMenuItem[]; this.lambItems = []; this.alive = true; this.autoCollapseValue = false; } Object.defineProperty(LambMenuComponent.prototype, "items", { set: /** * @param {?} lambItems * @return {?} */ function (lambItems) { if (lambItems) { // setTimeout(() => { this.lambItems = lambItems; // }, 0); this.afterLoadItems(); } }, enumerable: true, configurable: true }); Object.defineProperty(LambMenuComponent.prototype, "inverse", { /** * Hace que los colores sean inversos según el tema actual. * El valor predeterminado es "false" */ set: /** * Hace que los colores sean inversos según el tema actual. * El valor predeterminado es "false" * @param {?} val * @return {?} */ function (val) { this.inverseValue = convertToBoolProperty(val); }, enumerable: true, configurable: true }); Object.defineProperty(LambMenuComponent.prototype, "autoCollapse", { /** * Contraer todos los submenus abiertos en el event de aternar (toggle event) * El valor predeterminado es "false". */ set: /** * Contraer todos los submenus abiertos en el event de aternar (toggle event) * El valor predeterminado es "false". * @param {?} val * @return {?} */ function (val) { this.autoCollapseValue = convertToBoolProperty(val); }, enumerable: true, configurable: true }); /** * @return {?} */ LambMenuComponent.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; this.lambMenuInternalService .onAddItem() .pipe(takeWhile(function () { return _this.alive; }), filter(function (data) { return _this.compareTag(data.tag); })) .subscribe(function (data) { return _this.onAddItem(data); }); this.lambMenuInternalService .onNavigateHome() .pipe(takeWhile(function () { return _this.alive; }), filter(function (data) { return _this.compareTag(data.tag); })) .subscribe(function () { return _this.navigateHome(); }); this.lambMenuInternalService .onGetSelectedItem() .pipe(takeWhile(function () { return _this.alive; }), filter(function (data) { return _this.compareTag(data.tag); })) .subscribe(function (data) { data.listener.next({ tag: _this.tag, item: _this.getSelectedItem(_this.lambItems) }); }); this.router.events .pipe(takeWhile(function () { return _this.alive; }), filter(function (event) { return event instanceof NavigationEnd; })) .subscribe(function () { _this.lambMenuInternalService.resetItems(_this.lambItems); _this.lambMenuInternalService.updateSelection(_this.lambItems, _this.tag, _this.autoCollapseValue); }); (_a = this.lambItems).push.apply(_a, tslib_1.__spread(this.lambMenuInternalService.getItems())); var _a; }; /** * @param {?} items * @return {?} */ LambMenuComponent.prototype.getSelectedItem = /** * @param {?} items * @return {?} */ function (items) { var _this = this; /** @type {?} */ var selected = null; items.forEach(function (item) { if (item.selected) { selected = item; } if (item.selected && item.children && item.children.length > 0) { selected = _this.getSelectedItem(item.children); } }); return selected; }; /** * @return {?} */ LambMenuComponent.prototype.afterLoadItems = /** * @return {?} */ function () { var _this = this; // Codigo extra, propio del proyecto this.lambMenuInternalService.prepareItems(this.lambItems); setTimeout(function () { return _this.lambMenuInternalService.updateSelection(_this.lambItems, _this.tag); }); }; /** * @return {?} */ LambMenuComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { }; /** * @param {?} data * @return {?} */ LambMenuComponent.prototype.onAddItem = /** * @param {?} data * @return {?} */ function (data) { (_a = this.lambItems).push.apply(_a, tslib_1.__spread(data.items)); this.lambMenuInternalService.prepareItems(this.lambItems); this.lambMenuInternalService.updateSelection(this.lambItems, this.tag, this.autoCollapseValue); var _a; }; /** Attr Menus */ /** * Attr Menus * @param {?} item * @return {?} */ LambMenuComponent.prototype.onHoverItem = /** * Attr Menus * @param {?} item * @return {?} */ function (item) { this.lambMenuInternalService.itemHover(item, this.tag); }; // TODO: No se dispara cuando la pagina se recarga. // TODO: No se dispara cuando la pagina se recarga. /** * @param {?} item * @return {?} */ LambMenuComponent.prototype.onSelectItem = // TODO: No se dispara cuando la pagina se recarga. /** * @param {?} item * @return {?} */ function (item) { this.lambMenuInternalService.resetItems(this.lambItems); this.lambMenuInternalService.selectItem(item, this.tag); }; /** * @param {?} item * @return {?} */ LambMenuComponent.prototype.onItemClick = /** * @param {?} item * @return {?} */ function (item) { this.lambMenuInternalService.itemClick(item, this.tag); }; /** * @return {?} */ LambMenuComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this.alive = false; }; /** * @param {?} item * @return {?} */ LambMenuComponent.prototype.onToggleSubMenu = /** * @param {?} item * @return {?} */ function (item) { if (this.autoCollapseValue) { this.lambMenuInternalService.collapseAll(this.lambItems, this.tag, item); } item.expanded = !item.expanded; this.lambMenuInternalService.submenuToggle(item, this.tag); }; /** * @param {?} tag * @return {?} */ LambMenuComponent.prototype.compareTag = /** * @param {?} tag * @return {?} */ function (tag) { return !tag || tag === this.tag; }; /** * @return {?} */ LambMenuComponent.prototype.navigateHome = /** * @return {?} */ function () { /** @type {?} */ var homeItem = this.getHomeItem(this.lambItems); if (homeItem) { if (homeItem.link) { this.router.navigate([homeItem.link]); } if (homeItem.url) { window.location.href = homeItem.url; } } }; /** * @param {?} items * @return {?} */ LambMenuComponent.prototype.getHomeItem = /** * @param {?} items * @return {?} */ function (items) { try { for (var items_1 = tslib_1.__values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) { var item = items_1_1.value; if (item.home) { return item; } /** @type {?} */ var homeItem = item.children && this.getHomeItem(item.children); if (homeItem) { return homeItem; } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1); } finally { if (e_1) throw e_1.error; } } var e_1, _a; }; LambMenuComponent.decorators = [ { type: Component, args: [{ selector: 'lamb-menu', template: "\n <ul class=\"lamb-menu-items\">\n <li lambMenuItem *ngFor=\"let item of lambItems\"\n [lambMenuItemm]=\"item\"\n (hoverItem)=\"onHoverItem($event)\"\n (toggleSubMenu)=\"onToggleSubMenu($event)\"\n (selectItem)=\"onSelectItem($event)\"\n (itemClick)=\"onItemClick($event)\"\n class=\"lamb-menu-item\"></li>\n </ul>\n ", styles: ["@charset \"UTF-8\";:host ::ng-deep{display:block;margin:0 -1.25rem -1.25rem}:host ::ng-deep .lamb-menu-item>.lamb-menu-items,:host ::ng-deep .lamb-menu-items{list-style-type:none;overflow:hidden;transition:max-height .3s ease-in}:host ::ng-deep .lamb-menu-item a{display:flex;color:inherit;text-decoration:none;align-items:center}:host ::ng-deep .lamb-menu-item a .lamb-menu-title{flex:1}"], },] }, ]; LambMenuComponent.ctorParameters = function () { return [ { type: LambMenuInternalService }, { type: Router } ]; }; LambMenuComponent.propDecorators = { inverseValue: [{ type: HostBinding, args: ['class.inverse',] }], tag: [{ type: Input }], items: [{ type: Input }], inverse: [{ type: Input }], autoCollapse: [{ type: Input }] }; return LambMenuComponent; }()); export { LambMenuComponent }; if (false) { /** @type {?} */ LambMenuComponent.prototype.inverseValue; /** * Las etiquetas de un menú con un Id, se pueden usar posteriormente en el servicio * de menú para determinar qué menú desencadenó la acción, si existen varios menús en la página. * @type {?} */ LambMenuComponent.prototype.tag; /** * Lista de elementos de menú. * @type {?} */ LambMenuComponent.prototype.lambItems; /** @type {?} */ LambMenuComponent.prototype.alive; /** @type {?} */ LambMenuComponent.prototype.autoCollapseValue; /** @type {?} */ LambMenuComponent.prototype.lambMenuInternalService; /** @type {?} */ LambMenuComponent.prototype.router; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9sYW1iLXdlYi1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9tZW51L21lbnUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFPQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxXQUFXLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBRWhHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFeEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbEU7SUE0REUsMkJBQW9CLHVCQUFnRCxFQUUxRCxNQUFjO1FBRkosNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUUxRCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBdEN4Qjs7V0FFRztRQUNILHNDQUFzQztRQUMvQixjQUFTLEdBQW1CLEVBQUUsQ0FBQztRQTZCOUIsVUFBSyxHQUFHLElBQUksQ0FBQztRQUNiLHNCQUFpQixHQUFHLEtBQUssQ0FBQztJQUs5QixDQUFDO0lBbENMLHNCQUNJLG9DQUFLOzs7OztRQURULFVBQ1UsU0FBeUI7WUFDakMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDZCxxQkFBcUI7Z0JBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO2dCQUMzQixTQUFTO2dCQUNULElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixDQUFDO1FBQ0gsQ0FBQzs7O09BQUE7SUFNRCxzQkFDSSxzQ0FBTztRQUxYOzs7V0FHRzs7Ozs7OztRQUNILFVBQ1ksR0FBWTtZQUN0QixJQUFJLENBQUMsWUFBWSxHQUFH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QWU7c0JBTTNCLEtBQUs7d0JBT0wsS0FBSzswQkFjTCxLQUFLOytCQVNMLEtBQUs7O0lBMklSLHdCQUFDO0NBQUEsQUEvTEQsSUErTEM7U0FoTFksaUJBQWlCOzs7SUFDNUIseUNBQW9EOzs7Ozs7SUFNcEQsZ0NBQXFCOzs7OztJQU1yQixzQ0FBc0M7O0lBNkJ0QyxrQ0FBcUI7O0lBQ3JCLDhDQUFrQzs7SUFFdEIsb0RBQXdEOztJQUVsRSxtQ0FBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBMYW1iIFRlYW0uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBIb3N0QmluZGluZywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExhbWJNZW51SXRlbSwgTGFtYk1lbnVCYWcgfSBmcm9tICcuL21lbnUtaXRlbSc7XHJcbmltcG9ydCB7IGNvbnZlcnRUb0Jvb2xQcm9wZXJ0eSB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IGZpbHRlciwgdGFrZVdoaWxlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIE5hdmlnYXRpb25FbmQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTGFtYk1lbnVJbnRlcm5hbFNlcnZpY2UgfSBmcm9tICcuL21lbnUtaW50ZXJuYWwuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xhbWItbWVudScsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDx1bCBjbGFzcz1cImxhbWItbWVudS1pdGVtc1wiPlxyXG4gICAgICA8bGkgbGFtYk1lbnVJdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIGxhbWJJdGVtc1wiXHJcbiAgICAgICAgW2xhbWJNZW51SXRlbW1dPVwiaXRlbVwiXHJcbiAgICAgICAgKGhvdmVySXRlbSk9XCJvbkhvdmVySXRlbSgkZXZlbnQpXCJcclxuICAgICAgICAodG9nZ2xlU3ViTWVudSk9XCJvblRvZ2dsZVN1Yk1lbnUoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdEl0ZW0pPVwib25TZWxlY3RJdGVtKCRldmVudClcIlxyXG4gICAgICAgIChpdGVtQ2xpY2spPVwib25JdGVtQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgY2xhc3M9XCJsYW1iLW1lbnUtaXRlbVwiPjwvbGk+XHJcbiAgICA8L3VsPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYEBjaGFyc2V0IFwiVVRGLThcIjs6aG9zdCA6Om5nLWRlZXB7ZGlzcGxheTpibG9jazttYXJnaW46MCAtMS4yNXJlbSAtMS4yNXJlbX06aG9zdCA6Om5nLWRlZXAgLmxhbWItbWVudS1pdGVtPi5sYW1iLW1lbnUtaXRlbXMsOmhvc3QgOjpuZy1kZWVwIC5sYW1iLW1lbnUtaXRlbXN7bGlzdC1zdHlsZS10eXBlOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zaXRpb246bWF4LWhlaWdodCAuM3MgZWFzZS1pbn06aG9zdCA6Om5nLWRlZXAgLmxhbWItbWVudS1pdGVtIGF7ZGlzcGxheTpmbGV4O2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YWxpZ24taXRlbXM6Y2VudGVyfTpob3N0IDo6bmctZGVlcCAubGFtYi1tZW51LWl0ZW0gYSAubGFtYi1tZW51LXRpdGxle2ZsZXg6MX1gXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExhbWJNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaW52ZXJzZScpIGludmVyc2VWYWx1ZTogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogTGFzIGV0aXF1ZXRhcyBkZSB1biBtZW7DuiBjb24gdW4gSWQsIHNlIHB1ZWRlbiB1c2FyIHBvc3Rlcmlvcm1lbnRlIGVuIGVsIHNlcnZpY2lvXHJcbiAgICogZGUgbWVuw7ogcGFyYSBkZXRlcm1pbmFyIHF1w6kgbWVuw7ogZGVzZW5jYWRlbsOzIGxhIGFjY2nDs24sIHNpIGV4aXN0ZW4gdmFyaW9zIG1lbsO6cyBlbiBsYSBww6FnaW5hLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRhZzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBMaXN0YSBkZSBlbGVtZW50b3MgZGUgbWVuw7ouXHJcbiAgICovXHJcbiAgLy8gQElucHV0KCkgbGFtYkl0ZW1zOiBMYW1iTWVudUl0ZW1bXTtcclxuICBwdWJsaWMgbGFtYkl0ZW1zOiBMYW1iTWVudUl0ZW1bXSA9IFtdO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGl0ZW1zKGxhbWJJdGVtczogTGFtYk1lbnVJdGVtW10pIHtcclxuICAgIGlmIChsYW1iSXRlbXMpIHtcclxuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMubGFtYkl0ZW1zID0gbGFtYkl0ZW1zO1xyXG4gICAgICAvLyB9LCAwKTtcclxuICAgICAgdGhpcy5hZnRlckxvYWRJdGVtcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFjZSBxdWUgbG9zIGNvbG9yZXMgc2VhbiBpbnZlcnNvcyBzZWfDum4gZWwgdGVtYSBhY3R1YWwuXHJcbiAgICogRWwgdmFsb3IgcHJlZGV0ZXJtaW5hZG8gZXMgXCJmYWxzZVwiXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaW52ZXJzZSh2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaW52ZXJzZVZhbHVlID0gY29udmVydFRvQm9vbFByb3BlcnR5KHZhbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb250cmFlciB0b2RvcyBsb3Mgc3VibWVudXMgYWJpZXJ0b3MgZW4gZWwgZXZlbnQgZGUgYXRlcm5hciAodG9nZ2xlIGV2ZW50KVxyXG4gICAqIEVsIHZhbG9yIHByZWRldGVybWluYWRvIGVzIFwiZmFsc2VcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBhdXRvQ29sbGFwc2UodmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmF1dG9Db2xsYXBzZVZhbHVlID0gY29udmVydFRvQm9vbFByb3BlcnR5KHZhbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFsaXZlID0gdHJ1ZTtcclxuICBwcml2YXRlIGF1dG9Db2xsYXBzZVZhbHVlID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbGFtYk1lbnVJbnRlcm5hbFNlcnZpY2U6IExhbWJNZW51SW50ZXJuYWxTZXJ2aWNlLFxyXG4gICAgLy8gcHJpdmF0ZSBhY2Nlc3NPYnNlcnZhYmxlU2VydmljZTogQWNjZXNzT2JzZXJ2YWJsZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICkgeyB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubGFtYk1lbnVJbnRlcm5hbFNlcnZpY2VcclxuICAgICAgLm9uQWRkSXRlbSgpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VXaGlsZSgoKSA9PiB0aGlzLmFsaXZlKSxcclxuICAgICAgICBmaWx0ZXIoKGRhdGE6IHsgdGFnOiBzdHJpbmc7IGl0ZW1zOiBMYW1iTWVudUl0ZW1bXSB9KSA9PiB0aGlzLmNvbXBhcmVUYWcoZGF0YS50YWcpKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGRhdGEgPT4gdGhpcy5vbkFkZEl0ZW0oZGF0YSkpO1xyXG5cclxuICAgIHRoaXMubGFtYk1lbnVJbnRlcm5hbFNlcnZpY2VcclxuICAgICAgLm9uTmF2aWdhdGVIb21lKClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVdoaWxlKCgpID0+IHRoaXMuYWxpdmUpLFxyXG4gICAgICAgIGZpbHRlcigoZGF0YTogeyB0YWc6IHN0cmluZzsgaXRlbXM6IExhbWJNZW51SXRlbSB9KSA9PiB0aGlzLmNvbXBhcmVUYWcoZGF0YS50YWcpKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMubmF2aWdhdGVIb21lKCkpO1xyXG5cclxuICAgIHRoaXMubGFtYk1lbnVJbnRlcm5hbFNlcnZpY2VcclxuICAgICAgLm9uR2V0U2VsZWN0ZWRJdGVtKClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVdoaWxlKCgpID0+IHRoaXMuYWxpdmUpLFxyXG4gICAgICAgIGZpbHRlcigoZGF0YTogeyB0YWc6IHN0cmluZzsgbGlzdGVuZXI6IEJlaGF2aW9yU3ViamVjdDxMYW1iTWVudUJhZz4gfSkgPT4gdGhpcy5jb21wYXJlVGFnKGRhdGEudGFnKSksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoZGF0YTogeyB0YWc6IHN0cmluZzsgbGlzdGVuZXI6IEJlaGF2aW9yU3ViamVjdDxMYW1iTWVudUJhZz4gfSkgPT4ge1xyXG4gICAgICAgIGRhdGEubGlzdGVuZXIubmV4dCh7IHRhZzogdGhpcy50YWcsIGl0ZW06IHRoaXMuZ2V0U2VsZWN0ZWRJdGVtKHRoaXMubGFtYkl0ZW1zKSB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VXaGlsZSgoKSA9PiB0aGlzLmFsaXZlKSxcclxuICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmxhbWJNZW51SW50ZXJuYWxTZXJ2aWNlLnJlc2V0SXRlbXModGhpcy5sYW1iSXRlbXMpO1xyXG4gICAgICAgIHRoaXMubGFtYk1lbnVJbnRlcm5hbFNlcnZpY2UudXBkYXRlU2VsZWN0aW9uKHRoaXMubGFtYkl0ZW1zLCB0aGlzLnRhZywgdGhpcy5hdXRvQ29sbGFwc2VWYWx1ZSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMubGFtYkl0ZW1zLnB1c2goLi4udGhpcy5sYW1iTWVudUludGVybmFsU2VydmljZS5nZXRJdGVtcygpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRJdGVtKGl0ZW1zOiBMYW1iTWVudUl0ZW1bXSk6IExhbWJNZW51SXRlbSB7XHJcbiAgICBsZXQgc2VsZWN0ZWQgPSBudWxsO1xyXG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbTogTGFtYk1lbnVJdGVtKSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgc2VsZWN0ZWQgPSBpdGVtO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpdGVtLnNlbGVjdGVkICYmIGl0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgc2VsZWN0ZWQgPSB0aGlzLmdldFNlbGVjdGVkSXRlbShpdGVtLmNoaWxkcmVuKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc2VsZWN0ZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFmdGVyTG9hZEl0ZW1zKCkge1xyXG4gICAgLy8gQ29kaWdvIGV4dHJhLCBwcm9waW8gZGVsIHByb3llY3RvXHJcbiAgICB0aGlzLmxhbWJNZW51SW50ZXJuYWxTZXJ2aWNlLnByZXBhcmVJdGVtcyh0aGlzLmxhbWJJdGVtcyk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubGFtYk1lbnVJbnRlcm5hbFNlcnZpY2UudXBkYXRlU2VsZWN0aW9uKHRoaXMubGFtYkl0ZW1zLCB0aGlzLnRhZykpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkFkZEl0ZW0oZGF0YTogeyB0YWc6IHN0cmluZywgaXRlbXM6IExhbWJNZW51SXRlbVtdIH0pIHtcclxuICAgIHRoaXMubGFtYkl0ZW1zLnB1c2goLi4uZGF0YS5pdGVtcyk7XHJcblxyXG4gICAgdGhpcy5sYW1iTWVudUludGVybmFsU2VydmljZS5wcmVwYXJlSXRlbXModGhpcy5sYW1iSXRlbXMpO1xyXG4gICAgdGhpcy5sYW1iTWVudUludGVybmFsU2VydmljZS51cGRhdGVTZWxlY3Rpb24odGhpcy5sYW1iSXRlbXMsIHRoaXMudGFnLCB0aGlzLmF1dG9Db2xsYXBzZVZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKiBBdHRyIE1lbnVzICovXHJcbiAgcHVibGljIG9uSG92ZXJJdGVtKGl0ZW06IExhbWJNZW51SXRlbSkge1xyXG4gICAgdGhpcy5sYW1iTWVudUludGVybmFsU2VydmljZS5pdGVtSG92ZXIoaXRlbSwgdGhpcy50YWcpO1xyXG4gIH1cclxuXHJcbiAgLy8gVE9ETzogTm8gc2UgZGlzcGFyYSBjdWFuZG8gbGEgcGFnaW5hIHNlIHJlY2FyZ2EuXHJcbiAgcHVibGljIG9uU2VsZWN0SXRlbShpdGVtOiBMYW1iTWVudUl0ZW0pIHtcclxuICAgIHRoaXMubGFtYk1lbnVJbnRlcm5hbFNlcnZpY2UucmVzZXRJdGVtcyh0aGlzLmxhbWJJdGVtcyk7XHJcbiAgICB0aGlzLmxhbWJNZW51SW50ZXJuYWxTZXJ2aWNlLnNlbGVjdEl0ZW0oaXRlbSwgdGhpcy50YWcpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uSXRlbUNsaWNrKGl0ZW06IExhbWJNZW51SXRlbSkge1xyXG4gICAgdGhpcy5sYW1iTWVudUludGVybmFsU2VydmljZS5pdGVtQ2xpY2soaXRlbSwgdGhpcy50YWcpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5hbGl2ZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uVG9nZ2xlU3ViTWVudShpdGVtOiBMYW1iTWVudUl0ZW0pIHtcclxuICAgIGlmICh0aGlzLmF1dG9Db2xsYXBzZVZhbHVlKSB7XHJcbiAgICAgIHRoaXMubGFtYk1lbnVJbnRlcm5hbFNlcnZpY2UuY29sbGFwc2VBbGwodGhpcy5sYW1iSXRlbXMsIHRoaXMudGFnLCBpdGVtKTtcclxuICAgIH1cclxuICAgIGl0ZW0uZXhwYW5kZWQgPSAhaXRlbS5leHBhbmRlZDtcclxuICAgIHRoaXMubGFtYk1lbnVJbnRlcm5hbFNlcnZpY2Uuc3VibWVudVRvZ2dsZShpdGVtLCB0aGlzLnRhZyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbXBhcmVUYWcodGFnOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiAhdGFnIHx8IHRhZyA9PT0gdGhpcy50YWc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5hdmlnYXRlSG9tZSgpIHtcclxuICAgIGNvbnN0IGhvbWVJdGVtID0gdGhpcy5nZXRIb21lSXRlbSh0aGlzLmxhbWJJdGVtcyk7XHJcblxyXG4gICAgaWYgKGhvbWVJdGVtKSB7XHJcbiAgICAgIGlmIChob21lSXRlbS5saW5rKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2hvbWVJdGVtLmxpbmtdKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGhvbWVJdGVtLnVybCkge1xyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gaG9tZUl0ZW0udXJsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEhvbWVJdGVtKGl0ZW1zOiBMYW1iTWVudUl0ZW1bXSk6IExhbWJNZW51SXRlbSB7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcclxuICAgICAgaWYgKGl0ZW0uaG9tZSkge1xyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBob21lSXRlbSA9IGl0ZW0uY2hpbGRyZW4gJiYgdGhpcy5nZXRIb21lSXRlbShpdGVtLmNoaWxkcmVuKTtcclxuICAgICAgaWYgKGhvbWVJdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIGhvbWVJdGVtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==