@hxui/angular
Version:
* * *
253 lines • 22.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc
*/
import { Component, ElementRef, ViewEncapsulation, HostListener } from '@angular/core';
import { latinize } from './typeahead-utils';
var TypeaheadContainerComponent = /** @class */ (function () {
function TypeaheadContainerComponent(element) {
this.isFocused = false;
this._matches = [];
this.element = element;
}
Object.defineProperty(TypeaheadContainerComponent.prototype, "active", {
get: /**
* @return {?}
*/
function () {
return this._active;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TypeaheadContainerComponent.prototype, "matches", {
get: /**
* @return {?}
*/
function () {
return this._matches;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._matches = value;
if (this._matches.length > 0) {
this._active = this._matches[0];
if (this._active.isHeader()) {
this.nextActiveMatch();
}
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(TypeaheadContainerComponent.prototype, "optionsListTemplate", {
get: /**
* @return {?}
*/
function () {
return this.parent ? this.parent.optionsListTemplate : undefined;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TypeaheadContainerComponent.prototype, "itemTemplate", {
get: /**
* @return {?}
*/
function () {
return this.parent ? this.parent.typeaheadItemTemplate : undefined;
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
TypeaheadContainerComponent.prototype.selectActiveMatch = /**
* @return {?}
*/
function () {
this.selectMatch(this._active);
};
/**
* @return {?}
*/
TypeaheadContainerComponent.prototype.prevActiveMatch = /**
* @return {?}
*/
function () {
/** @type {?} */
var index = this.matches.indexOf(this._active);
this._active = this.matches[index - 1 < 0
? this.matches.length - 1
: index - 1];
if (this._active.isHeader()) {
this.prevActiveMatch();
}
};
/**
* @return {?}
*/
TypeaheadContainerComponent.prototype.nextActiveMatch = /**
* @return {?}
*/
function () {
/** @type {?} */
var index = this.matches.indexOf(this._active);
this._active = this.matches[index + 1 > this.matches.length - 1
? 0
: index + 1];
if (this._active.isHeader()) {
this.nextActiveMatch();
}
};
/**
* @param {?} value
* @return {?}
*/
TypeaheadContainerComponent.prototype.selectActive = /**
* @param {?} value
* @return {?}
*/
function (value) {
this.isFocused = true;
this._active = value;
};
/**
* @param {?} match
* @param {?} query
* @return {?}
*/
TypeaheadContainerComponent.prototype.hightlight = /**
* @param {?} match
* @param {?} query
* @return {?}
*/
function (match, query) {
/** @type {?} */
var itemStr = match.value;
/** @type {?} */
var itemStrHelper = (this.parent && this.parent.typeaheadLatinize
? latinize(itemStr)
: itemStr).toLowerCase();
/** @type {?} */
var startIdx;
/** @type {?} */
var tokenLen;
// Replaces the capture string with the same string inside of a "strong" tag
if (typeof query === 'object') {
/** @type {?} */
var queryLen = query.length;
for (var i = 0; i < queryLen; i += 1) {
// query[i] is already latinized and lower case
startIdx = itemStrHelper.indexOf(query[i]);
tokenLen = query[i].length;
if (startIdx >= 0 && tokenLen > 0) {
itemStr = itemStr.substring(0, startIdx) + '<strong>' + itemStr.substring(startIdx, startIdx + tokenLen) + '</strong>' + itemStr.substring(startIdx + tokenLen);
itemStrHelper = itemStrHelper.substring(0, startIdx) + ' ' + ' '.repeat(tokenLen) + ' ' + itemStrHelper.substring(startIdx + tokenLen);
}
}
}
else if (query) {
// query is already latinized and lower case
startIdx = itemStrHelper.indexOf(query);
tokenLen = query.length;
if (startIdx >= 0 && tokenLen > 0) {
itemStr = itemStr.substring(0, startIdx) + '<strong>' + itemStr.substring(startIdx, startIdx + tokenLen) + '</strong>' + itemStr.substring(startIdx + tokenLen);
}
}
return itemStr;
};
/**
* @return {?}
*/
TypeaheadContainerComponent.prototype.focusLost = /**
* @return {?}
*/
function () {
this.isFocused = false;
};
/**
* @param {?} value
* @return {?}
*/
TypeaheadContainerComponent.prototype.isActive = /**
* @param {?} value
* @return {?}
*/
function (value) {
return this._active === value;
};
/**
* @param {?} value
* @param {?=} e
* @return {?}
*/
TypeaheadContainerComponent.prototype.selectMatch = /**
* @param {?} value
* @param {?=} e
* @return {?}
*/
function (value, e) {
var _this = this;
if (e === void 0) { e = void 0; }
if (e) {
e.stopPropagation();
e.preventDefault();
}
this.parent.changeModel(value);
setTimeout(function () {
return _this.parent.typeaheadOnSelect.emit(value);
}, 0);
return false;
};
TypeaheadContainerComponent.decorators = [
{ type: Component, args: [{
selector: 'hx-typeahead-container',
// tslint:disable-next-line
template: "\n<!-- inject options list template -->\n<ng-template [ngTemplateOutlet]=\"optionsListTemplate || optionListTemplate\"\n [ngTemplateOutletContext]=\"{matches:matches, itemTemplate:itemTemplate, query:query}\"></ng-template>\n\n<!-- default options item template -->\n<ng-template #hxItemTemplate let-match=\"match\" let-query=\"query\"><span [innerHtml]=\"hightlight(match, query)\"></span></ng-template>\n\n<!-- options list template -->\n<ng-template #optionListTemplate >\n<ng-template ngFor let-match let-i=\"index\" [ngForOf]=\"matches\">\n <h6 *ngIf=\"match.isHeader()\" class=\"hx-dropdown-header\">{{match}}</h6>\n \n <ng-template [ngIf]=\"!match.isHeader()\">\n <a href=\"#\"\n class=\"hx-dropdown-item\"\n (click)=\"selectMatch(match, $event)\"\n (mouseenter)=\"selectActive(match)\"\n [class.active]=\"isActive(match)\">\n <ng-template [ngTemplateOutlet]=\"itemTemplate || hxItemTemplate\" \n [ngTemplateOutletContext]=\"{item:match.item, index:i, match:match, query:query}\"></ng-template>\n </a>\n </ng-template>\n</ng-template>\n</ng-template>\n",
// tslint:disable
host: {
'class': 'hx-dropdown is-open hx-dropdown-menu',
style: 'position: absolute;display: block;'
},
// tslint: enable
encapsulation: ViewEncapsulation.None
},] },
];
/** @nocollapse */
TypeaheadContainerComponent.ctorParameters = function () { return [
{ type: ElementRef }
]; };
TypeaheadContainerComponent.propDecorators = {
focusLost: [{ type: HostListener, args: ['mouseleave',] }, { type: HostListener, args: ['blur',] }]
};
return TypeaheadContainerComponent;
}());
export { TypeaheadContainerComponent };
if (false) {
/** @type {?} */
TypeaheadContainerComponent.prototype.parent;
/** @type {?} */
TypeaheadContainerComponent.prototype.query;
/** @type {?} */
TypeaheadContainerComponent.prototype.element;
/** @type {?} */
TypeaheadContainerComponent.prototype.isFocused;
/** @type {?} */
TypeaheadContainerComponent.prototype.top;
/** @type {?} */
TypeaheadContainerComponent.prototype.left;
/** @type {?} */
TypeaheadContainerComponent.prototype.display;
/** @type {?} */
TypeaheadContainerComponent.prototype.placement;
/** @type {?} */
TypeaheadContainerComponent.prototype._active;
/** @type {?} */
TypeaheadContainerComponent.prototype._matches;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaHh1aS9hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL3R5cGVhaGVhZC90eXBlYWhlYWQtY29udGFpbmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFBRSxVQUFVLEVBQWUsaUJBQWlCLEVBQUUsWUFBWSxFQUNwRSxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFN0M7SUFtREUscUNBQW1CLE9BQW1CO1FBVi9CLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFReEIsYUFBUSxHQUFxQixFQUFFLENBQUM7UUFHeEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVELHNCQUFXLCtDQUFNOzs7O1FBQWpCO1lBQ0UsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3RCLENBQUM7OztPQUFBO0lBRUQsc0JBQVcsZ0RBQU87Ozs7UUFBbEI7WUFDRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDdkIsQ0FBQzs7Ozs7UUFFRCxVQUFtQixLQUF1QjtZQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUV0QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUU7b0JBQzNCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztpQkFDeEI7YUFDRjtRQUNILENBQUM7OztPQVhBO0lBYUQsc0JBQVcsNERBQW1COzs7O1FBQTlCO1lBQ0UsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMs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SUFBSSxDQUFDLEVBQUU7WUFDTCxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDcEIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3BCO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsVUFBVSxDQUFDO1lBQ1QsT0FBQSxLQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFBekMsQ0FBeUMsRUFBRSxDQUFDLENBQzdDLENBQUM7UUFDRixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7O2dCQWxLRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLHdCQUF3Qjs7b0JBRWxDLFFBQVEsRUFBRSx1bUNBeUJYOztvQkFFQyxJQUFJLEVBQUU7d0JBQ0osT0FBTyxFQUFFLHNDQUFzQzt3QkFDL0MsS0FBSyxFQUFFLG9DQUFvQztxQkFDNUM7O29CQUVELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2lCQUN0Qzs7OztnQkExQ1ksVUFBVTs7OzRCQW9KcEIsWUFBWSxTQUFDLFlBQVksY0FDekIsWUFBWSxTQUFDLE1BQU07O0lBb0J0QixrQ0FBQztDQUFBLEFBbktELElBbUtDO1NBOUhZLDJCQUEyQjs7O0lBQ3RDLDZDQUFrQzs7SUFDbEMsNENBQWtCOztJQUNsQiw4Q0FBMkI7O0lBQzNCLGdEQUFrQzs7SUFDbEMsMENBQW1COztJQUNuQiwyQ0FBb0I7O0lBQ3BCLDhDQUF1Qjs7SUFDdkIsZ0RBQXlCOztJQUd6Qiw4Q0FBa0M7O0lBQ2xDLCtDQUEwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBUZW1wbGF0ZVJlZiwgVmlld0VuY2Fwc3VsYXRpb24sIEhvc3RMaXN0ZW5lclxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUeXBlYWhlYWREaXJlY3RpdmUgfSBmcm9tICcuL3R5cGVhaGVhZC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBUeXBlYWhlYWRNYXRjaCB9IGZyb20gJy4vdHlwZWFoZWFkLW1hdGNoLmNsYXNzJztcclxuaW1wb3J0IHsgbGF0aW5pemUgfSBmcm9tICcuL3R5cGVhaGVhZC11dGlscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2h4LXR5cGVhaGVhZC1jb250YWluZXInLFxyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxyXG4gIHRlbXBsYXRlOiBgXHJcbjwhLS0gaW5qZWN0IG9wdGlvbnMgbGlzdCB0ZW1wbGF0ZSAtLT5cclxuPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbnNMaXN0VGVtcGxhdGUgfHwgb3B0aW9uTGlzdFRlbXBsYXRlXCJcclxuICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie21hdGNoZXM6bWF0Y2hlcywgaXRlbVRlbXBsYXRlOml0ZW1UZW1wbGF0ZSwgcXVlcnk6cXVlcnl9XCI+PC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gZGVmYXVsdCBvcHRpb25zIGl0ZW0gdGVtcGxhdGUgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjaHhJdGVtVGVtcGxhdGUgbGV0LW1hdGNoPVwibWF0Y2hcIiBsZXQtcXVlcnk9XCJxdWVyeVwiPjxzcGFuIFtpbm5lckh0bWxdPVwiaGlnaHRsaWdodChtYXRjaCwgcXVlcnkpXCI+PC9zcGFuPjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIG9wdGlvbnMgbGlzdCB0ZW1wbGF0ZSAtLT5cclxuPG5nLXRlbXBsYXRlICNvcHRpb25MaXN0VGVtcGxhdGUgPlxyXG48bmctdGVtcGxhdGUgbmdGb3IgbGV0LW1hdGNoIGxldC1pPVwiaW5kZXhcIiBbbmdGb3JPZl09XCJtYXRjaGVzXCI+XHJcbiAgIDxoNiAqbmdJZj1cIm1hdGNoLmlzSGVhZGVyKClcIiBjbGFzcz1cImh4LWRyb3Bkb3duLWhlYWRlclwiPnt7bWF0Y2h9fTwvaDY+XHJcbiAgIFxyXG4gICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIW1hdGNoLmlzSGVhZGVyKClcIj5cclxuICAgICAgPGEgaHJlZj1cIiNcIlxyXG4gICAgICAgIGNsYXNzPVwiaHgtZHJvcGRvd24taXRlbVwiXHJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdE1hdGNoKG1hdGNoLCAkZXZlbnQpXCJcclxuICAgICAgICAobW91c2VlbnRlcik9XCJzZWxlY3RBY3RpdmUobWF0Y2gpXCJcclxuICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImlzQWN0aXZlKG1hdGNoKVwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1UZW1wbGF0ZSB8fCBoeEl0ZW1UZW1wbGF0ZVwiIFxyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2l0ZW06bWF0Y2guaXRlbSwgaW5kZXg6aSwgbWF0Y2g6bWF0Y2gsIHF1ZXJ5OnF1ZXJ5fVwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvYT5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L25nLXRlbXBsYXRlPlxyXG48L25nLXRlbXBsYXRlPlxyXG5gLFxyXG4gIC8vIHRzbGludDpkaXNhYmxlXHJcbiAgaG9zdDoge1xyXG4gICAgJ2NsYXNzJzogJ2h4LWRyb3Bkb3duIGlzLW9wZW4gaHgtZHJvcGRvd24tbWVudScsXHJcbiAgICBzdHlsZTogJ3Bvc2l0aW9uOiBhYnNvbHV0ZTtkaXNwbGF5OiBibG9jazsnXHJcbiAgfSxcclxuICAvLyB0c2xpbnQ6IGVuYWJsZVxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIFR5cGVhaGVhZENvbnRhaW5lckNvbXBvbmVudCB7XHJcbiAgcHVibGljIHBhcmVudDogVHlwZWFoZWFkRGlyZWN0aXZlO1xyXG4gIHB1YmxpYyBxdWVyeTogYW55O1xyXG4gIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmO1xyXG4gIHB1YmxpYyBpc0ZvY3VzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdG9wOiBzdHJpbmc7XHJcbiAgcHVibGljIGxlZnQ6IHN0cmluZztcclxuICBwdWJsaWMgZGlzcGxheTogc3RyaW5nO1xyXG4gIHB1YmxpYyBwbGFjZW1lbnQ6IHN0cmluZztcclxuXHJcblxyXG4gIHByb3RlY3RlZCBfYWN0aXZlOiBUeXBlYWhlYWRNYXRjaDtcclxuICBwcm90ZWN0ZWQgX21hdGNoZXM6IFR5cGVhaGVhZE1hdGNoW10gPSBbXTtcclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnRSZWYpIHtcclxuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFjdGl2ZSgpOiBUeXBlYWhlYWRNYXRjaCB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBtYXRjaGVzKCk6IFR5cGVhaGVhZE1hdGNoW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX21hdGNoZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IG1hdGNoZXModmFsdWU6IFR5cGVhaGVhZE1hdGNoW10pIHtcclxuICAgIHRoaXMuX21hdGNoZXMgPSB2YWx1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5fbWF0Y2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuX2FjdGl2ZSA9IHRoaXMuX21hdGNoZXNbMF07XHJcbiAgICAgIGlmICh0aGlzLl9hY3RpdmUuaXNIZWFkZXIoKSkge1xyXG4gICAgICAgIHRoaXMubmV4dEFjdGl2ZU1hdGNoKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgb3B0aW9uc0xpc3RUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLnBhcmVudCA/IHRoaXMucGFyZW50Lm9wdGlvbnNMaXN0VGVtcGxhdGUgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGl0ZW1UZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLnBhcmVudCA/IHRoaXMucGFyZW50LnR5cGVhaGVhZEl0ZW1UZW1wbGF0ZSA6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RBY3RpdmVNYXRjaCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0TWF0Y2godGhpcy5fYWN0aXZlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwcmV2QWN0aXZlTWF0Y2goKTogdm9pZCB7XHJcbiAgICBsZXQgaW5kZXggPSB0aGlzLm1hdGNoZXMuaW5kZXhPZih0aGlzLl9hY3RpdmUpO1xyXG4gICAgdGhpcy5fYWN0aXZlID0gdGhpcy5tYXRjaGVzW2luZGV4IC0gMSA8IDBcclxuICAgICAgPyB0aGlzLm1hdGNoZXMubGVuZ3RoIC0gMVxyXG4gICAgICA6IGluZGV4IC0gMV07XHJcbiAgICBpZiAodGhpcy5fYWN0aXZlLmlzSGVhZGVyKCkpIHtcclxuICAgICAgdGhpcy5wcmV2QWN0aXZlTWF0Y2goKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmV4dEFjdGl2ZU1hdGNoKCk6IHZvaWQge1xyXG4gICAgbGV0IGluZGV4ID0gdGhpcy5tYXRjaGVzLmluZGV4T2YodGhpcy5fYWN0aXZlKTtcclxuICAgIHRoaXMuX2FjdGl2ZSA9IHRoaXMubWF0Y2hlc1tpbmRleCArIDEgPiB0aGlzLm1hdGNoZXMubGVuZ3RoIC0gMVxyXG4gICAgICA/IDBcclxuICAgICAgOiBpbmRleCArIDFdO1xyXG4gICAgaWYgKHRoaXMuX2FjdGl2ZS5pc0hlYWRlcigpKSB7XHJcbiAgICAgIHRoaXMubmV4dEFjdGl2ZU1hdGNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0QWN0aXZlKHZhbHVlOiBUeXBlYWhlYWRNYXRjaCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5fYWN0aXZlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGlnaHRsaWdodChtYXRjaDogVHlwZWFoZWFkTWF0Y2gsIHF1ZXJ5OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgbGV0IGl0ZW1TdHI6IHN0cmluZyA9IG1hdGNoLnZhbHVlO1xyXG4gICAgbGV0IGl0ZW1TdHJIZWxwZXI6IHN0cmluZyA9ICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC50eXBlYWhlYWRMYXRpbml6ZVxyXG4gICAgICA/IGxhdGluaXplKGl0ZW1TdHIpXHJcbiAgICAgIDogaXRlbVN0cikudG9Mb3dlckNhc2UoKTtcclxuICAgIGxldCBzdGFydElkeDogbnVtYmVyO1xyXG4gICAgbGV0IHRva2VuTGVuOiBudW1iZXI7XHJcbiAgICAvLyBSZXBsYWNlcyB0aGUgY2FwdHVyZSBzdHJpbmcgd2l0aCB0aGUgc2FtZSBzdHJpbmcgaW5zaWRlIG9mIGEgXCJzdHJvbmdcIiB0YWdcclxuICAgIGlmICh0eXBlb2YgcXVlcnkgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGxldCBxdWVyeUxlbjogbnVtYmVyID0gcXVlcnkubGVuZ3RoO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHF1ZXJ5TGVuOyBpICs9IDEpIHtcclxuICAgICAgICAvLyBxdWVyeVtpXSBpcyBhbHJlYWR5IGxhdGluaXplZCBhbmQgbG93ZXIgY2FzZVxyXG4gICAgICAgIHN0YXJ0SWR4ID0gaXRlbVN0ckhlbHBlci5pbmRleE9mKHF1ZXJ5W2ldKTtcclxuICAgICAgICB0b2tlbkxlbiA9IHF1ZXJ5W2ldLmxlbmd0aDtcclxuICAgICAgICBpZiAoc3RhcnRJZHggPj0gMCAmJiB0b2tlbkxlbiA+IDApIHtcclxuICAgICAgICAgIGl0ZW1TdHIgPSBpdGVtU3RyLnN1YnN0cmluZygwLCBzdGFydElkeCkgKyAnPHN0cm9uZz4nICsgaXRlbVN0ci5zdWJzdHJpbmcoc3RhcnRJZHgsIHN0YXJ0SWR4ICsgdG9rZW5MZW4pICsgJzwvc3Ryb25nPicgKyBpdGVtU3RyLnN1YnN0cmluZyhzdGFydElkeCArIHRva2VuTGVuKTtcclxuICAgICAgICAgIGl0ZW1TdHJIZWxwZXIgPSBpdGVtU3RySGVscGVyLnN1YnN0cmluZygwLCBzdGFydElkeCkgKyAnICAgICAgICAnICsgJyAnLnJlcGVhdCh0b2tlbkxlbikgKyAnICAgICAgICAgJyArIGl0ZW1TdHJIZWxwZXIuc3Vic3RyaW5nKHN0YXJ0SWR4ICsgdG9rZW5MZW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChxdWVyeSkge1xyXG4gICAgICAvLyBxdWVyeSBpcyBhbHJlYWR5IGxhdGluaXplZCBhbmQgbG93ZXIgY2FzZVxyXG4gICAgICBzdGFydElkeCA9IGl0ZW1TdHJIZWxwZXIuaW5kZXhPZihxdWVyeSk7XHJcbiAgICAgIHRva2VuTGVuID0gcXVlcnkubGVuZ3RoO1xyXG4gICAgICBpZiAoc3RhcnRJZHggPj0gMCAmJiB0b2tlbkxlbiA+IDApIHtcclxuICAgICAgICBpdGVtU3RyID0gaXRlbVN0ci5zdWJzdHJpbmcoMCwgc3RhcnRJZHgpICsgJzxzdHJvbmc+JyArIGl0ZW1TdHIuc3Vic3RyaW5nKHN0YXJ0SWR4LCBzdGFydElkeCArIHRva2VuTGVuKSArICc8L3N0cm9uZz4nICsgaXRlbVN0ci5zdWJzdHJpbmcoc3RhcnRJZHggKyB0b2tlbkxlbik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBpdGVtU3RyO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpXHJcbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpXHJcbiAgcHVibGljIGZvY3VzTG9zdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNBY3RpdmUodmFsdWU6IFR5cGVhaGVhZE1hdGNoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlID09PSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RNYXRjaCh2YWx1ZTogVHlwZWFoZWFkTWF0Y2gsIGU6IEV2ZW50ID0gdm9pZCAwKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZSkge1xyXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBhcmVudC5jaGFuZ2VNb2RlbCh2YWx1ZSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+XHJcbiAgICAgIHRoaXMucGFyZW50LnR5cGVhaGVhZE9uU2VsZWN0LmVtaXQodmFsdWUpLCAwXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG4iXX0=