UNPKG

@stratio/egeo

Version:
291 lines 23.2 kB
/** * @fileoverview added by tsickle * Generated from: lib/st-sidebar/st-sidebar-item-list/st-sidebar-item-list.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, EventEmitter, Input, Output } from '@angular/core'; import { StSidebarVisualMode } from '../st-sidebar-visual-mode'; /** * \@description {Component} [SidebarItemList] * * The sidebar item list component has been designed to display a list of items in a sidebar. * * \@model * * [Sidebar items] {../st-sidebar-item.interface.ts#StSidebarItem} * * \@example * * {html} * * ``` * <st-sidebar-item-list [items]="items" (change)="onChange($event)" [active]="active" [deep]="deep"> * </st-sidebar-item-list> * ``` * */ export class StSidebarItemListComponent { constructor() { /** * \@Input {boolean} [defaultActive=true] Unset first item as active by default if false */ this.defaultActive = true; /** * \@Input {number} [deep=0] Deep of the item list in the sidebar */ this.deep = 0; /** * \@Input {StSidebarVisualMode} [visualMode='StSidebarVisualMode.normal'] Visual mode used to display the item list */ this.visualMode = StSidebarVisualMode.normal; /** * \@Output {StSidebarItem} [change=''] Event emitted when the active item is changed. This emit the active item */ this.change = new EventEmitter(); this.displayAsComplexModeValue = false; this.expanded = []; this._items = []; } /** * \@Input {StSidebarItem[]} [items=''] List of items displayed on the menu * @return {?} */ get items() { return this._items; } /** * @param {?} items * @return {?} */ set items(items) { this._items = items; this._updateStatus(); } /** * \@Input {string} [active=''] The id of the current active item * @return {?} */ get active() { return this._active; } /** * @param {?} active * @return {?} */ set active(active) { if (!this._isActive(active)) { this._active = active; this._updateStatus(); } } /** * @return {?} */ ngOnInit() { if (this.defaultActive && !this._active && this._items && this._items.length) { this._active = this._items[0]; } this.displayAsComplexModeValue = this.displayAsComplexMode(); } /** * @param {?} item * @param {?} index * @return {?} */ getItemClasses(item, index) { /** @type {?} */ let classes = {}; /** @type {?} */ const active = this._isActive(item); /** @type {?} */ const activeChild = this.hasActiveChild(item); classes[item.class] = item.class; classes['item--complex'] = item.items && item.items.length; classes['item--active'] = active; classes['item--expanded'] = this.expanded[index]; classes['item--has-active'] = activeChild; classes['item--disabled'] = item.disabled; return classes; } /** * @param {?} item * @param {?} position * @return {?} */ onSelectItem(item, position) { if (!item.disabled) { if (item.items && item.items.length) { this.expanded[position] = !this.expanded[position]; } else { if (!this._active || this._active.id !== item.id) { this.change.emit(item); this._closeRestOfItems(item.id); } } } } /** * @param {?} item * @return {?} */ hasActiveChild(item) { /** @type {?} */ let found = false; /** @type {?} */ let i = 0; if (item.items && item.items.length) { while (!found && i < item.items.length) { if (this._isActive(item.items[i])) { found = true; } ++i; } if (!found && item.items && item.items.length) { return this._hasActiveChildInChildren(item.items); } } return found; } /** * @param {?} item * @return {?} */ onChange(item) { if (!this._isActive(item)) { this._closeRestOfItems(item.id); this.change.emit(item); } } /** * @return {?} */ displayAsComplexMode() { return this.visualMode === StSidebarVisualMode.complex; } /** * @private * @param {?} item * @return {?} */ _isActive(item) { return item && this._active && this._active.id === item.id; } /** * @private * @return {?} */ _updateStatus() { this.expanded = []; this._items.forEach((/** * @param {?} item * @param {?} i * @return {?} */ (item, i) => { if (this.hasActiveChild(item)) { this.expanded[i] = true; } })); } /** * @private * @param {?} items * @return {?} */ _hasActiveChildInChildren(items) { /** @type {?} */ let found = false; /** @type {?} */ let i = 0; while (!found && i < items.length) { if (this.hasActiveChild(items[i])) { found = true; } ++i; } return found; } /** * @private * @param {?} itemId * @return {?} */ _closeRestOfItems(itemId) { this.expanded.forEach((/** * @param {?} open * @param {?} i * @return {?} */ (open, i) => { if (open && this._items[i].id !== itemId) { this.expanded[i] = false; } })); } } StSidebarItemListComponent.decorators = [ { type: Component, args: [{ selector: 'st-sidebar-item-list', 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\n<ul class=\"item-list\" [ngClass]=\"{'item-list--inner': deep > 0, 'complex-mode': displayAsComplexModeValue}\">\n <li [id]=\"item.id\" class=\"item\" [ngClass]=\"getItemClasses(item, index)\" *ngFor=\"let item of items; let index = index\">\n <span class=\"item__label\" [ngClass]=\"{'item__label--with-results': item.result}\" (click)=\"onSelectItem(item, index)\">{{item.label}}</span>\n <span *ngIf=\"item.result\" class=\"result__box\"><span class=\"result__text\">{{item.result}}</span></span>\n <st-sidebar-item-list *ngIf=\"item.items && item.items.length && expanded[index]\"\n [items]=\"item.items\"\n [active]=\"active\"\n [visualMode]=\"visualMode\"\n [defaultActive]=\"defaultActive\"\n [deep]=\"deep + 1\"\n (change)=\"onChange($event)\">\n </st-sidebar-item-list>\n </li>\n</ul>\n", providers: [], host: { class: 'st-sidebar-item-list' }, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@charset \"UTF-8\";:host{width:100%;height:100%;display:block}.item-list{list-style:none}.item{cursor:pointer}"] }] } ]; StSidebarItemListComponent.propDecorators = { defaultActive: [{ type: Input }], deep: [{ type: Input }], visualMode: [{ type: Input }], change: [{ type: Output }], items: [{ type: Input }], active: [{ type: Input }] }; if (false) { /** * \@Input {boolean} [defaultActive=true] Unset first item as active by default if false * @type {?} */ StSidebarItemListComponent.prototype.defaultActive; /** * \@Input {number} [deep=0] Deep of the item list in the sidebar * @type {?} */ StSidebarItemListComponent.prototype.deep; /** * \@Input {StSidebarVisualMode} [visualMode='StSidebarVisualMode.normal'] Visual mode used to display the item list * @type {?} */ StSidebarItemListComponent.prototype.visualMode; /** * \@Output {StSidebarItem} [change=''] Event emitted when the active item is changed. This emit the active item * @type {?} */ StSidebarItemListComponent.prototype.change; /** @type {?} */ StSidebarItemListComponent.prototype.displayAsComplexModeValue; /** @type {?} */ StSidebarItemListComponent.prototype.expanded; /** * @type {?} * @private */ StSidebarItemListComponent.prototype._items; /** * @type {?} * @private */ StSidebarItemListComponent.prototype._active; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Qtc2lkZWJhci1pdGVtLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN0cmF0aW8vZWdlby8iLCJzb3VyY2VzIjpbImxpYi9zdC1zaWRlYmFyL3N0LXNpZGViYXItaXRlbS1saXN0L3N0LXNpZGViYXItaXRlbS1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFVQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3hHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZCaEUsTUFBTSxPQUFPLDBCQUEwQjtJQVJ2Qzs7OztRQVdZLGtCQUFhLEdBQVksSUFBSSxDQUFDOzs7O1FBRTlCLFNBQUksR0FBVyxDQUFDLENBQUM7Ozs7UUFFakIsZUFBVSxHQUF3QixtQkFBbUIsQ0FBQyxNQUFNLENBQUM7Ozs7UUFFNUQsV0FBTSxHQUFnQyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUUzRSw4QkFBeUIsR0FBWSxLQUFLLENBQUM7UUFDM0MsYUFBUSxHQUFjLEVBQUUsQ0FBQztRQUV4QixXQUFNLEdBQW9CLEVBQUUsQ0FBQztJQXlIeEMsQ0FBQzs7Ozs7SUFySEUsSUFBYSxLQUFLO1FBQ2YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3RCLENBQUM7Ozs7O0lBRUQsSUFBSSxLQUFLLENBQUMsS0FBc0I7UUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3hCLENBQUM7Ozs7O0lBR0QsSUFBYSxNQUFNO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN2QixDQUFDOzs7OztJQUVELElBQUksTUFBTSxDQUFDLE1BQXFCO1FBQzdCLElBQUksQ0FBQyxJ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LEdBQUcsSUFBSSxDQUFDO2FBQ2Y7WUFDRCxFQUFFLENBQUMsQ0FBQztTQUNOO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDaEIsQ0FBQzs7Ozs7O0lBRU8saUJBQWlCLENBQUMsTUFBYztRQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU87Ozs7O1FBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0IsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxFQUFFO2dCQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQzthQUMzQjtRQUNKLENBQUMsRUFBQyxDQUFDO0lBQ04sQ0FBQzs7O1lBOUlILFNBQVMsU0FBQztnQkFDUixRQUFRLEVBQUUsc0JBQXNCO2dCQUNoQyx5NUNBQW9EO2dCQUVwRCxTQUFTLEVBQUUsRUFBRTtnQkFDYixJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUU7Z0JBQ3ZDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNOzthQUNqRDs7OzRCQUlHLEtBQUs7bUJBRUwsS0FBSzt5QkFFTCxLQUFLO3FCQUVMLE1BQU07b0JBU04sS0FBSztxQkFVTCxLQUFLOzs7Ozs7O0lBekJOLG1EQUF1Qzs7Ozs7SUFFdkMsMENBQTBCOzs7OztJQUUxQixnREFBc0U7Ozs7O0lBRXRFLDRDQUFrRjs7SUFFbEYsK0RBQWtEOztJQUNsRCw4Q0FBZ0M7Ozs7O0lBRWhDLDRDQUFxQzs7Ozs7SUFDckMsNkNBQStCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIMKpIDIwMTcgU3RyYXRpbyBCaWcgRGF0YSBJbmMuLCBTdWN1cnNhbCBlbiBFc3Bhw7FhLlxuICpcbiAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC5cbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7XG4gKiB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLlxuICogU2VlIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wLlxuICovXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTdFNpZGViYXJJdGVtIH0gZnJvbSAnLi4vc3Qtc2lkZWJhci1pdGVtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTdFNpZGViYXJWaXN1YWxNb2RlIH0gZnJvbSAnLi4vc3Qtc2lkZWJhci12aXN1YWwtbW9kZSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIHtDb21wb25lbnR9IFtTaWRlYmFySXRlbUxpc3RdXG4gKlxuICogVGhlIHNpZGViYXIgaXRlbSBsaXN0IGNvbXBvbmVudCBoYXMgYmVlbiBkZXNpZ25lZCB0byBkaXNwbGF5IGEgbGlzdCBvZiBpdGVtcyBpbiBhIHNpZGViYXIuXG4gKlxuICogIEBtb2RlbFxuICpcbiAqICAgW1NpZGViYXIgaXRlbXNdIHsuLi9zdC1zaWRlYmFyLWl0ZW0uaW50ZXJmYWNlLnRzI1N0U2lkZWJhckl0ZW19XG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiB7aHRtbH1cbiAqXG4gKiBgYGBcbiAqIDxzdC1zaWRlYmFyLWl0ZW0tbGlzdCBbaXRlbXNdPVwiaXRlbXNcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIiBbYWN0aXZlXT1cImFjdGl2ZVwiIFtkZWVwXT1cImRlZXBcIj5cbiAqIDwvc3Qtc2lkZWJhci1pdGVtLWxpc3Q+XG4gKiBgYGBcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICAgc2VsZWN0b3I6ICdzdC1zaWRlYmFyLWl0ZW0tbGlzdCcsXG4gICB0ZW1wbGF0ZVVybDogJy4vc3Qtc2lkZWJhci1pdGVtLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgc3R5bGVVcmxzOiBbJy4vc3Qtc2lkZWJhci1pdGVtLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgIHByb3ZpZGVyczogW10sXG4gICBob3N0OiB7IGNsYXNzOiAnc3Qtc2lkZWJhci1pdGVtLWxpc3QnIH0sXG4gICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBTdFNpZGViYXJJdGVtTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgIC8qKiBASW5wdXQge2Jvb2xlYW59IFtkZWZhdWx0QWN0aXZlPXRydWVdIFVuc2V0IGZpcnN0IGl0ZW0gYXMgYWN0aXZlIGJ5IGRlZmF1bHQgaWYgZmFsc2UgKi9cbiAgIEBJbnB1dCgpIGRlZmF1bHRBY3RpdmU6IGJvb2xlYW4gPSB0cnVlO1xuICAgLyoqIEBJbnB1dCB7bnVtYmVyfSBbZGVlcD0wXSBEZWVwIG9mIHRoZSBpdGVtIGxpc3QgaW4gdGhlIHNpZGViYXIgKi9cbiAgIEBJbnB1dCgpIGRlZXA6IG51bWJlciA9IDA7XG4gICAvKiogQElucHV0IHtTdFNpZGViYXJWaXN1YWxNb2RlfSBbdmlzdWFsTW9kZT0nU3RTaWRlYmFyVmlzdWFsTW9kZS5ub3JtYWwnXSBWaXN1YWwgbW9kZSB1c2VkIHRvIGRpc3BsYXkgdGhlIGl0ZW0gbGlzdCAqL1xuICAgQElucHV0KCkgdmlzdWFsTW9kZTogU3RTaWRlYmFyVmlzdWFsTW9kZSA9IFN0U2lkZWJhclZpc3VhbE1vZGUubm9ybWFsO1xuICAgLyoqIEBPdXRwdXQge1N0U2lkZWJhckl0ZW19IFtjaGFuZ2U9JyddIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgYWN0aXZlIGl0ZW0gaXMgY2hhbmdlZC4gVGhpcyBlbWl0IHRoZSBhY3RpdmUgaXRlbSAqL1xuICAgQE91dHB1dCgpIGNoYW5nZTogRXZlbnRFbWl0dGVyPFN0U2lkZWJhckl0ZW0+ID0gbmV3IEV2ZW50RW1pdHRlcjxTdFNpZGViYXJJdGVtPigpO1xuXG4gICBwdWJsaWMgZGlzcGxheUFzQ29tcGxleE1vZGVWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgcHVibGljIGV4cGFuZGVkOiBib29sZWFuW10gPSBbXTtcblxuICAgcHJpdmF0ZSBfaXRlbXM6IFN0U2lkZWJhckl0ZW1bXSA9IFtdO1xuICAgcHJpdmF0ZSBfYWN0aXZlOiBTdFNpZGViYXJJdGVtO1xuXG4gICAvKiogQElucHV0IHtTdFNpZGViYXJJdGVtW119IFtpdGVtcz0nJ10gTGlzdCBvZiBpdGVtcyBkaXNwbGF5ZWQgb24gdGhlIG1lbnUgKi9cbiAgIEBJbnB1dCgpIGdldCBpdGVtcygpOiBTdFNpZGViYXJJdGVtW10ge1xuICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICAgfVxuXG4gICBzZXQgaXRlbXMoaXRlbXM6IFN0U2lkZWJhckl0ZW1bXSkge1xuICAgICAgdGhpcy5faXRlbXMgPSBpdGVtcztcbiAgICAgIHRoaXMuX3VwZGF0ZVN0YXR1cygpO1xuICAgfVxuXG4gICAvKiogQElucHV0IHtzdHJpbmd9IFthY3RpdmU9JyddIFRoZSBpZCBvZiB0aGUgY3VycmVudCBhY3RpdmUgaXRlbSAqL1xuICAgQElucHV0KCkgZ2V0IGFjdGl2ZSgpOiBTdFNpZGViYXJJdGVtIHtcbiAgICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gICB9XG5cbiAgIHNldCBhY3RpdmUoYWN0aXZlOiBTdFNpZGViYXJJdGVtKSB7XG4gICAgICBpZiAoIXRoaXMuX2lzQWN0aXZlKGFjdGl2ZSkpIHtcbiAgICAgICAgIHRoaXMuX2FjdGl2ZSA9IGFjdGl2ZTtcbiAgICAgICAgIHRoaXMuX3VwZGF0ZVN0YXR1cygpO1xuICAgICAgfVxuICAgfVxuXG4gICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3RpdmUgJiYgIXRoaXMuX2FjdGl2ZSAmJiB0aGlzLl9pdGVtcyAmJiB0aGlzLl9pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRoaXMuX2l0ZW1zWzBdO1xuICAgICAgfVxuICAgICAgdGhpcy5kaXNwbGF5QXNDb21wbGV4TW9kZVZhbHVlID0gdGhpcy5kaXNwbGF5QXNDb21wbGV4TW9kZSgpO1xuICAgfVxuXG5cbiAgIGdldEl0ZW1DbGFzc2VzKGl0ZW06IFN0U2lkZWJhckl0ZW0sIGluZGV4OiBudW1iZXIpOiBhbnkge1xuICAgICAgbGV0IGNsYXNzZXM6IGFueSA9IHt9O1xuICAgICAgY29uc3QgYWN0aXZlOiBib29sZWFuID0gdGhpcy5faXNBY3RpdmUoaXRlbSk7XG4gICAgICBjb25zdCBhY3RpdmVDaGlsZDogYm9vbGVhbiA9IHRoaXMuaGFzQWN0aXZlQ2hpbGQoaXRlbSk7XG4gICAgICBjbGFzc2VzW2l0ZW0uY2xhc3NdID0gaXRlbS5jbGFzcztcbiAgICAgIGNsYXNzZXNbJ2l0ZW0tLWNvbXBsZXgnXSA9IGl0ZW0uaXRlbXMgJiYgaXRlbS5pdGVtcy5sZW5ndGg7XG4gICAgICBjbGFzc2VzWydpdGVtLS1hY3RpdmUnXSA9IGFjdGl2ZTtcbiAgICAgIGNsYXNzZXNbJ2l0ZW0tLWV4cGFuZGVkJ10gPSB0aGlzLmV4cGFuZGVkW2luZGV4XTtcbiAgICAgIGNsYXNzZXNbJ2l0ZW0tLWhhcy1hY3RpdmUnXSA9IGFjdGl2ZUNoaWxkO1xuICAgICAgY2xhc3Nlc1snaXRlbS0tZGlzYWJsZWQnXSA9IGl0ZW0uZGlzYWJsZWQ7XG5cbiAgICAgIHJldHVybiBjbGFzc2VzO1xuICAgfVxuXG4gICBvblNlbGVjdEl0ZW0oaXRlbTogU3RTaWRlYmFySXRlbSwgcG9zaXRpb246IG51bWJlcik6IHZvaWQge1xuICAgICAgaWYgKCFpdGVtLmRpc2FibGVkKSB7XG4gICAgICAgICBpZiAoaXRlbS5pdGVtcyAmJiBpdGVtLml0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRlZFtwb3NpdGlvbl0gPSAhdGhpcy5leHBhbmRlZFtwb3NpdGlvbl07XG4gICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9hY3RpdmUgfHwgdGhpcy5fYWN0aXZlLmlkICE9PSBpdGVtLmlkKSB7XG4gICAgICAgICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KGl0ZW0pO1xuICAgICAgICAgICAgICAgdGhpcy5fY2xvc2VSZXN0T2ZJdGVtcyhpdGVtLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgIH1cbiAgIH1cblxuICAgaGFzQWN0aXZlQ2hpbGQoaXRlbTogU3RTaWRlYmFySXRlbSk6IGJvb2xlYW4ge1xuICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgICBsZXQgaSA9IDA7XG4gICAgICBpZiAoaXRlbS5pdGVtcyAmJiBpdGVtLml0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgd2hpbGUgKCFmb3VuZCAmJiBpIDwgaXRlbS5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0FjdGl2ZShpdGVtLml0ZW1zW2ldKSkge1xuICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKytpO1xuICAgICAgICAgfVxuICAgICAgICAgaWYgKCFmb3VuZCAmJiBpdGVtLml0ZW1zICYmIGl0ZW0uaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faGFzQWN0aXZlQ2hpbGRJbkNoaWxkcmVuKGl0ZW0uaXRlbXMpO1xuICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZvdW5kO1xuICAgfVxuXG4gICBvbkNoYW5nZShpdGVtOiBTdFNpZGViYXJJdGVtKTogdm9pZCB7XG4gICAgICBpZiAoIXRoaXMuX2lzQWN0aXZlKGl0ZW0pKSB7XG4gICAgICAgICB0aGlzLl9jbG9zZVJlc3RPZkl0ZW1zKGl0ZW0uaWQpO1xuICAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdChpdGVtKTtcbiAgICAgIH1cbiAgIH1cblxuICAgZGlzcGxheUFzQ29tcGxleE1vZGUoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy52aXN1YWxNb2RlID09PSBTdFNpZGViYXJWaXN1YWxNb2RlLmNvbXBsZXg7XG4gICB9XG5cbiAgIHByaXZhdGUgX2lzQWN0aXZlKGl0ZW06IFN0U2lkZWJhckl0ZW0pOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBpdGVtICYmIHRoaXMuX2FjdGl2ZSAmJiB0aGlzLl9hY3RpdmUuaWQgPT09IGl0ZW0uaWQ7XG4gICB9XG5cbiAgIHByaXZhdGUgX3VwZGF0ZVN0YXR1cygpOiB2b2lkIHtcbiAgICAgIHRoaXMuZXhwYW5kZWQgPSBbXTtcbiAgICAgIHRoaXMuX2l0ZW1zLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcbiAgICAgICAgIGlmICh0aGlzLmhhc0FjdGl2ZUNoaWxkKGl0ZW0pKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkW2ldID0gdHJ1ZTtcbiAgICAgICAgIH1cbiAgICAgIH0pO1xuICAgfVxuXG4gICBwcml2YXRlIF9oYXNBY3RpdmVDaGlsZEluQ2hpbGRyZW4oaXRlbXM6IFN0U2lkZWJhckl0ZW1bXSk6IGJvb2xlYW4ge1xuICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgICBsZXQgaSA9IDA7XG4gICAgICB3aGlsZSAoIWZvdW5kICYmIGkgPCBpdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgIGlmICh0aGlzLmhhc0FjdGl2ZUNoaWxkKGl0ZW1zW2ldKSkge1xuICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgfVxuICAgICAgICAgKytpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm91bmQ7XG4gICB9XG5cbiAgIHByaXZhdGUgX2Nsb3NlUmVzdE9mSXRlbXMoaXRlbUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgIHRoaXMuZXhwYW5kZWQuZm9yRWFjaCgob3BlbiwgaSkgPT4ge1xuICAgICAgICAgaWYgKG9wZW4gJiYgdGhpcy5faXRlbXNbaV0uaWQgIT09IGl0ZW1JZCkge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRlZFtpXSA9IGZhbHNlO1xuICAgICAgICAgfVxuICAgICAgfSk7XG4gICB9XG59XG4iXX0=