mdc-autocomplete-list
Version:
MdcAutocomplete in conjunction with MdcAutocompleteList and MdcAutocompleteListItem are a pack of angular components to provide an autocomplete functionality to Angular MDC web.
241 lines (240 loc) • 21.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, ContentChildren, QueryList, Input, Output } from '@angular/core';
import { MdcAutocompleteListItem } from 'mdc-autocomplete-list-item';
import { Subject } from 'rxjs';
var MdcAutocompleteList = /** @class */ (function () {
function MdcAutocompleteList() {
this.itemSelected = new Subject();
this.maxVisibleItems = Number.POSITIVE_INFINITY;
this._visible = false;
this._filter = '';
}
Object.defineProperty(MdcAutocompleteList.prototype, "visible", {
get: /**
* @return {?}
*/
function () {
return this._visible;
},
set: /**
* @param {?} v
* @return {?}
*/
function (v) {
this._visible = v;
if (v) {
this.filterItems();
this.focusFirstItem();
}
else {
this.unfocusAllItems();
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(MdcAutocompleteList.prototype, "filter", {
get: /**
* @return {?}
*/
function () {
return this._filter;
},
set: /**
* @param {?} f
* @return {?}
*/
function (f) {
this._filter = f;
this.filterItems();
this.focusFirstItem();
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
MdcAutocompleteList.prototype.ngOnInit = /**
* @return {?}
*/
function () {
};
/**
* @return {?}
*/
MdcAutocompleteList.prototype.ngAfterContentChecked = /**
* @return {?}
*/
function () {
var _this = this;
this.autocompleteListItems.toArray().forEach(function (item) {
if (item.itemClicked.observers.length === 0) {
// Only allow one subscription
item.itemClicked.subscribe(function (itemValue) {
_this.itemSelected.next(itemValue);
});
}
if (item.itemHovered.observers.length === 0) {
// Only allow one subscription
item.itemHovered.subscribe(function (itemValue) {
_this.unfocusAllItems();
item.focused = true;
});
}
});
};
/**
* @return {?}
*/
MdcAutocompleteList.prototype.unfocusAllItems = /**
* @return {?}
*/
function () {
this.autocompleteListItems.toArray().forEach(function (item) {
item.focused = false;
});
};
/**
* @return {?}
*/
MdcAutocompleteList.prototype.focusNextItem = /**
* @return {?}
*/
function () {
/** @type {?} */
var focusedItems = this.autocompleteListItems.filter(function (item, index, list) { return item.focused; });
/** @type {?} */
var focusedItem = focusedItems.length > 0 ? focusedItems[0] : null;
/** @type {?} */
var visibleItems = this.autocompleteListItems.filter(function (item, index, list) { return item.visible; });
if (focusedItem) {
/** @type {?} */
var focusedItemIndex = visibleItems.indexOf(focusedItem);
/** @type {?} */
var nextFocusedItem = (visibleItems.length >= focusedItemIndex + 1) ? visibleItems[focusedItemIndex + 1] : null;
if (nextFocusedItem) {
focusedItem.focused = false;
nextFocusedItem.focused = true;
nextFocusedItem.scrollIntoView();
}
}
else {
if (visibleItems.length > 0) {
visibleItems[0].focused = true;
}
}
};
/**
* @return {?}
*/
MdcAutocompleteList.prototype.focusPreviousItem = /**
* @return {?}
*/
function () {
/** @type {?} */
var focusedItems = this.autocompleteListItems.filter(function (item, index, list) { return item.focused; });
/** @type {?} */
var focusedItem = focusedItems.length > 0 ? focusedItems[0] : null;
/** @type {?} */
var visibleItems = this.autocompleteListItems.filter(function (item, index, list) { return item.visible; });
if (focusedItem) {
/** @type {?} */
var focusedItemIndex = visibleItems.indexOf(focusedItem);
/** @type {?} */
var previousFocusedItem = (focusedItemIndex > 0) ? visibleItems[focusedItemIndex - 1] : null;
if (previousFocusedItem) {
focusedItem.focused = false;
previousFocusedItem.focused = true;
previousFocusedItem.scrollIntoView();
}
}
else {
if (visibleItems.length > 0) {
visibleItems[0].focused = true;
}
}
};
/**
* @return {?}
*/
MdcAutocompleteList.prototype.focusFirstItem = /**
* @return {?}
*/
function () {
this.unfocusAllItems();
/** @type {?} */
var visibleItems = this.autocompleteListItems.filter(function (item, index, list) { return item.visible; });
if (visibleItems.length > 0) {
visibleItems[0].focused = true;
}
};
/**
* @return {?}
*/
MdcAutocompleteList.prototype.selectFocusedItem = /**
* @return {?}
*/
function () {
/** @type {?} */
var focusedItems = this.autocompleteListItems.filter(function (item, index, list) { return item.focused; });
/** @type {?} */
var focusedItem = focusedItems.length > 0 ? focusedItems[0] : null;
if (focusedItem) {
this.itemSelected.next(focusedItem.value);
}
};
/**
* @return {?}
*/
MdcAutocompleteList.prototype.filterItems = /**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var showing = 0;
this.autocompleteListItems.forEach(function (item, index, list) {
if (showing < _this.maxVisibleItems && item.filterString.toUpperCase().includes(_this._filter.toUpperCase())) {
item.visible = true;
showing++;
}
else {
item.visible = false;
item.focused = false;
}
});
};
MdcAutocompleteList.decorators = [
{ type: Component, args: [{
selector: 'mdc-autocomplete-list',
template: "<ul *ngIf=\"visible\" class=\"mdc-elevation--z2\">\n <ng-content></ng-content>\n</ul>\n",
styles: ["ul{position:absolute;min-width:200px;max-height:400px;padding:0;margin:0;background-color:#fff;overflow-y:scroll;list-style:none}"]
},] },
];
/** @nocollapse */
MdcAutocompleteList.ctorParameters = function () { return []; };
MdcAutocompleteList.propDecorators = {
maxVisibleItems: [{ type: Input }],
itemSelected: [{ type: Output }],
autocompleteListItems: [{ type: ContentChildren, args: [MdcAutocompleteListItem,] }]
};
return MdcAutocompleteList;
}());
export { MdcAutocompleteList };
if (false) {
/** @type {?} */
MdcAutocompleteList.prototype.maxVisibleItems;
/** @type {?} */
MdcAutocompleteList.prototype.itemSelected;
/** @type {?} */
MdcAutocompleteList.prototype.autocompleteListItems;
/** @type {?} */
MdcAutocompleteList.prototype._visible;
/** @type {?} */
MdcAutocompleteList.prototype._filter;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbWRjLWF1dG9jb21wbGV0ZS1saXN0LyIsInNvdXJjZXMiOlsibGliL2F1dG9jb21wbGV0ZS1saXN0L2F1dG9jb21wbGV0ZS1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxlQUFlLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQ2xILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0lBNEM3Qjs0QkE5QjhDLElBQUksT0FBTyxFQUFFO1FBK0J6RCxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztLQUNuQjswQkE1QlUsd0NBQU87Ozs7O1lBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7a0JBR0osQ0FBVTtZQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUNsQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNOLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3ZCO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2FBQ3hCOzs7OzswQkFHUSx1Q0FBTTs7Ozs7WUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQzs7Ozs7O2tCQUdKLENBQVM7WUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDakIs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QUFDO2dCQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzthQUN0QjtTQUNGLENBQUMsQ0FBQzs7O2dCQTdJTixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsUUFBUSxFQUFFLDBGQUdYO29CQUNDLE1BQU0sRUFBRSxDQUFDLG1JQUFtSSxDQUFDO2lCQUM5STs7Ozs7a0NBSUUsS0FBSzsrQkFDTCxNQUFNO3dDQUVOLGVBQWUsU0FBQyx1QkFBdUI7OzhCQWxCMUM7O1NBYWEsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIENvbnRlbnRDaGlsZHJlbiwgUXVlcnlMaXN0LCBJbnB1dCwgT3V0cHV0LCBBZnRlckNvbnRlbnRDaGVja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1kY0F1dG9jb21wbGV0ZUxpc3RJdGVtIH0gZnJvbSAnbWRjLWF1dG9jb21wbGV0ZS1saXN0LWl0ZW0nO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ21kYy1hdXRvY29tcGxldGUtbGlzdCcsXHJcbiAgdGVtcGxhdGU6IGA8dWwgKm5nSWY9XCJ2aXNpYmxlXCIgY2xhc3M9XCJtZGMtZWxldmF0aW9uLS16MlwiPlxyXG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuPC91bD5cclxuYCxcclxuICBzdHlsZXM6IFtgdWx7cG9zaXRpb246YWJzb2x1dGU7bWluLXdpZHRoOjIwMHB4O21heC1oZWlnaHQ6NDAwcHg7cGFkZGluZzowO21hcmdpbjowO2JhY2tncm91bmQtY29sb3I6I2ZmZjtvdmVyZmxvdy15OnNjcm9sbDtsaXN0LXN0eWxlOm5vbmV9YF1cclxufSlcclxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1jbGFzcy1zdWZmaXhcclxuZXhwb3J0IGNsYXNzIE1kY0F1dG9jb21wbGV0ZUxpc3QgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudENoZWNrZWQge1xyXG5cclxuICBASW5wdXQoKSBtYXhWaXNpYmxlSXRlbXM6IG51bWJlcjtcclxuICBAT3V0cHV0KCkgcHVibGljIGl0ZW1TZWxlY3RlZDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihNZGNBdXRvY29tcGxldGVMaXN0SXRlbSkgYXV0b2NvbXBsZXRlTGlzdEl0ZW1zOiAgUXVlcnlMaXN0PE1kY0F1dG9jb21wbGV0ZUxpc3RJdGVtPjtcclxuICBfdmlzaWJsZTogYm9vbGVhbjtcclxuICBfZmlsdGVyOiBzdHJpbmc7XHJcblxyXG4gIHB1YmxpYyBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCB2aXNpYmxlKHY6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3Zpc2libGUgPSB2O1xyXG4gICAgaWYgKHYpIHtcclxuICAgICAgdGhpcy5maWx0ZXJJdGVtcygpO1xyXG4gICAgICB0aGlzLmZvY3VzRmlyc3RJdGVtKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVuZm9jdXNBbGxJdGVtcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBmaWx0ZXIoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9maWx0ZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGZpbHRlcihmOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2ZpbHRlciA9IGY7XHJcbiAgICB0aGlzLmZpbHRlckl0ZW1zKCk7XHJcbiAgICB0aGlzLmZvY3VzRmlyc3RJdGVtKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMubWF4VmlzaWJsZUl0ZW1zID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xyXG4gICAgdGhpcy5fdmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5fZmlsdGVyID0gJyc7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcclxuICAgIHRoaXMuYXV0b2NvbXBsZXRlTGlzdEl0ZW1zLnRvQXJyYXkoKS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLml0ZW1DbGlja2VkLm9ic2VydmVycy5sZW5ndGggPT09IDApIHsgLy8gT25seSBhbGxvdyBvbmUgc3Vic2NyaXB0aW9uXHJcbiAgICAgICAgaXRlbS5pdGVtQ2xpY2tlZC5zdWJzY3JpYmUoKGl0ZW1WYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pdGVtU2VsZWN0ZWQubmV4dChpdGVtVmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXRlbS5pdGVtSG92ZXJlZC5vYnNlcnZlcnMubGVuZ3RoID09PSAwKSB7IC8vIE9ubHkgYWxsb3cgb25lIHN1YnNjcmlwdGlvblxyXG4gICAgICAgIGl0ZW0uaXRlbUhvdmVyZWQuc3Vic2NyaWJlKChpdGVtVmFsdWUpID0+IHtcclxuICAgICAgICAgIHRoaXMudW5mb2N1c0FsbEl0ZW1zKCk7XHJcbiAgICAgICAgICBpdGVtLmZvY3VzZWQgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1bmZvY3VzQWxsSXRlbXMoKSB7XHJcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUxpc3RJdGVtcy50b0FycmF5KCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmZvY3VzZWQgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZvY3VzTmV4dEl0ZW0oKSB7XHJcbiAgICBjb25zdCBmb2N1c2VkSXRlbXMgPSB0aGlzLmF1dG9jb21wbGV0ZUxpc3RJdGVtcy5maWx0ZXIoKGl0ZW0sIGluZGV4LCBsaXN0KSA9PiBpdGVtLmZvY3VzZWQpO1xyXG4gICAgY29uc3QgZm9jdXNlZEl0ZW0gPSBmb2N1c2VkSXRlbXMubGVuZ3RoID4gMCA/IGZvY3VzZWRJdGVtc1swXSA6IG51bGw7XHJcbiAgICBjb25zdCB2aXNpYmxlSXRlbXMgPSB0aGlzLmF1dG9jb21wbGV0ZUxpc3RJdGVtcy5maWx0ZXIoKGl0ZW0sIGluZGV4LCBsaXN0KSA9PiBpdGVtLnZpc2libGUpO1xyXG5cclxuICAgIGlmIChmb2N1c2VkSXRlbSkge1xyXG4gICAgICBjb25zdCBmb2N1c2VkSXRlbUluZGV4ID0gdmlzaWJsZUl0ZW1zLmluZGV4T2YoZm9jdXNlZEl0ZW0pO1xyXG4gICAgICBjb25zdCBuZXh0Rm9jdXNlZEl0ZW0gPSAodmlzaWJsZUl0ZW1zLmxlbmd0aCA+PSBmb2N1c2VkSXRlbUluZGV4ICsgMSkgPyB2aXNpYmxlSXRlbXNbZm9jdXNlZEl0ZW1JbmRleCArIDFdIDogbnVsbDtcclxuICAgICAgaWYgKG5leHRGb2N1c2VkSXRlbSkge1xyXG4gICAgICAgIGZvY3VzZWRJdGVtLmZvY3VzZWQgPSBmYWxzZTtcclxuICAgICAgICBuZXh0Rm9jdXNlZEl0ZW0uZm9jdXNlZCA9IHRydWU7XHJcbiAgICAgICAgbmV4dEZvY3VzZWRJdGVtLnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh2aXNpYmxlSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHZpc2libGVJdGVtc1swXS5mb2N1c2VkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZvY3VzUHJldmlvdXNJdGVtKCkge1xyXG4gICAgY29uc3QgZm9jdXNlZEl0ZW1zID0gdGhpcy5hdXRvY29tcGxldGVMaXN0SXRlbXMuZmlsdGVyKChpdGVtLCBpbmRleCwgbGlzdCkgPT4gaXRlbS5mb2N1c2VkKTtcclxuICAgIGNvbnN0IGZvY3VzZWRJdGVtID0gZm9jdXNlZEl0ZW1zLmxlbmd0aCA+IDAgPyBmb2N1c2VkSXRlbXNbMF0gOiBudWxsO1xyXG4gICAgY29uc3QgdmlzaWJsZUl0ZW1zID0gdGhpcy5hdXRvY29tcGxldGVMaXN0SXRlbXMuZmlsdGVyKChpdGVtLCBpbmRleCwgbGlzdCkgPT4gaXRlbS52aXNpYmxlKTtcclxuXHJcbiAgICBpZiAoZm9jdXNlZEl0ZW0pIHtcclxuICAgICAgY29uc3QgZm9jdXNlZEl0ZW1JbmRleCA9IHZpc2libGVJdGVtcy5pbmRleE9mKGZvY3VzZWRJdGVtKTtcclxuICAgICAgY29uc3QgcHJldmlvdXNGb2N1c2VkSXRlbSA9IChmb2N1c2VkSXRlbUluZGV4ID4gMCkgPyB2aXNpYmxlSXRlbXNbZm9jdXNlZEl0ZW1JbmRleCAtIDFdIDogbnVsbDtcclxuICAgICAgaWYgKHByZXZpb3VzRm9jdXNlZEl0ZW0pIHtcclxuICAgICAgICBmb2N1c2VkSXRlbS5mb2N1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgcHJldmlvdXNGb2N1c2VkSXRlbS5mb2N1c2VkID0gdHJ1ZTtcclxuICAgICAgICBwcmV2aW91c0ZvY3VzZWRJdGVtLnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh2aXNpYmxlSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHZpc2libGVJdGVtc1swXS5mb2N1c2VkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZvY3VzRmlyc3RJdGVtKCkge1xyXG4gICAgdGhpcy51bmZvY3VzQWxsSXRlbXMoKTtcclxuICAgIGNvbnN0IHZpc2libGVJdGVtcyA9IHRoaXMuYXV0b2NvbXBsZXRlTGlzdEl0ZW1zLmZpbHRlcigoaXRlbSwgaW5kZXgsIGxpc3QpID0+IGl0ZW0udmlzaWJsZSk7XHJcbiAgICBpZiAodmlzaWJsZUl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdmlzaWJsZUl0ZW1zWzBdLmZvY3VzZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdEZvY3VzZWRJdGVtKCkge1xyXG4gICAgY29uc3QgZm9jdXNlZEl0ZW1zID0gdGhpcy5hdXRvY29tcGxldGVMaXN0SXRlbXMuZmlsdGVyKChpdGVtLCBpbmRleCwgbGlzdCkgPT4gaXRlbS5mb2N1c2VkKTtcclxuICAgIGNvbnN0IGZvY3VzZWRJdGVtID0gZm9jdXNlZEl0ZW1zLmxlbmd0aCA+IDAgPyBmb2N1c2VkSXRlbXNbMF0gOiBudWxsO1xyXG5cclxuICAgIGlmIChmb2N1c2VkSXRlbSkge1xyXG4gICAgICB0aGlzLml0ZW1TZWxlY3RlZC5uZXh0KGZvY3VzZWRJdGVtLnZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmlsdGVySXRlbXMoKSB7XHJcbiAgICBsZXQgc2hvd2luZyA9IDA7XHJcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUxpc3RJdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCwgbGlzdCkgPT4ge1xyXG4gICAgICBpZiAoc2hvd2luZyA8IHRoaXMubWF4VmlzaWJsZUl0ZW1zICYmIGl0ZW0uZmlsdGVyU3RyaW5nLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXModGhpcy5fZmlsdGVyLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgaXRlbS52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICBzaG93aW5nKys7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaXRlbS52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgaXRlbS5mb2N1c2VkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=