UNPKG

@catull/igniteui-angular

Version:

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

253 lines 21.1 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 */ 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=