@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
353 lines • 29.3 kB
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWVhcnMtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2NhbGVuZGFyL3llYXJzLXZpZXcveWVhcnMtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pILE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV2RixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFHaEI7SUFBMEMsd0NBQW1CO0lBQTdEO1FBQUEscUVBSUM7UUFIVSxlQUFTLEdBQUc7WUFDZixHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUU7U0FDOUQsQ0FBQzs7SUFDTixDQUFDO0lBSlksb0JBQW9CO1FBRGhDLFVBQVUsRUFBRTtPQUNBLG9CQUFvQixDQUloQztJQUFELDJCQUFDO0NBQUEsQUFKRCxDQUEwQyxtQkFBbUIsR0FJNUQ7U0FKWSxvQkFBb0I7QUFxQmpDO0lBb0tJLCtCQUFtQixFQUFjO1FBQWQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQWxLakM7Ozs7Ozs7Ozs7V0FVRztRQUdJLE9BQUUsR0FBRyxvQkFBa0IsT0FBTyxFQUFJLENBQUM7UUFFMUM7Ozs7Ozs7Ozs7V0FVRztRQUVJLFNBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBMkR6Qjs7Ozs7OztXQU9HO1FBRUksZ0JBQVcs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U3pCO1FBREMsS0FBSyxFQUFFOzs7MkRBR1A7SUF1QkQ7UUFEQyxLQUFLLEVBQUU7Ozt1REFHUDtJQXFCRDtRQURDLEtBQUssRUFBRTs7NkRBQ21CO0lBVzNCO1FBREMsTUFBTSxFQUFFOzs4REFDcUM7SUFROUM7UUFEQyxXQUFXLENBQUMsb0JBQW9CLENBQUM7OzZEQUNUO0lBUXpCO1FBREMsV0FBVyxDQUFDLGVBQWUsQ0FBQzs7MkRBQ1Q7SUFtSXBCO1FBREMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7O3lDQUNiLGFBQWE7O21FQUs3QztJQU1EO1FBREMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7O3lDQUNiLGFBQWE7O2lFQUszQztJQU1EO1FBREMsWUFBWSxDQUFDLGVBQWUsQ0FBQzs7OzsrREFJN0I7SUE3UVEscUJBQXFCO1FBZmpDLFNBQVMsQ0FBQztZQUNQLFNBQVMsRUFBRTtnQkFDUDtvQkFDSSxPQUFPLEVBQUUsaUJBQWlCO29CQUMxQixXQUFXLEVBQUUsdUJBQXFCO29CQUNsQyxLQUFLLEVBQUUsSUFBSTtpQkFDZDtnQkFDRDtvQkFDSSxPQUFPLEVBQUUscUJBQXFCO29CQUM5QixRQUFRLEVBQUUsb0JBQW9CO2lCQUNqQzthQUNKO1lBQ0QsUUFBUSxFQUFFLGdCQUFnQjtZQUMxQixvWEFBd0M7U0FDM0MsQ0FBQzt5Q0FxS3lCLFVBQVU7T0FwS3hCLHFCQUFxQixDQWtTakM7SUFBRCw0QkFBQztDQUFBLEFBbFNELElBa1NDO1NBbFNZLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIElucHV0LCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBFbGVtZW50UmVmLCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHJhbmdlLCBDYWxlbmRhciB9IGZyb20gJy4uL2NhbGVuZGFyJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEhhbW1lckdlc3R1cmVDb25maWcsIEhBTU1FUl9HRVNUVVJFX0NPTkZJRyB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckhhbW1lckNvbmZpZyBleHRlbmRzIEhhbW1lckdlc3R1cmVDb25maWcge1xuICAgIHB1YmxpYyBvdmVycmlkZXMgPSB7XG4gICAgICAgIHBhbjogeyBkaXJlY3Rpb246IEhhbW1lci5ESVJFQ1RJT05fVkVSVElDQUwsIHRocmVzaG9sZDogMSB9XG4gICAgfTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IElneFllYXJzVmlld0NvbXBvbmVudCxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEhBTU1FUl9HRVNUVVJFX0NPTkZJRyxcbiAgICAgICAgICAgIHVzZUNsYXNzOiBDYWxlbmRhckhhbW1lckNvbmZpZ1xuICAgICAgICB9XG4gICAgXSxcbiAgICBzZWxlY3RvcjogJ2lneC15ZWFycy12aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJ3llYXJzLXZpZXcuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIElneFllYXJzVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgYGlkYCBvZiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBJZiBub3Qgc2V0LCB0aGUgYGlkYCB3aWxsIGhhdmUgdmFsdWUgYFwiaWd4LXllYXJzLXZpZXctMFwiYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC15ZWFycy12aWV3IGlkID0gXCJteS15ZWFycy12aWV3XCI+PC9pZ3gteWVhcnMtdmlldz5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHllYXJzVmlld0lkID0gIHRoaXMueWVhcnNWaWV3LmlkO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQgPSBgaWd4LXllYXJzLXZpZXctJHtORVhUX0lEKyt9YDtcblxuICAgIC8qKlxuICAgICAqIEdldHMvc2V0cyB0aGUgc2VsZWN0ZWQgZGF0ZSBvZiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBCeSBkZWZhdWx0IGl0IGlzIHRoZSBjdXJyZW50IGRhdGUuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gteWVhcnMtdmlldyBbZGF0ZV09XCJteURhdGVcIj48L2lneC15ZWFycy12aWV3PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgZGF0ZSA9ICB0aGlzLnllYXJzVmlldy5kYXRlO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hZZWFyc1ZpZXdDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkYXRlID0gbmV3IERhdGUoKTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHllYXIgZm9ybWF0IG9wdGlvbiBvZiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHllYXJGb3JtYXQgPSB0aGlzLnllYXJzVmlldy55ZWFyRm9ybWF0LlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB5ZWFyRm9ybWF0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl95ZWFyRm9ybWF0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHllYXIgZm9ybWF0IG9wdGlvbiBvZiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC15ZWFycy12aWV3IFt5ZWFyRm9ybWF0XT1cIm51bWVyaWNcIj48L2lneC15ZWFycy12aWV3PlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hZZWFyc1ZpZXdDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHllYXJGb3JtYXQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl95ZWFyRm9ybWF0ID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaW5pdFllYXJGb3JtYXR0ZXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBgbG9jYWxlYCBvZiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBcImVuXCJgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgbG9jYWxlID0gIHRoaXMueWVhcnNWaWV3LmxvY2FsZTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4WWVhcnNWaWV3Q29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGxvY2FsZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGBsb2NhbGVgIG9mIHRoZSB5ZWFycyB2aWV3LlxuICAgICAqIEV4cGVjdHMgYSB2YWxpZCBCQ1AgNDcgbGFuZ3VhZ2UgdGFnLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYFwiZW5cImAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gteWVhcnMtdmlldyBbbG9jYWxlXT1cImRlXCI+PC9pZ3gteWVhcnMtdmlldz5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4WWVhcnNWaWV3Q29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHNldCBsb2NhbGUodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9sb2NhbGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pbml0WWVhckZvcm1hdHRlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMvc2V0cyB3aGV0aGVyIHRoZSB2aWV3IHNob3VsZCBiZSByZW5kZXJlZFxuICAgICAqIGFjY29yZGluZyB0byB0aGUgbG9jYWxlIGFuZCB5ZWFyRm9ybWF0LCBpZiBhbnkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZm9ybWF0VmlldzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gYSBzZWxlY3Rpb24gaXMgbWFkZSBpbiB0aGUgeWVhcnMgdmlldy5cbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2UgdGhlIGBkYXRlYCBwcm9wZXJ0eSBpbiB0aGUgYElneFllYXJzVmlld0NvbXBvbmVudGAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gteWVhcnMtdmlldyAob25TZWxlY3Rpb24pPVwib25TZWxlY3Rpb24oJGV2ZW50KVwiPjwvaWd4LXllYXJzLXZpZXc+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFllYXJzVmlld0NvbXBvbmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvblNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IGNzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2FsZW5kYXInKVxuICAgIHB1YmxpYyBzdHlsZUNsYXNzID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IGB0YWJpbmRleGAgYXR0cmlidXRlIGZvciB0aGUgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXG4gICAgcHVibGljIHRhYmluZGV4ID0gMDtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZGF0ZSBvYmplY3RzIHdoaWNoIGFyZSB0aGVuIHVzZWQgdG8gcHJvcGVybHlcbiAgICAgKiByZW5kZXIgdGhlIHllYXJzLlxuICAgICAqXG4gICAgICogVXNlZCBpbiB0aGUgdGVtcGxhdGUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgZGVjYWRlKCk6IG51bWJlcltdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkgLSAzO1xuICAgICAgICBjb25zdCBlbmQgPSB0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSArIDQ7XG5cbiAgICAgICAgZm9yIChjb25zdCB5ZWFyIG9mIHJhbmdlKHN0YXJ0LCBlbmQpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuZXcgRGF0ZSh5ZWFyLCB0aGlzLmRhdGUuZ2V0TW9udGgoKSwgdGhpcy5kYXRlLmdldERhdGUoKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9mb3JtYXR0ZXJZZWFyOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9sb2NhbGUgPSAnZW4nO1xuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfeWVhckZvcm1hdCA9ICdudW1lcmljJztcblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2NhbGVuZGFyTW9kZWw6IENhbGVuZGFyO1xuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSAoKSA9PiB7IH07XG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IERhdGUpID0+IHZvaWQgPSAoKSA9PiB7IH07XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZWw6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5pbml0WWVhckZvcm1hdHRlcigpO1xuICAgICAgICB0aGlzLl9jYWxlbmRhck1vZGVsID0gbmV3IENhbGVuZGFyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbG9jYWxlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB5ZWFyIGluIHRoZSB5ZWFycyB2aWV3LlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBmb3JtYXR0ZWRZZWFyKHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0Vmlldykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdHRlclllYXIuZm9ybWF0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7dmFsdWUuZ2V0RnVsbFllYXIoKX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RZZWFyKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuZGF0ZSA9IGV2ZW50O1xuXG4gICAgICAgIHRoaXMub25TZWxlY3Rpb24uZW1pdCh0aGlzLmRhdGUpO1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHRoaXMuZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNjcm9sbChldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBkZWx0YSA9IGV2ZW50LmRlbHRhWSA8IDAgPyAtMSA6IDE7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVZZWFyUmFuZ2UoZGVsdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBwYW4oZXZlbnQpIHtcbiAgICAgICAgY29uc3QgZGVsdGEgPSBldmVudC5kZWx0YVkgPCAwID8gMSA6IC0xO1xuICAgICAgICB0aGlzLmdlbmVyYXRlWWVhclJhbmdlKGRlbHRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2OiBEYXRlKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB5ZWFyVHJhY2tlcihpbmRleCwgaXRlbSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtpdGVtLmdldEZ1bGxZZWFyKCl9fWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBEYXRlKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2Rvd24nLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbktleWRvd25BcnJvd0Rvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5nZW5lcmF0ZVllYXJSYW5nZSgxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd3VwJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duQXJyb3dVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB0aGlzLmdlbmVyYXRlWWVhclJhbmdlKC0xKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbnRlcicpXG4gICAgcHVibGljIG9uS2V5ZG93bkVudGVyKCkge1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uLmVtaXQodGhpcy5kYXRlKTtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLmRhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgaW5pdFllYXJGb3JtYXR0ZXIoKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1hdHRlclllYXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLl9sb2NhbGUsIHsgeWVhcjogdGhpcy55ZWFyRm9ybWF0IH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgZ2VuZXJhdGVZZWFyUmFuZ2UoZGVsdGE6IG51bWJlcikge1xuICAgICAgICBjb25zdCBjdXJyZW50WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcblxuICAgICAgICBpZiAoKGRlbHRhID4gMCAmJiB0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSAtIGN1cnJlbnRZZWFyID49IDk1KSB8fFxuICAgICAgICAgICAgKGRlbHRhIDwgMCAmJiBjdXJyZW50WWVhciAtIHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpID49IDk1KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuX2NhbGVuZGFyTW9kZWwudGltZWRlbHRhKHRoaXMuZGF0ZSwgJ3llYXInLCBkZWx0YSk7XG4gICAgfVxufVxuIl19