@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
325 lines • 26.8 kB
JavaScript
var IgxYearsViewComponent_1;
import { __decorate, __metadata } from "tslib";
import { Component, Output, EventEmitter, Input, HostBinding, HostListener, ElementRef, Injectable } from '@angular/core';
import { range, Calendar } from '../calendar';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { HammerGestureConfig, HAMMER_GESTURE_CONFIG } from '@angular/platform-browser';
let NEXT_ID = 0;
let CalendarHammerConfig = class CalendarHammerConfig extends HammerGestureConfig {
constructor() {
super(...arguments);
this.overrides = {
pan: { direction: Hammer.DIRECTION_VERTICAL, threshold: 1 }
};
}
};
CalendarHammerConfig = __decorate([
Injectable()
], CalendarHammerConfig);
export { CalendarHammerConfig };
let IgxYearsViewComponent = IgxYearsViewComponent_1 = class IgxYearsViewComponent {
constructor(el) {
this.el = el;
/**
* Sets/gets the `id` of the years view.
* If not set, the `id` will have value `"igx-years-view-0"`.
* ```html
* <igx-years-view id = "my-years-view"></igx-years-view>
* ```
* ```typescript
* let yearsViewId = this.yearsView.id;
* ```
* @memberof IgxCalendarComponent
*/
this.id = `igx-years-view-${NEXT_ID++}`;
/**
* Gets/sets the selected date of the years view.
* By default it is the current date.
* ```html
* <igx-years-view [date]="myDate"></igx-years-view>
* ```
* ```typescript
* let date = this.yearsView.date;
* ```
* @memberof IgxYearsViewComponent
*/
this.date = new Date();
/**
* Emits an event when a selection is made in the years view.
* Provides reference the `date` property in the `IgxYearsViewComponent`.
* ```html
* <igx-years-view (onSelection)="onSelection($event)"></igx-years-view>
* ```
* @memberof IgxYearsViewComponent
*/
this.onSelection = new EventEmitter();
/**
* The default css class applied to the component.
*
* @hidden
*/
this.styleClass = true;
/**
* The default `tabindex` attribute for the component.
*
* @hidden
*/
this.tabindex = 0;
/**
*@hidden
*/
this._locale = 'en';
/**
*@hidden
*/
this._yearFormat = 'numeric';
/**
*@hidden
*/
this._onTouchedCallback = () => { };
/**
*@hidden
*/
this._onChangeCallback = () => { };
this.initYearFormatter();
this._calendarModel = new Calendar();
}
/**
* Gets the year format option of the years view.
* ```typescript
* let yearFormat = this.yearsView.yearFormat.
* ```
*/
get yearFormat() {
return this._yearFormat;
}
/**
* Sets the year format option of the years view.
* ```html
* <igx-years-view [yearFormat]="numeric"></igx-years-view>
* ```
* @memberof IgxYearsViewComponent
*/
set yearFormat(value) {
this._yearFormat = value;
this.initYearFormatter();
}
/**
* Gets the `locale` of the years view.
* Default value is `"en"`.
* ```typescript
* let locale = this.yearsView.locale;
* ```
* @memberof IgxYearsViewComponent
*/
get locale() {
return this._locale;
}
/**
* Sets the `locale` of the years view.
* Expects a valid BCP 47 language tag.
* Default value is `"en"`.
* ```html
* <igx-years-view [locale]="de"></igx-years-view>
* ```
* @memberof IgxYearsViewComponent
*/
set locale(value) {
this._locale = value;
this.initYearFormatter();
}
/**
* Returns an array of date objects which are then used to properly
* render the years.
*
* Used in the template of the component.
*
* @hidden
*/
get decade() {
const result = [];
const start = this.date.getFullYear() - 3;
const end = this.date.getFullYear() + 4;
for (const year of range(start, end)) {
result.push(new Date(year, this.date.getMonth(), this.date.getDate()));
}
return result;
}
/**
* Returns the locale representation of the year in the years view.
*
* @hidden
*/
formattedYear(value) {
if (this.formatView) {
return this._formatterYear.format(value);
}
return `${value.getFullYear()}`;
}
/**
*@hidden
*/
selectYear(event) {
this.date = event;
this.onSelection.emit(this.date);
this._onChangeCallback(this.date);
}
/**
*@hidden
*/
scroll(event) {
event.preventDefault();
event.stopPropagation();
const delta = event.deltaY < 0 ? -1 : 1;
this.generateYearRange(delta);
}
/**
*@hidden
*/
pan(event) {
const delta = event.deltaY < 0 ? 1 : -1;
this.generateYearRange(delta);
}
/**
* @hidden
*/
registerOnChange(fn) {
this._onChangeCallback = fn;
}
/**
* @hidden
*/
registerOnTouched(fn) {
this._onTouchedCallback = fn;
}
/**
* @hidden
*/
yearTracker(index, item) {
return `${item.getFullYear()}}`;
}
/**
* @hidden
*/
writeValue(value) {
if (value) {
this.date = value;
}
}
/**
* @hidden
*/
onKeydownArrowDown(event) {
event.preventDefault();
event.stopPropagation();
this.generateYearRange(1);
}
/**
* @hidden
*/
onKeydownArrowUp(event) {
event.preventDefault();
event.stopPropagation();
this.generateYearRange(-1);
}
/**
* @hidden
*/
onKeydownEnter() {
this.onSelection.emit(this.date);
this._onChangeCallback(this.date);
}
/**
*@hidden
*/
initYearFormatter() {
this._formatterYear = new Intl.DateTimeFormat(this._locale, { year: this.yearFormat });
}
/**
*@hidden
*/
generateYearRange(delta) {
const currentYear = new Date().getFullYear();
if ((delta > 0 && this.date.getFullYear() - currentYear >= 95) ||
(delta < 0 && currentYear - this.date.getFullYear() >= 95)) {
return;
}
this.date = this._calendarModel.timedelta(this.date, 'year', delta);
}
};
IgxYearsViewComponent.ctorParameters = () => [
{ type: ElementRef }
];
__decorate([
HostBinding('attr.id'),
Input(),
__metadata("design:type", Object)
], IgxYearsViewComponent.prototype, "id", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxYearsViewComponent.prototype, "date", void 0);
__decorate([
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], IgxYearsViewComponent.prototype, "yearFormat", null);
__decorate([
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], IgxYearsViewComponent.prototype, "locale", null);
__decorate([
Input(),
__metadata("design:type", Boolean)
], IgxYearsViewComponent.prototype, "formatView", void 0);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxYearsViewComponent.prototype, "onSelection", void 0);
__decorate([
HostBinding('class.igx-calendar'),
__metadata("design:type", Object)
], IgxYearsViewComponent.prototype, "styleClass", void 0);
__decorate([
HostBinding('attr.tabindex'),
__metadata("design:type", Object)
], IgxYearsViewComponent.prototype, "tabindex", void 0);
__decorate([
HostListener('keydown.arrowdown', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], IgxYearsViewComponent.prototype, "onKeydownArrowDown", null);
__decorate([
HostListener('keydown.arrowup', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], IgxYearsViewComponent.prototype, "onKeydownArrowUp", null);
__decorate([
HostListener('keydown.enter'),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], IgxYearsViewComponent.prototype, "onKeydownEnter", null);
IgxYearsViewComponent = IgxYearsViewComponent_1 = __decorate([
Component({
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: IgxYearsViewComponent_1,
multi: true
},
{
provide: HAMMER_GESTURE_CONFIG,
useClass: CalendarHammerConfig
}
],
selector: 'igx-years-view',
template: "<div class=\"igx-calendar__body\">\n <div class=\"igx-calendar__body-column\" (wheel)=\"scroll($event)\" (pan)=\"pan($event)\">\n <span [igxCalendarYear]=\"year\" [date]=\"date\" (onYearSelection)=\"selectYear($event)\" *ngFor=\"let year of decade; trackBy: yearTracker\">\n {{ formattedYear(year) }}\n </span>\n </div>\n</div>\n"
}),
__metadata("design:paramtypes", [ElementRef])
], IgxYearsViewComponent);
export { IgxYearsViewComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWVhcnMtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2NhbGVuZGFyL3llYXJzLXZpZXcveWVhcnMtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6SCxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQXdCLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkYsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBR2hCLElBQWEsb0JBQW9CLEdBQWpDLE1BQWEsb0JBQXFCLFNBQVEsbUJBQW1CO0lBQTdEOztRQUNXLGNBQVMsR0FBRztZQUNmLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRTtTQUM5RCxDQUFDO0lBQ04sQ0FBQztDQUFBLENBQUE7QUFKWSxvQkFBb0I7SUFEaEMsVUFBVSxFQUFFO0dBQ0Esb0JBQW9CLENBSWhDO1NBSlksb0JBQW9CO0FBcUJqQyxJQUFhLHFCQUFxQiw2QkFBbEMsTUFBYSxxQkFBcUI7SUFvSzlCLFlBQW1CLEVBQWM7UUFBZCxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBbEtqQzs7Ozs7Ozs7OztXQVVHO1FBR0ksT0FBRSxHQUFHLGtCQUFrQixPQUFPLEVBQUUsRUFBRSxDQUFDO1FBRTFDOzs7Ozs7Ozs7O1dBVUc7UUFFSSxTQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQTJE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QVE5QztJQURDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQzs7eURBQ1Q7QUFRekI7SUFEQyxXQUFXLENBQUMsZUFBZSxDQUFDOzt1REFDVDtBQW1JcEI7SUFEQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7cUNBQ2IsYUFBYTs7K0RBSzdDO0FBTUQ7SUFEQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7cUNBQ2IsYUFBYTs7NkRBSzNDO0FBTUQ7SUFEQyxZQUFZLENBQUMsZUFBZSxDQUFDOzs7OzJEQUk3QjtBQTdRUSxxQkFBcUI7SUFmakMsU0FBUyxDQUFDO1FBQ1AsU0FBUyxFQUFFO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLHVCQUFxQjtnQkFDbEMsS0FBSyxFQUFFLElBQUk7YUFDZDtZQUNEO2dCQUNJLE9BQU8sRUFBRSxxQkFBcUI7Z0JBQzlCLFFBQVEsRUFBRSxvQkFBb0I7YUFDakM7U0FDSjtRQUNELFFBQVEsRUFBRSxnQkFBZ0I7UUFDMUIsb1hBQXdDO0tBQzNDLENBQUM7cUNBcUt5QixVQUFVO0dBcEt4QixxQkFBcUIsQ0FrU2pDO1NBbFNZLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIElucHV0LCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBFbGVtZW50UmVmLCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHJhbmdlLCBDYWxlbmRhciB9IGZyb20gJy4uL2NhbGVuZGFyJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEhhbW1lckdlc3R1cmVDb25maWcsIEhBTU1FUl9HRVNUVVJFX0NPTkZJRyB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckhhbW1lckNvbmZpZyBleHRlbmRzIEhhbW1lckdlc3R1cmVDb25maWcge1xuICAgIHB1YmxpYyBvdmVycmlkZXMgPSB7XG4gICAgICAgIHBhbjogeyBkaXJlY3Rpb246IEhhbW1lci5ESVJFQ1RJT05fVkVSVElDQUwsIHRocmVzaG9sZDogMSB9XG4gICAgfTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IElneFllYXJzVmlld0NvbXBvbmVudCxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEhBTU1FUl9HRVNUVVJFX0NPTkZJRyxcbiAgICAgICAgICAgIHVzZUNsYXNzOiBDYWxlbmRhckhhbW1lckNvbmZpZ1xuICAgICAgICB9XG4gICAgXSxcbiAgICBzZWxlY3RvcjogJ2lneC15ZWFycy12aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJ3llYXJzLXZpZXcuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIElneFllYXJzVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgYGlkYCBvZiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBJZiBub3Qgc2V0LCB0aGUgYGlkYCB3aWxsIGhhdmUgdmFsdWUgYFwiaWd4LXllYXJzLXZpZXctMFwiYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC15ZWFycy12aWV3IGlkID0gXCJteS15ZWFycy12aWV3XCI+PC9pZ3gteWVhcnMtdmlldz5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHllYXJzVmlld0lkID0gIHRoaXMueWVhcnNWaWV3LmlkO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQgPSBgaWd4LXllYXJzLXZpZXctJHtORVhUX0lEKyt9YDtcblxuICAgIC8qKlxuICAgICAqIEdldHMvc2V0cyB0aGUgc2VsZWN0ZWQgZGF0ZSBvZiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBCeSBkZWZhdWx0IGl0IGlzIHRoZSBjdXJyZW50IGRhdGUuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gteWVhcnMtdmlldyBbZGF0ZV09XCJteURhdGVcIj48L2lneC15ZWFycy12aWV3PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgZGF0ZSA9ICB0aGlzLnllYXJzVmlldy5kYXRlO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hZZWFyc1ZpZXdDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkYXRlID0gbmV3IERhdGUoKTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHllYXIgZm9ybWF0IG9wdGlvbiBvZiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHllYXJGb3JtYXQgPSB0aGlzLnllYXJzVmlldy55ZWFyRm9ybWF0LlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB5ZWFyRm9ybWF0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl95ZWFyRm9ybWF0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHllYXIgZm9ybWF0IG9wdGlvbiBvZiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC15ZWFycy12aWV3IFt5ZWFyRm9ybWF0XT1cIm51bWVyaWNcIj48L2lneC15ZWFycy12aWV3PlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hZZWFyc1ZpZXdDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHllYXJGb3JtYXQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl95ZWFyRm9ybWF0ID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaW5pdFllYXJGb3JtYXR0ZXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBgbG9jYWxlYCBvZiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBcImVuXCJgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgbG9jYWxlID0gIHRoaXMueWVhcnNWaWV3LmxvY2FsZTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4WWVhcnNWaWV3Q29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGxvY2FsZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGBsb2NhbGVgIG9mIHRoZSB5ZWFycyB2aWV3LlxuICAgICAqIEV4cGVjdHMgYSB2YWxpZCBCQ1AgNDcgbGFuZ3VhZ2UgdGFnLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYFwiZW5cImAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gteWVhcnMtdmlldyBbbG9jYWxlXT1cImRlXCI+PC9pZ3gteWVhcnMtdmlldz5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4WWVhcnNWaWV3Q29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHNldCBsb2NhbGUodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9sb2NhbGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pbml0WWVhckZvcm1hdHRlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMvc2V0cyB3aGV0aGVyIHRoZSB2aWV3IHNob3VsZCBiZSByZW5kZXJlZFxuICAgICAqIGFjY29yZGluZyB0byB0aGUgbG9jYWxlIGFuZCB5ZWFyRm9ybWF0LCBpZiBhbnkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZm9ybWF0VmlldzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gYSBzZWxlY3Rpb24gaXMgbWFkZSBpbiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2UgdGhlIGBkYXRlYCBwcm9wZXJ0eSBpbiB0aGUgYElneFllYXJzVmlld0NvbXBvbmVudGAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gteWVhcnMtdmlldyAob25TZWxlY3Rpb24pPVwib25TZWxlY3Rpb24oJGV2ZW50KVwiPjwvaWd4LXllYXJzLXZpZXc+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFllYXJzVmlld0NvbXBvbmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvblNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IGNzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2FsZW5kYXInKVxuICAgIHB1YmxpYyBzdHlsZUNsYXNzID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IGB0YWJpbmRleGAgYXR0cmlidXRlIGZvciB0aGUgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXG4gICAgcHVibGljIHRhYmluZGV4ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZGF0ZSBvYmplY3RzIHdoaWNoIGFyZSB0aGVuIHVzZWQgdG8gcHJvcGVybHlcbiAgICAgKiByZW5kZXIgdGhlIHllYXJzLlxuICAgICAqXG4gICAgICogVXNlZCBpbiB0aGUgdGVtcGxhdGUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgZGVjYWRlKCk6IG51bWJlcltdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkgLSAzO1xuICAgICAgICBjb25zdCBlbmQgPSB0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSArIDQ7XG5cbiAgICAgICAgZm9yIChjb25zdCB5ZWFyIG9mIHJhbmdlKHN0YXJ0LCBlbmQpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuZXcgRGF0ZSh5ZWFyLCB0aGlzLmRhdGUuZ2V0TW9udGgoKSwgdGhpcy5kYXRlLmdldERhdGUoKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9mb3JtYXR0ZXJZZWFyOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9sb2NhbGUgPSAnZW4nO1xuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfeWVhckZvcm1hdCA9ICdudW1lcmljJztcblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2NhbGVuZGFyTW9kZWw6IENhbGVuZGFyO1xuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSAoKSA9PiB7IH07XG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IERhdGUpID0+IHZvaWQgPSAoKSA9PiB7IH07XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZWw6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5pbml0WWVhckZvcm1hdHRlcigpO1xuICAgICAgICB0aGlzLl9jYWxlbmRhck1vZGVsID0gbmV3IENhbGVuZGFyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbG9jYWxlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGluIHRoZSB5ZWFycyB2aWV3LlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBmb3JtYXR0ZWRZZWFyKHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0Vmlldykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdHRlclllYXIuZm9ybWF0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7dmFsdWUuZ2V0RnVsbFllYXIoKX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RZZWFyKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuZGF0ZSA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMub25TZWxlY3Rpb24uZW1pdCh0aGlzLmRhdGUpO1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHRoaXMuZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNjcm9sbChldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBkZWx0YSA9IGV2ZW50LmRlbHRhWSA8IDAgPyAtMSA6IDE7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVZZWFyUmFuZ2UoZGVsdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBwYW4oZXZlbnQpIHtcbiAgICAgICAgY29uc3QgZGVsdGEgPSBldmVudC5kZWx0YVkgPCAwID8gMSA6IC0xO1xuICAgICAgICB0aGlzLmdlbmVyYXRlWWVhclJhbmdlKGRlbHRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2OiBEYXRlKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB5ZWFyVHJhY2tlcihpbmRleCwgaXRlbSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtpdGVtLmdldEZ1bGxZZWFyKCl9fWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBEYXRlKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2Rvd24nLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbktleWRvd25BcnJvd0Rvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5nZW5lcmF0ZVllYXJSYW5nZSgxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd3VwJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duQXJyb3dVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB0aGlzLmdlbmVyYXRlWWVhclJhbmdlKC0xKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbnRlcicpXG4gICAgcHVibGljIG9uS2V5ZG93bkVudGVyKCkge1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uLmVtaXQodGhpcy5kYXRlKTtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLmRhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgaW5pdFllYXJGb3JtYXR0ZXIoKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1hdHRlclllYXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLl9sb2NhbGUsIHsgeWVhcjogdGhpcy55ZWFyRm9ybWF0IH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgZ2VuZXJhdGVZZWFyUmFuZ2UoZGVsdGE6IG51bWJlcikge1xuICAgICAgICBjb25zdCBjdXJyZW50WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcblxuICAgICAgICBpZiAoKGRlbHRhID4gMCAmJiB0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSAtIGN1cnJlbnRZZWFyID49IDk1KSB8fFxuICAgICAgICAgICAgKGRlbHRhIDwgMCAmJiBjdXJyZW50WWVhciAtIHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpID49IDk1KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuX2NhbGVuZGFyTW9kZWwudGltZWRlbHRhKHRoaXMuZGF0ZSwgJ3llYXInLCBkZWx0YSk7XG4gICAgfVxufVxuIl19