@stratio/egeo
Version:
291 lines • 23.2 kB
JavaScript
/**
* @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=