@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
378 lines • 31.1 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';
var 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>
* ```
*/
var IgxToastComponent = /** @class */ (function () {
function IgxToastComponent(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;
}
Object.defineProperty(IgxToastComponent.prototype, "isVisible", {
/**
* 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: function () {
return this._isVisible;
},
set: function (value) {
this._isVisible = value;
this.isVisibleChange.emit(this._isVisible);
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxToastComponent.prototype, "element", {
/**
* Gets the nativeElement of the toast.
* ```typescript
* let nativeElement = this.toast.element;
* ```
* @memberof IgxToastComponent
*/
get: function () {
return this.elementRef.nativeElement;
},
enumerable: true,
configurable: true
});
/**
* Shows the toast.
* If `autoHide` is enabled, the toast will hide after `displayTime` is over.
* ```typescript
* this.toast.show();
* ```
* @memberof IgxToastComponent
*/
IgxToastComponent.prototype.show = function () {
var _this = this;
clearInterval(this.timeoutId);
this.onShowing.emit(this);
this.isVisible = true;
if (this.autoHide) {
this.timeoutId = setTimeout(function () {
_this.hide();
}, this.displayTime);
}
this.onShown.emit(this);
};
/**
* Hides the toast.
* ```typescript
* this.toast.hide();
* ```
* @memberof IgxToastComponent
*/
IgxToastComponent.prototype.hide = function () {
this.onHiding.emit(this);
this.isVisible = false;
this.onHidden.emit(this);
clearInterval(this.timeoutId);
};
/**
* Wraps @show() method due @IToggleView interface implementation.
* @hidden
*/
IgxToastComponent.prototype.open = function () {
this.show();
};
/**
* Wraps @hide() method due @IToggleView interface implementation.
* @hidden
*/
IgxToastComponent.prototype.close = function () {
this.hide();
};
/**
* Toggles the visible state of the toast.
* ```typescript
* this.toast.toggle();
* ```
* @memberof IgxToastComponent
*/
IgxToastComponent.prototype.toggle = function () {
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
*/
IgxToastComponent.prototype.mapPositionToClassName = function () {
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
*/
IgxToastComponent.prototype.ngOnInit = function () {
if (this.navService && this.id) {
this.navService.add(this.id, this);
}
};
/**
*@hidden
*/
IgxToastComponent.prototype.ngOnDestroy = function () {
if (this.navService && this.id) {
this.navService.remove(this.id);
}
};
IgxToastComponent.ctorParameters = function () { return [
{ 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: ["\n :host {\n display: block;\n }\n "]
}),
__param(1, Optional()),
__metadata("design:paramtypes", [ElementRef,
IgxNavigationService])
], IgxToastComponent);
return 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
*/
var IgxToastModule = /** @class */ (function () {
function IgxToastModule() {
}
IgxToastModule = __decorate([
NgModule({
declarations: [IgxToastComponent],
exports: [IgxToastComponent],
imports: [CommonModule]
})
], IgxToastModule);
return IgxToastModule;
}());
export { IgxToastModule };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi90b2FzdC90b2FzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUNMLFFBQVEsRUFDUixTQUFTLEVBQ1QsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXZFLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNoQjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFtQkg7SUE0TEksMkJBQ1ksVUFBc0IsRUFDVixVQUFnQztRQUQ1QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ1YsZUFBVSxHQUFWLFVBQVUsQ0FBc0I7UUE3TGhELGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDM0I7Ozs7OztXQU1HO1FBQ2EsZ0JBQVcsR0FBRztZQUMxQixnQkFBZ0IsRUFBRSxtQkFBbUI7WUFDckMsZ0JBQWdCLEVBQUUsbUJBQW1CO1lBQ3JDLGFBQWEsRUFBRSxnQkFBZ0I7U0FDbEMsQ0FBQztRQUVGOzs7Ozs7Ozs7V0FTRztRQUdJLE9BQUUsR0FBRyxlQUFhLE9BQU8sRUFBSSxDQUFDO1FBRXJDOzs7Ozs7O1dBT0c7UUFFSSxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQXFCLENBQUM7UUFFekQ7Ozs7Ozs7V0FPRztRQUVJLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FB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QkFDZixLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQzt3QkFDaEIsT0FBTyxFQUFFLENBQUM7cUJBQ2IsQ0FBQyxDQUFDO29CQUNILFVBQVUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUM3QyxVQUFVLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztpQkFDcEQsQ0FBQzthQUNMO1lBQ0QsUUFBUSxFQUFFLFdBQVc7WUFDckIsb0lBQW1DO3FCQUMxQixpRUFJUjtTQUNKLENBQUM7UUErTE8sV0FBQSxRQUFRLEVBQUUsQ0FBQTt5Q0FEUyxVQUFVO1lBQ0Usb0JBQW9CO09BOUwvQyxpQkFBaUIsQ0FtUzdCO0lBQUQsd0JBQUM7Q0FBQSxBQW5TRCxJQW1TQztTQW5TWSxpQkFBaUI7QUFxUzlCOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBTixJQUFZLGdCQUlYO0FBSkQsV0FBWSxnQkFBZ0I7SUFDeEIsMkRBQU0sQ0FBQTtJQUNOLDJEQUFNLENBQUE7SUFDTixxREFBRyxDQUFBO0FBQ1AsQ0FBQyxFQUpXLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFJM0I7QUFFRDs7R0FFRztBQU1IO0lBQUE7SUFBOEIsQ0FBQztJQUFsQixjQUFjO1FBTDFCLFFBQVEsQ0FBQztZQUNOLFlBQVksRUFBRSxDQUFDLGlCQUFpQixDQUFDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDLGlCQUFpQixDQUFDO1lBQzVCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztTQUMxQixDQUFDO09BQ1csY0FBYyxDQUFJO0lBQUQscUJBQUM7Q0FBQSxBQUEvQixJQUErQjtTQUFsQixjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hOYXZpZ2F0aW9uU2VydmljZSwgSVRvZ2dsZVZpZXcgfSBmcm9tICcuLi9jb3JlL25hdmlnYXRpb24nO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG4vKipcbiAqICoqSWduaXRlIFVJIGZvciBBbmd1bGFyIFRvYXN0KiogLVxuICogW0RvY3VtZW50YXRpb25dKGh0dHBzOi8vd3d3LmluZnJhZ2lzdGljcy5jb20vcHJvZHVjdHMvaWduaXRlLXVpLWFuZ3VsYXIvYW5ndWxhci9jb21wb25lbnRzL3RvYXN0Lmh0bWwpXG4gKlxuICogVGhlIElnbml0ZSBVSSBUb2FzdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBhbmQgd2FybmluZyBtZXNzYWdlcyB0aGF0IGFyZSBub24taW50ZXJhY3RpdmUgYW5kIGNhbm5vdFxuICogYmUgZGlzbWlzc2VkIGJ5IHRoZSB1c2VyLiBUb2FzdHMgY2FuIGJlIGRpc3BsYXllZCBhdCB0aGUgYm90dG9tLCBtaWRkbGUsIG9yIHRvcCBvZiB0aGUgcGFnZS5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgaHRtbFxuICogPGJ1dHRvbiAoY2xpY2spPVwidG9hc3Quc2hvdygpXCI+U2hvdyBub3RpZmljYXRpb248L2J1dHRvbj5cbiAqIDxpZ3gtdG9hc3QgI3RvYXN0XG4gKiAgICAgICAgICAgbWVzc2FnZT1cIk5vdGlmaWNhdGlvbiBkaXNwbGF5ZWRcIlxuICogICAgICAgICAgIGRpc3BsYXlUaW1lPVwiMTAwMFwiPlxuICogPC9pZ3gtdG9hc3Q+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdhbmltYXRlJywgW1xuICAgICAgICAgICAgc3RhdGUoJ3Nob3cnLCBzdHlsZSh7XG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMVxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignKiA9PiBzaG93JywgYW5pbWF0ZSgnLjIwcyBlYXNlJykpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignc2hvdyA9PiAqJywgYW5pbWF0ZSgnLjQwcyBlYXNlLW91dCcpKVxuICAgICAgICBdKVxuICAgIF0sXG4gICAgc2VsZWN0b3I6ICdpZ3gtdG9hc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAndG9hc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlczogW2BcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIH1cbiAgICBgXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hUb2FzdENvbXBvbmVudCBpbXBsZW1lbnRzIElUb2dnbGVWaWV3LCBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSBfaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGxpc3Qgb2YgYXZhaWxhYmxlIENTUyBjbGFzc2VzLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdG9hc3RDbGFzc2VzID0gIHRoaXMudG9hc3QuQ1NTX0NMQVNTRVM7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFRvYXN0Q29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IENTU19DTEFTU0VTID0ge1xuICAgICAgICBJR1hfVE9BU1RfQk9UVE9NOiAnaWd4LXRvYXN0LS1ib3R0b20nLFxuICAgICAgICBJR1hfVE9BU1RfTUlERExFOiAnaWd4LXRvYXN0LS1taWRkbGUnLFxuICAgICAgICBJR1hfVE9BU1RfVE9QOiAnaWd4LXRvYXN0LS10b3AnXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgYGlkYCBvZiB0aGUgdG9hc3QuXG4gICAgICogSWYgbm90IHNldCwgdGhlIGBpZGAgd2lsbCBoYXZlIHZhbHVlIGBcImlneC10b2FzdC0wXCJgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRvYXN0IGlkID0gXCJteS1maXJzdC10b2FzdFwiPjwvaWd4LXRvYXN0PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdG9hc3RJZCA9IHRoaXMudG9hc3QuaWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtdG9hc3QtJHtORVhUX0lEKyt9YDtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFuIGV2ZW50IHByaW9yIHRoZSB0b2FzdCBpcyBzaG93bi5cbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2UgdG8gdGhlIGBJZ3hUb2FzdENvbXBvbmVudGAgYXMgZXZlbnQgYXJndW1lbnQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdG9hc3QgKG9uU2hvd2luZykgPSBcIm9uU2hvd2luZygkZXZlbnQpXCI+PC9pZ3gtdG9hc3Q+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFRvYXN0Q29tcG9uZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uU2hvd2luZyA9IG5ldyBFdmVudEVtaXR0ZXI8SWd4VG9hc3RDb21wb25lbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSB0b2FzdCBpcyBzaG93bi5cbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2UgdG8gdGhlIGBJZ3hUb2FzdENvbXBvbmVudGAgYXMgZXZlbnQgYXJndW1lbnQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdG9hc3QgKG9uU2hvd24pID0gXCJvblNob3duKCRldmVudClcIj48L2lneC10b2FzdD5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4VG9hc3RDb21wb25lbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25TaG93biA9IG5ldyBFdmVudEVtaXR0ZXI8SWd4VG9hc3RDb21wb25lbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCBwcmlvciB0aGUgdG9hc3QgaXMgaGlkZGVuLlxuICAgICAqIFByb3ZpZGVzIHJlZmVyZW5jZSB0byB0aGUgYElneFRvYXN0Q29tcG9uZW50YCBhcyBldmVudCBhcmd1bWVudC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10b2FzdCAob25IaWRpbmcpID0gXCJvbkhpZGluZygkZXZlbnQpXCI+PC9pZ3gtdG9hc3Q+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFRvYXN0Q29tcG9uZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uSGlkaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJZ3hUb2FzdENvbXBvbmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqICBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSB0b2FzdCBpcyBoaWRkZW4uXG4gICAgICogIFByb3ZpZGVzIHJlZmVyZW5jZSB0byB0aGUgYElneFRvYXN0Q29tcG9uZW50YCBhcyBldmVudCBhcmd1bWVudC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10b2FzdCAob25IaWRkZW4pID0gXCJvbkhpZGRlbigkZXZlbnQpXCI+PC9pZ3gtdG9hc3Q+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFRvYXN0Q29tcG9uZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uSGlkZGVuID0gbmV3IEV2ZW50RW1pdHRlcjxJZ3hUb2FzdENvbXBvbmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGByb2xlYCBhdHRyaWJ1dGUuXG4gICAgICogSWYgbm90IHNldCwgYHJvbGVgIHdpbGwgaGF2ZSB2YWx1ZSBgXCJhbGVydFwiYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10b2FzdCBbcm9sZV0gPSBcIidub3RpZnknXCI+PC9pZ3gtdG9hc3Q+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCB0b2FzdFJvbGUgPSB0aGlzLnRvYXN0LnJvbGU7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFRvYXN0Q29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcm9sZSA9ICdhbGVydCc7XG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHdoZXRoZXIgdGhlIHRvYXN0IHdpbGwgYmUgaGlkZGVuIGFmdGVyIHRoZSBgZGlzcGxheVRpbWVgIGlzIG92ZXIuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdG9hc3QgW2F1dG9IaWRlXSA9IFwiZmFsc2VcIj48L2lneC10b2FzdD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGF1dG9IaWRlID0gdGhpcy50b2FzdC5hdXRvSGlkZTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4VG9hc3RDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhdXRvSGlkZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGR1cmF0aW9uIG9mIHRpbWUgc3BhbihpbiBtaWxsaXNlY29uZHMpIHdoaWNoIHRoZSB0b2FzdCB3aWxsIGJlIHZpc2libGVcbiAgICAgKiBhZnRlciBpdCBpcyBiZWluZyBzaG93bi5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGA0MDAwYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10b2FzdCBbZGlzcGxheVRpbWVdID0gXCIyNTAwXCI+PC9pZ3gtdG9hc3Q+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBkaXNwbGF5VGltZSA9IHRoaXMudG9hc3QuZGlzcGxheVRpbWU7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFRvYXN0Q29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzcGxheVRpbWUgPSA0MDAwO1xuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcy9EaXNhYmxlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgdG9hc3QuXG4gICAgICogSWYgbm90IHNldCwgdGhlIGBpc1Zpc2libGVgIGF0dHJpYnV0ZSB3aWxsIGhhdmUgdmFsdWUgYGZhbHNlYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10b2FzdCBbaXNWaXNpYmxlXSA9IFwidHJ1ZVwiPjwvaWd4LXRvYXN0PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNWaXNpYmxlID0gdGhpcy50b2FzdC5pc1Zpc2libGU7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUd28td2F5IGRhdGEgYmluZGluZy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10b2FzdCBbKGlzVmlzaWJsZSldID0gXCJtb2RlbC5pc1Zpc2libGVcIj48L2lneC10b2FzdD5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4VG9hc3RDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgaXNWaXNpYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWaXNpYmxlO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGlzVmlzaWJsZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9pc1Zpc2libGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pc1Zpc2libGVDaGFuZ2UuZW1pdCh0aGlzLl9pc1Zpc2libGUpO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGlzVmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgbWVzc2FnZSB0aGF0IHdpbGwgYmUgc2hvd24gYnkgdGhlIHRvYXN0LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRvYXN0IFttZXNzYWdlXSA9IFwiTm90aWZpY2F0aW9uXCI+PC9pZ3gtdG9hc3Q+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCB0b2FzdE1lc3NhZ2UgPSB0aGlzLnRvYXN0Lm1lc3NhZ2U7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFRvYXN0Q29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgdG9hc3QuXG4gICAgICogSWYgbm90IHNldCwgdGhlIGBwb3NpdGlvbmAgYXR0cmlidXRlIHdpbGwgaGF2ZSB2YWx1ZSBgSWd4VG9hc3RQb3NpdGlvbi5Cb3R0b21gLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRvYXN0IFtwb3NpdGlvbl0gPSBcInRvcFwiPjwvaWd4LXRvYXN0PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdG9hc3RQb3NpdGlvbiA9IHRoaXMudG9hc3QucG9zaXRpb247XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneFRvYXN0Q29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcG9zaXRpb246IElneFRvYXN0UG9zaXRpb24gPSBJZ3hUb2FzdFBvc2l0aW9uLkJvdHRvbTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5hdGl2ZUVsZW1lbnQgb2YgdGhlIHRvYXN0LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgbmF0aXZlRWxlbWVudCA9IHRoaXMudG9hc3QuZWxlbWVudDtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4VG9hc3RDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSB0aW1lb3V0SWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIG5hdlNlcnZpY2U6IElneE5hdmlnYXRpb25TZXJ2aWNlKSB7IH1cblxuICAgIC8qKlxuICAgICAqIFNob3dzIHRoZSB0b2FzdC5cbiAgICAgKiBJZiBgYXV0b0hpZGVgIGlzIGVuYWJsZWQsIHRoZSB0b2FzdCB3aWxsIGhpZGUgYWZ0ZXIgYGRpc3BsYXlUaW1lYCBpcyBvdmVyLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnRvYXN0LnNob3coKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4VG9hc3RDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvdygpOiB2b2lkIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVvdXRJZCk7XG4gICAgICAgIHRoaXMub25TaG93aW5nLmVtaXQodGhpcyk7XG4gICAgICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5hdXRvSGlkZSkge1xuICAgICAgICAgICAgdGhpcy50aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgIH0sIHRoaXMuZGlzcGxheVRpbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vblNob3duLmVtaXQodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGlkZXMgdGhlIHRvYXN0LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnRvYXN0LmhpZGUoKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4VG9hc3RDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgaGlkZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkhpZGluZy5lbWl0KHRoaXMpO1xuICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uSGlkZGVuLmVtaXQodGhpcyk7XG5cbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVvdXRJZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV3JhcHMgQHNob3coKSBtZXRob2QgZHVlIEBJVG9nZ2xlVmlldyBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24uXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvcGVuKCkge1xuICAgICAgICB0aGlzLnNob3coKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcmFwcyBAaGlkZSgpIG1ldGhvZCBkdWUgQElUb2dnbGVWaWV3IGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbi5cbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGNsb3NlKCkge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSB2aXNpYmxlIHN0YXRlIG9mIHRoZSB0b2FzdC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy50b2FzdC50b2dnbGUoKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4VG9hc3RDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlKCkge1xuICAgICAgICB0aGlzLmlzVmlzaWJsZSA/IHRoaXMuY2xvc2UoKSA6IHRoaXMub3BlbigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIHRvYXN0IGJhc2VkIG9uIHRoZSBgcG9zaXRpb25gIHZhbHVlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY2xhc3NOYW1lID0gIHRoaXMudG9hc3QubWFwUG9zaXRpb25Ub0NsYXNzTmFtZSgpO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hUb2FzdENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBtYXBQb3NpdGlvblRvQ2xhc3NOYW1lKCk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLnBvc2l0aW9uID09PSBJZ3hUb2FzdFBvc2l0aW9uLlRvcCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuQ1NTX0NMQVNTRVMuSUdYX1RPQVNUX1RPUDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBvc2l0aW9uID09PSBJZ3hUb2FzdFBvc2l0aW9uLk1pZGRsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuQ1NTX0NMQVNTRVMuSUdYX1RPQVNUX01JRERMRTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBvc2l0aW9uID09PSBJZ3hUb2FzdFBvc2l0aW9uLkJvdHRvbSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuQ1NTX0NMQVNTRVMuSUdYX1RPQVNUX0JPVFRPTTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLm5hdlNlcnZpY2UgJiYgdGhpcy5pZCkge1xuICAgICAgICAgICAgdGhpcy5uYXZTZXJ2aWNlLmFkZCh0aGlzLmlkLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLm5hdlNlcnZpY2UgJiYgdGhpcy5pZCkge1xuICAgICAgICAgICAgdGhpcy5uYXZTZXJ2aWNlLnJlbW92ZSh0aGlzLmlkKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBFbnVtZXJhdGlvbiBmb3IgdG9hc3QgcG9zaXRpb25cbiAqIENhbiBiZTpcbiAqIEJvdHRvbVxuICogTWlkZGxlXG4gKiBUb3BcbiAqL1xuZXhwb3J0IGVudW0gSWd4VG9hc3RQb3NpdGlvbiB7XG4gICAgQm90dG9tLFxuICAgIE1pZGRsZSxcbiAgICBUb3Bcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbSWd4VG9hc3RDb21wb25lbnRdLFxuICAgIGV4cG9ydHM6IFtJZ3hUb2FzdENvbXBvbmVudF0sXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4VG9hc3RNb2R1bGUgeyB9XG4iXX0=