UNPKG

@hxui/angular

Version:

This README includes the steps that are necessary to import the HxUi-angular into a project or to contribute with development.

256 lines (255 loc) 23.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} 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 () { var /** @type {?} */ 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 () { var /** @type {?} */ 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) { var /** @type {?} */ itemStr = match.value; var /** @type {?} */ itemStrHelper = (this.parent && this.parent.typeaheadLatinize ? latinize(itemStr) : itemStr).toLowerCase(); var /** @type {?} */ startIdx; var /** @type {?} */ tokenLen; // Replaces the capture string with the same string inside of a "strong" tag if (typeof query === 'object') { var /** @type {?} */ queryLen = query.length; for (var /** @type {?} */ 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 }; function TypeaheadContainerComponent_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ TypeaheadContainerComponent.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ TypeaheadContainerComponent.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ TypeaheadContainerComponent.propDecorators; /** @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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWFoZWFkLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaHh1aS9hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL3R5cGVhaGVhZC90eXBlYWhlYWQtY29udGFpbmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFBRSxVQUFVLEVBQWUsaUJBQWlCLEVBQUUsWUFBWSxFQUNwRSxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O3lDQXFEeEIsT0FBbUI7eUJBVlYsS0FBSzt3QkFRTSxFQUFFO1FBR3ZDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDOzswQkFHZCwrQ0FBTTs7Ozs7WUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQzs7Ozs7MEJBR1gsZ0RBQU87Ozs7O1lBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7a0JBR0osS0FBdUI7WUFDeEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFFdEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2lCQUN4QjthQUNGOzs7OzswQkFHUSw0REFBbUI7Ozs7O1lBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Ozs7OzBCQUd4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QUMsQ0FBQztZQUNOLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNwQixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDcEI7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixVQUFVLENBQUM7WUFDVCxPQUFBLEtBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUF6QyxDQUF5QyxFQUFFLENBQUMsQ0FDN0MsQ0FBQztRQUNGLE1BQU0sQ0FBQyxLQUFLLENBQUM7OztnQkFqS2hCLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsd0JBQXdCOztvQkFFbEMsUUFBUSxFQUFFLHVtQ0F5Qlg7O29CQUVDLElBQUksRUFBRTt3QkFDSixPQUFPLEVBQUUsc0NBQXNDO3dCQUMvQyxLQUFLLEVBQUUsb0NBQW9DO3FCQUM1Qzs7b0JBRUQsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7aUJBQ3RDOzs7O2dCQTFDWSxVQUFVOzs7OEJBb0pwQixZQUFZLFNBQUMsWUFBWSxjQUN6QixZQUFZLFNBQUMsTUFBTTs7c0NBdEp0Qjs7U0E0Q2EsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsIEVsZW1lbnRSZWYsIFRlbXBsYXRlUmVmLCBWaWV3RW5jYXBzdWxhdGlvbiwgSG9zdExpc3RlbmVyXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFR5cGVhaGVhZERpcmVjdGl2ZSB9IGZyb20gJy4vdHlwZWFoZWFkLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFR5cGVhaGVhZE1hdGNoIH0gZnJvbSAnLi90eXBlYWhlYWQtbWF0Y2guY2xhc3MnO1xyXG5pbXBvcnQgeyBsYXRpbml6ZSB9IGZyb20gJy4vdHlwZWFoZWFkLXV0aWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaHgtdHlwZWFoZWFkLWNvbnRhaW5lcicsXHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXHJcbiAgdGVtcGxhdGU6IGBcclxuPCEtLSBpbmplY3Qgb3B0aW9ucyBsaXN0IHRlbXBsYXRlIC0tPlxyXG48bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uc0xpc3RUZW1wbGF0ZSB8fCBvcHRpb25MaXN0VGVtcGxhdGVcIlxyXG4gIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7bWF0Y2hlczptYXRjaGVzLCBpdGVtVGVtcGxhdGU6aXRlbVRlbXBsYXRlLCBxdWVyeTpxdWVyeX1cIj48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBkZWZhdWx0IG9wdGlvbnMgaXRlbSB0ZW1wbGF0ZSAtLT5cclxuPG5nLXRlbXBsYXRlICNoeEl0ZW1UZW1wbGF0ZSBsZXQtbWF0Y2g9XCJtYXRjaFwiIGxldC1xdWVyeT1cInF1ZXJ5XCI+PHNwYW4gW2lubmVySHRtbF09XCJoaWdodGxpZ2h0KG1hdGNoLCBxdWVyeSlcIj48L3NwYW4+PC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gb3B0aW9ucyBsaXN0IHRlbXBsYXRlIC0tPlxyXG48bmctdGVtcGxhdGUgI29wdGlvbkxpc3RUZW1wbGF0ZSA+XHJcbjxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtbWF0Y2ggbGV0LWk9XCJpbmRleFwiIFtuZ0Zvck9mXT1cIm1hdGNoZXNcIj5cclxuICAgPGg2ICpuZ0lmPVwibWF0Y2guaXNIZWFkZXIoKVwiIGNsYXNzPVwiaHgtZHJvcGRvd24taGVhZGVyXCI+e3ttYXRjaH19PC9oNj5cclxuICAgXHJcbiAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhbWF0Y2guaXNIZWFkZXIoKVwiPlxyXG4gICAgICA8YSBocmVmPVwiI1wiXHJcbiAgICAgICAgY2xhc3M9XCJoeC1kcm9wZG93bi1pdGVtXCJcclxuICAgICAgICAoY2xpY2spPVwic2VsZWN0TWF0Y2gobWF0Y2gsICRldmVudClcIlxyXG4gICAgICAgIChtb3VzZWVudGVyKT1cInNlbGVjdEFjdGl2ZShtYXRjaClcIlxyXG4gICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNBY3RpdmUobWF0Y2gpXCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVRlbXBsYXRlIHx8IGh4SXRlbVRlbXBsYXRlXCIgXHJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7aXRlbTptYXRjaC5pdGVtLCBpbmRleDppLCBtYXRjaDptYXRjaCwgcXVlcnk6cXVlcnl9XCI+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9hPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwvbmctdGVtcGxhdGU+XHJcbmAsXHJcbiAgLy8gdHNsaW50OmRpc2FibGVcclxuICBob3N0OiB7XHJcbiAgICAnY2xhc3MnOiAnaHgtZHJvcGRvd24gaXMtb3BlbiBoeC1kcm9wZG93bi1tZW51JyxcclxuICAgIHN0eWxlOiAncG9zaXRpb246IGFic29sdXRlO2Rpc3BsYXk6IGJsb2NrOydcclxuICB9LFxyXG4gIC8vIHRzbGludDogZW5hYmxlXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHlwZWFoZWFkQ29udGFpbmVyQ29tcG9uZW50IHtcclxuICBwdWJsaWMgcGFyZW50OiBUeXBlYWhlYWREaXJlY3RpdmU7XHJcbiAgcHVibGljIHF1ZXJ5OiBhbnk7XHJcbiAgcHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWY7XHJcbiAgcHVibGljIGlzRm9jdXNlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB0b3A6IHN0cmluZztcclxuICBwdWJsaWMgbGVmdDogc3RyaW5nO1xyXG4gIHB1YmxpYyBkaXNwbGF5OiBzdHJpbmc7XHJcbiAgcHVibGljIHBsYWNlbWVudDogc3RyaW5nO1xyXG5cclxuXHJcbiAgcHJvdGVjdGVkIF9hY3RpdmU6IFR5cGVhaGVhZE1hdGNoO1xyXG4gIHByb3RlY3RlZCBfbWF0Y2hlczogVHlwZWFoZWFkTWF0Y2hbXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgY29uc3RydWN0b3IoZWxlbWVudDogRWxlbWVudFJlZikge1xyXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYWN0aXZlKCk6IFR5cGVhaGVhZE1hdGNoIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG1hdGNoZXMoKTogVHlwZWFoZWFkTWF0Y2hbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWF0Y2hlcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgbWF0Y2hlcyh2YWx1ZTogVHlwZWFoZWFkTWF0Y2hbXSkge1xyXG4gICAgdGhpcy5fbWF0Y2hlcyA9IHZhbHVlO1xyXG5cclxuICAgIGlmICh0aGlzLl9tYXRjaGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5fYWN0aXZlID0gdGhpcy5fbWF0Y2hlc1swXTtcclxuICAgICAgaWYgKHRoaXMuX2FjdGl2ZS5pc0hlYWRlcigpKSB7XHJcbiAgICAgICAgdGhpcy5uZXh0QWN0aXZlTWF0Y2goKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvcHRpb25zTGlzdFRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGFyZW50ID8gdGhpcy5wYXJlbnQub3B0aW9uc0xpc3RUZW1wbGF0ZSA6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaXRlbVRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGFyZW50ID8gdGhpcy5wYXJlbnQudHlwZWFoZWFkSXRlbVRlbXBsYXRlIDogdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdEFjdGl2ZU1hdGNoKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RNYXRjaCh0aGlzLl9hY3RpdmUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHByZXZBY3RpdmVNYXRjaCgpOiB2b2lkIHtcclxuICAgIGxldCBpbmRleCA9IHRoaXMubWF0Y2hlcy5pbmRleE9mKHRoaXMuX2FjdGl2ZSk7XHJcbiAgICB0aGlzLl9hY3RpdmUgPSB0aGlzLm1hdGNoZXNbaW5kZXggLSAxIDwgMFxyXG4gICAgICA/IHRoaXMubWF0Y2hlcy5sZW5ndGggLSAxXHJcbiAgICAgIDogaW5kZXggLSAxXTtcclxuICAgIGlmICh0aGlzLl9hY3RpdmUuaXNIZWFkZXIoKSkge1xyXG4gICAgICB0aGlzLnByZXZBY3RpdmVNYXRjaCgpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZXh0QWN0aXZlTWF0Y2goKTogdm9pZCB7XHJcbiAgICBsZXQgaW5kZXggPSB0aGlzLm1hdGNoZXMuaW5kZXhPZih0aGlzLl9hY3RpdmUpO1xyXG4gICAgdGhpcy5fYWN0aXZlID0gdGhpcy5tYXRjaGVzW2luZGV4ICsgMSA+IHRoaXMubWF0Y2hlcy5sZW5ndGggLSAxXHJcbiAgICAgID8gMFxyXG4gICAgICA6IGluZGV4ICsgMV07XHJcbiAgICBpZiAodGhpcy5fYWN0aXZlLmlzSGVhZGVyKCkpIHtcclxuICAgICAgdGhpcy5uZXh0QWN0aXZlTWF0Y2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RBY3RpdmUodmFsdWU6IFR5cGVhaGVhZE1hdGNoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XHJcbiAgICB0aGlzLl9hY3RpdmUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoaWdodGxpZ2h0KG1hdGNoOiBUeXBlYWhlYWRNYXRjaCwgcXVlcnk6IGFueSk6IHN0cmluZyB7XHJcbiAgICBsZXQgaXRlbVN0cjogc3RyaW5nID0gbWF0Y2gudmFsdWU7XHJcbiAgICBsZXQgaXRlbVN0ckhlbHBlcjogc3RyaW5nID0gKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LnR5cGVhaGVhZExhdGluaXplXHJcbiAgICAgID8gbGF0aW5pemUoaXRlbVN0cilcclxuICAgICAgOiBpdGVtU3RyKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgbGV0IHN0YXJ0SWR4OiBudW1iZXI7XHJcbiAgICBsZXQgdG9rZW5MZW46IG51bWJlcjtcclxuICAgIC8vIFJlcGxhY2VzIHRoZSBjYXB0dXJlIHN0cmluZyB3aXRoIHRoZSBzYW1lIHN0cmluZyBpbnNpZGUgb2YgYSBcInN0cm9uZ1wiIHRhZ1xyXG4gICAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgbGV0IHF1ZXJ5TGVuOiBudW1iZXIgPSBxdWVyeS5sZW5ndGg7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVlcnlMZW47IGkgKz0gMSkge1xyXG4gICAgICAgIC8vIHF1ZXJ5W2ldIGlzIGFscmVhZHkgbGF0aW5pemVkIGFuZCBsb3dlciBjYXNlXHJcbiAgICAgICAgc3RhcnRJZHggPSBpdGVtU3RySGVscGVyLmluZGV4T2YocXVlcnlbaV0pO1xyXG4gICAgICAgIHRva2VuTGVuID0gcXVlcnlbaV0ubGVuZ3RoO1xyXG4gICAgICAgIGlmIChzdGFydElkeCA+PSAwICYmIHRva2VuTGVuID4gMCkge1xyXG4gICAgICAgICAgaXRlbVN0ciA9IGl0ZW1TdHIuc3Vic3RyaW5nKDAsIHN0YXJ0SWR4KSArICc8c3Ryb25nPicgKyBpdGVtU3RyLnN1YnN0cmluZyhzdGFydElkeCwgc3RhcnRJZHggKyB0b2tlbkxlbikgKyAnPC9zdHJvbmc+JyArIGl0ZW1TdHIuc3Vic3RyaW5nKHN0YXJ0SWR4ICsgdG9rZW5MZW4pO1xyXG4gICAgICAgICAgaXRlbVN0ckhlbHBlciA9IGl0ZW1TdHJIZWxwZXIuc3Vic3RyaW5nKDAsIHN0YXJ0SWR4KSArICcgICAgICAgICcgKyAnICcucmVwZWF0KHRva2VuTGVuKSArICcgICAgICAgICAnICsgaXRlbVN0ckhlbHBlci5zdWJzdHJpbmcoc3RhcnRJZHggKyB0b2tlbkxlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHF1ZXJ5KSB7XHJcbiAgICAgIC8vIHF1ZXJ5IGlzIGFscmVhZHkgbGF0aW5pemVkIGFuZCBsb3dlciBjYXNlXHJcbiAgICAgIHN0YXJ0SWR4ID0gaXRlbVN0ckhlbHBlci5pbmRleE9mKHF1ZXJ5KTtcclxuICAgICAgdG9rZW5MZW4gPSBxdWVyeS5sZW5ndGg7XHJcbiAgICAgIGlmIChzdGFydElkeCA+PSAwICYmIHRva2VuTGVuID4gMCkge1xyXG4gICAgICAgIGl0ZW1TdHIgPSBpdGVtU3RyLnN1YnN0cmluZygwLCBzdGFydElkeCkgKyAnPHN0cm9uZz4nICsgaXRlbVN0ci5zdWJzdHJpbmcoc3RhcnRJZHgsIHN0YXJ0SWR4ICsgdG9rZW5MZW4pICsgJzwvc3Ryb25nPicgKyBpdGVtU3RyLnN1YnN0cmluZyhzdGFydElkeCArIHRva2VuTGVuKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGl0ZW1TdHI7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJylcclxuICBASG9zdExpc3RlbmVyKCdibHVyJylcclxuICBwdWJsaWMgZm9jdXNMb3N0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0FjdGl2ZSh2YWx1ZTogVHlwZWFoZWFkTWF0Y2gpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3RpdmUgPT09IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdE1hdGNoKHZhbHVlOiBUeXBlYWhlYWRNYXRjaCwgZTogRXZlbnQgPSB2b2lkIDApOiBib29sZWFuIHtcclxuICAgIGlmIChlKSB7XHJcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICAgIHRoaXMucGFyZW50LmNoYW5nZU1vZGVsKHZhbHVlKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT5cclxuICAgICAgdGhpcy5wYXJlbnQudHlwZWFoZWFkT25TZWxlY3QuZW1pdCh2YWx1ZSksIDBcclxuICAgICk7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiJdfQ==