UNPKG

@catull/igniteui-angular

Version:

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

369 lines 29.8 kB
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=