UNPKG

@catull/igniteui-angular

Version:

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

353 lines 29.3 kB
import { __decorate, __extends, __metadata, __values } 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'; var NEXT_ID = 0; var CalendarHammerConfig = /** @class */ (function (_super) { __extends(CalendarHammerConfig, _super); function CalendarHammerConfig() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.overrides = { pan: { direction: Hammer.DIRECTION_VERTICAL, threshold: 1 } }; return _this; } CalendarHammerConfig = __decorate([ Injectable() ], CalendarHammerConfig); return CalendarHammerConfig; }(HammerGestureConfig)); export { CalendarHammerConfig }; var IgxYearsViewComponent = /** @class */ (function () { function IgxYearsViewComponent(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 = function () { }; /** *@hidden */ this._onChangeCallback = function () { }; this.initYearFormatter(); this._calendarModel = new Calendar(); } IgxYearsViewComponent_1 = IgxYearsViewComponent; Object.defineProperty(IgxYearsViewComponent.prototype, "yearFormat", { /** * Gets the year format option of the years view. * ```typescript * let yearFormat = this.yearsView.yearFormat. * ``` */ get: function () { return this._yearFormat; }, /** * Sets the year format option of the years view. * ```html * <igx-years-view [yearFormat]="numeric"></igx-years-view> * ``` * @memberof IgxYearsViewComponent */ set: function (value) { this._yearFormat = value; this.initYearFormatter(); }, enumerable: true, configurable: true }); Object.defineProperty(IgxYearsViewComponent.prototype, "locale", { /** * Gets the `locale` of the years view. * Default value is `"en"`. * ```typescript * let locale = this.yearsView.locale; * ``` * @memberof IgxYearsViewComponent */ get: function () { 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: function (value) { this._locale = value; this.initYearFormatter(); }, enumerable: true, configurable: true }); Object.defineProperty(IgxYearsViewComponent.prototype, "decade", { /** * Returns an array of date objects which are then used to properly * render the years. * * Used in the template of the component. * * @hidden */ get: function () { var e_1, _a; var result = []; var start = this.date.getFullYear() - 3; var end = this.date.getFullYear() + 4; try { for (var _b = __values(range(start, end)), _c = _b.next(); !_c.done; _c = _b.next()) { var year = _c.value; result.push(new Date(year, this.date.getMonth(), this.date.getDate())); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_1) throw e_1.error; } } return result; }, enumerable: true, configurable: true }); /** * Returns the locale representation of the year in the years view. * * @hidden */ IgxYearsViewComponent.prototype.formattedYear = function (value) { if (this.formatView) { return this._formatterYear.format(value); } return "" + value.getFullYear(); }; /** *@hidden */ IgxYearsViewComponent.prototype.selectYear = function (event) { this.date = event; this.onSelection.emit(this.date); this._onChangeCallback(this.date); }; /** *@hidden */ IgxYearsViewComponent.prototype.scroll = function (event) { event.preventDefault(); event.stopPropagation(); var delta = event.deltaY < 0 ? -1 : 1; this.generateYearRange(delta); }; /** *@hidden */ IgxYearsViewComponent.prototype.pan = function (event) { var delta = event.deltaY < 0 ? 1 : -1; this.generateYearRange(delta); }; /** * @hidden */ IgxYearsViewComponent.prototype.registerOnChange = function (fn) { this._onChangeCallback = fn; }; /** * @hidden */ IgxYearsViewComponent.prototype.registerOnTouched = function (fn) { this._onTouchedCallback = fn; }; /** * @hidden */ IgxYearsViewComponent.prototype.yearTracker = function (index, item) { return item.getFullYear() + "}"; }; /** * @hidden */ IgxYearsViewComponent.prototype.writeValue = function (value) { if (value) { this.date = value; } }; /** * @hidden */ IgxYearsViewComponent.prototype.onKeydownArrowDown = function (event) { event.preventDefault(); event.stopPropagation(); this.generateYearRange(1); }; /** * @hidden */ IgxYearsViewComponent.prototype.onKeydownArrowUp = function (event) { event.preventDefault(); event.stopPropagation(); this.generateYearRange(-1); }; /** * @hidden */ IgxYearsViewComponent.prototype.onKeydownEnter = function () { this.onSelection.emit(this.date); this._onChangeCallback(this.date); }; /** *@hidden */ IgxYearsViewComponent.prototype.initYearFormatter = function () { this._formatterYear = new Intl.DateTimeFormat(this._locale, { year: this.yearFormat }); }; /** *@hidden */ IgxYearsViewComponent.prototype.generateYearRange = function (delta) { var 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); }; var IgxYearsViewComponent_1; IgxYearsViewComponent.ctorParameters = function () { return [ { 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); return IgxYearsViewComponent; }()); export { IgxYearsViewComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWVhcnMtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2NhbGVuZGFyL3llYXJzLXZpZXcveWVhcnMtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pILE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV2RixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFHaEI7SUFBMEMsd0NBQW1CO0lBQTdEO1FBQUEscUVBSUM7UUFIVSxlQUFTLEdBQUc7WUFDZixHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUU7U0FDOUQsQ0FBQzs7SUFDTixDQUFDO0lBSlksb0JBQW9CO1FBRGhDLFVBQVUsRUFBRTtPQUNBLG9CQUFvQixDQUloQztJQUFELDJCQUFDO0NBQUEsQUFKRCxDQUEwQyxtQkFBbUIsR0FJNUQ7U0FKWSxvQkFBb0I7QUFxQmpDO0lBb0tJLCtCQUFtQixFQUFjO1FBQWQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQWxLakM7Ozs7Ozs7Ozs7V0FVRztRQUdJLE9BQUUsR0FBRyxvQkFBa0IsT0FBTyxFQUFJLENBQUM7UUFFMUM7Ozs7Ozs7Ozs7V0FVRztRQUVJLFNBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBMkR6Qjs7Ozs7OztXQU9HO1FBRUksZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRTlDOzs7O1dBSUc7UUFFSSxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBRXpCOzs7O1dBSUc7UUFFSSxhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBMkJwQjs7V0FFRztRQUNLLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFFdkI7O1dBRUc7UUFDSyxnQkFBVyxHQUFHLFNBQVMsQ0FBQztRQU9oQzs7V0FFRztRQUNLLHVCQUFrQixHQUFlLGNBQVEsQ0FBQyxDQUFDO1FBQ25EOztXQUVHO1FBQ0ssc0JBQWlCLEdBQXNCLGNBQVEsQ0FBQyxDQUFDO1FBR3JELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztJQUN6QyxDQUFDOzhCQXZLUSxxQkFBcUI7SUFzQzlCLHNCQUFXLDZDQUFVO1FBUHJCOzs7OztXQUtHO2FBRUg7WUFDSSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDNUIsQ0FBQztRQUVEOzs7Ozs7V0FNRzthQUNILFVBQXNCLEtBQWE7WUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDN0IsQ0FBQzs7O09BWkE7SUF1QkQsc0JBQVcseUNBQU07UUFUakI7Ozs7Ozs7V0FPRzthQUVIO1lBQ0ksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3hCLENBQUM7UUFFRDs7Ozs7Ozs7V0FRRzthQUNILFVBQWtCLEtBQWE7WUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDN0IsQ0FBQzs7O09BZEE7SUEwREQsc0JBQUkseUNBQU07UUFSVjs7Ozs7OztXQU9HO2FBQ0g7O1lBQ0ksSUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLElBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLElBQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDOztnQkFFeEMsS0FBbUIsSUFBQSxLQUFBLFNBQUEsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQSxnQkFBQSw0QkFBRTtvQkFBakMsSUFBTSxJQUFJLFdBQUE7b0JBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDMUU7Ozs7Ozs7OztZQUVELE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUM7OztPQUFBO0lBb0NEOzs7O09BSUc7SUFDSSw2Q0FBYSxHQUFwQixVQUFxQixLQUFXO1FBQzVCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxLQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUksQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSwwQ0FBVSxHQUFqQixVQUFrQixLQUFLO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBRWxCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNJLHNDQUFNLEdBQWIsVUFBYyxLQUFLO1FBQ2YsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixJQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksbUNBQUcsR0FBVixVQUFXLEtBQUs7UUFDWixJQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZ0RBQWdCLEdBQXZCLFVBQXdCLEVBQXFCO1FBQ3pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksaURBQWlCLEdBQXhCLFVBQXlCLEVBQWM7UUFDbkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSwyQ0FBVyxHQUFsQixVQUFtQixLQUFLLEVBQUUsSUFBSTtRQUMxQixPQUFVLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBRyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7T0FFRztJQUNJLDBDQUFVLEdBQWpCLFVBQWtCLEtBQVc7UUFDekIsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUNyQjtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUVJLGtEQUFrQixHQUF6QixVQUEwQixLQUFvQjtRQUMxQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFFSSxnREFBZ0IsR0FBdkIsVUFBd0IsS0FBb0I7UUFDeEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFFSSw4Q0FBYyxHQUFyQjtRQUNJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNLLGlEQUFpQixHQUF6QjtRQUNJLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUVEOztPQUVHO0lBQ0ssaURBQWlCLEdBQXpCLFVBQTBCLEtBQWE7UUFDbkMsSUFBTSxXQUFXLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUU3QyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLFdBQVcsSUFBSSxFQUFFLENBQUM7WUFDMUQsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO1lBQzVELE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEUsQ0FBQzs7O2dCQTdIc0IsVUFBVTs7SUFySmpDO1FBRkMsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUN0QixLQUFLLEVBQUU7O3FEQUNrQztJQWMxQztRQURDLEtBQUssRUFBRTs7dURBQ2lCO0lBU3pCO1FBREMsS0FBSyxFQUFFOzs7MkRBR1A7SUF1QkQ7UUFEQyxLQUFLLEVBQUU7Ozt1REFHUDtJQXFCRDtRQURDLEtBQUssRUFBRTs7NkRBQ21CO0lBVzNCO1FBREMsTUFBTSxFQUFFOzs4REFDcUM7SUFROUM7UUFEQyxXQUFXLENBQUMsb0JBQW9CLENBQUM7OzZEQUNUO0lBUXpCO1FBREMsV0FBVyxDQUFDLGVBQWUsQ0FBQzs7MkRBQ1Q7SUFtSXBCO1FBREMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7O3lDQUNiLGFBQWE7O21FQUs3QztJQU1EO1FBREMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7O3lDQUNiLGFBQWE7O2lFQUszQztJQU1EO1FBREMsWUFBWSxDQUFDLGVBQWUsQ0FBQzs7OzsrREFJN0I7SUE3UVEscUJBQXFCO1FBZmpDLFNBQVMsQ0FBQztZQUNQLFNBQVMsRUFBRTtnQkFDUDtvQkFDSSxPQUFPLEVBQUUsaUJBQWlCO29CQUMxQixXQUFXLEVBQUUsdUJBQXFCO29CQUNsQyxLQUFLLEVBQUUsSUFBSTtpQkFDZDtnQkFDRDtvQkFDSSxPQUFPLEVBQUUscUJBQXFCO29CQUM5QixRQUFRLEVBQUUsb0JBQW9CO2lCQUNqQzthQUNKO1lBQ0QsUUFBUSxFQUFFLGdCQUFnQjtZQUMxQixvWEFBd0M7U0FDM0MsQ0FBQzt5Q0FxS3lCLFVBQVU7T0FwS3hCLHFCQUFxQixDQWtTakM7SUFBRCw0QkFBQztDQUFBLEFBbFNELElBa1NDO1NBbFNZLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIElucHV0LCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBFbGVtZW50UmVmLCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHJhbmdlLCBDYWxlbmRhciB9IGZyb20gJy4uL2NhbGVuZGFyJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEhhbW1lckdlc3R1cmVDb25maWcsIEhBTU1FUl9HRVNUVVJFX0NPTkZJRyB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckhhbW1lckNvbmZpZyBleHRlbmRzIEhhbW1lckdlc3R1cmVDb25maWcge1xuICAgIHB1YmxpYyBvdmVycmlkZXMgPSB7XG4gICAgICAgIHBhbjogeyBkaXJlY3Rpb246IEhhbW1lci5ESVJFQ1RJT05fVkVSVElDQUwsIHRocmVzaG9sZDogMSB9XG4gICAgfTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IElneFllYXJzVmlld0NvbXBvbmVudCxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEhBTU1FUl9HRVNUVVJFX0NPTkZJRyxcbiAgICAgICAgICAgIHVzZUNsYXNzOiBDYWxlbmRhckhhbW1lckNvbmZpZ1xuICAgICAgICB9XG4gICAgXSxcbiAgICBzZWxlY3RvcjogJ2lneC15ZWFycy12aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJ3llYXJzLXZpZXcuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIElneFllYXJzVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgYGlkYCBvZiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBJZiBub3Qgc2V0LCB0aGUgYGlkYCB3aWxsIGhhdmUgdmFsdWUgYFwiaWd4LXllYXJzLXZpZXctMFwiYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC15ZWFycy12aWV3IGlkID0gXCJteS15ZWFycy12aWV3XCI+PC9pZ3gteWVhcnMtdmlldz5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHllYXJzVmlld0lkID0gIHRoaXMueWVhcnNWaWV3LmlkO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQgPSBgaWd4LXllYXJzLXZpZXctJHtORVhUX0lEKyt9YDtcblxuICAgIC8qKlxuICAgICAqIEdldHMvc2V0cyB0aGUgc2VsZWN0ZWQgZGF0ZSBvZiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBCeSBkZWZhdWx0IGl0IGlzIHRoZSBjdXJyZW50IGRhdGUuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gteWVhcnMtdmlldyBbZGF0ZV09XCJteURhdGVcIj48L2lneC15ZWFycy12aWV3PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgZGF0ZSA9ICB0aGlzLnllYXJzVmlldy5kYXRlO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hZZWFyc1ZpZXdDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkYXRlID0gbmV3IERhdGUoKTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHllYXIgZm9ybWF0IG9wdGlvbiBvZiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHllYXJGb3JtYXQgPSB0aGlzLnllYXJzVmlldy55ZWFyRm9ybWF0LlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB5ZWFyRm9ybWF0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl95ZWFyRm9ybWF0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHllYXIgZm9ybWF0IG9wdGlvbiBvZiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC15ZWFycy12aWV3IFt5ZWFyRm9ybWF0XT1cIm51bWVyaWNcIj48L2lneC15ZWFycy12aWV3PlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hZZWFyc1ZpZXdDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHllYXJGb3JtYXQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl95ZWFyRm9ybWF0ID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaW5pdFllYXJGb3JtYXR0ZXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBgbG9jYWxlYCBvZiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBcImVuXCJgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgbG9jYWxlID0gIHRoaXMueWVhcnNWaWV3LmxvY2FsZTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4WWVhcnNWaWV3Q29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGxvY2FsZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGBsb2NhbGVgIG9mIHRoZSB5ZWFycyB2aWV3LlxuICAgICAqIEV4cGVjdHMgYSB2YWxpZCBCQ1AgNDcgbGFuZ3VhZ2UgdGFnLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYFwiZW5cImAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gteWVhcnMtdmlldyBbbG9jYWxlXT1cImRlXCI+PC9pZ3gteWVhcnMtdmlldz5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4WWVhcnNWaWV3Q29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHNldCBsb2NhbGUodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9sb2NhbGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pbml0WWVhckZvcm1hdHRlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMvc2V0cyB3aGV0aGVyIHRoZSB2aWV3IHNob3VsZCBiZSByZW5kZXJlZFxuICAgICAqIGFjY29yZGluZyB0byB0aGUgbG9jYWxlIGFuZCB5ZWFyRm9ybWF0LCBpZiBhbnkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZm9ybWF0VmlldzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gYSBzZWxlY3Rpb24gaXMgbWFkZSBpbiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2UgdGhlIGBkYXRlYCBwcm9wZXJ0eSBpbiB0aGUgYElneFllYXJzVmlld0NvbXBvbmVudGAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gteWVhcnMtdmlldyAob25TZWxlY3Rpb24pPVwib25TZWxlY3Rpb24oJGV2ZW50KVwiPjwvaWd4LXllYXJzLXZpZXc+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFllYXJzVmlld0NvbXBvbmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvblNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IGNzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2FsZW5kYXInKVxuICAgIHB1YmxpYyBzdHlsZUNsYXNzID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IGB0YWJpbmRleGAgYXR0cmlidXRlIGZvciB0aGUgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXG4gICAgcHVibGljIHRhYmluZGV4ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZGF0ZSBvYmplY3RzIHdoaWNoIGFyZSB0aGVuIHVzZWQgdG8gcHJvcGVybHlcbiAgICAgKiByZW5kZXIgdGhlIHllYXJzLlxuICAgICAqXG4gICAgICogVXNlZCBpbiB0aGUgdGVtcGxhdGUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgZGVjYWRlKCk6IG51bWJlcltdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkgLSAzO1xuICAgICAgICBjb25zdCBlbmQgPSB0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSArIDQ7XG5cbiAgICAgICAgZm9yIChjb25zdCB5ZWFyIG9mIHJhbmdlKHN0YXJ0LCBlbmQpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuZXcgRGF0ZSh5ZWFyLCB0aGlzLmRhdGUuZ2V0TW9udGgoKSwgdGhpcy5kYXRlLmdldERhdGUoKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9mb3JtYXR0ZXJZZWFyOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9sb2NhbGUgPSAnZW4nO1xuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfeWVhckZvcm1hdCA9ICdudW1lcmljJztcblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2NhbGVuZGFyTW9kZWw6IENhbGVuZGFyO1xuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSAoKSA9PiB7IH07XG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IERhdGUpID0+IHZvaWQgPSAoKSA9PiB7IH07XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZWw6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5pbml0WWVhckZvcm1hdHRlcigpO1xuICAgICAgICB0aGlzLl9jYWxlbmRhck1vZGVsID0gbmV3IENhbGVuZGFyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbG9jYWxlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGluIHRoZSB5ZWFycyB2aWV3LlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBmb3JtYXR0ZWRZZWFyKHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0Vmlldykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdHRlclllYXIuZm9ybWF0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7dmFsdWUuZ2V0RnVsbFllYXIoKX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RZZWFyKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuZGF0ZSA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMub25TZWxlY3Rpb24uZW1pdCh0aGlzLmRhdGUpO1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHRoaXMuZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNjcm9sbChldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBkZWx0YSA9IGV2ZW50LmRlbHRhWSA8IDAgPyAtMSA6IDE7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVZZWFyUmFuZ2UoZGVsdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBwYW4oZXZlbnQpIHtcbiAgICAgICAgY29uc3QgZGVsdGEgPSBldmVudC5kZWx0YVkgPCAwID8gMSA6IC0xO1xuICAgICAgICB0aGlzLmdlbmVyYXRlWWVhclJhbmdlKGRlbHRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2OiBEYXRlKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB5ZWFyVHJhY2tlcihpbmRleCwgaXRlbSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtpdGVtLmdldEZ1bGxZZWFyKCl9fWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBEYXRlKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2Rvd24nLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbktleWRvd25BcnJvd0Rvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5nZW5lcmF0ZVllYXJSYW5nZSgxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd3VwJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duQXJyb3dVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB0aGlzLmdlbmVyYXRlWWVhclJhbmdlKC0xKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbnRlcicpXG4gICAgcHVibGljIG9uS2V5ZG93bkVudGVyKCkge1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uLmVtaXQodGhpcy5kYXRlKTtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLmRhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgaW5pdFllYXJGb3JtYXR0ZXIoKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1hdHRlclllYXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLl9sb2NhbGUsIHsgeWVhcjogdGhpcy55ZWFyRm9ybWF0IH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgZ2VuZXJhdGVZZWFyUmFuZ2UoZGVsdGE6IG51bWJlcikge1xuICAgICAgICBjb25zdCBjdXJyZW50WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcblxuICAgICAgICBpZiAoKGRlbHRhID4gMCAmJiB0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSAtIGN1cnJlbnRZZWFyID49IDk1KSB8fFxuICAgICAgICAgICAgKGRlbHRhIDwgMCAmJiBjdXJyZW50WWVhciAtIHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpID49IDk1KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuX2NhbGVuZGFyTW9kZWwudGltZWRlbHRhKHRoaXMuZGF0ZSwgJ3llYXInLCBkZWx0YSk7XG4gICAgfVxufVxuIl19