@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
271 lines • 29.1 kB
JavaScript
import { __decorate, __extends, __metadata } from "tslib";
import { Component, HostListener, ViewChild, HostBinding, Input } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { trigger, transition, useAnimation } from '@angular/animations';
import { fadeIn, scaleInCenter, slideInLeft, slideInRight } from '../../animations/main';
import { IgxMonthsViewComponent } from '../months-view/months-view.component';
import { IgxMonthPickerBaseDirective, CalendarView } from '../month-picker-base';
import { IgxYearsViewComponent } from '../years-view/years-view.component';
import { IgxDaysViewComponent } from '../days-view/days-view.component';
var NEXT_ID = 0;
var IgxMonthPickerComponent = /** @class */ (function (_super) {
__extends(IgxMonthPickerComponent, _super);
function IgxMonthPickerComponent() {
var _this = _super !== null && _super.apply(this, arguments) || this;
/**
* Sets/gets the `id` of the month picker.
* If not set, the `id` will have value `"igx-month-picker-0"`.
*/
_this.id = "igx-month-picker-" + NEXT_ID++;
/**
* The default css class applied to the component.
*
* @hidden
*/
_this.styleClass = true;
/**
* @hidden
*/
_this.yearAction = '';
return _this;
}
IgxMonthPickerComponent_1 = IgxMonthPickerComponent;
/**
* @hidden
*/
IgxMonthPickerComponent.prototype.animationDone = function () {
this.yearAction = '';
};
/**
* @hidden
*/
IgxMonthPickerComponent.prototype.activeViewDecadeKB = function (event) {
var _this = this;
_super.prototype.activeViewDecadeKB.call(this, event);
if (event.key === "ArrowRight" /* RIGHT_ARROW */ || event.key === "Right" /* RIGHT_ARROW_IE */) {
event.preventDefault();
this.nextYear();
}
if (event.key === "ArrowLeft" /* LEFT_ARROW */ || event.key === "Left" /* LEFT_ARROW_IE */) {
event.preventDefault();
this.previousYear();
}
requestAnimationFrame(function () {
if (_this.dacadeView) {
_this.dacadeView.el.nativeElement.focus();
}
});
};
/**
* @hidden
*/
IgxMonthPickerComponent.prototype.activeViewDecade = function () {
var _this = this;
_super.prototype.activeViewDecade.call(this);
requestAnimationFrame(function () {
_this.dacadeView.el.nativeElement.focus();
});
};
/**
* @hidden
*/
IgxMonthPickerComponent.prototype.nextYear = function () {
this.yearAction = 'next';
this.viewDate = this.calendarModel.timedelta(this.viewDate, 'year', 1);
this.selectDate(this.viewDate);
this.onSelection.emit(this.selectedDates);
};
/**
* @hidden
*/
IgxMonthPickerComponent.prototype.nextYearKB = function (event) {
if (event.key === " " /* SPACE */ || event.key === "Spacebar" /* SPACE_IE */ || event.key === "Enter" /* ENTER */) {
event.preventDefault();
event.stopPropagation();
this.nextYear();
}
};
/**
* @hidden
*/
IgxMonthPickerComponent.prototype.previousYear = function () {
this.yearAction = 'prev';
this.viewDate = this.calendarModel.timedelta(this.viewDate, 'year', -1);
this.selectDate(this.viewDate);
this.onSelection.emit(this.selectedDates);
};
/**
* @hidden
*/
IgxMonthPickerComponent.prototype.previousYearKB = function (event) {
if (event.key === " " /* SPACE */ || event.key === "Spacebar" /* SPACE_IE */ || event.key === "Enter" /* ENTER */) {
event.preventDefault();
event.stopPropagation();
this.previousYear();
}
};
/**
* @hidden
*/
IgxMonthPickerComponent.prototype.selectYear = function (event) {
var _this = this;
this.viewDate = new Date(event.getFullYear(), event.getMonth(), event.getDate());
this.activeView = CalendarView.DEFAULT;
this.selectDate(event);
this.onSelection.emit(this.selectedDates);
requestAnimationFrame(function () {
if (_this.yearsBtn) {
_this.yearsBtn.nativeElement.focus();
}
});
};
/**
* @hidden
*/
IgxMonthPickerComponent.prototype.selectMonth = function (event) {
this.selectDate(event);
this.onSelection.emit(this.selectedDates);
};
/**
* Selects a date.
*```typescript
* this.monPicker.selectDate(new Date(`2018-06-12`));
*```
*/
IgxMonthPickerComponent.prototype.selectDate = function (value) {
if (!value) {
return new Date();
}
// TO DO: to be refactored after discussion on the desired behavior
_super.prototype.selectDate.call(this, value);
this.viewDate = value;
};
/**
* @hidden
*/
IgxMonthPickerComponent.prototype.writeValue = function (value) {
// TO DO: to be refactored after discussion on the desired behavior
if (value) {
this.viewDate = this.selectedDates = value;
}
};
/**
* @hidden
*/
IgxMonthPickerComponent.prototype.onKeydownPageUp = function (event) {
event.preventDefault();
this.yearAction = 'prev';
this.viewDate = this.calendarModel.timedelta(this.viewDate, 'year', -1);
};
/**
* @hidden
*/
IgxMonthPickerComponent.prototype.onKeydownPageDown = function (event) {
event.preventDefault();
this.yearAction = 'next';
this.viewDate = this.calendarModel.timedelta(this.viewDate, 'year', 1);
};
/**
* @hidden
*/
IgxMonthPickerComponent.prototype.onKeydownHome = function (event) {
if (this.monthsView) {
this.monthsView.el.nativeElement.focus();
this.monthsView.onKeydownHome(event);
}
};
/**
* @hidden
*/
IgxMonthPickerComponent.prototype.onKeydownEnd = function (event) {
if (this.monthsView) {
this.monthsView.el.nativeElement.focus();
this.monthsView.onKeydownEnd(event);
}
};
var IgxMonthPickerComponent_1;
__decorate([
HostBinding('attr.id'),
Input(),
__metadata("design:type", Object)
], IgxMonthPickerComponent.prototype, "id", void 0);
__decorate([
HostBinding('class.igx-calendar'),
__metadata("design:type", Object)
], IgxMonthPickerComponent.prototype, "styleClass", void 0);
__decorate([
ViewChild('months', { read: IgxMonthsViewComponent }),
__metadata("design:type", IgxMonthsViewComponent)
], IgxMonthPickerComponent.prototype, "monthsView", void 0);
__decorate([
ViewChild('decade', { read: IgxYearsViewComponent }),
__metadata("design:type", IgxYearsViewComponent)
], IgxMonthPickerComponent.prototype, "dacadeView", void 0);
__decorate([
ViewChild('days', { read: IgxDaysViewComponent }),
__metadata("design:type", IgxDaysViewComponent)
], IgxMonthPickerComponent.prototype, "daysView", void 0);
__decorate([
HostListener('keydown.pageup', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], IgxMonthPickerComponent.prototype, "onKeydownPageUp", null);
__decorate([
HostListener('keydown.pagedown', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], IgxMonthPickerComponent.prototype, "onKeydownPageDown", null);
__decorate([
HostListener('keydown.home', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], IgxMonthPickerComponent.prototype, "onKeydownHome", null);
__decorate([
HostListener('keydown.end', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], IgxMonthPickerComponent.prototype, "onKeydownEnd", null);
IgxMonthPickerComponent = IgxMonthPickerComponent_1 = __decorate([
Component({
providers: [
{
multi: true,
provide: NG_VALUE_ACCESSOR,
useExisting: IgxMonthPickerComponent_1
}
],
animations: [
trigger('animateView', [
transition('void => 0', useAnimation(fadeIn)),
transition('void => *', useAnimation(scaleInCenter, {
params: {
duration: '.2s',
fromScale: .9
}
}))
]),
trigger('animateChange', [
transition('* => prev', useAnimation(slideInLeft, {
params: {
fromPosition: 'translateX(-30%)'
}
})),
transition('* => next', useAnimation(slideInRight, {
params: {
fromPosition: 'translateX(30%)'
}
}))
])
],
selector: 'igx-month-picker',
template: "<div *ngIf=\"isDefaultView\" [@animateView]=\"activeView\" class=\"igx-calendar__body\" (swiperight)=\"previousYear()\" (swipeleft)=\"nextYear()\">\n <div class=\"igx-calendar-picker\">\n <div tabindex=\"0\" class=\"igx-calendar-picker__prev\" (click)=\"previousYear()\" (keydown)=\"previousYearKB($event)\" [ngStyle]=\"{\n 'min-width.%': 25,\n 'left': 0\n }\">\n <igx-icon fontSet=\"material\">keyboard_arrow_left</igx-icon>\n </div>\n <div [style.width.%]=\"100\">\n <span tabindex=\"0\" #yearsBtn (keydown)=\"activeViewDecadeKB($event)\" (click)=\"activeViewDecade()\" class=\"igx-calendar-picker__date\">\n {{ formattedYear(viewDate) }}\n </span>\n </div>\n <div tabindex=\"0\" class=\"igx-calendar-picker__next\" (click)=\"nextYear()\" (keydown)=\"nextYearKB($event)\" [ngStyle]=\"{\n 'min-width.%': 25,\n 'right': 0\n }\">\n <igx-icon fontSet=\"material\">keyboard_arrow_right</igx-icon>\n </div>\n </div>\n\n <igx-months-view [@animateChange]=\"yearAction\" #months\n (@animateChange.done)=\"animationDone()\"\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.month\"\n [monthFormat]=\"formatOptions.month\"\n (onSelection)=\"selectMonth($event)\">\n </igx-months-view>\n</div>\n<igx-years-view *ngIf=\"isDecadeView\" [@animateView]=\"activeView\" #decade\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.year\"\n [yearFormat]=\"formatOptions.year\"\n (onSelection)=\"selectYear($event)\">\n</igx-years-view>\n"
})
], IgxMonthPickerComponent);
return IgxMonthPickerComponent;
}(IgxMonthPickerBaseDirective));
export { IgxMonthPickerComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udGgtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvY2FsZW5kYXIvbW9udGgtcGlja2VyL21vbnRoLXBpY2tlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFDVCxXQUFXLEVBQ1gsS0FBSyxFQUNSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV6RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFeEUsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBbUNoQjtJQUE2QywyQ0FBMkI7SUFBeEU7UUFBQSxxRUF3TkM7UUF2Tkc7OztXQUdHO1FBR0ksUUFBRSxHQUFHLHNCQUFvQixPQUFPLEVBQUksQ0FBQztRQUU1Qzs7OztXQUlHO1FBRUksZ0JBQVUsR0FBRyxJQUFJLENBQUM7UUFvQnpCOztXQUVHO1FBQ0ksZ0JBQVUsR0FBRyxFQUFFLENBQUM7O0lBa0wzQixDQUFDO2dDQXhOWSx1QkFBdUI7SUF3Q2hDOztPQUVHO0lBQ0ksK0NBQWEsR0FBcEI7UUFDSSxJQUFJLENBQUMsVUFB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U0FBUyxFQUFFLEVBQUU7eUJBQ2hCO3FCQUNKLENBQUMsQ0FBQztpQkFDTixDQUFDO2dCQUNGLE9BQU8sQ0FBQyxlQUFlLEVBQUU7b0JBQ3JCLFVBQVUsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRTt3QkFDOUMsTUFBTSxFQUFFOzRCQUNKLFlBQVksRUFBRSxrQkFBa0I7eUJBQ25DO3FCQUNKLENBQUMsQ0FBQztvQkFDSCxVQUFVLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxZQUFZLEVBQUU7d0JBQy9DLE1BQU0sRUFBRTs0QkFDSixZQUFZLEVBQUUsaUJBQWlCO3lCQUNsQztxQkFDSixDQUFDLENBQUM7aUJBQ04sQ0FBQzthQUNMO1lBQ0QsUUFBUSxFQUFFLGtCQUFrQjtZQUM1QixrekRBQTBDO1NBQzdDLENBQUM7T0FDVyx1QkFBdUIsQ0F3Tm5DO0lBQUQsOEJBQUM7Q0FBQSxBQXhORCxDQUE2QywyQkFBMkIsR0F3TnZFO1NBeE5ZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBWaWV3Q2hpbGQsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IHRyaWdnZXIsIHRyYW5zaXRpb24sIHVzZUFuaW1hdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgZmFkZUluLCBzY2FsZUluQ2VudGVyLCBzbGlkZUluTGVmdCwgc2xpZGVJblJpZ2h0IH0gZnJvbSAnLi4vLi4vYW5pbWF0aW9ucy9tYWluJztcbmltcG9ydCB7IEtFWVMgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneE1vbnRoc1ZpZXdDb21wb25lbnQgfSBmcm9tICcuLi9tb250aHMtdmlldy9tb250aHMtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4TW9udGhQaWNrZXJCYXNlRGlyZWN0aXZlLCBDYWxlbmRhclZpZXcgfSBmcm9tICcuLi9tb250aC1waWNrZXItYmFzZSc7XG5pbXBvcnQgeyBJZ3hZZWFyc1ZpZXdDb21wb25lbnQgfSBmcm9tICcuLi95ZWFycy12aWV3L3llYXJzLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IElneERheXNWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vZGF5cy12aWV3L2RheXMtdmlldy5jb21wb25lbnQnO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5AQ29tcG9uZW50KHtcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBJZ3hNb250aFBpY2tlckNvbXBvbmVudFxuICAgICAgICB9XG4gICAgXSxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ2FuaW1hdGVWaWV3JywgW1xuICAgICAgICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAwJywgdXNlQW5pbWF0aW9uKGZhZGVJbikpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgdXNlQW5pbWF0aW9uKHNjYWxlSW5DZW50ZXIsIHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246ICcuMnMnLFxuICAgICAgICAgICAgICAgICAgICBmcm9tU2NhbGU6IC45XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpXG4gICAgICAgIF0pLFxuICAgICAgICB0cmlnZ2VyKCdhbmltYXRlQ2hhbmdlJywgW1xuICAgICAgICAgICAgdHJhbnNpdGlvbignKiA9PiBwcmV2JywgdXNlQW5pbWF0aW9uKHNsaWRlSW5MZWZ0LCB7XG4gICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgIGZyb21Qb3NpdGlvbjogJ3RyYW5zbGF0ZVgoLTMwJSknXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignKiA9PiBuZXh0JywgdXNlQW5pbWF0aW9uKHNsaWRlSW5SaWdodCwge1xuICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICBmcm9tUG9zaXRpb246ICd0cmFuc2xhdGVYKDMwJSknXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpXG4gICAgICAgIF0pXG4gICAgXSxcbiAgICBzZWxlY3RvcjogJ2lneC1tb250aC1waWNrZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnbW9udGgtcGlja2VyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hNb250aFBpY2tlckNvbXBvbmVudCBleHRlbmRzIElneE1vbnRoUGlja2VyQmFzZURpcmVjdGl2ZSB7XG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgaWRgIG9mIHRoZSBtb250aCBwaWNrZXIuXG4gICAgICogSWYgbm90IHNldCwgdGhlIGBpZGAgd2lsbCBoYXZlIHZhbHVlIGBcImlneC1tb250aC1waWNrZXItMFwiYC5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYGlneC1tb250aC1waWNrZXItJHtORVhUX0lEKyt9YDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IGNzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2FsZW5kYXInKVxuICAgIHB1YmxpYyBzdHlsZUNsYXNzID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdtb250aHMnLCB7IHJlYWQ6IElneE1vbnRoc1ZpZXdDb21wb25lbnQgfSlcbiAgICBwdWJsaWMgbW9udGhzVmlldzogSWd4TW9udGhzVmlld0NvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkZWNhZGUnLCB7IHJlYWQ6IElneFllYXJzVmlld0NvbXBvbmVudCB9KVxuICAgIHB1YmxpYyBkYWNhZGVWaWV3OiBJZ3hZZWFyc1ZpZXdDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZGF5cycsIHsgcmVhZDogSWd4RGF5c1ZpZXdDb21wb25lbnQgfSlcbiAgICBwdWJsaWMgZGF5c1ZpZXc6IElneERheXNWaWV3Q29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB5ZWFyQWN0aW9uID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGFuaW1hdGlvbkRvbmUoKSB7XG4gICAgICAgIHRoaXMueWVhckFjdGlvbiA9ICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWN0aXZlVmlld0RlY2FkZUtCKGV2ZW50KSB7XG4gICAgICAgIHN1cGVyLmFjdGl2ZVZpZXdEZWNhZGVLQihldmVudCk7XG5cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gS0VZUy5SSUdIVF9BUlJPVyB8fCBldmVudC5rZXkgPT09IEtFWVMuUklHSFRfQVJST1dfSUUpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLm5leHRZZWFyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBLRVlTLkxFRlRfQVJST1cgfHwgZXZlbnQua2V5ID09PSBLRVlTLkxFRlRfQVJST1dfSUUpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzWWVhcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhY2FkZVZpZXcpIHsgdGhpcy5kYWNhZGVWaWV3LmVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTsgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGFjdGl2ZVZpZXdEZWNhZGUoKSB7XG4gICAgICAgIHN1cGVyLmFjdGl2ZVZpZXdEZWNhZGUoKTtcblxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kYWNhZGVWaWV3LmVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZXh0WWVhcigpIHtcbiAgICAgICAgdGhpcy55ZWFyQWN0aW9uID0gJ25leHQnO1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gdGhpcy5jYWxlbmRhck1vZGVsLnRpbWVkZWx0YSh0aGlzLnZpZXdEYXRlLCAneWVhcicsIDEpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0RGF0ZSh0aGlzLnZpZXdEYXRlKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbi5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZXh0WWVhcktCKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09IEtFWVMuU1BBQ0UgfHwgZXZlbnQua2V5ID09PSBLRVlTLlNQQUNFX0lFIHx8IGV2ZW50LmtleSA9PT0gS0VZUy5FTlRFUikge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgICB0aGlzLm5leHRZZWFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHByZXZpb3VzWWVhcigpIHtcbiAgICAgICAgdGhpcy55ZWFyQWN0aW9uID0gJ3ByZXYnO1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gdGhpcy5jYWxlbmRhck1vZGVsLnRpbWVkZWx0YSh0aGlzLnZpZXdEYXRlLCAneWVhcicsIC0xKTtcblxuICAgICAgICB0aGlzLnNlbGVjdERhdGUodGhpcy52aWV3RGF0ZSk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb24uZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgcHJldmlvdXNZZWFyS0IoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gS0VZUy5TUEFDRSB8fCBldmVudC5rZXkgPT09IEtFWVMuU1BBQ0VfSUUgfHwgZXZlbnQua2V5ID09PSBLRVlTLkVOVEVSKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNZZWFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdFllYXIoZXZlbnQ6IERhdGUpIHtcbiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IG5ldyBEYXRlKGV2ZW50LmdldEZ1bGxZZWFyKCksIGV2ZW50LmdldE1vbnRoKCksIGV2ZW50LmdldERhdGUoKSk7XG4gICAgICAgIHRoaXMuYWN0aXZlVmlldyA9IENhbGVuZGFyVmlldy5ERUZBVUxUO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0RGF0ZShldmVudCk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb24uZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZXMpO1xuXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy55ZWFyc0J0bikgeyB0aGlzLnllYXJzQnRuLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTsgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdE1vbnRoKGV2ZW50OiBEYXRlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0RGF0ZShldmVudCk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb24uZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdHMgYSBkYXRlLlxuICAgICAqYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMubW9uUGlja2VyLnNlbGVjdERhdGUobmV3IERhdGUoYDIwMTgtMDYtMTJgKSk7XG4gICAgICpgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0RGF0ZSh2YWx1ZTogRGF0ZSkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPIERPOiB0byBiZSByZWZhY3RvcmVkIGFmdGVyIGRpc2N1c3Npb24gb24gdGhlIGRlc2lyZWQgYmVoYXZpb3JcbiAgICAgICAgc3VwZXIuc2VsZWN0RGF0ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IERhdGUpIHtcblxuICAgICAgICAvLyBUTyBETzogdG8gYmUgcmVmYWN0b3JlZCBhZnRlciBkaXNjdXNzaW9uIG9uIHRoZSBkZXNpcmVkIGJlaGF2aW9yXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IHRoaXMuc2VsZWN0ZWREYXRlcyA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24ucGFnZXVwJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duUGFnZVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMueWVhckFjdGlvbiA9ICdwcmV2JztcbiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IHRoaXMuY2FsZW5kYXJNb2RlbC50aW1lZGVsdGEodGhpcy52aWV3RGF0ZSwgJ3llYXInLCAtMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24ucGFnZWRvd24nLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbktleWRvd25QYWdlRG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnllYXJBY3Rpb24gPSAnbmV4dCc7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSB0aGlzLmNhbGVuZGFyTW9kZWwudGltZWRlbHRhKHRoaXMudmlld0RhdGUsICd5ZWFyJywgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uaG9tZScsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5ZG93bkhvbWUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMubW9udGhzVmlldykge1xuICAgICAgICAgICAgdGhpcy5tb250aHNWaWV3LmVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMubW9udGhzVmlldy5vbktleWRvd25Ib21lKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVuZCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5ZG93bkVuZChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5tb250aHNWaWV3KSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoc1ZpZXcuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5tb250aHNWaWV3Lm9uS2V5ZG93bkVuZChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=