UNPKG

@neocomplexx/ngx-neo-completer-mat

Version:
177 lines 24.1 kB
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"; var CtrRowItem = /** @class */ (function () { function CtrRowItem(row, index) { this.row = row; this.index = index; } return CtrRowItem; }()); export { CtrRowItem }; var CtrDropdown = /** @class */ (function () { function CtrDropdown(completer, el) { this.completer = completer; this.el = el; this.rows = []; this._rowMouseDown = false; this.completer.registerDropdown(this); } CtrDropdown.prototype.ngOnDestroy = function () { this.completer.registerDropdown(null); }; CtrDropdown.prototype.ngAfterViewInit = function () { var _this = this; var css = getComputedStyle(this.el.nativeElement); var autoHighlightIndex = this.completer.autoHighlightIndex; this.isScrollOn = !!css.maxHeight && css.overflowY === 'auto'; if (autoHighlightIndex) { setTimeout(function () { _this.highlightRow(autoHighlightIndex); }, 0); } }; CtrDropdown.prototype.onMouseDown = function (event) { var _this = this; // Support for canceling blur on IE (issue #158) if (!this._rowMouseDown) { this.completer.cancelBlur(true); setTimeout(function () { _this.completer.cancelBlur(false); }, 0); } else { this._rowMouseDown = false; } }; CtrDropdown.prototype.registerRow = function (row) { var arrIndex = this.rows.findIndex(function (_row) { return _row.index === row.index; }); if (arrIndex >= 0) { this.rows[arrIndex] = row; } else { this.rows.push(row); } }; CtrDropdown.prototype.unregisterRow = function (rowIndex) { var arrIndex = this.rows.findIndex(function (_row) { return _row.index === rowIndex; }); this.rows.splice(arrIndex, 1); if (this.currHighlighted && rowIndex === this.currHighlighted.index) { this.highlightRow(null); } }; CtrDropdown.prototype.highlightRow = function (index) { var highlighted = this.rows.find(function (row) { return 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) { var rowTop = this.dropdownRowTop(); if (!rowTop) { return; } if (rowTop < 0) { this.dropdownScrollTopTo(rowTop - 1); } else { var 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))); } } } } }; CtrDropdown.prototype.clear = function () { this.rows = []; }; CtrDropdown.prototype.onSelected = function (item) { this.completer.onSelected(item); }; CtrDropdown.prototype.rowMouseDown = function () { this._rowMouseDown = true; }; CtrDropdown.prototype.selectCurrent = function () { if (this.currHighlighted) { this.onSelected(this.currHighlighted.row.getDataItem()); } else if (this.rows.length > 0) { this.onSelected(this.rows[0].row.getDataItem()); } }; CtrDropdown.prototype.nextRow = function () { var nextRowIndex = 0; if (this.currHighlighted) { nextRowIndex = this.currHighlighted.index + 1; } this.highlightRow(nextRowIndex); }; CtrDropdown.prototype.prevRow = function () { var nextRowIndex = -1; if (this.currHighlighted) { nextRowIndex = this.currHighlighted.index - 1; } this.highlightRow(nextRowIndex); }; CtrDropdown.prototype.dropdownScrollTopTo = function (offset) { this.el.nativeElement.scrollTop = this.el.nativeElement.scrollTop + offset; }; CtrDropdown.prototype.dropdownRowTop = function () { if (!this.currHighlighted) { return; } return this.currHighlighted.row.getNativeElement().getBoundingClientRect().top - (this.el.nativeElement.getBoundingClientRect().top + parseInt(getComputedStyle(this.el.nativeElement).paddingTop, 10)); }; CtrDropdown.prototype.dropdownHeight = function () { return this.el.nativeElement.getBoundingClientRect().top + parseInt(getComputedStyle(this.el.nativeElement).maxHeight, 10); }; CtrDropdown.prototype.dropdownRowOffsetHeight = function (row) { var 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); }); } } }); return CtrDropdown; }()); export { CtrDropdown }; /*@__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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3RyLWRyb3Bkb3duLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5lb2NvbXBsZXh4L25neC1uZW8tY29tcGxldGVyLW1hdC8iLCJzb3VyY2VzIjpbImxpYi9kaXJlY3RpdmVzL2N0ci1kcm9wZG93bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDOzs7QUFTbkM7SUFDSSxvQkFBbUIsR0FBa0IsRUFBUyxLQUFhO1FBQXhDLFFBQUcsR0FBSCxHQUFHLENBQWU7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFRO0lBQUksQ0FBQztJQUNwRSxpQkFBQztBQUFELENBQUMsQUFGRCxJQUVDOztBQUVEO0lBWUkscUJBQTRCLFNBQXVCLEVBQVUsRUFBYztRQUEvQyxjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUxuRSxTQUFJLEdBQWlCLEVBQUUsQ0FBQztRQUd4QixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUcxQixJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTSxpQ0FBVyxHQUFsQjtRQUNJLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLHFDQUFlLEdBQXRCO1FBQUEsaUJBYUM7UUFaRyxJQUFNLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BELElBQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQztRQUU3RCxJQUFJLENBQUMsVUFBVSxH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MEdBQVgsdUJBQW1COztzQkF4QmhDO0NBd01DLEFBckxELElBcUxDO1NBaExZLFdBQVc7a0RBQVgsV0FBVztjQUx2QixTQUFTO2VBQUM7Z0JBQ1AsOENBQThDO2dCQUM5QyxRQUFRLEVBQUUsZUFBZTthQUM1Qjs7c0JBU2dCLElBQUk7O2tCQXVCaEIsWUFBWTttQkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3QsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgdHlwZSB7IEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQ29tcGxldGVySXRlbSB9IGZyb20gJy4uL2NvbXBvbmVudHMvY29tcGxldGVyLWl0ZW0nO1xyXG5pbXBvcnQgeyBDdHJDb21wbGV0ZXIgfSBmcm9tICcuL2N0ci1jb21wbGV0ZXInO1xyXG5pbXBvcnQgdHlwZSB7IENvbXBsZXRlckRyb3Bkb3duIH0gZnJvbSAnLi9jdHItY29tcGxldGVyJztcclxuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi9nbG9iYWxzJztcclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEN0clJvd0VsZW1lbnQge1xyXG4gICAgc2V0SGlnaGxpZ2h0ZWQoc2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkO1xyXG4gICAgZ2V0TmF0aXZlRWxlbWVudCgpOiBhbnk7XHJcbiAgICBnZXREYXRhSXRlbSgpOiBDb21wbGV0ZXJJdGVtO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ3RyUm93SXRlbSB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcm93OiBDdHJSb3dFbGVtZW50LCBwdWJsaWMgaW5kZXg6IG51bWJlcikgeyB9XHJcbn1cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRpcmVjdGl2ZS1zZWxlY3RvclxyXG4gICAgc2VsZWN0b3I6ICdbY3RyRHJvcGRvd25dJyxcclxufSlcclxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcclxuZXhwb3J0IGNsYXNzIEN0ckRyb3Bkb3duIGltcGxlbWVudHMgQ29tcGxldGVyRHJvcGRvd24sIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gICAgcHJpdmF0ZSByb3dzOiBDdHJSb3dJdGVtW10gPSBbXTtcclxuICAgIHByaXZhdGUgY3VyckhpZ2hsaWdodGVkOiBDdHJSb3dJdGVtIHwgdW5kZWZpbmVkO1xyXG4gICAgcHJpdmF0ZSBpc1Njcm9sbE9uOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBfcm93TW91c2VEb3duID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoQEhvc3QoKSBwcml2YXRlIGNvbXBsZXRlcjogQ3RyQ29tcGxldGVyLCBwcml2YXRlIGVsOiBFbGVtZW50UmVmKSB7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZXIucmVnaXN0ZXJEcm9wZG93bih0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZXIucmVnaXN0ZXJEcm9wZG93bihudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICBjb25zdCBhdXRvSGlnaGxpZ2h0SW5kZXggPSB0aGlzLmNvbXBsZXRlci5hdXRvSGlnaGxpZ2h0SW5kZXg7XHJcblxyXG4gICAgICAgIHRoaXMuaXNTY3JvbGxPbiA9ICEhY3NzLm1heEhlaWdodCAmJiBjc3Mub3ZlcmZsb3dZID09PSAnYXV0byc7XHJcbiAgICAgICAgaWYgKGF1dG9IaWdobGlnaHRJbmRleCkge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0Um93KGF1dG9IaWdobGlnaHRJbmRleCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKSBwdWJsaWMgb25Nb3VzZURvd24oZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIC8vIFN1cHBvcnQgZm9yIGNhbmNlbGluZyBibHVyIG9uIElFIChpc3N1ZSAjMTU4KVxyXG4gICAgICAgIGlmICghdGhpcy5fcm93TW91c2VEb3duKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tcGxldGVyLmNhbmNlbEJsdXIodHJ1ZSk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZXIuY2FuY2VsQmx1cihmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jvd01vdXNlRG93biA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJSb3cocm93OiBDdHJSb3dJdGVtKSB7XHJcbiAgICAgICAgY29uc3QgYXJySW5kZXggPSB0aGlzLnJvd3MuZmluZEluZGV4KF9yb3cgPT4gX3Jvdy5pbmRleCA9PT0gcm93LmluZGV4KTtcclxuICAgICAgICBpZiAoYXJySW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnJvd3NbYXJySW5kZXhdID0gcm93O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucm93cy5wdXNoKHJvdyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1bnJlZ2lzdGVyUm93KHJvd0luZGV4OiBudW1iZXIpIHtcclxuICAgICAgICBjb25zdCBhcnJJbmRleCA9IHRoaXMucm93cy5maW5kSW5kZXgoX3JvdyA9PiBfcm93LmluZGV4ID09PSByb3dJbmRleCk7XHJcbiAgICAgICAgdGhpcy5yb3dzLnNwbGljZShhcnJJbmRleCwgMSk7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VyckhpZ2hsaWdodGVkICYmIHJvd0luZGV4ID09PSB0aGlzLmN1cnJIaWdobGlnaHRlZC5pbmRleCkge1xyXG4gICAgICAgICAgICB0aGlzLmhpZ2hsaWdodFJvdyhudWxsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhpZ2hsaWdodFJvdyhpbmRleDogbnVtYmVyIHwgbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodGVkID0gdGhpcy5yb3dzLmZpbmQocm93ID0+IHJvdy5pbmRleCA9PT0gaW5kZXgpO1xyXG5cclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgaWYgKGlzTmlsKGluZGV4KSB8fCBpbmRleCEgPCAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJIaWdobGlnaHRlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJySGlnaGxpZ2h0ZWQucm93LnNldEhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmN1cnJIaWdobGlnaHRlZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZXIub25IaWdobGlnaHRlZChudWxsKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFoaWdobGlnaHRlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXJySGlnaGxpZ2h0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJySGlnaGxpZ2h0ZWQucm93LnNldEhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY3VyckhpZ2hsaWdodGVkID0gaGlnaGxpZ2h0ZWQ7XHJcbiAgICAgICAgdGhpcy5jdXJySGlnaGxpZ2h0ZWQucm93LnNldEhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIHRoaXMuY29tcGxldGVyLm9uSGlnaGxpZ2h0ZWQodGhpcy5jdXJySGlnaGxpZ2h0ZWQucm93LmdldERhdGFJdGVtKCkpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc1Njcm9sbE9uICYmIHRoaXMuY3VyckhpZ2hsaWdodGVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvd1RvcCA9IHRoaXMuZHJvcGRvd25Sb3dUb3AoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghcm93VG9wKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChyb3dUb3AgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duU2Nyb2xsVG9wVG8ocm93VG9wIC0gMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmN1cnJIaWdobGlnaHRlZC5yb3cuZ2V0TmF0aXZlRWxlbWVudCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJvcGRvd25IZWlnaHQoKSA8IHJvdy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duU2Nyb2xsVG9wVG8odGhpcy5kcm9wZG93blJvd09mZnNldEhlaWdodChyb3cpKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSAtIHRoaXMuZHJvcGRvd25Sb3dPZmZzZXRIZWlnaHQocm93KSA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93blNjcm9sbFRvcFRvKHJvdy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50KS5wYWRkaW5nVG9wIGFzIHN0cmluZywgMTApKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhcigpIHtcclxuICAgICAgICB0aGlzLnJvd3MgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25TZWxlY3RlZChpdGVtOiBDb21wbGV0ZXJJdGVtKSB7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZXIub25TZWxlY3RlZChpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcm93TW91c2VEb3duKCkge1xyXG4gICAgICAgIHRoaXMuX3Jvd01vdXNlRG93biA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlbGVjdEN1cnJlbnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VyckhpZ2hsaWdodGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3RlZCh0aGlzLmN1cnJIaWdobGlnaHRlZC5yb3cuZ2V0RGF0YUl0ZW0oKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJvd3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0ZWQodGhpcy5yb3dzWzBdLnJvdy5nZXREYXRhSXRlbSgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZXh0Um93KCkge1xyXG4gICAgICAgIGxldCBuZXh0Um93SW5kZXggPSAwO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXJySGlnaGxpZ2h0ZWQpIHtcclxuICAgICAgICAgICAgbmV4dFJvd0luZGV4ID0gdGhpcy5jdXJySGlnaGxpZ2h0ZWQuaW5kZXggKyAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5oaWdobGlnaHRSb3cobmV4dFJvd0luZGV4KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJldlJvdygpIHtcclxuICAgICAgICBsZXQgbmV4dFJvd0luZGV4ID0gLTE7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJIaWdobGlnaHRlZCkge1xyXG4gICAgICAgICAgICBuZXh0Um93SW5kZXggPSB0aGlzLmN1cnJIaWdobGlnaHRlZC5pbmRleCAtIDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmhpZ2hsaWdodFJvdyhuZXh0Um93SW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZHJvcGRvd25TY3JvbGxUb3BUbyhvZmZzZXQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wICsgb2Zmc2V0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZHJvcGRvd25Sb3dUb3AoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJIaWdobGlnaHRlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJySGlnaGxpZ2h0ZWQucm93LmdldE5hdGl2ZUVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLVxyXG4gICAgICAgICAgICAodGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArXHJcbiAgICAgICAgICAgICAgICBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCkucGFkZGluZ1RvcCBhcyBzdHJpbmcsIDEwKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkcm9wZG93bkhlaWdodCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArXHJcbiAgICAgICAgICAgIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50KS5tYXhIZWlnaHQgYXMgc3RyaW5nLCAxMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkcm9wZG93blJvd09mZnNldEhlaWdodChyb3c6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUocm93LnBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybiByb3cucGFyZW50RWxlbWVudC5vZmZzZXRIZWlnaHQgK1xyXG4gICAgICAgICAgICBwYXJzZUludChjc3MubWFyZ2luVG9wIGFzIHN0cmluZywgMTApICsgcGFyc2VJbnQoY3NzLm1hcmdpbkJvdHRvbSBhcyBzdHJpbmcsIDEwKTtcclxuICAgIH1cclxufVxyXG4iXX0=