UNPKG

@asi-ngtools/lib

Version:

This project is a little components library, simple to use, which will help you to simplify your project.

181 lines (180 loc) 14.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Component, Output, ChangeDetectorRef, IterableDiffers, EventEmitter, Input, ElementRef, ViewChild, HostBinding } from '@angular/core'; /** * @template T */ export class AsiBreadcrumbComponent { /** * @param {?} ref * @param {?} elRef * @param {?} differs */ constructor(ref, elRef, differs) { this.ref = ref; this.elRef = elRef; this.differs = differs; this.class = 'asi-component asi-breadcrumb'; this.hideElements = false; this.elementsDropdownOpened = false; /** * Data displayed on dom, doesn't interfere with input data * Needed because we sometimes hide some elements in GUI * But we don't want to remove them from data array */ this.shadowData = new Array(); this.hiddenElements = new Array(); this.clicked = new EventEmitter(); this.differ = this.differs.find([]).create(null); } /** * @return {?} */ checkInput() { if (null == this.trackBy) { throw new Error('AsiBreadcrumbComponent : @Input \'trackBy\' is required'); } if (!this.data) { throw new Error('AsiBreadcrumbComponent : @Input \'data\' is required'); } } /** * @return {?} */ ngOnInit() { this.checkInput(); } /** * @return {?} */ ngDoCheck() { /** @type {?} */ let changes = this.differ.diff(this.data); if (changes) { this.ref.detectChanges(); if (changes._collection) { this.updateShadow(changes._collection); } else { this.updateShadow(changes.collection); } } } /** * @return {?} */ ngAfterViewInit() { /** @type {?} */ let breadcrumbWidth = this.elRef.nativeElement.offsetWidth; // (width - (home width) - ('...' width)) / max elements size this.nbElementsMax = Math.floor((breadcrumbWidth - 30 - 50) / 130); // setTimeout() avoid "ExpressionChangedAfterItHasBeenCheckedError" exception in dev mode setTimeout(() => this.updateShadow(this.data)); } /** * @param {?} newStack * @return {?} */ updateShadow(newStack) { if (newStack) { // true -> showing '...' this.hideElements = newStack.length > this.nbElementsMax; // just display the last 'nbElementsMax' this.shadowData = newStack.slice(0 - this.nbElementsMax); this.hiddenElements = newStack.slice(0, Math.max(newStack.length - this.nbElementsMax)); } } /** * @param {?} element * @return {?} */ getTrackedValue(element) { if (element) { /** @type {?} */ const trackedValue = element[this.trackBy]; return trackedValue; } else { return null; } } /** * @param {?} element * @return {?} */ clickOnElement(element) { this.elementsDropdownOpened = false; this.data = this.data.slice(0, this.data.indexOf(element) + 1); this.updateShadow(this.data); this.clicked.emit(this.data); } } AsiBreadcrumbComponent.decorators = [ { type: Component, args: [{ selector: 'asi-breadcrumb', template: "<ul class=\"breadcrumb\">\r\n <!-- Home -->\r\n <li *ngIf=\"!hideHome\">\r\n <a (click)=\"clickOnElement({})\">\r\n <i class=\"fa fa-home\"></i>\r\n </a>\r\n </li>\r\n <!-- Collapsing elements on mobile -->\r\n <li #asiBreadcrumbDropdownDots *ngIf=\"hideElements\" (click)=\"elementsDropdownOpened = true\">\r\n <a>...</a>\r\n </li>\r\n <asi-dropdown [relativeTo]=\"asiBreadcrumbDropdownDots\" [calculWidth]=\"false\" [open]=\"elementsDropdownOpened\" (onClose)=\"elementsDropdownOpened = false\">\r\n <div class=\"clickable drop-down-breadcrumb\">\r\n <div *ngFor=\"let elem of hiddenElements\" (click)=\"clickOnElement(elem)\">\r\n <span>{{ getTrackedValue(elem) }}</span>\r\n </div>\r\n </div>\r\n </asi-dropdown>\r\n <!-- Folders path -->\r\n <li *ngFor=\"let elem of shadowData\">\r\n <a (click)=\"clickOnElement(elem)\">\r\n <p ngClass.xs=\"shortText\">{{ getTrackedValue(elem) }}</p>\r\n </a>\r\n </li>\r\n</ul>" }] } ]; /** @nocollapse */ AsiBreadcrumbComponent.ctorParameters = () => [ { type: ChangeDetectorRef }, { type: ElementRef }, { type: IterableDiffers } ]; AsiBreadcrumbComponent.propDecorators = { class: [{ type: HostBinding, args: ['class',] }], data: [{ type: Input }], trackBy: [{ type: Input }], hideHome: [{ type: Input }], asiBreadcrumbDropdownDots: [{ type: ViewChild, args: ['asiBreadcrumbDropdownDots',] }], clicked: [{ type: Output, args: ['clicked',] }] }; if (false) { /** @type {?} */ AsiBreadcrumbComponent.prototype.class; /** * List of items to be displayed * @type {?} */ AsiBreadcrumbComponent.prototype.data; /** * * @type {?} */ AsiBreadcrumbComponent.prototype.trackBy; /** * Allow you to add the home button * @type {?} */ AsiBreadcrumbComponent.prototype.hideHome; /** @type {?} */ AsiBreadcrumbComponent.prototype.asiBreadcrumbDropdownDots; /** @type {?} */ AsiBreadcrumbComponent.prototype.differ; /** @type {?} */ AsiBreadcrumbComponent.prototype.nbElementsMax; /** @type {?} */ AsiBreadcrumbComponent.prototype.hideElements; /** @type {?} */ AsiBreadcrumbComponent.prototype.elementsDropdownOpened; /** * Data displayed on dom, doesn't interfere with input data * Needed because we sometimes hide some elements in GUI * But we don't want to remove them from data array * @type {?} */ AsiBreadcrumbComponent.prototype.shadowData; /** @type {?} */ AsiBreadcrumbComponent.prototype.hiddenElements; /** @type {?} */ AsiBreadcrumbComponent.prototype.clicked; /** @type {?} */ AsiBreadcrumbComponent.prototype.ref; /** @type {?} */ AsiBreadcrumbComponent.prototype.elRef; /** @type {?} */ AsiBreadcrumbComponent.prototype.differs; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLWJyZWFkY3J1bWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFzaS1uZ3Rvb2xzL2xpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FzaS1icmVhZGNydW1iL2FzaS1icmVhZGNydW1iLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsaUJBQWlCLEVBQVcsZUFBZSxFQUM3RSxZQUFZLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQWlCLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQU1oRyxNQUFNOzs7Ozs7SUE4QkosWUFBb0IsR0FBc0IsRUFBVSxLQUFpQixFQUFVLE9BQXdCO1FBQW5GLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQWlCO3FCQTVCekUsOEJBQThCOzRCQWV0QyxLQUFLO3NDQUNLLEtBQUs7Ozs7OzswQkFNUCxJQUFJLEtBQUssRUFBSzs4QkFDVixJQUFJLEtBQUssRUFBSzt1QkFHUCxJQUFJLFlBQVksRUFBWTtRQUduRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNsRDs7OztJQUVPLFVBQVU7UUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQztTQUM1RTtRQUVELEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7U0FDekU7Ozs7O0lBR0gsUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztLQUNuQjs7OztJQUdELFNBQVM7O1FBQ1AsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDWixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUN4QztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3ZDO1NBQ0Y7S0FDRjs7OztJQUVELGVBQWU7O1FBRWIsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDOztRQUUzRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxlQUFlLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDOztRQUVuRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUNoRDs7Ozs7SUFFTyxZQUFZLENBQUMsUUFBa0I7UUFDckMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzs7WUFFYixJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7WUFFekQsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7U0FDekY7Ozs7OztJQUdJLGVBQWUsQ0FBQyxPQUFZO1FBQ2pDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7O1lBQ1osTUFBTSxZQUFZLEdBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRCxNQUFNLENBQUMsWUFBWSxDQUFDO1NBQ3JCO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixNQUFNLENBQUMsSUFBSSxDQUFDO1NBQ2I7Ozs7OztJQUdJLGNBQWMsQ0FBQyxPQUFVO1FBQzlCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOzs7O1lBakdoQyxTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtnQkFDMUIsK2lDQUE0QzthQUM3Qzs7OztZQU5tQyxpQkFBaUI7WUFDOUIsVUFBVTtZQUQrQixlQUFlOzs7b0JBUzVFLFdBQVcsU0FBQyxPQUFPO21CQUduQixLQUFLO3NCQUdMLEtBQUs7dUJBR0wsS0FBSzt3Q0FFTCxTQUFTLFNBQUMsMkJBQTJCO3NCQWNyQyxNQUFNLFNBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPdXRwdXQsIENoYW5nZURldGVjdG9yUmVmLCBEb0NoZWNrLCBJdGVyYWJsZURpZmZlcnMsXHJcbiAgRXZlbnRFbWl0dGVyLCBJbnB1dCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBIb3N0QmluZGluZyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhc2ktYnJlYWRjcnVtYicsXHJcbiAgdGVtcGxhdGVVcmw6ICdhc2ktYnJlYWRjcnVtYi5jb21wb25lbnQuaHRtbCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBc2lCcmVhZGNydW1iQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0LCBEb0NoZWNrLCBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGNsYXNzID0gJ2FzaS1jb21wb25lbnQgYXNpLWJyZWFkY3J1bWInO1xyXG5cclxuICAvKiogTGlzdCBvZiBpdGVtcyB0byBiZSBkaXNwbGF5ZWQgKi9cclxuICBASW5wdXQoKSBkYXRhOiBBcnJheTxUPjtcclxuXHJcbiAgLyoqICovXHJcbiAgQElucHV0KCkgdHJhY2tCeTogc3RyaW5nO1xyXG5cclxuICAvKiogQWxsb3cgeW91IHRvIGFkZCB0aGUgaG9tZSBidXR0b24gKi9cclxuICBASW5wdXQoKSBoaWRlSG9tZTogYm9vbGVhbjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnYXNpQnJlYWRjcnVtYkRyb3Bkb3duRG90cycpIGFzaUJyZWFkY3J1bWJEcm9wZG93bkRvdHM6IEVsZW1lbnRSZWY7XHJcblxyXG4gIHByaXZhdGUgZGlmZmVyOiBhbnk7XHJcbiAgcHJpdmF0ZSBuYkVsZW1lbnRzTWF4OiBudW1iZXI7XHJcbiAgcHVibGljIGhpZGVFbGVtZW50cyA9IGZhbHNlO1xyXG4gIHB1YmxpYyBlbGVtZW50c0Ryb3Bkb3duT3BlbmVkID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogRGF0YSBkaXNwbGF5ZWQgb24gZG9tLCBkb2Vzbid0IGludGVyZmVyZSB3aXRoIGlucHV0IGRhdGFcclxuICAgKiBOZWVkZWQgYmVjYXVzZSB3ZSBzb21ldGltZXMgaGlkZSBzb21lIGVsZW1lbnRzIGluIEdVSVxyXG4gICAqIEJ1dCB3ZSBkb24ndCB3YW50IHRvIHJlbW92ZSB0aGVtIGZyb20gZGF0YSBhcnJheVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzaGFkb3dEYXRhOiBBcnJheTxUPiA9IG5ldyBBcnJheTxUPigpO1xyXG4gIHB1YmxpYyBoaWRkZW5FbGVtZW50czogQXJyYXk8VD4gPSBuZXcgQXJyYXk8VD4oKTtcclxuXHJcbiAgQE91dHB1dCgnY2xpY2tlZCcpXHJcbiAgcHVibGljIGNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxBcnJheTxUPj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFQ+PigpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgZGlmZmVyczogSXRlcmFibGVEaWZmZXJzKSB7XHJcbiAgICB0aGlzLmRpZmZlciA9IHRoaXMuZGlmZmVycy5maW5kKFtdKS5jcmVhdGUobnVsbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrSW5wdXQoKSB7XHJcbiAgICBpZiAobnVsbCA9PSB0aGlzLnRyYWNrQnkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBc2lCcmVhZGNydW1iQ29tcG9uZW50IDogQElucHV0IFxcJ3RyYWNrQnlcXCcgaXMgcmVxdWlyZWQnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuZGF0YSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FzaUJyZWFkY3J1bWJDb21wb25lbnQgOiBASW5wdXQgXFwnZGF0YVxcJyBpcyByZXF1aXJlZCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmNoZWNrSW5wdXQoKTtcclxuICB9XHJcblxyXG4gIC8vIFVzaW5nIG5nRG9DaGVjayBpbnN0ZWFkIG9mIG5nQ2hhbmdlcyB0byB1cGRhdGUgb24gZGVlcCBjaGFuZ2UgKHB1c2gvcG9wIGludG8gdGhlIGFycmF5KVxyXG4gIG5nRG9DaGVjaygpIHtcclxuICAgIGxldCBjaGFuZ2VzID0gdGhpcy5kaWZmZXIuZGlmZih0aGlzLmRhdGEpO1xyXG4gICAgaWYgKGNoYW5nZXMpIHtcclxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICBpZiAoY2hhbmdlcy5fY29sbGVjdGlvbikge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2hhZG93KGNoYW5nZXMuX2NvbGxlY3Rpb24pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2hhZG93KGNoYW5nZXMuY29sbGVjdGlvbik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIC8vIENvbXB1dGUgaG93IG1hbnkgZWxlbWVudHMgY2FuIGJlIHJlbmRlcmVkIGRlcGVuZGluZyBvbiBpbml0IHdpZHRoXHJcbiAgICBsZXQgYnJlYWRjcnVtYldpZHRoID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgLy8gKHdpZHRoIC0gKGhvbWUgd2lkdGgpIC0gKCcuLi4nIHdpZHRoKSkgLyBtYXggZWxlbWVudHMgc2l6ZVxyXG4gICAgdGhpcy5uYkVsZW1lbnRzTWF4ID0gTWF0aC5mbG9vcigoYnJlYWRjcnVtYldpZHRoIC0gMzAgLSA1MCkgLyAxMzApO1xyXG4gICAgLy8gc2V0VGltZW91dCgpIGF2b2lkIFwiRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvclwiIGV4Y2VwdGlvbiBpbiBkZXYgbW9kZVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVNoYWRvdyh0aGlzLmRhdGEpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2hhZG93KG5ld1N0YWNrOiBBcnJheTxUPikge1xyXG4gICAgaWYgKG5ld1N0YWNrKSB7XHJcbiAgICAgIC8vIHRydWUgLT4gc2hvd2luZyAnLi4uJ1xyXG4gICAgICB0aGlzLmhpZGVFbGVtZW50cyA9IG5ld1N0YWNrLmxlbmd0aCA+IHRoaXMubmJFbGVtZW50c01heDtcclxuICAgICAgLy8ganVzdCBkaXNwbGF5IHRoZSBsYXN0ICduYkVsZW1lbnRzTWF4J1xyXG4gICAgICB0aGlzLnNoYWRvd0RhdGEgPSBuZXdTdGFjay5zbGljZSgwIC0gdGhpcy5uYkVsZW1lbnRzTWF4KTtcclxuICAgICAgdGhpcy5oaWRkZW5FbGVtZW50cyA9IG5ld1N0YWNrLnNsaWNlKDAsIE1hdGgubWF4KG5ld1N0YWNrLmxlbmd0aCAtIHRoaXMubmJFbGVtZW50c01heCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFRyYWNrZWRWYWx1ZShlbGVtZW50OiBhbnkpIHtcclxuICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IHRyYWNrZWRWYWx1ZTogYW55ID0gZWxlbWVudFt0aGlzLnRyYWNrQnldO1xyXG4gICAgICByZXR1cm4gdHJhY2tlZFZhbHVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xpY2tPbkVsZW1lbnQoZWxlbWVudDogVCkge1xyXG4gICAgdGhpcy5lbGVtZW50c0Ryb3Bkb3duT3BlbmVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuc2xpY2UoMCwgdGhpcy5kYXRhLmluZGV4T2YoZWxlbWVudCkgKyAxKTtcclxuICAgIHRoaXMudXBkYXRlU2hhZG93KHRoaXMuZGF0YSk7XHJcbiAgICB0aGlzLmNsaWNrZWQuZW1pdCh0aGlzLmRhdGEpO1xyXG4gIH1cclxufVxyXG4iXX0=