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