UNPKG

@catull/igniteui-angular

Version:

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

287 lines 23.6 kB
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=