@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
369 lines • 29.8 kB
JavaScript
import { __decorate, __metadata, __param } from "tslib";
import { animate, state, style, transition, trigger } from '@angular/animations';
import { CommonModule } from '@angular/common';
import { Component, ElementRef, EventEmitter, HostBinding, Input, NgModule, OnDestroy, OnInit, Optional, Output } from '@angular/core';
import { IgxNavigationService, IToggleView } from '../core/navigation';
let NEXT_ID = 0;
/**
* **Ignite UI for Angular Toast** -
* [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/toast.html)
*
* The Ignite UI Toast provides information and warning messages that are non-interactive and cannot
* be dismissed by the user. Toasts can be displayed at the bottom, middle, or top of the page.
*
* Example:
* ```html
* <button (click)="toast.show()">Show notification</button>
* <igx-toast #toast
* message="Notification displayed"
* displayTime="1000">
* </igx-toast>
* ```
*/
let IgxToastComponent = class IgxToastComponent {
constructor(elementRef, navService) {
this.elementRef = elementRef;
this.navService = navService;
this._isVisible = false;
/**
* Returns a list of available CSS classes.
* ```typescript
* let toastClasses = this.toast.CSS_CLASSES;
* ```
* @memberof IgxToastComponent
*/
this.CSS_CLASSES = {
IGX_TOAST_BOTTOM: 'igx-toast--bottom',
IGX_TOAST_MIDDLE: 'igx-toast--middle',
IGX_TOAST_TOP: 'igx-toast--top'
};
/**
* Sets/gets the `id` of the toast.
* If not set, the `id` will have value `"igx-toast-0"`.
* ```html
* <igx-toast id = "my-first-toast"></igx-toast>
* ```
* ```typescript
* let toastId = this.toast.id;
* ```
*/
this.id = `igx-toast-${NEXT_ID++}`;
/**
* Emits an event prior the toast is shown.
* Provides reference to the `IgxToastComponent` as event argument.
* ```html
* <igx-toast (onShowing) = "onShowing($event)"></igx-toast>
* ```
* @memberof IgxToastComponent
*/
this.onShowing = new EventEmitter();
/**
* Emits an event when the toast is shown.
* Provides reference to the `IgxToastComponent` as event argument.
* ```html
* <igx-toast (onShown) = "onShown($event)"></igx-toast>
* ```
* @memberof IgxToastComponent
*/
this.onShown = new EventEmitter();
/**
* Emits an event prior the toast is hidden.
* Provides reference to the `IgxToastComponent` as event argument.
* ```html
* <igx-toast (onHiding) = "onHiding($event)"></igx-toast>
* ```
* @memberof IgxToastComponent
*/
this.onHiding = new EventEmitter();
/**
* Emits an event when the toast is hidden.
* Provides reference to the `IgxToastComponent` as event argument.
* ```html
* <igx-toast (onHidden) = "onHidden($event)"></igx-toast>
* ```
* @memberof IgxToastComponent
*/
this.onHidden = new EventEmitter();
/**
* Sets/gets the `role` attribute.
* If not set, `role` will have value `"alert"`.
* ```html
* <igx-toast [role] = "'notify'"></igx-toast>
* ```
* ```typescript
* let toastRole = this.toast.role;
* ```
* @memberof IgxToastComponent
*/
this.role = 'alert';
/**
* Sets/gets whether the toast will be hidden after the `displayTime` is over.
* Default value is `true`.
* ```html
* <igx-toast [autoHide] = "false"></igx-toast>
* ```
* ```typescript
* let autoHide = this.toast.autoHide;
* ```
* @memberof IgxToastComponent
*/
this.autoHide = true;
/**
* Sets/gets the duration of time span(in milliseconds) which the toast will be visible
* after it is being shown.
* Default value is `4000`.
* ```html
* <igx-toast [displayTime] = "2500"></igx-toast>
* ```
* ```typescript
* let displayTime = this.toast.displayTime;
* ```
* @memberof IgxToastComponent
*/
this.displayTime = 4000;
/**
*@hidden
*/
this.isVisibleChange = new EventEmitter();
/**
* Sets/gets the position of the toast.
* If not set, the `position` attribute will have value `IgxToastPosition.Bottom`.
* ```html
* <igx-toast [position] = "top"></igx-toast>
* ```
* ```typescript
* let toastPosition = this.toast.position;
* ```
* @memberof IgxToastComponent
*/
this.position = IgxToastPosition.Bottom;
}
/**
* Enables/Disables the visibility of the toast.
* If not set, the `isVisible` attribute will have value `false`.
* ```html
* <igx-toast [isVisible] = "true"></igx-toast>
* ```
* ```typescript
* let isVisible = this.toast.isVisible;
* ```
*
* Two-way data binding.
* ```html
* <igx-toast [(isVisible)] = "model.isVisible"></igx-toast>
* ```
* @memberof IgxToastComponent
*/
get isVisible() {
return this._isVisible;
}
set isVisible(value) {
this._isVisible = value;
this.isVisibleChange.emit(this._isVisible);
}
/**
* Gets the nativeElement of the toast.
* ```typescript
* let nativeElement = this.toast.element;
* ```
* @memberof IgxToastComponent
*/
get element() {
return this.elementRef.nativeElement;
}
/**
* Shows the toast.
* If `autoHide` is enabled, the toast will hide after `displayTime` is over.
* ```typescript
* this.toast.show();
* ```
* @memberof IgxToastComponent
*/
show() {
clearInterval(this.timeoutId);
this.onShowing.emit(this);
this.isVisible = true;
if (this.autoHide) {
this.timeoutId = setTimeout(() => {
this.hide();
}, this.displayTime);
}
this.onShown.emit(this);
}
/**
* Hides the toast.
* ```typescript
* this.toast.hide();
* ```
* @memberof IgxToastComponent
*/
hide() {
this.onHiding.emit(this);
this.isVisible = false;
this.onHidden.emit(this);
clearInterval(this.timeoutId);
}
/**
* Wraps @show() method due @IToggleView interface implementation.
* @hidden
*/
open() {
this.show();
}
/**
* Wraps @hide() method due @IToggleView interface implementation.
* @hidden
*/
close() {
this.hide();
}
/**
* Toggles the visible state of the toast.
* ```typescript
* this.toast.toggle();
* ```
* @memberof IgxToastComponent
*/
toggle() {
this.isVisible ? this.close() : this.open();
}
/**
* Sets/gets the class name of the toast based on the `position` value.
* ```typescript
* let className = this.toast.mapPositionToClassName();
* ```
* @memberof IgxToastComponent
*/
mapPositionToClassName() {
if (this.position === IgxToastPosition.Top) {
return this.CSS_CLASSES.IGX_TOAST_TOP;
}
if (this.position === IgxToastPosition.Middle) {
return this.CSS_CLASSES.IGX_TOAST_MIDDLE;
}
if (this.position === IgxToastPosition.Bottom) {
return this.CSS_CLASSES.IGX_TOAST_BOTTOM;
}
}
/**
*@hidden
*/
ngOnInit() {
if (this.navService && this.id) {
this.navService.add(this.id, this);
}
}
/**
*@hidden
*/
ngOnDestroy() {
if (this.navService && this.id) {
this.navService.remove(this.id);
}
}
};
IgxToastComponent.ctorParameters = () => [
{ type: ElementRef },
{ type: IgxNavigationService, decorators: [{ type: Optional }] }
];
__decorate([
HostBinding('attr.id'),
Input(),
__metadata("design:type", Object)
], IgxToastComponent.prototype, "id", void 0);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxToastComponent.prototype, "onShowing", void 0);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxToastComponent.prototype, "onShown", void 0);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxToastComponent.prototype, "onHiding", void 0);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxToastComponent.prototype, "onHidden", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxToastComponent.prototype, "role", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxToastComponent.prototype, "autoHide", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxToastComponent.prototype, "displayTime", void 0);
__decorate([
Input(),
__metadata("design:type", Object),
__metadata("design:paramtypes", [Object])
], IgxToastComponent.prototype, "isVisible", null);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxToastComponent.prototype, "isVisibleChange", void 0);
__decorate([
Input(),
__metadata("design:type", String)
], IgxToastComponent.prototype, "message", void 0);
__decorate([
Input(),
__metadata("design:type", Number)
], IgxToastComponent.prototype, "position", void 0);
IgxToastComponent = __decorate([
Component({
animations: [
trigger('animate', [
state('show', style({
opacity: 1
})),
transition('* => show', animate('.20s ease')),
transition('show => *', animate('.40s ease-out'))
])
],
selector: 'igx-toast',
template: "<div [ngClass]=\"mapPositionToClassName()\" *ngIf=\"this.isVisible\" [@animate]=\"'show'\">\n {{ message }}\n</div>\n",
styles: [`
:host {
display: block;
}
`]
}),
__param(1, Optional()),
__metadata("design:paramtypes", [ElementRef,
IgxNavigationService])
], IgxToastComponent);
export { IgxToastComponent };
/**
* Enumeration for toast position
* Can be:
* Bottom
* Middle
* Top
*/
export var IgxToastPosition;
(function (IgxToastPosition) {
IgxToastPosition[IgxToastPosition["Bottom"] = 0] = "Bottom";
IgxToastPosition[IgxToastPosition["Middle"] = 1] = "Middle";
IgxToastPosition[IgxToastPosition["Top"] = 2] = "Top";
})(IgxToastPosition || (IgxToastPosition = {}));
/**
* @hidden
*/
let IgxToastModule = class IgxToastModule {
};
IgxToastModule = __decorate([
NgModule({
declarations: [IgxToastComponent],
exports: [IgxToastComponent],
imports: [CommonModule]
})
], IgxToastModule);
export { IgxToastModule };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi90b2FzdC90b2FzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUNMLFFBQVEsRUFDUixTQUFTLEVBQ1QsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXZFLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNoQjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFtQkgsSUFBYSxpQkFBaUIsR0FBOUIsTUFBYSxpQkFBaUI7SUE0TDFCLFlBQ1ksVUFBc0IsRUFDVixVQUFnQztRQUQ1QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ1YsZUFBVSxHQUFWLFVBQVUsQ0FBc0I7UUE3TGhELGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDM0I7Ozs7OztXQU1HO1FBQ2EsZ0JBQVcsR0FBRztZQUMxQixnQkFBZ0IsRUFBRSxtQkFBbUI7WUFDckMsZ0JBQWdCLEVBQUUsbUJBQW1CO1lBQ3JDLGFBQWEsRUFBRSxnQkFBZ0I7U0FDbEMsQ0FBQztRQUVGOzs7Ozs7Ozs7V0FTRztRQUdJLE9BQUUsR0FBRyxhQUFhLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFFckM7Ozs7Ozs7V0FPRztRQUVJLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUV6RDs7Ozs7OztXQU9H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SyxDQUFDO29CQUNoQixPQUFPLEVBQUUsQ0FBQztpQkFDYixDQUFDLENBQUM7Z0JBQ0gsVUFBVSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzdDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBQ3BELENBQUM7U0FDTDtRQUNELFFBQVEsRUFBRSxXQUFXO1FBQ3JCLG9JQUFtQztpQkFDMUI7Ozs7S0FJUjtLQUNKLENBQUM7SUErTE8sV0FBQSxRQUFRLEVBQUUsQ0FBQTtxQ0FEUyxVQUFVO1FBQ0Usb0JBQW9CO0dBOUwvQyxpQkFBaUIsQ0FtUzdCO1NBblNZLGlCQUFpQjtBQXFTOUI7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFOLElBQVksZ0JBSVg7QUFKRCxXQUFZLGdCQUFnQjtJQUN4QiwyREFBTSxDQUFBO0lBQ04sMkRBQU0sQ0FBQTtJQUNOLHFEQUFHLENBQUE7QUFDUCxDQUFDLEVBSlcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQUkzQjtBQUVEOztHQUVHO0FBTUgsSUFBYSxjQUFjLEdBQTNCLE1BQWEsY0FBYztDQUFJLENBQUE7QUFBbEIsY0FBYztJQUwxQixRQUFRLENBQUM7UUFDTixZQUFZLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztRQUNqQyxPQUFPLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztRQUM1QixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7S0FDMUIsQ0FBQztHQUNXLGNBQWMsQ0FBSTtTQUFsQixjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hOYXZpZ2F0aW9uU2VydmljZSwgSVRvZ2dsZVZpZXcgfSBmcm9tICcuLi9jb3JlL25hdmlnYXRpb24nO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG4vKipcbiAqICoqSWduaXRlIFVJIGZvciBBbmd1bGFyIFRvYXN0KiogLVxuICogW0RvY3VtZW50YXRpb25dKGh0dHBzOi8vd3d3LmluZnJhZ2lzdGljcy5jb20vcHJvZHVjdHMvaWduaXRlLXVpLWFuZ3VsYXIvYW5ndWxhci9jb21wb25lbnRzL3RvYXN0Lmh0bWwpXG4gKlxuICogVGhlIElnbml0ZSBVSSBUb2FzdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBhbmQgd2FybmluZyBtZXNzYWdlcyB0aGF0IGFyZSBub24taW50ZXJhY3RpdmUgYW5kIGNhbm5vdFxuICogYmUgZGlzbWlzc2VkIGJ5IHRoZSB1c2VyLiBUb2FzdHMgY2FuIGJlIGRpc3BsYXllZCBhdCB0aGUgYm90dG9tLCBtaWRkbGUsIG9yIHRvcCBvZiB0aGUgcGFnZS5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgaHRtbFxuICogPGJ1dHRvbiAoY2xpY2spPVwidG9hc3Quc2hvdygpXCI+U2hvdyBub3RpZmljYXRpb248L2J1dHRvbj5cbiAqIDxpZ3gtdG9hc3QgI3RvYXN0XG4gKiAgICAgICAgICAgbWVzc2FnZT1cIk5vdGlmaWNhdGlvbiBkaXNwbGF5ZWRcIlxuICogICAgICAgICAgIGRpc3BsYXlUaW1lPVwiMTAwMFwiPlxuICogPC9pZ3gtdG9hc3Q+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdhbmltYXRlJywgW1xuICAgICAgICAgICAgc3RhdGUoJ3Nob3cnLCBzdHlsZSh7XG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMVxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignKiA9PiBzaG93JywgYW5pbWF0ZSgnLjIwcyBlYXNlJykpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignc2hvdyA9PiAqJywgYW5pbWF0ZSgnLjQwcyBlYXNlLW91dCcpKVxuICAgICAgICBdKVxuICAgIF0sXG4gICAgc2VsZWN0b3I6ICdpZ3gtdG9hc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAndG9hc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlczogW2BcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIH1cbiAgICBgXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hUb2FzdENvbXBvbmVudCBpbXBsZW1lbnRzIElUb2dnbGVWaWV3LCBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSBfaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGxpc3Qgb2YgYXZhaWxhYmxlIENTUyBjbGFzc2VzLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdG9hc3RDbGFzc2VzID0gIHRoaXMudG9hc3QuQ1NTX0NMQVNTRVM7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFRvYXN0Q29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IENTU19DTEFTU0VTID0ge1xuICAgICAgICBJR1hfVE9BU1RfQk9UVE9NOiAnaWd4LXRvYXN0LS1ib3R0b20nLFxuICAgICAgICBJR1hfVE9BU1RfTUlERExFOiAnaWd4LXRvYXN0LS1taWRkbGUnLFxuICAgICAgICBJR1hfVE9BU1RfVE9QOiAnaWd4LXRvYXN0LS10b3AnXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgYGlkYCBvZiB0aGUgdG9hc3QuXG4gICAgICogSWYgbm90IHNldCwgdGhlIGBpZGAgd2lsbCBoYXZlIHZhbHVlIGBcImlneC10b2FzdC0wXCJgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRvYXN0IGlkID0gXCJteS1maXJzdC10b2FzdFwiPjwvaWd4LXRvYXN0PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdG9hc3RJZCA9IHRoaXMudG9hc3QuaWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtdG9hc3QtJHtORVhUX0lEKyt9YDtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFuIGV2ZW50IHByaW9yIHRoZSB0b2FzdCBpcyBzaG93bi5cbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2UgdG8gdGhlIGBJZ3hUb2FzdENvbXBvbmVudGAgYXMgZXZlbnQgYXJndW1lbnQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdG9hc3QgKG9uU2hvd2luZykgPSBcIm9uU2hvd2luZygkZXZlbnQpXCI+PC9pZ3gtdG9hc3Q+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFRvYXN0Q29tcG9uZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uU2hvd2luZyA9IG5ldyBFdmVudEVtaXR0ZXI8SWd4VG9hc3RDb21wb25lbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSB0b2FzdCBpcyBzaG93bi5cbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2UgdG8gdGhlIGBJZ3hUb2FzdENvbXBvbmVudGAgYXMgZXZlbnQgYXJndW1lbnQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdG9hc3QgKG9uU2hvd24pID0gXCJvblNob3duKCRldmVudClcIj48L2lneC10b2FzdD5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4VG9hc3RDb21wb25lbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25TaG93biA9IG5ldyBFdmVudEVtaXR0ZXI8SWd4VG9hc3RDb21wb25lbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCBwcmlvciB0aGUgdG9hc3QgaXMgaGlkZGVuLlxuICAgICAqIFByb3ZpZGVzIHJlZmVyZW5jZSB0byB0aGUgYElneFRvYXN0Q29tcG9uZW50YCBhcyBldmVudCBhcmd1bWVudC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10b2FzdCAob25IaWRpbmcpID0gXCJvbkhpZGluZygkZXZlbnQpXCI+PC9pZ3gtdG9hc3Q+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFRvYXN0Q29tcG9uZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uSGlkaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJZ3hUb2FzdENvbXBvbmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqICBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSB0b2FzdCBpcyBoaWRkZW4uXG4gICAgICogIFByb3ZpZGVzIHJlZmVyZW5jZSB0byB0aGUgYElneFRvYXN0Q29tcG9uZW50YCBhcyBldmVudCBhcmd1bWVudC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10b2FzdCAob25IaWRkZW4pID0gXCJvbkhpZGRlbigkZXZlbnQpXCI+PC9pZ3gtdG9hc3Q+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFRvYXN0Q29tcG9uZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uSGlkZGVuID0gbmV3IEV2ZW50RW1pdHRlcjxJZ3hUb2FzdENvbXBvbmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGByb2xlYCBhdHRyaWJ1dGUuXG4gICAgICogSWYgbm90IHNldCwgYHJvbGVgIHdpbGwgaGF2ZSB2YWx1ZSBgXCJhbGVydFwiYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10b2FzdCBbcm9sZV0gPSBcIidub3RpZnknXCI+PC9pZ3gtdG9hc3Q+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCB0b2FzdFJvbGUgPSB0aGlzLnRvYXN0LnJvbGU7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFRvYXN0Q29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcm9sZSA9ICdhbGVydCc7XG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHdoZXRoZXIgdGhlIHRvYXN0IHdpbGwgYmUgaGlkZGVuIGFmdGVyIHRoZSBgZGlzcGxheVRpbWVgIGlzIG92ZXIuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdG9hc3QgW2F1dG9IaWRlXSA9IFwiZmFsc2VcIj48L2lneC10b2FzdD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGF1dG9IaWRlID0gdGhpcy50b2FzdC5hdXRvSGlkZTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4VG9hc3RDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhdXRvSGlkZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3BhbihpbiBtaWxsaXNlY29uZHMpIHdoaWNoIHRoZSB0b2FzdCB3aWxsIGJlIHZpc2libGVcbiAgICAgKiBhZnRlciBpdCBpcyBiZWluZyBzaG93bi5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGA0MDAwYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10b2FzdCBbZGlzcGxheVRpbWVdID0gXCIyNTAwXCI+PC9pZ3gtdG9hc3Q+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBkaXNwbGF5VGltZSA9IHRoaXMudG9hc3QuZGlzcGxheVRpbWU7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFRvYXN0Q29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzcGxheVRpbWUgPSA0MDAwO1xuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcy9EaXNhYmxlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgdG9hc3QuXG4gICAgICogSWYgbm90IHNldCwgdGhlIGBpc1Zpc2libGVgIGF0dHJpYnV0ZSB3aWxsIGhhdmUgdmFsdWUgYGZhbHNlYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10b2FzdCBbaXNWaXNpYmxlXSA9IFwidHJ1ZVwiPjwvaWd4LXRvYXN0PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNWaXNpYmxlID0gdGhpcy50b2FzdC5pc1Zpc2libGU7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUd28td2F5IGRhdGEgYmluZGluZy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10b2FzdCBbKGlzVmlzaWJsZSldID0gXCJtb2RlbC5pc1Zpc2libGVcIj48L2lneC10b2FzdD5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4VG9hc3RDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgaXNWaXNpYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWaXNpYmxlO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGlzVmlzaWJsZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9pc1Zpc2libGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pc1Zpc2libGVDaGFuZ2UuZW1pdCh0aGlzLl9pc1Zpc2libGUpO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGlzVmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgbWVzc2FnZSB0aGF0IHdpbGwgYmUgc2hvd24gYnkgdGhlIHRvYXN0LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRvYXN0IFttZXNzYWdlXSA9IFwiTm90aWZpY2F0aW9uXCI+PC9pZ3gtdG9hc3Q+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCB0b2FzdE1lc3NhZ2UgPSB0aGlzLnRvYXN0Lm1lc3NhZ2U7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFRvYXN0Q29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgdG9hc3QuXG4gICAgICogSWYgbm90IHNldCwgdGhlIGBwb3NpdGlvbmAgYXR0cmlidXRlIHdpbGwgaGF2ZSB2YWx1ZSBgSWd4VG9hc3RQb3NpdGlvbi5Cb3R0b21gLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRvYXN0IFtwb3NpdGlvbl0gPSBcInRvcFwiPjwvaWd4LXRvYXN0PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdG9hc3RQb3NpdGlvbiA9IHRoaXMudG9hc3QucG9zaXRpb247XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFRvYXN0Q29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcG9zaXRpb246IElneFRvYXN0UG9zaXRpb24gPSBJZ3hUb2FzdFBvc2l0aW9uLkJvdHRvbTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5hdGl2ZUVsZW1lbnQgb2YgdGhlIHRvYXN0LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgbmF0aXZlRWxlbWVudCA9IHRoaXMudG9hc3QuZWxlbWVudDtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4VG9hc3RDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSB0aW1lb3V0SWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIG5hdlNlcnZpY2U6IElneE5hdmlnYXRpb25TZXJ2aWNlKSB7IH1cblxuICAgIC8qKlxuICAgICAqIFNob3dzIHRoZSB0b2FzdC5cbiAgICAgKiBJZiBgYXV0b0hpZGVgIGlzIGVuYWJsZWQsIHRoZSB0b2FzdCB3aWxsIGhpZGUgYWZ0ZXIgYGRpc3BsYXlUaW1lYCBpcyBvdmVyLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnRvYXN0LnNob3coKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4VG9hc3RDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvdygpOiB2b2lkIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVvdXRJZCk7XG4gICAgICAgIHRoaXMub25TaG93aW5nLmVtaXQodGhpcyk7XG4gICAgICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5hdXRvSGlkZSkge1xuICAgICAgICAgICAgdGhpcy50aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgIH0sIHRoaXMuZGlzcGxheVRpbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vblNob3duLmVtaXQodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGlkZXMgdGhlIHRvYXN0LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnRvYXN0LmhpZGUoKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4VG9hc3RDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgaGlkZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkhpZGluZy5lbWl0KHRoaXMpO1xuICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uSGlkZGVuLmVtaXQodGhpcyk7XG5cbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVvdXRJZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV3JhcHMgQHNob3coKSBtZXRob2QgZHVlIEBJVG9nZ2xlVmlldyBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24uXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvcGVuKCkge1xuICAgICAgICB0aGlzLnNob3coKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcmFwcyBAaGlkZSgpIG1ldGhvZCBkdWUgQElUb2dnbGVWaWV3IGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbi5cbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGNsb3NlKCkge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSB2aXNpYmxlIHN0YXRlIG9mIHRoZSB0b2FzdC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy50b2FzdC50b2dnbGUoKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4VG9hc3RDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlKCkge1xuICAgICAgICB0aGlzLmlzVmlzaWJsZSA/IHRoaXMuY2xvc2UoKSA6IHRoaXMub3BlbigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIHRvYXN0IGJhc2VkIG9uIHRoZSBgcG9zaXRpb25gIHZhbHVlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY2xhc3NOYW1lID0gIHRoaXMudG9hc3QubWFwUG9zaXRpb25Ub0NsYXNzTmFtZSgpO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hUb2FzdENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBtYXBQb3NpdGlvblRvQ2xhc3NOYW1lKCk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLnBvc2l0aW9uID09PSBJZ3hUb2FzdFBvc2l0aW9uLlRvcCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuQ1NTX0NMQVNTRVMuSUdYX1RPQVNUX1RPUDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBvc2l0aW9uID09PSBJZ3hUb2FzdFBvc2l0aW9uLk1pZGRsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuQ1NTX0NMQVNTRVMuSUdYX1RPQVNUX01JRERMRTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBvc2l0aW9uID09PSBJZ3hUb2FzdFBvc2l0aW9uLkJvdHRvbSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuQ1NTX0NMQVNTRVMuSUdYX1RPQVNUX0JPVFRPTTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLm5hdlNlcnZpY2UgJiYgdGhpcy5pZCkge1xuICAgICAgICAgICAgdGhpcy5uYXZTZXJ2aWNlLmFkZCh0aGlzLmlkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLm5hdlNlcnZpY2UgJiYgdGhpcy5pZCkge1xuICAgICAgICAgICAgdGhpcy5uYXZTZXJ2aWNlLnJlbW92ZSh0aGlzLmlkKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBFbnVtZXJhdGlvbiBmb3IgdG9hc3QgcG9zaXRpb25cbiAqIENhbiBiZTpcbiAqIEJvdHRvbVxuICogTWlkZGxlXG4gKiBUb3BcbiAqL1xuZXhwb3J0IGVudW0gSWd4VG9hc3RQb3NpdGlvbiB7XG4gICAgQm90dG9tLFxuICAgIE1pZGRsZSxcbiAgICBUb3Bcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbSWd4VG9hc3RDb21wb25lbnRdLFxuICAgIGV4cG9ydHM6IFtJZ3hUb2FzdENvbXBvbmVudF0sXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4VG9hc3RNb2R1bGUgeyB9XG4iXX0=