UNPKG

@neocomplexx/ngx-neo-completer

Version:

This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.0.5.

177 lines 22.2 kB
import { __decorate, __metadata, __param } from "tslib"; import { Directive, ElementRef, Host, HostListener } from '@angular/core'; import { CtrCompleter } from './ctr-completer'; import { isNil } from '../globals'; export class CtrRowItem { constructor(row, index) { this.row = row; this.index = index; } } let CtrDropdown = // tslint:disable-next-line:directive-class-suffix class CtrDropdown { constructor(completer, el) { this.completer = completer; this.el = el; this.rows = []; this._rowMouseDown = false; this.completer.registerDropdown(this); } ngOnDestroy() { this.completer.registerDropdown(null); } ngAfterViewInit() { const css = getComputedStyle(this.el.nativeElement); const autoHighlightIndex = this.completer.autoHighlightIndex; this.isScrollOn = !!css.maxHeight && css.overflowY === 'auto'; if (autoHighlightIndex) { setTimeout(() => { this.highlightRow(autoHighlightIndex); }, 0); } } onMouseDown(event) { // Support for canceling blur on IE (issue #158) if (!this._rowMouseDown) { this.completer.cancelBlur(true); setTimeout(() => { this.completer.cancelBlur(false); }, 0); } else { this._rowMouseDown = false; } } registerRow(row) { const arrIndex = this.rows.findIndex(_row => _row.index === row.index); if (arrIndex >= 0) { this.rows[arrIndex] = row; } else { this.rows.push(row); } } unregisterRow(rowIndex) { const arrIndex = this.rows.findIndex(_row => _row.index === rowIndex); this.rows.splice(arrIndex, 1); if (this.currHighlighted && rowIndex === this.currHighlighted.index) { this.highlightRow(null); } } highlightRow(index) { const highlighted = this.rows.find(row => row.index === index); // tslint:disable-next-line:no-non-null-assertion if (isNil(index) || index < 0) { if (this.currHighlighted) { this.currHighlighted.row.setHighlighted(false); } this.currHighlighted = undefined; this.completer.onHighlighted(null); return; } if (!highlighted) { return; } if (this.currHighlighted) { this.currHighlighted.row.setHighlighted(false); } this.currHighlighted = highlighted; this.currHighlighted.row.setHighlighted(true); this.completer.onHighlighted(this.currHighlighted.row.getDataItem()); if (this.isScrollOn && this.currHighlighted) { const rowTop = this.dropdownRowTop(); if (!rowTop) { return; } if (rowTop < 0) { this.dropdownScrollTopTo(rowTop - 1); } else { const row = this.currHighlighted.row.getNativeElement(); if (this.dropdownHeight() < row.getBoundingClientRect().bottom) { this.dropdownScrollTopTo(this.dropdownRowOffsetHeight(row)); if (this.el.nativeElement.getBoundingClientRect().bottom - this.dropdownRowOffsetHeight(row) < row.getBoundingClientRect().top) { this.dropdownScrollTopTo(row.getBoundingClientRect().top - (this.el.nativeElement.getBoundingClientRect().top + parseInt(getComputedStyle(this.el.nativeElement).paddingTop, 10))); } } } } } clear() { this.rows = []; } onSelected(item) { this.completer.onSelected(item); } rowMouseDown() { this._rowMouseDown = true; } selectCurrent() { if (this.currHighlighted) { this.onSelected(this.currHighlighted.row.getDataItem()); } else if (this.rows.length > 0) { this.onSelected(this.rows[0].row.getDataItem()); } } nextRow() { let nextRowIndex = 0; if (this.currHighlighted) { nextRowIndex = this.currHighlighted.index + 1; } this.highlightRow(nextRowIndex); } prevRow() { let nextRowIndex = -1; if (this.currHighlighted) { nextRowIndex = this.currHighlighted.index - 1; } this.highlightRow(nextRowIndex); } dropdownScrollTopTo(offset) { this.el.nativeElement.scrollTop = this.el.nativeElement.scrollTop + offset; } dropdownRowTop() { if (!this.currHighlighted) { return; } return this.currHighlighted.row.getNativeElement().getBoundingClientRect().top - (this.el.nativeElement.getBoundingClientRect().top + parseInt(getComputedStyle(this.el.nativeElement).paddingTop, 10)); } dropdownHeight() { return this.el.nativeElement.getBoundingClientRect().top + parseInt(getComputedStyle(this.el.nativeElement).maxHeight, 10); } dropdownRowOffsetHeight(row) { const css = getComputedStyle(row.parentElement); return row.parentElement.offsetHeight + parseInt(css.marginTop, 10) + parseInt(css.marginBottom, 10); } }; CtrDropdown.ctorParameters = () => [ { type: CtrCompleter, decorators: [{ type: Host }] }, { type: ElementRef } ]; __decorate([ HostListener('mousedown', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", void 0) ], CtrDropdown.prototype, "onMouseDown", null); CtrDropdown = __decorate([ Directive({ // tslint:disable-next-line:directive-selector selector: '[ctrDropdown]', }) // tslint:disable-next-line:directive-class-suffix , __param(0, Host()), __metadata("design:paramtypes", [CtrCompleter, ElementRef]) ], CtrDropdown); export { CtrDropdown }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3RyLWRyb3Bkb3duLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5lb2NvbXBsZXh4L25neC1uZW8tY29tcGxldGVyLyIsInNvdXJjZXMiOlsibGliL2RpcmVjdGl2ZXMvY3RyLWRyb3Bkb3duLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBU25DLE1BQU0sT0FBTyxVQUFVO0lBQ25CLFlBQW1CLEdBQWtCLEVBQVMsS0FBYTtRQUF4QyxRQUFHLEdBQUgsR0FBRyxDQUFlO1FBQVMsVUFBSyxHQUFMLEtBQUssQ0FBUTtJQUFJLENBQUM7Q0FDbkU7QUFPRCxJQUFhLFdBQVc7QUFEeEIsa0RBQWtEO0FBQ2xELE1BQWEsV0FBVztJQU9wQixZQUE0QixTQUF1QixFQUFVLEVBQWM7UUFBL0MsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUFVLE9BQUUsR0FBRixFQUFFLENBQVk7UUFMbkUsU0FBSSxHQUFpQixFQUFFLENBQUM7UUFHeEIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFHMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0sV0FBVztRQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLGVBQWU7UUFDbEIsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwRCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUM7UUFFN0QsSUFBSSxDQUFDLFVBQVUsR0FB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UUFDOUMsUUFBUSxFQUFFLGVBQWU7S0FDNUIsQ0FBQztJQUNGLGtEQUFrRDs7SUFRakMsV0FBQSxJQUFJLEVBQUUsQ0FBQTtxQ0FBb0IsWUFBWSxFQUFjLFVBQVU7R0FQbEUsV0FBVyxDQWdMdkI7U0FoTFksV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdCwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDb21wbGV0ZXJJdGVtIH0gZnJvbSAnLi4vY29tcG9uZW50cy9jb21wbGV0ZXItaXRlbSc7XG5pbXBvcnQgeyBDdHJDb21wbGV0ZXIgfSBmcm9tICcuL2N0ci1jb21wbGV0ZXInO1xuaW1wb3J0IHR5cGUgeyBDb21wbGV0ZXJEcm9wZG93biB9IGZyb20gJy4vY3RyLWNvbXBsZXRlcic7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uL2dsb2JhbHMnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3RyUm93RWxlbWVudCB7XG4gICAgc2V0SGlnaGxpZ2h0ZWQoc2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkO1xuICAgIGdldE5hdGl2ZUVsZW1lbnQoKTogYW55O1xuICAgIGdldERhdGFJdGVtKCk6IENvbXBsZXRlckl0ZW07XG59XG5cbmV4cG9ydCBjbGFzcyBDdHJSb3dJdGVtIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcm93OiBDdHJSb3dFbGVtZW50LCBwdWJsaWMgaW5kZXg6IG51bWJlcikgeyB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ1tjdHJEcm9wZG93bl0nLFxufSlcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgY2xhc3MgQ3RyRHJvcGRvd24gaW1wbGVtZW50cyBDb21wbGV0ZXJEcm9wZG93biwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcblxuICAgIHByaXZhdGUgcm93czogQ3RyUm93SXRlbVtdID0gW107XG4gICAgcHJpdmF0ZSBjdXJySGlnaGxpZ2h0ZWQ6IEN0clJvd0l0ZW0gfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSBpc1Njcm9sbE9uOiBib29sZWFuO1xuICAgIHByaXZhdGUgX3Jvd01vdXNlRG93biA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoQEhvc3QoKSBwcml2YXRlIGNvbXBsZXRlcjogQ3RyQ29tcGxldGVyLCBwcml2YXRlIGVsOiBFbGVtZW50UmVmKSB7XG4gICAgICAgIHRoaXMuY29tcGxldGVyLnJlZ2lzdGVyRHJvcGRvd24odGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmNvbXBsZXRlci5yZWdpc3RlckRyb3Bkb3duKG51bGwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgY29uc3QgYXV0b0hpZ2hsaWdodEluZGV4ID0gdGhpcy5jb21wbGV0ZXIuYXV0b0hpZ2hsaWdodEluZGV4O1xuXG4gICAgICAgIHRoaXMuaXNTY3JvbGxPbiA9ICEhY3NzLm1heEhlaWdodCAmJiBjc3Mub3ZlcmZsb3dZID09PSAnYXV0byc7XG4gICAgICAgIGlmIChhdXRvSGlnaGxpZ2h0SW5kZXgpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodFJvdyhhdXRvSGlnaGxpZ2h0SW5kZXgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pIHB1YmxpYyBvbk1vdXNlRG93bihldmVudDogYW55KSB7XG4gICAgICAgIC8vIFN1cHBvcnQgZm9yIGNhbmNlbGluZyBibHVyIG9uIElFIChpc3N1ZSAjMTU4KVxuICAgICAgICBpZiAoIXRoaXMuX3Jvd01vdXNlRG93bikge1xuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZXIuY2FuY2VsQmx1cih0cnVlKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlci5jYW5jZWxCbHVyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9yb3dNb3VzZURvd24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlclJvdyhyb3c6IEN0clJvd0l0ZW0pIHtcbiAgICAgICAgY29uc3QgYXJySW5kZXggPSB0aGlzLnJvd3MuZmluZEluZGV4KF9yb3cgPT4gX3Jvdy5pbmRleCA9PT0gcm93LmluZGV4KTtcbiAgICAgICAgaWYgKGFyckluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMucm93c1thcnJJbmRleF0gPSByb3c7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvd3MucHVzaChyb3cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHVucmVnaXN0ZXJSb3cocm93SW5kZXg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBhcnJJbmRleCA9IHRoaXMucm93cy5maW5kSW5kZXgoX3JvdyA9PiBfcm93LmluZGV4ID09PSByb3dJbmRleCk7XG4gICAgICAgIHRoaXMucm93cy5zcGxpY2UoYXJySW5kZXgsIDEpO1xuICAgICAgICBpZiAodGhpcy5jdXJySGlnaGxpZ2h0ZWQgJiYgcm93SW5kZXggPT09IHRoaXMuY3VyckhpZ2hsaWdodGVkLmluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLmhpZ2hsaWdodFJvdyhudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBoaWdobGlnaHRSb3coaW5kZXg6IG51bWJlciB8IG51bGwpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0ZWQgPSB0aGlzLnJvd3MuZmluZChyb3cgPT4gcm93LmluZGV4ID09PSBpbmRleCk7XG5cbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICBpZiAoaXNOaWwoaW5kZXgpIHx8IGluZGV4ISA8IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJIaWdobGlnaHRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VyckhpZ2hsaWdodGVkLnJvdy5zZXRIaWdobGlnaHRlZChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmN1cnJIaWdobGlnaHRlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuY29tcGxldGVyLm9uSGlnaGxpZ2h0ZWQobnVsbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWhpZ2hsaWdodGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jdXJySGlnaGxpZ2h0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY3VyckhpZ2hsaWdodGVkLnJvdy5zZXRIaWdobGlnaHRlZChmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmN1cnJIaWdobGlnaHRlZCA9IGhpZ2hsaWdodGVkO1xuICAgICAgICB0aGlzLmN1cnJIaWdobGlnaHRlZC5yb3cuc2V0SGlnaGxpZ2h0ZWQodHJ1ZSk7XG4gICAgICAgIHRoaXMuY29tcGxldGVyLm9uSGlnaGxpZ2h0ZWQodGhpcy5jdXJySGlnaGxpZ2h0ZWQucm93LmdldERhdGFJdGVtKCkpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsT24gJiYgdGhpcy5jdXJySGlnaGxpZ2h0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd1RvcCA9IHRoaXMuZHJvcGRvd25Sb3dUb3AoKTtcblxuICAgICAgICAgICAgaWYgKCFyb3dUb3ApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyb3dUb3AgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93blNjcm9sbFRvcFRvKHJvd1RvcCAtIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmN1cnJIaWdobGlnaHRlZC5yb3cuZ2V0TmF0aXZlRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyb3Bkb3duSGVpZ2h0KCkgPCByb3cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25TY3JvbGxUb3BUbyh0aGlzLmRyb3Bkb3duUm93T2Zmc2V0SGVpZ2h0KHJvdykpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSAtIHRoaXMuZHJvcGRvd25Sb3dPZmZzZXRIZWlnaHQocm93KSA8XG4gICAgICAgICAgICAgICAgICAgICAgICByb3cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duU2Nyb2xsVG9wVG8ocm93LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCkucGFkZGluZ1RvcCBhcyBzdHJpbmcsIDEwKSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyKCkge1xuICAgICAgICB0aGlzLnJvd3MgPSBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TZWxlY3RlZChpdGVtOiBDb21wbGV0ZXJJdGVtKSB7XG4gICAgICAgIHRoaXMuY29tcGxldGVyLm9uU2VsZWN0ZWQoaXRlbSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJvd01vdXNlRG93bigpIHtcbiAgICAgICAgdGhpcy5fcm93TW91c2VEb3duID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0Q3VycmVudCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VyckhpZ2hsaWdodGVkKSB7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0ZWQodGhpcy5jdXJySGlnaGxpZ2h0ZWQucm93LmdldERhdGFJdGVtKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucm93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0ZWQodGhpcy5yb3dzWzBdLnJvdy5nZXREYXRhSXRlbSgpKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHVibGljIG5leHRSb3coKSB7XG4gICAgICAgIGxldCBuZXh0Um93SW5kZXggPSAwO1xuXG4gICAgICAgIGlmICh0aGlzLmN1cnJIaWdobGlnaHRlZCkge1xuICAgICAgICAgICAgbmV4dFJvd0luZGV4ID0gdGhpcy5jdXJySGlnaGxpZ2h0ZWQuaW5kZXggKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oaWdobGlnaHRSb3cobmV4dFJvd0luZGV4KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJldlJvdygpIHtcbiAgICAgICAgbGV0IG5leHRSb3dJbmRleCA9IC0xO1xuXG4gICAgICAgIGlmICh0aGlzLmN1cnJIaWdobGlnaHRlZCkge1xuICAgICAgICAgICAgbmV4dFJvd0luZGV4ID0gdGhpcy5jdXJySGlnaGxpZ2h0ZWQuaW5kZXggLSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oaWdobGlnaHRSb3cobmV4dFJvd0luZGV4KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRyb3Bkb3duU2Nyb2xsVG9wVG8ob2Zmc2V0OiBhbnkpIHtcbiAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgKyBvZmZzZXQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkcm9wZG93blJvd1RvcCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJIaWdobGlnaHRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY3VyckhpZ2hsaWdodGVkLnJvdy5nZXROYXRpdmVFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC1cbiAgICAgICAgICAgICh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICtcbiAgICAgICAgICAgICAgICBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCkucGFkZGluZ1RvcCBhcyBzdHJpbmcsIDEwKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkcm9wZG93bkhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgK1xuICAgICAgICAgICAgcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLm1heEhlaWdodCBhcyBzdHJpbmcsIDEwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRyb3Bkb3duUm93T2Zmc2V0SGVpZ2h0KHJvdzogYW55KSB7XG4gICAgICAgIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUocm93LnBhcmVudEVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gcm93LnBhcmVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0ICtcbiAgICAgICAgICAgIHBhcnNlSW50KGNzcy5tYXJnaW5Ub3AgYXMgc3RyaW5nLCAxMCkgKyBwYXJzZUludChjc3MubWFyZ2luQm90dG9tIGFzIHN0cmluZywgMTApO1xuICAgIH1cbn1cbiJdfQ==