@neocomplexx/ngx-neo-completer-mat
Version:
172 lines • 23.1 kB
JavaScript
import { Directive, ElementRef, Host, HostListener } from '@angular/core';
import { CtrCompleter } from './ctr-completer';
import { isNil } from '../globals';
import * as i0 from "@angular/core";
import * as i1 from "./ctr-completer";
export class CtrRowItem {
constructor(row, index) {
this.row = row;
this.index = index;
}
}
// tslint:disable-next-line:directive-class-suffix
export 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.ɵfac = function CtrDropdown_Factory(t) { return new (t || CtrDropdown)(i0.ɵɵdirectiveInject(i1.CtrCompleter, 1), i0.ɵɵdirectiveInject(i0.ElementRef)); };
CtrDropdown.ɵdir = i0.ɵɵdefineDirective({ type: CtrDropdown, selectors: [["", "ctrDropdown", ""]], hostBindings: function CtrDropdown_HostBindings(rf, ctx) { if (rf & 1) {
i0.ɵɵlistener("mousedown", function CtrDropdown_mousedown_HostBindingHandler($event) { return ctx.onMouseDown($event); });
} } });
/*@__PURE__*/ (function () { i0.ɵsetClassMetadata(CtrDropdown, [{
type: Directive,
args: [{
// tslint:disable-next-line:directive-selector
selector: '[ctrDropdown]',
}]
}], function () { return [{ type: i1.CtrCompleter, decorators: [{
type: Host
}] }, { type: i0.ElementRef }]; }, { onMouseDown: [{
type: HostListener,
args: ['mousedown', ['$event']]
}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3RyLWRyb3Bkb3duLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5lb2NvbXBsZXh4L25neC1uZW8tY29tcGxldGVyLW1hdC8iLCJzb3VyY2VzIjpbImxpYi9kaXJlY3RpdmVzL2N0ci1kcm9wZG93bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDOzs7QUFTbkMsTUFBTSxPQUFPLFVBQVU7SUFDbkIsWUFBbUIsR0FBa0IsRUFBUyxLQUFhO1FBQXhDLFFBQUcsR0FBSCxHQUFHLENBQWU7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFRO0lBQUksQ0FBQztDQUNuRTtBQU1ELGtEQUFrRDtBQUNsRCxNQUFNLE9BQU8sV0FBVztJQU9wQixZQUE0QixTQUF1QixFQUFVLEVBQWM7UUFBL0MsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUFVLE9BQUUsR0FBRixFQUFFLENBQVk7UUFMbkUsU0FBSSxHQUFpQixFQUFFLENBQUM7UUFHeEIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFHMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0sV0FBVztRQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLGVBQWU7UUFDbEIsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwRCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUM7UUFFN0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFD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UUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0LCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHR5cGUgeyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IENvbXBsZXRlckl0ZW0gfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbXBsZXRlci1pdGVtJztcclxuaW1wb3J0IHsgQ3RyQ29tcGxldGVyIH0gZnJvbSAnLi9jdHItY29tcGxldGVyJztcclxuaW1wb3J0IHR5cGUgeyBDb21wbGV0ZXJEcm9wZG93biB9IGZyb20gJy4vY3RyLWNvbXBsZXRlcic7XHJcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi4vZ2xvYmFscyc7XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDdHJSb3dFbGVtZW50IHtcclxuICAgIHNldEhpZ2hsaWdodGVkKHNlbGVjdGVkOiBib29sZWFuKTogdm9pZDtcclxuICAgIGdldE5hdGl2ZUVsZW1lbnQoKTogYW55O1xyXG4gICAgZ2V0RGF0YUl0ZW0oKTogQ29tcGxldGVySXRlbTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEN0clJvd0l0ZW0ge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHJvdzogQ3RyUm93RWxlbWVudCwgcHVibGljIGluZGV4OiBudW1iZXIpIHsgfVxyXG59XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3JcclxuICAgIHNlbGVjdG9yOiAnW2N0ckRyb3Bkb3duXScsXHJcbn0pXHJcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtY2xhc3Mtc3VmZml4XHJcbmV4cG9ydCBjbGFzcyBDdHJEcm9wZG93biBpbXBsZW1lbnRzIENvbXBsZXRlckRyb3Bkb3duLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xyXG5cclxuICAgIHByaXZhdGUgcm93czogQ3RyUm93SXRlbVtdID0gW107XHJcbiAgICBwcml2YXRlIGN1cnJIaWdobGlnaHRlZDogQ3RyUm93SXRlbSB8IHVuZGVmaW5lZDtcclxuICAgIHByaXZhdGUgaXNTY3JvbGxPbjogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgX3Jvd01vdXNlRG93biA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBIb3N0KCkgcHJpdmF0ZSBjb21wbGV0ZXI6IEN0ckNvbXBsZXRlciwgcHJpdmF0ZSBlbDogRWxlbWVudFJlZikge1xyXG4gICAgICAgIHRoaXMuY29tcGxldGVyLnJlZ2lzdGVyRHJvcGRvd24odGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuY29tcGxldGVyLnJlZ2lzdGVyRHJvcGRvd24obnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgY29uc3QgYXV0b0hpZ2hsaWdodEluZGV4ID0gdGhpcy5jb21wbGV0ZXIuYXV0b0hpZ2hsaWdodEluZGV4O1xyXG5cclxuICAgICAgICB0aGlzLmlzU2Nyb2xsT24gPSAhIWNzcy5tYXhIZWlnaHQgJiYgY3NzLm92ZXJmbG93WSA9PT0gJ2F1dG8nO1xyXG4gICAgICAgIGlmIChhdXRvSGlnaGxpZ2h0SW5kZXgpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dChcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodFJvdyhhdXRvSGlnaGxpZ2h0SW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSkgcHVibGljIG9uTW91c2VEb3duKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICAvLyBTdXBwb3J0IGZvciBjYW5jZWxpbmcgYmx1ciBvbiBJRSAoaXNzdWUgIzE1OClcclxuICAgICAgICBpZiAoIXRoaXMuX3Jvd01vdXNlRG93bikge1xyXG4gICAgICAgICAgICB0aGlzLmNvbXBsZXRlci5jYW5jZWxCbHVyKHRydWUpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVyLmNhbmNlbEJsdXIoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9yb3dNb3VzZURvd24gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZ2lzdGVyUm93KHJvdzogQ3RyUm93SXRlbSkge1xyXG4gICAgICAgIGNvbnN0IGFyckluZGV4ID0gdGhpcy5yb3dzLmZpbmRJbmRleChfcm93ID0+IF9yb3cuaW5kZXggPT09IHJvdy5pbmRleCk7XHJcbiAgICAgICAgaWYgKGFyckluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy5yb3dzW2FyckluZGV4XSA9IHJvdztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJvd3MucHVzaChyb3cpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdW5yZWdpc3RlclJvdyhyb3dJbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgYXJySW5kZXggPSB0aGlzLnJvd3MuZmluZEluZGV4KF9yb3cgPT4gX3Jvdy5pbmRleCA9PT0gcm93SW5kZXgpO1xyXG4gICAgICAgIHRoaXMucm93cy5zcGxpY2UoYXJySW5kZXgsIDEpO1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJIaWdobGlnaHRlZCAmJiByb3dJbmRleCA9PT0gdGhpcy5jdXJySGlnaGxpZ2h0ZWQuaW5kZXgpIHtcclxuICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRSb3cobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoaWdobGlnaHRSb3coaW5kZXg6IG51bWJlciB8IG51bGwpIHtcclxuICAgICAgICBjb25zdCBoaWdobGlnaHRlZCA9IHRoaXMucm93cy5maW5kKHJvdyA9PiByb3cuaW5kZXggPT09IGluZGV4KTtcclxuXHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLW5vbi1udWxsLWFzc2VydGlvblxyXG4gICAgICAgIGlmIChpc05pbChpbmRleCkgfHwgaW5kZXghIDwgMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJySGlnaGxpZ2h0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VyckhpZ2hsaWdodGVkLnJvdy5zZXRIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jdXJySGlnaGxpZ2h0ZWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuY29tcGxldGVyLm9uSGlnaGxpZ2h0ZWQobnVsbCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghaGlnaGxpZ2h0ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VyckhpZ2hsaWdodGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VyckhpZ2hsaWdodGVkLnJvdy5zZXRIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJIaWdobGlnaHRlZCA9IGhpZ2hsaWdodGVkO1xyXG4gICAgICAgIHRoaXMuY3VyckhpZ2hsaWdodGVkLnJvdy5zZXRIaWdobGlnaHRlZCh0cnVlKTtcclxuICAgICAgICB0aGlzLmNvbXBsZXRlci5vbkhpZ2hsaWdodGVkKHRoaXMuY3VyckhpZ2hsaWdodGVkLnJvdy5nZXREYXRhSXRlbSgpKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGxPbiAmJiB0aGlzLmN1cnJIaWdobGlnaHRlZCkge1xyXG4gICAgICAgICAgICBjb25zdCByb3dUb3AgPSB0aGlzLmRyb3Bkb3duUm93VG9wKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXJvd1RvcCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocm93VG9wIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93blNjcm9sbFRvcFRvKHJvd1RvcCAtIDEpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5jdXJySGlnaGxpZ2h0ZWQucm93LmdldE5hdGl2ZUVsZW1lbnQoKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyb3Bkb3duSGVpZ2h0KCkgPCByb3cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93blNjcm9sbFRvcFRvKHRoaXMuZHJvcGRvd25Sb3dPZmZzZXRIZWlnaHQocm93KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20gLSB0aGlzLmRyb3Bkb3duUm93T2Zmc2V0SGVpZ2h0KHJvdykgPFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb3cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25TY3JvbGxUb3BUbyhyb3cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCkucGFkZGluZ1RvcCBhcyBzdHJpbmcsIDEwKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXIoKSB7XHJcbiAgICAgICAgdGhpcy5yb3dzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uU2VsZWN0ZWQoaXRlbTogQ29tcGxldGVySXRlbSkge1xyXG4gICAgICAgIHRoaXMuY29tcGxldGVyLm9uU2VsZWN0ZWQoaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJvd01vdXNlRG93bigpIHtcclxuICAgICAgICB0aGlzLl9yb3dNb3VzZURvd24gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWxlY3RDdXJyZW50KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJIaWdobGlnaHRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0ZWQodGhpcy5jdXJySGlnaGxpZ2h0ZWQucm93LmdldERhdGFJdGVtKCkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yb3dzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5vblNlbGVjdGVkKHRoaXMucm93c1swXS5yb3cuZ2V0RGF0YUl0ZW0oKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmV4dFJvdygpIHtcclxuICAgICAgICBsZXQgbmV4dFJvd0luZGV4ID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VyckhpZ2hsaWdodGVkKSB7XHJcbiAgICAgICAgICAgIG5leHRSb3dJbmRleCA9IHRoaXMuY3VyckhpZ2hsaWdodGVkLmluZGV4ICsgMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0Um93KG5leHRSb3dJbmRleCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHByZXZSb3coKSB7XHJcbiAgICAgICAgbGV0IG5leHRSb3dJbmRleCA9IC0xO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXJySGlnaGxpZ2h0ZWQpIHtcclxuICAgICAgICAgICAgbmV4dFJvd0luZGV4ID0gdGhpcy5jdXJySGlnaGxpZ2h0ZWQuaW5kZXggLSAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5oaWdobGlnaHRSb3cobmV4dFJvd0luZGV4KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRyb3Bkb3duU2Nyb2xsVG9wVG8ob2Zmc2V0OiBhbnkpIHtcclxuICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCArIG9mZnNldDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRyb3Bkb3duUm93VG9wKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJySGlnaGxpZ2h0ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VyckhpZ2hsaWdodGVkLnJvdy5nZXROYXRpdmVFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC1cclxuICAgICAgICAgICAgKHRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgK1xyXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLnBhZGRpbmdUb3AgYXMgc3RyaW5nLCAxMCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZHJvcGRvd25IZWlnaHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgK1xyXG4gICAgICAgICAgICBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCkubWF4SGVpZ2h0IGFzIHN0cmluZywgMTApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZHJvcGRvd25Sb3dPZmZzZXRIZWlnaHQocm93OiBhbnkpIHtcclxuICAgICAgICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKHJvdy5wYXJlbnRFbGVtZW50KTtcclxuICAgICAgICByZXR1cm4gcm93LnBhcmVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0ICtcclxuICAgICAgICAgICAgcGFyc2VJbnQoY3NzLm1hcmdpblRvcCBhcyBzdHJpbmcsIDEwKSArIHBhcnNlSW50KGNzcy5tYXJnaW5Cb3R0b20gYXMgc3RyaW5nLCAxMCk7XHJcbiAgICB9XHJcbn1cclxuIl19