UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

182 lines 24.8 kB
import { __decorate } from "tslib"; import { Injectable } from '@angular/core'; import { ScrollMonth } from '../calendar-base'; var Direction; (function (Direction) { Direction["Up"] = "ArrowUp"; Direction["Down"] = "ArrowDown"; Direction["Left"] = "ArrowLeft"; Direction["Right"] = "ArrowRight"; })(Direction || (Direction = {})); var ARROW = 'Arrow'; /** @hidden */ var IgxDaysViewNavigationService = /** @class */ (function () { function IgxDaysViewNavigationService() { } /** * Implements kb navigation in all MoveDirections. nextDate and nextMonthView naming convention is used for both previous/next * @hidden */ IgxDaysViewNavigationService.prototype.focusNextDate = function (target, key, nextView) { if (nextView === void 0) { nextView = false; } if (target.childElementCount === 0) { target = target.parentElement; } if (key.indexOf('Arrow') === -1) { key = ARROW.concat(key); } var monthView = this.monthView; var node = monthView.dates.find(function (date) { return date.nativeElement === target; }); var dates = monthView.dates.toArray(), day, step, i, nextDate; var index = dates.indexOf(node); if (!node) { return; } // focus item in current month switch (key) { case Direction.Left: { step = -1; nextDate = this.timedelta(node.date.date, step); for (i = index; i > 0; i--) { day = nextView ? dates[i] : dates[i - 1]; nextDate = day.date.date; if (day.date.isPrevMonth) { break; } if (day && day.isFocusable) { day.nativeElement.focus(); return; } } break; } case Direction.Right: { step = 1; nextDate = this.timedelta(node.date.date, step); for (i = index; i < dates.length - 1; i++) { day = nextView ? dates[i] : dates[i + 1]; nextDate = day.date.date; if (day.date.isNextMonth) { break; } if (day && day.isFocusable) { day.nativeElement.focus(); return; } } break; } case Direction.Up: { step = -7; nextDate = this.timedelta(node.date.date, step); for (i = index; i - 7 > -1; i -= 7) { day = nextView ? dates[i] : dates[i - 7]; nextDate = day.date.date; if (day.date.isPrevMonth) { break; } if (day && day.isFocusable) { day.nativeElement.focus(); return; } } break; } case Direction.Down: { step = 7; nextDate = this.timedelta(node.date.date, step); for (i = index; i + 7 < 42; i += 7) { day = nextView ? dates[i] : dates[i + 7]; nextDate = day.date.date; if (day.date.isNextMonth) { break; } if (day && day.isFocusable) { day.nativeElement.focus(); return; } } break; } } // focus item in prev/next visible month var nextMonthView = step > 0 ? monthView.nextMonthView : monthView.prevMonthView; if (nextMonthView) { dates = nextMonthView.dates.toArray(); day = dates.find(function (item) { return item.date.date.getTime() === nextDate.getTime(); }); if (day && day.isFocusable) { day.nativeElement.focus(); return; } nextMonthView.navService.focusNextDate(day.nativeElement, key); } // if iterating in the visible prev/next moths above found a day that is not focusable, ie is disabled, hidden, etc // then it is needed to recalculate the next day, which is going to be part of the prev/next months if (day && !day.isFocusable) { day = dates[i + step]; if (!day) { nextDate = this.timedelta(node.date.date, step + i - index); } } // focus item in prev/next month, which is currently out of view var dayIsNextMonth; // determine what we need to check for next date - if it belongs to prev or next month if (day) { dayIsNextMonth = step > 0 ? day.date.isNextMonth : day.date.isPrevMonth; } if (monthView.changeDaysView && !nextMonthView && ((day && dayIsNextMonth) || !day)) { var monthAction = step > 0 ? ScrollMonth.NEXT : ScrollMonth.PREV; monthView.onViewChanging.emit({ monthAction: monthAction, key: key, nextDate: nextDate }); } }; /** * Focuses first focusable day in the month. Will go to next visible month, if no day in the first month is focusable * @hidden */ IgxDaysViewNavigationService.prototype.focusHomeDate = function () { var monthView = this.monthView; while (!this.focusFirstDay(monthView) && monthView.nextMonthView) { monthView = monthView.nextMonthView; } }; /** * Focuses last focusable day in the month. Will go to previous visible month, if no day in the first month is focusable * @hidden */ IgxDaysViewNavigationService.prototype.focusEndDate = function () { var monthView = this.monthView; while (!this.focusLastDay(monthView) && monthView.prevMonthView) { monthView = monthView.prevMonthView; } }; IgxDaysViewNavigationService.prototype.timedelta = function (date, units) { var ret = new Date(date); ret.setDate(ret.getDate() + units); return ret; }; IgxDaysViewNavigationService.prototype.focusFirstDay = function (monthView) { var dates = monthView.dates.filter(function (d) { return d.isCurrentMonth; }); for (var i = 0; i < dates.length; i++) { if (dates[i].isFocusable) { dates[i].nativeElement.focus(); return true; } } return false; }; IgxDaysViewNavigationService.prototype.focusLastDay = function (monthView) { var dates = monthView.dates.filter(function (d) { return d.isCurrentMonth; }); for (var i = dates.length - 1; i >= 0; i--) { if (dates[i].isFocusable) { dates[i].nativeElement.focus(); return true; } } return false; }; IgxDaysViewNavigationService = __decorate([ Injectable() ], IgxDaysViewNavigationService); return IgxDaysViewNavigationService; }()); export { IgxDaysViewNavigationService }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5c3ZpZXctbmF2aWdhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9jYWxlbmRhci9kYXlzLXZpZXcvZGF5c3ZpZXctbmF2aWdhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvQyxJQUFLLFNBS0o7QUFMRCxXQUFLLFNBQVM7SUFDViwyQkFBYyxDQUFBO0lBQ2QsK0JBQWtCLENBQUE7SUFDbEIsK0JBQWtCLENBQUE7SUFDbEIsaUNBQW9CLENBQUE7QUFDeEIsQ0FBQyxFQUxJLFNBQVMsS0FBVCxTQUFTLFFBS2I7QUFFRCxJQUFNLEtBQUssR0FBRyxPQUFPLENBQUM7QUFFdEIsY0FBYztBQUVkO0lBQUE7SUFxS0EsQ0FBQztJQW5LRzs7O09BR0c7SUFDSSxvREFBYSxHQUFwQixVQUFxQixNQUFtQixFQUFFLEdBQVcsRUFBRSxRQUFnQjtRQUFoQix5QkFBQSxFQUFBLGdCQUFnQjtRQUNuRSxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLEVBQUU7WUFBRSxNQUFNLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztTQUFFO1FBQ3RFLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQUU7UUFDN0QsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNqQyxJQUFNLElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFDLElBQUksSUFBSyxPQUFBLElBQUksQ0FBQyxhQUFhLEtBQUssTUFBTSxFQUE3QixDQUE2QixD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QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNuQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUU7Z0JBQ3RCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7U0FDSjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxtREFBWSxHQUFwQixVQUFxQixTQUErQjtRQUNoRCxJQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxjQUFjLEVBQWhCLENBQWdCLENBQUMsQ0FBQztRQUM1RCxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFO2dCQUN0QixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMvQixPQUFPLElBQUksQ0FBQzthQUNmO1NBQ0o7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBcEtRLDRCQUE0QjtRQUR4QyxVQUFVLEVBQUU7T0FDQSw0QkFBNEIsQ0FxS3hDO0lBQUQsbUNBQUM7Q0FBQSxBQXJLRCxJQXFLQztTQXJLWSw0QkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hEYXlJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9kYXktaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4RGF5c1ZpZXdDb21wb25lbnQgfSBmcm9tICcuL2RheXMtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2Nyb2xsTW9udGggfSBmcm9tICcuLi9jYWxlbmRhci1iYXNlJztcblxuZW51bSBEaXJlY3Rpb24ge1xuICAgIFVwID0gJ0Fycm93VXAnLFxuICAgIERvd24gPSAnQXJyb3dEb3duJyxcbiAgICBMZWZ0ID0gJ0Fycm93TGVmdCcsXG4gICAgUmlnaHQgPSAnQXJyb3dSaWdodCcsXG59XG5cbmNvbnN0IEFSUk9XID0gJ0Fycm93JztcblxuLyoqIEBoaWRkZW4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBJZ3hEYXlzVmlld05hdmlnYXRpb25TZXJ2aWNlIHtcbiAgICBwdWJsaWMgbW9udGhWaWV3OiBJZ3hEYXlzVmlld0NvbXBvbmVudDtcbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRzIGtiIG5hdmlnYXRpb24gaW4gYWxsIE1vdmVEaXJlY3Rpb25zLiBuZXh0RGF0ZSBhbmQgbmV4dE1vbnRoVmlldyBuYW1pbmcgY29udmVudGlvbiBpcyB1c2VkIGZvciBib3RoIHByZXZpb3VzL25leHRcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGZvY3VzTmV4dERhdGUodGFyZ2V0OiBIVE1MRWxlbWVudCwga2V5OiBzdHJpbmcsIG5leHRWaWV3ID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRhcmdldC5jaGlsZEVsZW1lbnRDb3VudCA9PT0gMCkgeyB0YXJnZXQgPSB0YXJnZXQucGFyZW50RWxlbWVudDsgfVxuICAgICAgICBpZiAoa2V5LmluZGV4T2YoJ0Fycm93JykgPT09IC0xKSB7IGtleSA9IEFSUk9XLmNvbmNhdChrZXkpOyB9XG4gICAgICAgIGNvbnN0IG1vbnRoVmlldyA9IHRoaXMubW9udGhWaWV3O1xuICAgICAgICBjb25zdCBub2RlID0gbW9udGhWaWV3LmRhdGVzLmZpbmQoKGRhdGUpID0+IGRhdGUubmF0aXZlRWxlbWVudCA9PT0gdGFyZ2V0KTtcbiAgICAgICAgbGV0IGRhdGVzID0gbW9udGhWaWV3LmRhdGVzLnRvQXJyYXkoKSxcbiAgICAgICAgICAgIGRheTogSWd4RGF5SXRlbUNvbXBvbmVudCwgc3RlcCwgaSwgbmV4dERhdGU6IERhdGU7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0ZXMuaW5kZXhPZihub2RlKTtcblxuICAgICAgICBpZiAoIW5vZGUpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgLy8gZm9jdXMgaXRlbSBpbiBjdXJyZW50IG1vbnRoXG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlIERpcmVjdGlvbi5MZWZ0OiB7XG4gICAgICAgICAgICAgICAgc3RlcCA9IC0xO1xuICAgICAgICAgICAgICAgIG5leHREYXRlID0gdGhpcy50aW1lZGVsdGEobm9kZS5kYXRlLmRhdGUsIHN0ZXApO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IGluZGV4OyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGRheSA9IG5leHRWaWV3ID8gZGF0ZXNbaV0gOiBkYXRlc1tpIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIG5leHREYXRlID0gZGF5LmRhdGUuZGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRheS5kYXRlLmlzUHJldk1vbnRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF5ICYmIGRheS5pc0ZvY3VzYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF5Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgRGlyZWN0aW9uLlJpZ2h0OiB7XG4gICAgICAgICAgICAgICAgc3RlcCA9IDE7XG4gICAgICAgICAgICAgICAgbmV4dERhdGUgPSB0aGlzLnRpbWVkZWx0YShub2RlLmRhdGUuZGF0ZSwgc3RlcCk7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gaW5kZXg7IGkgPCBkYXRlcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZGF5ID0gbmV4dFZpZXcgPyBkYXRlc1tpXSA6IGRhdGVzW2kgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dERhdGUgPSBkYXkuZGF0ZS5kYXRlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF5LmRhdGUuaXNOZXh0TW9udGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXkgJiYgZGF5LmlzRm9jdXNhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBEaXJlY3Rpb24uVXA6IHtcbiAgICAgICAgICAgICAgICBzdGVwID0gLTc7XG4gICAgICAgICAgICAgICAgbmV4dERhdGUgPSB0aGlzLnRpbWVkZWx0YShub2RlLmRhdGUuZGF0ZSwgc3RlcCk7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gaW5kZXg7IGkgLSA3ID4gLTE7IGkgLT0gNykge1xuICAgICAgICAgICAgICAgICAgICBkYXkgPSBuZXh0VmlldyA/IGRhdGVzW2ldIDogZGF0ZXNbaSAtIDddO1xuICAgICAgICAgICAgICAgICAgICBuZXh0RGF0ZSA9IGRheS5kYXRlLmRhdGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXkuZGF0ZS5pc1ByZXZNb250aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRheSAmJiBkYXkuaXNGb2N1c2FibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRheS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIERpcmVjdGlvbi5Eb3duOiB7XG4gICAgICAgICAgICAgICAgc3RlcCA9IDc7XG4gICAgICAgICAgICAgICAgbmV4dERhdGUgPSB0aGlzLnRpbWVkZWx0YShub2RlLmRhdGUuZGF0ZSwgc3RlcCk7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gaW5kZXg7IGkgKyA3IDwgNDI7IGkgKz0gNykge1xuICAgICAgICAgICAgICAgICAgICBkYXkgPSBuZXh0VmlldyA/IGRhdGVzW2ldIDogZGF0ZXNbaSArIDddO1xuICAgICAgICAgICAgICAgICAgICBuZXh0RGF0ZSA9IGRheS5kYXRlLmRhdGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXkuZGF0ZS5pc05leHRNb250aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRheSAmJiBkYXkuaXNGb2N1c2FibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRheS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmb2N1cyBpdGVtIGluIHByZXYvbmV4dCB2aXNpYmxlIG1vbnRoXG4gICAgICAgIGNvbnN0IG5leHRNb250aFZpZXcgPSBzdGVwID4gMCA/IG1vbnRoVmlldy5uZXh0TW9udGhWaWV3IDogbW9udGhWaWV3LnByZXZNb250aFZpZXc7XG4gICAgICAgIGlmIChuZXh0TW9udGhWaWV3KSB7XG4gICAgICAgICAgICBkYXRlcyA9IG5leHRNb250aFZpZXcuZGF0ZXMudG9BcnJheSgpO1xuICAgICAgICAgICAgZGF5ID0gZGF0ZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5kYXRlLmRhdGUuZ2V0VGltZSgpID09PSBuZXh0RGF0ZS5nZXRUaW1lKCkpO1xuXG4gICAgICAgICAgICBpZiAoZGF5ICYmIGRheS5pc0ZvY3VzYWJsZSkge1xuICAgICAgICAgICAgICAgIGRheS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dE1vbnRoVmlldy5uYXZTZXJ2aWNlLmZvY3VzTmV4dERhdGUoZGF5Lm5hdGl2ZUVsZW1lbnQsIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBpdGVyYXRpbmcgaW4gdGhlIHZpc2libGUgcHJldi9uZXh0IG1vdGhzIGFib3ZlIGZvdW5kIGEgZGF5IHRoYXQgaXMgbm90IGZvY3VzYWJsZSwgaWUgaXMgZGlzYWJsZWQsIGhpZGRlbiwgZXRjXG4gICAgICAgIC8vIHRoZW4gaXQgaXMgbmVlZGVkIHRvIHJlY2FsY3VsYXRlIHRoZSBuZXh0IGRheSwgd2hpY2ggaXMgZ29pbmcgdG8gYmUgcGFydCBvZiB0aGUgcHJldi9uZXh0IG1vbnRoc1xuICAgICAgICBpZiAoZGF5ICYmICFkYXkuaXNGb2N1c2FibGUpIHtcbiAgICAgICAgICAgIGRheSA9IGRhdGVzW2kgKyBzdGVwXTtcbiAgICAgICAgICAgIGlmICghZGF5KSB7XG4gICAgICAgICAgICAgICAgbmV4dERhdGUgPSB0aGlzLnRpbWVkZWx0YShub2RlLmRhdGUuZGF0ZSwgc3RlcCArIGkgLSBpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmb2N1cyBpdGVtIGluIHByZXYvbmV4dCBtb250aCwgd2hpY2ggaXMgY3VycmVudGx5IG91dCBvZiB2aWV3XG4gICAgICAgIGxldCBkYXlJc05leHRNb250aDogYm9vbGVhbjsgLy8gZGV0ZXJtaW5lIHdoYXQgd2UgbmVlZCB0byBjaGVjayBmb3IgbmV4dCBkYXRlIC0gaWYgaXQgYmVsb25ncyB0byBwcmV2IG9yIG5leHQgbW9udGhcbiAgICAgICAgaWYgKGRheSkgeyBkYXlJc05leHRNb250aCA9IHN0ZXAgPiAwID8gZGF5LmRhdGUuaXNOZXh0TW9udGggOiBkYXkuZGF0ZS5pc1ByZXZNb250aDsgfVxuICAgICAgICBpZiAobW9udGhWaWV3LmNoYW5nZURheXNWaWV3ICYmICFuZXh0TW9udGhWaWV3ICYmICgoZGF5ICYmIGRheUlzTmV4dE1vbnRoKSB8fCAhZGF5KSkge1xuICAgICAgICAgICAgY29uc3QgbW9udGhBY3Rpb24gPSBzdGVwID4gMCA/IFNjcm9sbE1vbnRoLk5FWFQgOiBTY3JvbGxNb250aC5QUkVWO1xuICAgICAgICAgICAgbW9udGhWaWV3Lm9uVmlld0NoYW5naW5nLmVtaXQoe21vbnRoQWN0aW9uOiBtb250aEFjdGlvbiwga2V5OiBrZXksIG5leHREYXRlOiBuZXh0RGF0ZX0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9jdXNlcyBmaXJzdCBmb2N1c2FibGUgZGF5IGluIHRoZSBtb250aC4gV2lsbCBnbyB0byBuZXh0IHZpc2libGUgbW9udGgsIGlmIG5vIGRheSBpbiB0aGUgZmlyc3QgbW9udGggaXMgZm9jdXNhYmxlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBmb2N1c0hvbWVEYXRlKCkge1xuICAgICAgICBsZXQgbW9udGhWaWV3ID0gdGhpcy5tb250aFZpZXc7XG4gICAgICAgIHdoaWxlICghdGhpcy5mb2N1c0ZpcnN0RGF5KG1vbnRoVmlldykgJiYgbW9udGhWaWV3Lm5leHRNb250aFZpZXcpIHtcbiAgICAgICAgICAgIG1vbnRoVmlldyA9IG1vbnRoVmlldy5uZXh0TW9udGhWaWV3O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9jdXNlcyBsYXN0IGZvY3VzYWJsZSBkYXkgaW4gdGhlIG1vbnRoLiBXaWxsIGdvIHRvIHByZXZpb3VzIHZpc2libGUgbW9udGgsIGlmIG5vIGRheSBpbiB0aGUgZmlyc3QgbW9udGggaXMgZm9jdXNhYmxlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBmb2N1c0VuZERhdGUoKSB7XG4gICAgICAgIGxldCBtb250aFZpZXcgPSB0aGlzLm1vbnRoVmlldztcbiAgICAgICAgd2hpbGUgKCF0aGlzLmZvY3VzTGFzdERheShtb250aFZpZXcpICYmIG1vbnRoVmlldy5wcmV2TW9udGhWaWV3KSB7XG4gICAgICAgICAgICBtb250aFZpZXcgPSBtb250aFZpZXcucHJldk1vbnRoVmlldztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdGltZWRlbHRhKGRhdGU6IERhdGUsIHVuaXRzOiBudW1iZXIpOiBEYXRlIHtcbiAgICAgICAgY29uc3QgcmV0ID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgIHJldC5zZXREYXRlKHJldC5nZXREYXRlKCkgKyB1bml0cyk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2N1c0ZpcnN0RGF5KG1vbnRoVmlldzogSWd4RGF5c1ZpZXdDb21wb25lbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZGF0ZXMgPSBtb250aFZpZXcuZGF0ZXMuZmlsdGVyKGQgPT4gZC5pc0N1cnJlbnRNb250aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChkYXRlc1tpXS5pc0ZvY3VzYWJsZSkge1xuICAgICAgICAgICAgICAgIGRhdGVzW2ldLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2N1c0xhc3REYXkobW9udGhWaWV3OiBJZ3hEYXlzVmlld0NvbXBvbmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkYXRlcyA9IG1vbnRoVmlldy5kYXRlcy5maWx0ZXIoZCA9PiBkLmlzQ3VycmVudE1vbnRoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGRhdGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBpZiAoZGF0ZXNbaV0uaXNGb2N1c2FibGUpIHtcbiAgICAgICAgICAgICAgICBkYXRlc1tpXS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbiJdfQ==