@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
253 lines • 21.1 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
*/
let IgxCalendarYearDirective = class IgxCalendarYearDirective {
constructor() {
this.onYearSelection = new EventEmitter();
}
get defaultCSS() {
return !this.isCurrentYear;
}
get currentCSS() {
return this.isCurrentYear;
}
get isCurrentYear() {
return this.date.getFullYear() === this.value.getFullYear();
}
onClick() {
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);
export { IgxCalendarYearDirective };
let IgxCalendarMonthDirective = class IgxCalendarMonthDirective {
constructor(elementRef) {
this.elementRef = elementRef;
this.onMonthSelection = new EventEmitter();
this.tabindex = 0;
}
get defaultCSS() {
return !this.isCurrentMonth;
}
get currentCSS() {
return this.isCurrentMonth;
}
get isCurrentMonth() {
return this.date.getMonth() === this.value.getMonth();
}
get nativeElement() {
return this.elementRef.nativeElement;
}
onClick() {
const date = new Date(this.value.getFullYear(), this.value.getMonth(), this.date.getDate());
this.onMonthSelection.emit(date);
}
};
IgxCalendarMonthDirective.ctorParameters = () => [
{ 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);
export { IgxCalendarMonthDirective };
/**
* @hidden
*/
let IgxCalendarHeaderTemplateDirective = class IgxCalendarHeaderTemplateDirective {
constructor(template) {
this.template = template;
}
};
IgxCalendarHeaderTemplateDirective.ctorParameters = () => [
{ type: TemplateRef }
];
IgxCalendarHeaderTemplateDirective = __decorate([
Directive({
selector: '[igxCalendarHeader]'
}),
__metadata("design:paramtypes", [TemplateRef])
], IgxCalendarHeaderTemplateDirective);
export { IgxCalendarHeaderTemplateDirective };
/**
* @hidden
*/
let IgxCalendarSubheaderTemplateDirective = class IgxCalendarSubheaderTemplateDirective {
constructor(template) {
this.template = template;
}
};
IgxCalendarSubheaderTemplateDirective.ctorParameters = () => [
{ type: TemplateRef }
];
IgxCalendarSubheaderTemplateDirective = __decorate([
Directive({
selector: '[igxCalendarSubheader]'
}),
__metadata("design:paramtypes", [TemplateRef])
], IgxCalendarSubheaderTemplateDirective);
export { IgxCalendarSubheaderTemplateDirective };
/**
* @hidden
*/
let IgxCalendarScrollMonthDirective = class IgxCalendarScrollMonthDirective {
constructor(element, zone) {
this.element = element;
this.zone = zone;
/**
* @hidden
*/
this.destroy$ = new Subject();
}
/**
* @hidden
*/
ngAfterViewInit() {
fromEvent(this.element.nativeElement, 'keyup').pipe(debounce(() => interval(100)), takeUntil(this.destroy$)).subscribe((event) => {
this.stopScroll(event);
});
this.zone.runOutsideAngular(() => {
fromEvent(this.element.nativeElement, 'keydown').pipe(tap((event) => {
if (event.key === " " /* SPACE */ || event.key === "Spacebar" /* SPACE_IE */ || event.key === "Enter" /* ENTER */) {
event.preventDefault();
event.stopPropagation();
}
}), debounce(() => interval(100)), takeUntil(this.destroy$)).subscribe((event) => {
if (event.key === " " /* SPACE */ || event.key === "Spacebar" /* SPACE_IE */ || event.key === "Enter" /* ENTER */) {
this.zone.run(() => this.startScroll(true));
}
});
});
}
/**
* @hidden
*/
ngOnDestroy() {
this.destroy$.next(true);
this.destroy$.complete();
}
/**
* @hidden
*/
onMouseDown() {
this.startScroll();
}
/**
* @hidden
*/
onMouseUp(event) {
this.stopScroll(event);
}
};
IgxCalendarScrollMonthDirective.ctorParameters = () => [
{ 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);
export { IgxCalendarScrollMonthDirective };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuZGlyZWN0aXZlcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvY2FsZW5kYXIvY2FsZW5kYXIuZGlyZWN0aXZlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0c7QUFDSCxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFVBQVUsRUFDVixhQUFhLEVBQ2IsU0FBUyxFQUNULE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHMUQ7O0dBRUc7QUFJSCxJQUFhLHdCQUF3QixHQUFyQyxNQUFhLHdCQUF3QjtJQUFyQztRQVNXLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQW9CdEQsQ0FBQztJQWpCRyxJQUFXLFVBQVU7UUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDL0IsQ0FBQztJQUdELElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsYUFBYTtRQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNoRSxDQUFDO0lBR00sT0FBTztRQUNWLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0NBQ0osQ0FBQTtBQTFCRztJQURDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQzs4QkFDWCxJQUFJO3VE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QUErQixDQTZFM0M7U0E3RVksK0JBQStCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBkaXJlY3RpdmVzIHVzZWQgYnkgdGhlIEBsaW5rIElneENhbGVuZGFyQ29tcG9uZW50LlxuICogRXhjZXB0IGZvciB0aGUgZGlyZWN0aXZlcyB3aGljaCBhcmUgdXNlZCBmb3IgdGVtcGxhdGluZyB0aGUgY2FsZW5kYXIgaXRzZWxmXG4gKiB5b3Ugc2hvdWxkIGdlbmVyYWxseSBub3QgdXNlIHRoZW0gZGlyZWN0bHkuXG4gKiBAcHJlZmVycmVkXG4gKi9cbmltcG9ydCB7XG4gICAgRGlyZWN0aXZlLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgTmdab25lXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0LCBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCBkZWJvdW5jZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgS0VZUyB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4Q2FsZW5kYXJZZWFyXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4Q2FsZW5kYXJZZWFyRGlyZWN0aXZlIHtcblxuICAgIEBJbnB1dCgnaWd4Q2FsZW5kYXJZZWFyJylcbiAgICBwdWJsaWMgdmFsdWU6IERhdGU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkYXRlOiBEYXRlO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uWWVhclNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNhbGVuZGFyX195ZWFyJylcbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHRDU1MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0N1cnJlbnRZZWFyO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNhbGVuZGFyX195ZWFyLS1jdXJyZW50JylcbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRDU1MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ3VycmVudFllYXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc0N1cnJlbnRZZWFyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkgPT09IHRoaXMudmFsdWUuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gICAgcHVibGljIG9uQ2xpY2soKSB7XG4gICAgICAgIHRoaXMub25ZZWFyU2VsZWN0aW9uLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpZ3hDYWxlbmRhck1vbnRoXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4Q2FsZW5kYXJNb250aERpcmVjdGl2ZSB7XG5cbiAgICBASW5wdXQoJ2lneENhbGVuZGFyTW9udGgnKVxuICAgIHB1YmxpYyB2YWx1ZTogRGF0ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRhdGU6IERhdGU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbmRleDtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbk1vbnRoU2VsZWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JylcbiAgICBwdWJsaWMgdGFiaW5kZXggPSAwO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2FsZW5kYXJfX21vbnRoJylcbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHRDU1MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0N1cnJlbnRNb250aDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1jYWxlbmRhcl9fbW9udGgtLWN1cnJlbnQnKVxuICAgIHB1YmxpYyBnZXQgY3VycmVudENTUygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNDdXJyZW50TW9udGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc0N1cnJlbnRNb250aCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZS5nZXRNb250aCgpID09PSB0aGlzLnZhbHVlLmdldE1vbnRoKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gICAgcHVibGljIG9uQ2xpY2soKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0aGlzLnZhbHVlLmdldEZ1bGxZZWFyKCksIHRoaXMudmFsdWUuZ2V0TW9udGgoKSwgdGhpcy5kYXRlLmdldERhdGUoKSk7XG4gICAgICAgIHRoaXMub25Nb250aFNlbGVjdGlvbi5lbWl0KGRhdGUpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2lneENhbGVuZGFySGVhZGVyXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4Q2FsZW5kYXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSB7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHt9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpZ3hDYWxlbmRhclN1YmhlYWRlcl0nXG59KVxuZXhwb3J0IGNsYXNzIElneENhbGVuZGFyU3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge31cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2lneENhbGVuZGFyU2Nyb2xsTW9udGhdJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hDYWxlbmRhclNjcm9sbE1vbnRoRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAgIC8qKlxuICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgaW52b2tlZCB3aGVuIG1vbnRoIGluY3JlbWVudC9kZWNyZW1lbnQgc3RhcnRzLlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzdGFydFNjcm9sbDogKGtleWRvd24/OiBib29sZWFuKSA9PiB7fTtcblxuICAgIC8qKlxuICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgaW52b2tlZCB3aGVuIG1vbnRoIGluY3JlbWVudC9kZWNyZW1lbnQgc3RvcHMuXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHN0b3BTY3JvbGw6IChldmVudDogYW55KSA9PiB7fTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZiwgcHJpdmF0ZSB6b25lOiBOZ1pvbmUpIHsgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG5cbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAna2V5dXAnKS5waXBlKFxuICAgICAgICAgICAgZGVib3VuY2UoKCkgPT4gaW50ZXJ2YWwoMTAwKSksXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgICAgKS5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0b3BTY3JvbGwoZXZlbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAna2V5ZG93bicpLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBLRVlTLlNQQUNFIHx8IGV2ZW50LmtleSA9PT0gS0VZUy5TUEFDRV9JRSB8fCBldmVudC5rZXkgPT09IEtFWVMuRU5URVIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlKCgpID0+IGludGVydmFsKDEwMCkpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICAgICAgICAgKS5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gS0VZUy5TUEFDRSB8fCBldmVudC5rZXkgPT09IEtFWVMuU1BBQ0VfSUUgfHwgZXZlbnQua2V5ID09PSBLRVlTLkVOVEVSKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5zdGFydFNjcm9sbCh0cnVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicpXG4gICAgcHVibGljIG9uTW91c2VEb3duKCkge1xuICAgICAgICB0aGlzLnN0YXJ0U2Nyb2xsKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNldXAnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbk1vdXNlVXAoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5zdG9wU2Nyb2xsKGV2ZW50KTtcbiAgICB9XG59XG4iXX0=