@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
JavaScript
/**
* @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=