UNPKG

systelab-components

Version:

systelab-components is a set of components that use wide accepted and adopted standard technologies like Angular and Bootstrap, as well as other popular libraries. Please read the ATTRIBUTION.md file for a complete list of dependencies.

146 lines 21.1 kB
import { Directive, EventEmitter, Input, Output, ViewChild, ViewChildren } from '@angular/core'; import { AbstractContextComponent } from './abstract-context.component'; import * as i0 from "@angular/core"; export class AbstractContextMenuComponent extends AbstractContextComponent { constructor() { super(...arguments); this.action = new EventEmitter(); this.levelSeparator = '_|_'; this.hasIcons = false; } set contextMenuOptions(value) { this.contextMenuOptionsList = value; this.checkIfHasIcons(); } get contextMenuOptions() { return this.contextMenuOptionsList; } ngOnInit() { super.ngOnInit(); this.checkIfHasIcons(); } dotsClicked(event) { if (this.existsAtLeastOneActionEnabled()) { super.dotsClicked(event); } else { event.stopPropagation(); } } open(event) { if (this.existsAtLeastOneActionEnabled()) { super.open(event); } else { event.stopPropagation(); } } doClick(event, elementID, action, parent) { if (this.isEnabled(elementID, action.actionId)) { this.executeAction(event, elementID, action.actionId); } } doClickWithAction(event, elementID, actionId) { if (this.isEnabled(elementID, actionId)) { this.executeAction(event, elementID, actionId); } } doMouseOver(event, elementID, actionId) { if (this.isEnabled(elementID, actionId)) { const optionAcitionId = this.getOptionDetailsActionId(actionId); const selectedChild = this.childDropdownMenuElement.toArray() .find((elem) => elem.nativeElement.id === (optionAcitionId + this.elementID)); this.showSubmenu(event, actionId, selectedChild, this.elementID); } } getSelfReference() { return this; } getMenuLevel(actionId) { const actions = actionId ? actionId.split(this.levelSeparator) : []; return actions.length - 1; } getOptionDetailsActionId(actionId) { const option = this.getOption(actionId); return option ? option.actionId : undefined; } getOptionDetailsHasChildren(actionId) { const option = this.getOption(actionId); return option ? option.hasChildren() : false; } showSubmenu(event, actionId, selectedChild, elementId) { const optionActionId = this.getOptionDetailsActionId(actionId); const optionHasChildren = this.getOptionDetailsHasChildren(actionId); const optionLevel = this.getMenuLevel(actionId); if (optionHasChildren) { event.stopPropagation(); event.preventDefault(); if (this.previousActionId !== optionActionId) { this.previousActionId = optionActionId; this.hideSubmenus(optionLevel); this.lastMenuLevel = optionLevel + 1; this.previousShownMenu.push(optionActionId + elementId); this.toggle(optionActionId + elementId); this.previousMenuWidth[this.lastMenuLevel - 1] = selectedChild.nativeElement.offsetWidth; const leftPosition = this.getFirstChildLeftWithLevels(selectedChild, optionLevel, this.previousMenuWidth); this.myRenderer.setStyle(selectedChild.nativeElement, 'top', this.getFirstChildTop(event, selectedChild) + 'px'); if (selectedChild.nativeElement.getBoundingClientRect().top < 0) { this.myRenderer.setStyle(selectedChild.nativeElement, 'top', (0 - event.clientY + selectedChild.nativeElement.parentElement.offsetTop + 10) + 'px'); } this.myRenderer.setStyle(selectedChild.nativeElement, 'left', leftPosition + 'px'); } } else { this.hideSubmenus(optionLevel); this.lastMenuLevel = optionLevel; event.stopPropagation(); event.preventDefault(); this.previousActionId = optionActionId; } } checkIfHasIcons() { this.hasIcons = false; } checkTargetAndClose(target) { if (!this.checkIfNgContent(target)) { if (target !== this.scrollableList.nativeElement && this.isDropDownOpened()) { if (this.childDropdownMenuElement) { if (!this.childDropdownMenuElement.toArray() .some((elem) => target === elem.nativeElement)) { this.closeDropDown(); } } else { this.closeDropDown(); } } } } hideSubmenus(untilLevel) { if (untilLevel < this.lastMenuLevel) { for (let i = this.lastMenuLevel; i > untilLevel; i--) { if (this.previousShownMenu[i - 1]) { this.toggle(this.previousShownMenu[i - 1]); } this.previousShownMenu.pop(); this.lastMenuLevel = i - 1; } } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: AbstractContextMenuComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.9", type: AbstractContextMenuComponent, inputs: { contextMenuOptions: "contextMenuOptions" }, outputs: { action: "action" }, viewQueries: [{ propertyName: "scrollableList", first: true, predicate: ["scrollableList"], descendants: true }, { propertyName: "childDropdownMenuElement", predicate: ["childdropdownmenu"], descendants: true }], usesInheritance: true, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: AbstractContextMenuComponent, decorators: [{ type: Directive }], propDecorators: { childDropdownMenuElement: [{ type: ViewChildren, args: ['childdropdownmenu'] }], scrollableList: [{ type: ViewChild, args: ['scrollableList', { static: false }] }], action: [{ type: Output }], contextMenuOptions: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtY29udGV4dC1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N5c3RlbGFiLWNvbXBvbmVudHMvc3JjL2xpYi9jb250ZXh0bWVudS9hYnN0cmFjdC1jb250ZXh0LW1lbnUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWEsU0FBUyxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFJeEUsTUFBTSxPQUFnQiw0QkFBZ0MsU0FBUSx3QkFBMkI7SUFEekY7O1FBTTJCLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXRDLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLGFBQVEsR0FBRyxLQUFLLENBQUM7S0ErSnhCO0lBNUpBLElBQ0ksa0JBQWtCLENBQUMsS0FBZTtRQUNyQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDckIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDcEMsQ0FBQztJQUVlLFFBQVE7UUFDdkIsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRWUsV0FBVyxDQUFDLEtBQWlCO1FBQzVDLElBQUksSUFBSSxDQUFDLDZCQUE2QixFQUFFLEVBQUU7WUFDekMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN6QjthQUFNO1lBQ04sS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO0lBQ0YsQ0FBQztJQUVlLElB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SUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzNDO2dCQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzNCO1NBQ0Q7SUFDRixDQUFDOzhHQTFKb0IsNEJBQTRCO2tHQUE1Qiw0QkFBNEI7OzJGQUE1Qiw0QkFBNEI7a0JBRGpELFNBQVM7OEJBR2lDLHdCQUF3QjtzQkFBakUsWUFBWTt1QkFBQyxtQkFBbUI7Z0JBQ29CLGNBQWM7c0JBQWxFLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDO2dCQUVsQixNQUFNO3NCQUEvQixNQUFNO2dCQU9ILGtCQUFrQjtzQkFEckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udGV4dENvbXBvbmVudCB9IGZyb20gJy4vYWJzdHJhY3QtY29udGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29udGV4dE1lbnVPcHRpb24gfSBmcm9tICcuL2NvbnRleHQtbWVudS1vcHRpb24nO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdENvbnRleHRNZW51Q29tcG9uZW50PFQ+IGV4dGVuZHMgQWJzdHJhY3RDb250ZXh0Q29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0IHtcblxuXHRAVmlld0NoaWxkcmVuKCdjaGlsZGRyb3Bkb3dubWVudScpIHB1YmxpYyBjaGlsZERyb3Bkb3duTWVudUVsZW1lbnQ6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblx0QFZpZXdDaGlsZCgnc2Nyb2xsYWJsZUxpc3QnLCB7c3RhdGljOiBmYWxzZX0pIHB1YmxpYyBzY3JvbGxhYmxlTGlzdDogRWxlbWVudFJlZjtcblxuXHRAT3V0cHV0KCkgcHVibGljIG92ZXJyaWRlIGFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHRwdWJsaWMgcmVhZG9ubHkgbGV2ZWxTZXBhcmF0b3IgPSAnX3xfJztcblx0cHVibGljIGhhc0ljb25zID0gZmFsc2U7XG5cdHByaXZhdGUgY29udGV4dE1lbnVPcHRpb25zTGlzdDogQXJyYXk8VD47XG5cblx0QElucHV0KClcblx0c2V0IGNvbnRleHRNZW51T3B0aW9ucyh2YWx1ZTogQXJyYXk8VD4pIHtcblx0XHR0aGlzLmNvbnRleHRNZW51T3B0aW9uc0xpc3QgPSB2YWx1ZTtcblx0XHR0aGlzLmNoZWNrSWZIYXNJY29ucygpO1xuXHR9XG5cblx0Z2V0IGNvbnRleHRNZW51T3B0aW9ucygpOiBBcnJheTxUPiB7XG5cdFx0cmV0dXJuIHRoaXMuY29udGV4dE1lbnVPcHRpb25zTGlzdDtcblx0fVxuXG5cdHB1YmxpYyBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHRzdXBlci5uZ09uSW5pdCgpO1xuXHRcdHRoaXMuY2hlY2tJZkhhc0ljb25zKCk7XG5cdH1cblxuXHRwdWJsaWMgb3ZlcnJpZGUgZG90c0NsaWNrZWQoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5leGlzdHNBdExlYXN0T25lQWN0aW9uRW5hYmxlZCgpKSB7XG5cdFx0XHRzdXBlci5kb3RzQ2xpY2tlZChldmVudCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBvdmVycmlkZSBvcGVuKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZXhpc3RzQXRMZWFzdE9uZUFjdGlvbkVuYWJsZWQoKSkge1xuXHRcdFx0c3VwZXIub3BlbihldmVudCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBkb0NsaWNrKGV2ZW50OiBhbnksIGVsZW1lbnRJRDogc3RyaW5nLCBhY3Rpb246IENvbnRleHRNZW51T3B0aW9uLCBwYXJlbnQ/OiBDb250ZXh0TWVudU9wdGlvbik6IHZvaWQge1xuXHRcdGlmICh0aGlzLmlzRW5hYmxlZChlbGVtZW50SUQsIGFjdGlvbi5hY3Rpb25JZCkpIHtcblx0XHRcdHRoaXMuZXhlY3V0ZUFjdGlvbihldmVudCwgZWxlbWVudElELCBhY3Rpb24uYWN0aW9uSWQpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBkb0NsaWNrV2l0aEFjdGlvbihldmVudDogYW55LCBlbGVtZW50SUQ6IHN0cmluZywgYWN0aW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmlzRW5hYmxlZChlbGVtZW50SUQsIGFjdGlvbklkKSkge1xuXHRcdFx0dGhpcy5leGVjdXRlQWN0aW9uKGV2ZW50LCBlbGVtZW50SUQsIGFjdGlvbklkKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZG9Nb3VzZU92ZXIoZXZlbnQ6IGFueSwgZWxlbWVudElEOiBzdHJpbmcsIGFjdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5pc0VuYWJsZWQoZWxlbWVudElELCBhY3Rpb25JZCkpIHtcblx0XHRcdGNvbnN0IG9wdGlvbkFjaXRpb25JZCA9IHRoaXMuZ2V0T3B0aW9uRGV0YWlsc0FjdGlvbklkKGFjdGlvbklkKTtcblxuXHRcdFx0Y29uc3Qgc2VsZWN0ZWRDaGlsZCA9IHRoaXMuY2hpbGREcm9wZG93bk1lbnVFbGVtZW50LnRvQXJyYXkoKVxuXHRcdFx0XHQuZmluZCgoZWxlbSkgPT4gZWxlbS5uYXRpdmVFbGVtZW50LmlkID09PSAob3B0aW9uQWNpdGlvbklkICsgdGhpcy5lbGVtZW50SUQpKTtcblxuXHRcdFx0dGhpcy5zaG93U3VibWVudShldmVudCwgYWN0aW9uSWQsIHNlbGVjdGVkQ2hpbGQsIHRoaXMuZWxlbWVudElEKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZ2V0U2VsZlJlZmVyZW5jZSgpOiBBYnN0cmFjdENvbnRleHRNZW51Q29tcG9uZW50PFQ+IHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBnZXRNZW51TGV2ZWwoYWN0aW9uSWQ6IHN0cmluZyk6IG51bWJlciB7XG5cdFx0Y29uc3QgYWN0aW9uczogc3RyaW5nW10gPSBhY3Rpb25JZCA/IGFjdGlvbklkLnNwbGl0KHRoaXMubGV2ZWxTZXBhcmF0b3IpIDogW107XG5cdFx0cmV0dXJuIGFjdGlvbnMubGVuZ3RoIC0gMTtcblx0fVxuXG5cdHB1YmxpYyBnZXRPcHRpb25EZXRhaWxzQWN0aW9uSWQoYWN0aW9uSWQ6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgb3B0aW9uID0gdGhpcy5nZXRPcHRpb24oYWN0aW9uSWQpO1xuXHRcdHJldHVybiBvcHRpb24gPyBvcHRpb24uYWN0aW9uSWQgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRwdWJsaWMgZ2V0T3B0aW9uRGV0YWlsc0hhc0NoaWxkcmVuKGFjdGlvbklkOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRjb25zdCBvcHRpb24gPSB0aGlzLmdldE9wdGlvbihhY3Rpb25JZCk7XG5cdFx0cmV0dXJuIG9wdGlvbiA/IG9wdGlvbi5oYXNDaGlsZHJlbigpIDogZmFsc2U7XG5cdH1cblxuXHRwdWJsaWMgc2hvd1N1Ym1lbnUoZXZlbnQ6IGFueSwgYWN0aW9uSWQ6IHN0cmluZywgc2VsZWN0ZWRDaGlsZDogRWxlbWVudFJlZiwgZWxlbWVudElkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBvcHRpb25BY3Rpb25JZCA9IHRoaXMuZ2V0T3B0aW9uRGV0YWlsc0FjdGlvbklkKGFjdGlvbklkKTtcblx0XHRjb25zdCBvcHRpb25IYXNDaGlsZHJlbiA9IHRoaXMuZ2V0T3B0aW9uRGV0YWlsc0hhc0NoaWxkcmVuKGFjdGlvbklkKTtcblx0XHRjb25zdCBvcHRpb25MZXZlbCA9IHRoaXMuZ2V0TWVudUxldmVsKGFjdGlvbklkKTtcblxuXHRcdGlmIChvcHRpb25IYXNDaGlsZHJlbikge1xuXHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0XHRpZiAodGhpcy5wcmV2aW91c0FjdGlvbklkICE9PSBvcHRpb25BY3Rpb25JZCkge1xuXHRcdFx0XHR0aGlzLnByZXZpb3VzQWN0aW9uSWQgPSBvcHRpb25BY3Rpb25JZDtcblx0XHRcdFx0dGhpcy5oaWRlU3VibWVudXMob3B0aW9uTGV2ZWwpO1xuXHRcdFx0XHR0aGlzLmxhc3RNZW51TGV2ZWwgPSBvcHRpb25MZXZlbCArIDE7XG5cblx0XHRcdFx0dGhpcy5wcmV2aW91c1Nob3duTWVudS5wdXNoKG9wdGlvbkFjdGlvbklkICsgZWxlbWVudElkKTtcblxuXHRcdFx0XHR0aGlzLnRvZ2dsZShvcHRpb25BY3Rpb25JZCArIGVsZW1lbnRJZCk7XG5cblx0XHRcdFx0dGhpcy5wcmV2aW91c01lbnVXaWR0aFt0aGlzLmxhc3RNZW51TGV2ZWwgLSAxXSA9IHNlbGVjdGVkQ2hpbGQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcblxuXHRcdFx0XHRjb25zdCBsZWZ0UG9zaXRpb24gPSB0aGlzLmdldEZpcnN0Q2hpbGRMZWZ0V2l0aExldmVscyhzZWxlY3RlZENoaWxkLCBvcHRpb25MZXZlbCwgdGhpcy5wcmV2aW91c01lbnVXaWR0aCk7XG5cblx0XHRcdFx0dGhpcy5teVJlbmRlcmVyLnNldFN0eWxlKHNlbGVjdGVkQ2hpbGQubmF0aXZlRWxlbWVudCwgJ3RvcCcsIHRoaXMuZ2V0Rmlyc3RDaGlsZFRvcChldmVudCwgc2VsZWN0ZWRDaGlsZCkgKyAncHgnKTtcblxuXHRcdFx0XHRpZiAoc2VsZWN0ZWRDaGlsZC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCA8IDApIHtcblx0XHRcdFx0XHR0aGlzLm15UmVuZGVyZXIuc2V0U3R5bGUoc2VsZWN0ZWRDaGlsZC5uYXRpdmVFbGVtZW50LCAndG9wJywgKDAgLSBldmVudC5jbGllbnRZICsgc2VsZWN0ZWRDaGlsZC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQub2Zmc2V0VG9wICsgMTApICsgJ3B4Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLm15UmVuZGVyZXIuc2V0U3R5bGUoc2VsZWN0ZWRDaGlsZC5uYXRpdmVFbGVtZW50LCAnbGVmdCcsIGxlZnRQb3NpdGlvbiArICdweCcpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmhpZGVTdWJtZW51cyhvcHRpb25MZXZlbCk7XG5cdFx0XHR0aGlzLmxhc3RNZW51TGV2ZWwgPSBvcHRpb25MZXZlbDtcblxuXHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy5wcmV2aW91c0FjdGlvbklkID0gb3B0aW9uQWN0aW9uSWQ7XG5cblx0XHR9XG5cdH1cblxuXHRwcm90ZWN0ZWQgY2hlY2tJZkhhc0ljb25zKCk6IHZvaWQge1xuXHRcdHRoaXMuaGFzSWNvbnMgPSBmYWxzZTtcblx0fVxuXG5cdHByb3RlY3RlZCBvdmVycmlkZSBjaGVja1RhcmdldEFuZENsb3NlKHRhcmdldDogYW55KTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmNoZWNrSWZOZ0NvbnRlbnQodGFyZ2V0KSkge1xuXHRcdFx0aWYgKHRhcmdldCAhPT0gdGhpcy5zY3JvbGxhYmxlTGlzdC5uYXRpdmVFbGVtZW50ICYmIHRoaXMuaXNEcm9wRG93bk9wZW5lZCgpKSB7XG5cdFx0XHRcdGlmICh0aGlzLmNoaWxkRHJvcGRvd25NZW51RWxlbWVudCkge1xuXHRcdFx0XHRcdGlmICghdGhpcy5jaGlsZERyb3Bkb3duTWVudUVsZW1lbnQudG9BcnJheSgpXG5cdFx0XHRcdFx0XHQuc29tZSgoZWxlbSkgPT4gdGFyZ2V0ID09PSBlbGVtLm5hdGl2ZUVsZW1lbnQpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNsb3NlRHJvcERvd24oKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5jbG9zZURyb3BEb3duKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcm90ZWN0ZWQgaGlkZVN1Ym1lbnVzKHVudGlsTGV2ZWw6IG51bWJlcik6IHZvaWQge1xuXHRcdGlmICh1bnRpbExldmVsIDwgdGhpcy5sYXN0TWVudUxldmVsKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gdGhpcy5sYXN0TWVudUxldmVsOyBpID4gdW50aWxMZXZlbDsgaS0tKSB7XG5cdFx0XHRcdGlmICh0aGlzLnByZXZpb3VzU2hvd25NZW51W2kgLSAxXSkge1xuXHRcdFx0XHRcdHRoaXMudG9nZ2xlKHRoaXMucHJldmlvdXNTaG93bk1lbnVbaSAtIDFdKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnByZXZpb3VzU2hvd25NZW51LnBvcCgpO1xuXHRcdFx0XHR0aGlzLmxhc3RNZW51TGV2ZWwgPSBpIC0gMTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgYWJzdHJhY3Qgb3BlbldpdGhPcHRpb25zKGV2ZW50OiBNb3VzZUV2ZW50LCBuZXdDb250ZXh0TWVudU9wdGlvbnM6IEFycmF5PFQ+KTogdm9pZDtcblxuXHRwdWJsaWMgYWJzdHJhY3QgaXNFbmFibGVkKGVsZW1lbnRJZDogc3RyaW5nLCBhY3Rpb25JZDogc3RyaW5nKTogYm9vbGVhbjtcblxuXHRwdWJsaWMgYWJzdHJhY3QgaXNJY29uRW5hYmxlZChlbGVtZW50SWQ6IHN0cmluZywgYWN0aW9uSWQ6IHN0cmluZyk6IGJvb2xlYW47XG5cblx0cHVibGljIGFic3RyYWN0IGV4ZWN1dGVBY3Rpb24oZXZlbnQ6IGFueSwgZWxlbWVudElkOiBzdHJpbmcsIGFjdGlvbklkOiBzdHJpbmcsIHBhcmVudEFjdGlvbj86IHN0cmluZyk6IHZvaWQ7XG5cblx0cHJvdGVjdGVkIGFic3RyYWN0IGV4aXN0c0F0TGVhc3RPbmVBY3Rpb25FbmFibGVkKCk6IGJvb2xlYW47XG5cblx0cHJvdGVjdGVkIGFic3RyYWN0IGdldE9wdGlvbihhY3Rpb25JZDogc3RyaW5nKTtcbn1cbiJdfQ==