@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
287 lines • 23.6 kB
JavaScript
import { __decorate, __metadata } from "tslib";
/**
* This file contains all the directives used by the @link IgxCalendarComponent.
* Except for the directives which are used for templating the calendar itself
* you should generally not use them directly.
* @preferred
*/
import { Directive, EventEmitter, HostBinding, HostListener, Input, Output, TemplateRef, ElementRef, AfterViewInit, OnDestroy, NgZone } from '@angular/core';
import { fromEvent, Subject, interval } from 'rxjs';
import { takeUntil, debounce, tap } from 'rxjs/operators';
/**
* @hidden
*/
var IgxCalendarYearDirective = /** @class */ (function () {
function IgxCalendarYearDirective() {
this.onYearSelection = new EventEmitter();
}
Object.defineProperty(IgxCalendarYearDirective.prototype, "defaultCSS", {
get: function () {
return !this.isCurrentYear;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxCalendarYearDirective.prototype, "currentCSS", {
get: function () {
return this.isCurrentYear;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxCalendarYearDirective.prototype, "isCurrentYear", {
get: function () {
return this.date.getFullYear() === this.value.getFullYear();
},
enumerable: true,
configurable: true
});
IgxCalendarYearDirective.prototype.onClick = function () {
this.onYearSelection.emit(this.value);
};
__decorate([
Input('igxCalendarYear'),
__metadata("design:type", Date)
], IgxCalendarYearDirective.prototype, "value", void 0);
__decorate([
Input(),
__metadata("design:type", Date)
], IgxCalendarYearDirective.prototype, "date", void 0);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxCalendarYearDirective.prototype, "onYearSelection", void 0);
__decorate([
HostBinding('class.igx-calendar__year'),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [])
], IgxCalendarYearDirective.prototype, "defaultCSS", null);
__decorate([
HostBinding('class.igx-calendar__year--current'),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [])
], IgxCalendarYearDirective.prototype, "currentCSS", null);
__decorate([
HostListener('click'),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], IgxCalendarYearDirective.prototype, "onClick", null);
IgxCalendarYearDirective = __decorate([
Directive({
selector: '[igxCalendarYear]'
})
], IgxCalendarYearDirective);
return IgxCalendarYearDirective;
}());
export { IgxCalendarYearDirective };
var IgxCalendarMonthDirective = /** @class */ (function () {
function IgxCalendarMonthDirective(elementRef) {
this.elementRef = elementRef;
this.onMonthSelection = new EventEmitter();
this.tabindex = 0;
}
Object.defineProperty(IgxCalendarMonthDirective.prototype, "defaultCSS", {
get: function () {
return !this.isCurrentMonth;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxCalendarMonthDirective.prototype, "currentCSS", {
get: function () {
return this.isCurrentMonth;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxCalendarMonthDirective.prototype, "isCurrentMonth", {
get: function () {
return this.date.getMonth() === this.value.getMonth();
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxCalendarMonthDirective.prototype, "nativeElement", {
get: function () {
return this.elementRef.nativeElement;
},
enumerable: true,
configurable: true
});
IgxCalendarMonthDirective.prototype.onClick = function () {
var date = new Date(this.value.getFullYear(), this.value.getMonth(), this.date.getDate());
this.onMonthSelection.emit(date);
};
IgxCalendarMonthDirective.ctorParameters = function () { return [
{ type: ElementRef }
]; };
__decorate([
Input('igxCalendarMonth'),
__metadata("design:type", Date)
], IgxCalendarMonthDirective.prototype, "value", void 0);
__decorate([
Input(),
__metadata("design:type", Date)
], IgxCalendarMonthDirective.prototype, "date", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxCalendarMonthDirective.prototype, "index", void 0);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxCalendarMonthDirective.prototype, "onMonthSelection", void 0);
__decorate([
HostBinding('attr.tabindex'),
__metadata("design:type", Object)
], IgxCalendarMonthDirective.prototype, "tabindex", void 0);
__decorate([
HostBinding('class.igx-calendar__month'),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [])
], IgxCalendarMonthDirective.prototype, "defaultCSS", null);
__decorate([
HostBinding('class.igx-calendar__month--current'),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [])
], IgxCalendarMonthDirective.prototype, "currentCSS", null);
__decorate([
HostListener('click'),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], IgxCalendarMonthDirective.prototype, "onClick", null);
IgxCalendarMonthDirective = __decorate([
Directive({
selector: '[igxCalendarMonth]'
}),
__metadata("design:paramtypes", [ElementRef])
], IgxCalendarMonthDirective);
return IgxCalendarMonthDirective;
}());
export { IgxCalendarMonthDirective };
/**
* @hidden
*/
var IgxCalendarHeaderTemplateDirective = /** @class */ (function () {
function IgxCalendarHeaderTemplateDirective(template) {
this.template = template;
}
IgxCalendarHeaderTemplateDirective.ctorParameters = function () { return [
{ type: TemplateRef }
]; };
IgxCalendarHeaderTemplateDirective = __decorate([
Directive({
selector: '[igxCalendarHeader]'
}),
__metadata("design:paramtypes", [TemplateRef])
], IgxCalendarHeaderTemplateDirective);
return IgxCalendarHeaderTemplateDirective;
}());
export { IgxCalendarHeaderTemplateDirective };
/**
* @hidden
*/
var IgxCalendarSubheaderTemplateDirective = /** @class */ (function () {
function IgxCalendarSubheaderTemplateDirective(template) {
this.template = template;
}
IgxCalendarSubheaderTemplateDirective.ctorParameters = function () { return [
{ type: TemplateRef }
]; };
IgxCalendarSubheaderTemplateDirective = __decorate([
Directive({
selector: '[igxCalendarSubheader]'
}),
__metadata("design:paramtypes", [TemplateRef])
], IgxCalendarSubheaderTemplateDirective);
return IgxCalendarSubheaderTemplateDirective;
}());
export { IgxCalendarSubheaderTemplateDirective };
/**
* @hidden
*/
var IgxCalendarScrollMonthDirective = /** @class */ (function () {
function IgxCalendarScrollMonthDirective(element, zone) {
this.element = element;
this.zone = zone;
/**
* @hidden
*/
this.destroy$ = new Subject();
}
/**
* @hidden
*/
IgxCalendarScrollMonthDirective.prototype.ngAfterViewInit = function () {
var _this = this;
fromEvent(this.element.nativeElement, 'keyup').pipe(debounce(function () { return interval(100); }), takeUntil(this.destroy$)).subscribe(function (event) {
_this.stopScroll(event);
});
this.zone.runOutsideAngular(function () {
fromEvent(_this.element.nativeElement, 'keydown').pipe(tap(function (event) {
if (event.key === " " /* SPACE */ || event.key === "Spacebar" /* SPACE_IE */ || event.key === "Enter" /* ENTER */) {
event.preventDefault();
event.stopPropagation();
}
}), debounce(function () { return interval(100); }), takeUntil(_this.destroy$)).subscribe(function (event) {
if (event.key === " " /* SPACE */ || event.key === "Spacebar" /* SPACE_IE */ || event.key === "Enter" /* ENTER */) {
_this.zone.run(function () { return _this.startScroll(true); });
}
});
});
};
/**
* @hidden
*/
IgxCalendarScrollMonthDirective.prototype.ngOnDestroy = function () {
this.destroy$.next(true);
this.destroy$.complete();
};
/**
* @hidden
*/
IgxCalendarScrollMonthDirective.prototype.onMouseDown = function () {
this.startScroll();
};
/**
* @hidden
*/
IgxCalendarScrollMonthDirective.prototype.onMouseUp = function (event) {
this.stopScroll(event);
};
IgxCalendarScrollMonthDirective.ctorParameters = function () { return [
{ type: ElementRef },
{ type: NgZone }
]; };
__decorate([
Input(),
__metadata("design:type", Function)
], IgxCalendarScrollMonthDirective.prototype, "startScroll", void 0);
__decorate([
Input(),
__metadata("design:type", Function)
], IgxCalendarScrollMonthDirective.prototype, "stopScroll", void 0);
__decorate([
HostListener('mousedown'),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], IgxCalendarScrollMonthDirective.prototype, "onMouseDown", null);
__decorate([
HostListener('mouseup', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [MouseEvent]),
__metadata("design:returntype", void 0)
], IgxCalendarScrollMonthDirective.prototype, "onMouseUp", null);
IgxCalendarScrollMonthDirective = __decorate([
Directive({
selector: '[igxCalendarScrollMonth]'
}),
__metadata("design:paramtypes", [ElementRef, NgZone])
], IgxCalendarScrollMonthDirective);
return IgxCalendarScrollMonthDirective;
}());
export { IgxCalendarScrollMonthDirective };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuZGlyZWN0aXZlcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvY2FsZW5kYXIvY2FsZW5kYXIuZGlyZWN0aXZlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0c7QUFDSCxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFVBQVUsRUFDVixhQUFhLEVBQ2IsU0FBUyxFQUNULE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHMUQ7O0dBRUc7QUFJSDtJQUFBO1FBU1csb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBb0J0RCxDQUFDO0lBakJHLHNCQUFXLGdEQUFVO2FBQXJCO1lBQ0ksT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDL0IsQ0FBQzs7O09BQUE7SUFHRCxzQkFBVyxnREFBVTthQUFyQjtZQUNJLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUM5QixDQUFDOzs7T0FBQTtJQUVELHNCQUFXLG1EQUFhO2FBQXhCO1lBQ0ksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEUsQ0FBQzs7O09BQUE7SUFHTSwwQ0FBTyxHQUFkO1FBQ0ksSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUF6QkQ7UUFEQyxLQUFLLENBQUMsaUJBQWlCLENBQUM7a0NBQ1gs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Q0FBQzt5Q0FzQitCLFVBQVUsRUFBZ0IsTUFBTTtPQXJCcEQsK0JBQStCLENBNkUzQztJQUFELHNDQUFDO0NBQUEsQUE3RUQsSUE2RUM7U0E3RVksK0JBQStCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBkaXJlY3RpdmVzIHVzZWQgYnkgdGhlIEBsaW5rIElneENhbGVuZGFyQ29tcG9uZW50LlxuICogRXhjZXB0IGZvciB0aGUgZGlyZWN0aXZlcyB3aGljaCBhcmUgdXNlZCBmb3IgdGVtcGxhdGluZyB0aGUgY2FsZW5kYXIgaXRzZWxmXG4gKiB5b3Ugc2hvdWxkIGdlbmVyYWxseSBub3QgdXNlIHRoZW0gZGlyZWN0bHkuXG4gKiBAcHJlZmVycmVkXG4gKi9cbmltcG9ydCB7XG4gICAgRGlyZWN0aXZlLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgTmdab25lXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0LCBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCBkZWJvdW5jZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgS0VZUyB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4Q2FsZW5kYXJZZWFyXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4Q2FsZW5kYXJZZWFyRGlyZWN0aXZlIHtcblxuICAgIEBJbnB1dCgnaWd4Q2FsZW5kYXJZZWFyJylcbiAgICBwdWJsaWMgdmFsdWU6IERhdGU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkYXRlOiBEYXRlO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uWWVhclNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNhbGVuZGFyX195ZWFyJylcbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHRDU1MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0N1cnJlbnRZZWFyO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNhbGVuZGFyX195ZWFyLS1jdXJyZW50JylcbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRDU1MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ3VycmVudFllYXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc0N1cnJlbnRZZWFyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkgPT09IHRoaXMudmFsdWUuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gICAgcHVibGljIG9uQ2xpY2soKSB7XG4gICAgICAgIHRoaXMub25ZZWFyU2VsZWN0aW9uLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpZ3hDYWxlbmRhck1vbnRoXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4Q2FsZW5kYXJNb250aERpcmVjdGl2ZSB7XG5cbiAgICBASW5wdXQoJ2lneENhbGVuZGFyTW9udGgnKVxuICAgIHB1YmxpYyB2YWx1ZTogRGF0ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRhdGU6IERhdGU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbmRleDtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbk1vbnRoU2VsZWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JylcbiAgICBwdWJsaWMgdGFiaW5kZXggPSAwO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2FsZW5kYXJfX21vbnRoJylcbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHRDU1MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0N1cnJlbnRNb250aDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1jYWxlbmRhcl9fbW9udGgtLWN1cnJlbnQnKVxuICAgIHB1YmxpYyBnZXQgY3VycmVudENTUygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNDdXJyZW50TW9udGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc0N1cnJlbnRNb250aCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZS5nZXRNb250aCgpID09PSB0aGlzLnZhbHVlLmdldE1vbnRoKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gICAgcHVibGljIG9uQ2xpY2soKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0aGlzLnZhbHVlLmdldEZ1bGxZZWFyKCksIHRoaXMudmFsdWUuZ2V0TW9udGgoKSwgdGhpcy5kYXRlLmdldERhdGUoKSk7XG4gICAgICAgIHRoaXMub25Nb250aFNlbGVjdGlvbi5lbWl0KGRhdGUpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2lneENhbGVuZGFySGVhZGVyXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4Q2FsZW5kYXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSB7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHt9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpZ3hDYWxlbmRhclN1YmhlYWRlcl0nXG59KVxuZXhwb3J0IGNsYXNzIElneENhbGVuZGFyU3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge31cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2lneENhbGVuZGFyU2Nyb2xsTW9udGhdJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hDYWxlbmRhclNjcm9sbE1vbnRoRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAgIC8qKlxuICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgaW52b2tlZCB3aGVuIG1vbnRoIGluY3JlbWVudC9kZWNyZW1lbnQgc3RhcnRzLlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzdGFydFNjcm9sbDogKGtleWRvd24/OiBib29sZWFuKSA9PiB7fTtcblxuICAgIC8qKlxuICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgaW52b2tlZCB3aGVuIG1vbnRoIGluY3JlbWVudC9kZWNyZW1lbnQgc3RvcHMuXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHN0b3BTY3JvbGw6IChldmVudDogYW55KSA9PiB7fTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZiwgcHJpdmF0ZSB6b25lOiBOZ1pvbmUpIHsgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG5cbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAna2V5dXAnKS5waXBlKFxuICAgICAgICAgICAgZGVib3VuY2UoKCkgPT4gaW50ZXJ2YWwoMTAwKSksXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgICAgKS5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0b3BTY3JvbGwoZXZlbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAna2V5ZG93bicpLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBLRVlTLlNQQUNFIHx8IGV2ZW50LmtleSA9PT0gS0VZUy5TUEFDRV9JRSB8fCBldmVudC5rZXkgPT09IEtFWVMuRU5URVIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlKCgpID0+IGludGVydmFsKDEwMCkpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICAgICAgICAgKS5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gS0VZUy5TUEFDRSB8fCBldmVudC5rZXkgPT09IEtFWVMuU1BBQ0VfSUUgfHwgZXZlbnQua2V5ID09PSBLRVlTLkVOVEVSKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5zdGFydFNjcm9sbCh0cnVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicpXG4gICAgcHVibGljIG9uTW91c2VEb3duKCkge1xuICAgICAgICB0aGlzLnN0YXJ0U2Nyb2xsKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNldXAnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbk1vdXNlVXAoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5zdG9wU2Nyb2xsKGV2ZW50KTtcbiAgICB9XG59XG4iXX0=