angular2-toaster-2
Version:
An Angular Toaster Notification library based on AngularJS-Toaster
189 lines • 23.8 kB
JavaScript
import { Component, Input } from '@angular/core';
import { Transitions } from './transitions';
import { ToasterConfig } from './toaster-config';
import * as i0 from "@angular/core";
import * as i1 from "./toaster.service";
import * as i2 from "@angular/common";
import * as i3 from "./toast.component";
export class ToasterContainerComponent {
addToastSubscriber;
clearToastsSubscriber;
toasterService;
toasterconfig;
toasts = [];
constructor(toasterService) {
this.toasterService = toasterService;
}
ngOnInit() {
this.registerSubscribers();
if (this.isNullOrUndefined(this.toasterconfig)) {
this.toasterconfig = new ToasterConfig();
}
}
// event handlers
click(toast, isCloseButton) {
if (toast.onClickCallback) {
toast.onClickCallback(toast);
}
const tapToDismiss = !this.isNullOrUndefined(toast.tapToDismiss)
? toast.tapToDismiss
: this.toasterconfig.tapToDismiss;
if (tapToDismiss || (toast.showCloseButton && isCloseButton)) {
this.removeToast(toast);
}
}
childClick($event) {
this.click($event.value.toast, $event.value.isCloseButton);
}
removeToast(toast) {
const index = this.toasts.indexOf(toast);
if (index < 0) {
return;
}
;
const toastId = this.toastIdOrDefault(toast);
this.toasts.splice(index, 1);
if (toast.onHideCallback) {
toast.onHideCallback(toast);
}
this.toasterService._removeToastSubject.next({ toastId: toastId, toastContainerId: toast.toastContainerId });
}
// private functions
registerSubscribers() {
this.addToastSubscriber = this.toasterService.addToast.subscribe((toast) => {
this.addToast(toast);
});
this.clearToastsSubscriber = this.toasterService.clearToasts.subscribe((clearWrapper) => {
this.clearToasts(clearWrapper);
});
}
addToast(toast) {
if (toast.toastContainerId && this.toasterconfig.toastContainerId
&& toast.toastContainerId !== this.toasterconfig.toastContainerId) {
return;
}
;
if (!toast.type
|| !this.toasterconfig.typeClasses[toast.type]
|| !this.toasterconfig.iconClasses[toast.type]) {
toast.type = this.toasterconfig.defaultToastType;
}
if (this.toasterconfig.preventDuplicates && this.toasts.length > 0) {
if (toast.toastId && this.toasts.some(t => t.toastId === toast.toastId)) {
return;
}
else if (this.toasts.some(t => t.body === toast.body)) {
return;
}
}
if (this.isNullOrUndefined(toast.showCloseButton)) {
if (typeof this.toasterconfig.showCloseButton === 'object') {
toast.showCloseButton = this.toasterconfig.showCloseButton[toast.type];
}
else if (typeof this.toasterconfig.showCloseButton === 'boolean') {
toast.showCloseButton = this.toasterconfig.showCloseButton;
}
}
if (toast.showCloseButton) {
toast.closeHtml = toast.closeHtml || this.toasterconfig.closeHtml;
}
toast.bodyOutputType = toast.bodyOutputType || this.toasterconfig.bodyOutputType;
if (this.toasterconfig.newestOnTop) {
this.toasts.unshift(toast);
if (this.isLimitExceeded()) {
this.toasts.pop();
}
}
else {
this.toasts.push(toast);
if (this.isLimitExceeded()) {
this.toasts.shift();
}
}
if (toast.onShowCallback) {
toast.onShowCallback(toast);
}
}
isLimitExceeded() {
return this.toasterconfig.limit && this.toasts.length > this.toasterconfig.limit;
}
removeAllToasts() {
for (let i = this.toasts.length - 1; i >= 0; i--) {
this.removeToast(this.toasts[i]);
}
}
clearToasts(clearWrapper) {
const toastId = clearWrapper.toastId;
const toastContainerId = clearWrapper.toastContainerId;
if (this.isNullOrUndefined(toastContainerId) || (toastContainerId === this.toasterconfig.toastContainerId)) {
this.clearToastsAction(toastId);
}
}
clearToastsAction(toastId) {
if (toastId) {
this.removeToast(this.toasts.filter(t => t.toastId === toastId)[0]);
}
else {
this.removeAllToasts();
}
}
toastIdOrDefault(toast) {
return toast.toastId || '';
}
isNullOrUndefined(value) {
return value === null || typeof value === 'undefined';
}
ngOnDestroy() {
if (this.addToastSubscriber) {
this.addToastSubscriber.unsubscribe();
}
if (this.clearToastsSubscriber) {
this.clearToastsSubscriber.unsubscribe();
}
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: ToasterContainerComponent, deps: [{ token: i1.ToasterService }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: ToasterContainerComponent, selector: "toaster-container", inputs: { toasterconfig: "toasterconfig" }, ngImport: i0, template: `
<div class="toast-container" [ngClass]="[toasterconfig.positionClass]">
<div toastComp *ngFor="let toast of toasts" class="toast" [toast]="toast"
[toasterconfig]="toasterconfig"
[@toastState]="toasterconfig.animation"
[titleClass]="toasterconfig.titleClass"
[messageClass]="toasterconfig.messageClass"
[ngClass]="[
toasterconfig.iconClasses[toast.type],
toasterconfig.typeClasses[toast.type]
]"
(click)="click(toast)" (clickEvent)="childClick($event)"
(removeToastEvent)="removeToast($event)"
>
</div>
</div>
`, isInline: true, dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3.ToastComponent, selector: "[toastComp]", inputs: ["toasterconfig", "toast", "titleClass", "messageClass"], outputs: ["clickEvent", "removeToastEvent"] }], animations: Transitions });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: ToasterContainerComponent, decorators: [{
type: Component,
args: [{
selector: 'toaster-container',
template: `
<div class="toast-container" [ngClass]="[toasterconfig.positionClass]">
<div toastComp *ngFor="let toast of toasts" class="toast" [toast]="toast"
[toasterconfig]="toasterconfig"
[@toastState]="toasterconfig.animation"
[titleClass]="toasterconfig.titleClass"
[messageClass]="toasterconfig.messageClass"
[ngClass]="[
toasterconfig.iconClasses[toast.type],
toasterconfig.typeClasses[toast.type]
]"
(click)="click(toast)" (clickEvent)="childClick($event)"
(removeToastEvent)="removeToast($event)"
>
</div>
</div>
`,
animations: Transitions
}]
}], ctorParameters: function () { return [{ type: i1.ToasterService }]; }, propDecorators: { toasterconfig: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Rlci1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FuZ3VsYXIyLXRvYXN0ZXIvc3JjL2xpYi90b2FzdGVyLWNvbnRhaW5lci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBR1IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7O0FBMEJqRCxNQUFNLE9BQU8seUJBQXlCO0lBQzFCLGtCQUFrQixDQUFNO0lBQ3hCLHFCQUFxQixDQUFNO0lBQzNCLGNBQWMsQ0FBaUI7SUFFOUIsYUFBYSxDQUFnQjtJQUUvQixNQUFNLEdBQVksRUFBRSxDQUFDO0lBRTVCLFlBQVksY0FBOEI7UUFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDekMsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDNUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1NBQzVDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixLQUFLLENBQUMsS0FBWSxFQUFFLGFBQXVCO1FBQ3ZDLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRTtZQUN2QixLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2hDO1FBRUQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUM1RCxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVk7WUFDcEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO1FBRXRDLElBQUksWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsSUFBSSxhQUFhLENBQUMsRUFBRTtZQUMxRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFXO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVk7UUFDcEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQUUsT0FBTTtTQUFFO1FBQUEsQ0FBQztRQUUxQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTdCLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRTtZQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7U0FBRTtRQUMxRCxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUNqSCxDQUFDO0lBRUQsb0JBQW9CO0lBQ1osbUJBQW1CO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFZLEVBQUUsRUFBRTtZQUM5RSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQTJCLEVBQUUsRUFBRTtZQUNuRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLFFBQVEsQ0FBQyxLQUFZO1FBQ3pCLElBQUksS0FBSyxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCO2VBQzFELEtBQUssQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFO1lBQUUsT0FBTTtTQUFFO1FBQUEsQ0FBQztRQUVsRixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUk7ZUFDUixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7ZUFDM0MsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEQsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDO1NBQ3BEO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNoRSxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDckUsT0FBTzthQUNWO2lCQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDckQsT0FBTzthQUNWO1NBQ0o7UUFFRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDL0MsSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxLQUFLLFFBQVEsRUFBRTtnQkFDeEQsS0FBSyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDMUU7aUJBQU0sSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxLQUFLLFNBQVMsRUFBRTtnQkFDaEUsS0FBSyxDQUFDLGVBQWUsR0FBWSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQzthQUN2RTtTQUNKO1FBRUQsSUFBSSxLQUFLLENBQUMsZUFBZSxFQUFFO1lBQ3ZCLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztTQUNyRTtRQUVELEtBQUssQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQztRQUVqRixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFO2dCQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ3JCO1NBQ0o7YUFBTTtZQUNILElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFO2dCQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3ZCO1NBQ0o7UUFFRCxJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUU7WUFDdEIsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMvQjtJQUNMLENBQUM7SUFFTyxlQUFlO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7SUFDckYsQ0FBQztJQUVPLGVBQWU7UUFDbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwQztJQUNMLENBQUM7SUFFTyxXQUFXLENBQUMsWUFBMkI7UUFDM0MsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBRTtRQUN0QyxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQztRQUV2RCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ3hHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNuQztJQUNMLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxPQUFnQjtRQUN0QyxJQUFJLE9BQU8sRUFBRTtZQUNULElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkU7YUFBTTtZQUNILElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUMxQjtJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUFZO1FBQ2pDLE9BQU8sS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQVU7UUFDaEMsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFdBQVcsQ0FBQztJQUMxRCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQUU7UUFDdkUsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FBRTtJQUNqRixDQUFDO3VHQXJKUSx5QkFBeUI7MkZBQXpCLHlCQUF5QixxR0FuQnhCOzs7Ozs7Ozs7Ozs7Ozs7O1NBZ0JMLGljQUNPLFdBQVc7OzJGQUVkLHlCQUF5QjtrQkFyQnJDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7O1NBZ0JMO29CQUNMLFVBQVUsRUFBRSxXQUFXO2lCQUMxQjtxR0FNWSxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBJbnB1dCwgXHJcbiAgICBPbkluaXQsXHJcbiAgICBPbkRlc3Ryb3kgXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYW5zaXRpb25zIH0gZnJvbSAnLi90cmFuc2l0aW9ucyc7XHJcbmltcG9ydCB7IFRvYXN0ZXJDb25maWcgfSBmcm9tICcuL3RvYXN0ZXItY29uZmlnJztcclxuaW1wb3J0IHsgVG9hc3RlclNlcnZpY2V9IGZyb20gJy4vdG9hc3Rlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSUNsZWFyV3JhcHBlciB9IGZyb20gJy4vY2xlYXJXcmFwcGVyJztcclxuaW1wb3J0IHsgVG9hc3QgfSBmcm9tICcuL3RvYXN0JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd0b2FzdGVyLWNvbnRhaW5lcicsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b2FzdC1jb250YWluZXJcIiBbbmdDbGFzc109XCJbdG9hc3RlcmNvbmZpZy5wb3NpdGlvbkNsYXNzXVwiPlxyXG4gICAgICAgICAgICA8ZGl2IHRvYXN0Q29tcCAqbmdGb3I9XCJsZXQgdG9hc3Qgb2YgdG9hc3RzXCIgY2xhc3M9XCJ0b2FzdFwiIFt0b2FzdF09XCJ0b2FzdFwiXHJcbiAgICAgICAgICAgICAgICBbdG9hc3RlcmNvbmZpZ109XCJ0b2FzdGVyY29uZmlnXCJcclxuICAgICAgICAgICAgICAgIFtAdG9hc3RTdGF0ZV09XCJ0b2FzdGVyY29uZmlnLmFuaW1hdGlvblwiXHJcbiAgICAgICAgICAgICAgICBbdGl0bGVDbGFzc109XCJ0b2FzdGVyY29uZmlnLnRpdGxlQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgW21lc3NhZ2VDbGFzc109XCJ0b2FzdGVyY29uZmlnLm1lc3NhZ2VDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJbXHJcbiAgICAgICAgICAgICAgICAgICAgdG9hc3RlcmNvbmZpZy5pY29uQ2xhc3Nlc1t0b2FzdC50eXBlXSxcclxuICAgICAgICAgICAgICAgICAgICB0b2FzdGVyY29uZmlnLnR5cGVDbGFzc2VzW3RvYXN0LnR5cGVdXHJcbiAgICAgICAgICAgICAgICBdXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGljayh0b2FzdClcIiAoY2xpY2tFdmVudCk9XCJjaGlsZENsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKHJlbW92ZVRvYXN0RXZlbnQpPVwicmVtb3ZlVG9hc3QoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgYCxcclxuICAgIGFuaW1hdGlvbnM6IFRyYW5zaXRpb25zXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUb2FzdGVyQ29udGFpbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgcHJpdmF0ZSBhZGRUb2FzdFN1YnNjcmliZXI6IGFueTtcclxuICAgIHByaXZhdGUgY2xlYXJUb2FzdHNTdWJzY3JpYmVyOiBhbnk7XHJcbiAgICBwcml2YXRlIHRvYXN0ZXJTZXJ2aWNlOiBUb2FzdGVyU2VydmljZTtcclxuXHJcbiAgICBASW5wdXQoKSB0b2FzdGVyY29uZmlnOiBUb2FzdGVyQ29uZmlnO1xyXG5cclxuICAgIHB1YmxpYyB0b2FzdHM6IFRvYXN0W10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0b2FzdGVyU2VydmljZTogVG9hc3RlclNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlID0gdG9hc3RlclNlcnZpY2U7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmliZXJzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNOdWxsT3JVbmRlZmluZWQodGhpcy50b2FzdGVyY29uZmlnKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJjb25maWcgPSBuZXcgVG9hc3RlckNvbmZpZygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBldmVudCBoYW5kbGVyc1xyXG4gICAgY2xpY2sodG9hc3Q6IFRvYXN0LCBpc0Nsb3NlQnV0dG9uPzogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh0b2FzdC5vbkNsaWNrQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgdG9hc3Qub25DbGlja0NhbGxiYWNrKHRvYXN0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRhcFRvRGlzbWlzcyA9ICF0aGlzLmlzTnVsbE9yVW5kZWZpbmVkKHRvYXN0LnRhcFRvRGlzbWlzcykgXHJcbiAgICAgICAgICAgID8gdG9hc3QudGFwVG9EaXNtaXNzXHJcbiAgICAgICAgICAgIDogdGhpcy50b2FzdGVyY29uZmlnLnRhcFRvRGlzbWlzcztcclxuXHJcbiAgICAgICAgaWYgKHRhcFRvRGlzbWlzcyB8fCAodG9hc3Quc2hvd0Nsb3NlQnV0dG9uICYmIGlzQ2xvc2VCdXR0b24pKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVG9hc3QodG9hc3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjaGlsZENsaWNrKCRldmVudDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jbGljaygkZXZlbnQudmFsdWUudG9hc3QsICRldmVudC52YWx1ZS5pc0Nsb3NlQnV0dG9uKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVUb2FzdCh0b2FzdDogVG9hc3QpIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudG9hc3RzLmluZGV4T2YodG9hc3QpO1xyXG4gICAgICAgIGlmIChpbmRleCA8IDApIHsgcmV0dXJuIH07XHJcblxyXG4gICAgICAgIGNvbnN0IHRvYXN0SWQgPSB0aGlzLnRvYXN0SWRPckRlZmF1bHQodG9hc3QpO1xyXG5cclxuICAgICAgICB0aGlzLnRvYXN0cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgICAgICBpZiAodG9hc3Qub25IaWRlQ2FsbGJhY2spIHsgdG9hc3Qub25IaWRlQ2FsbGJhY2sodG9hc3QpOyB9XHJcbiAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5fcmVtb3ZlVG9hc3RTdWJqZWN0Lm5leHQoeyB0b2FzdElkOiB0b2FzdElkLCB0b2FzdENvbnRhaW5lcklkOiB0b2FzdC50b2FzdENvbnRhaW5lcklkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHByaXZhdGUgZnVuY3Rpb25zXHJcbiAgICBwcml2YXRlIHJlZ2lzdGVyU3Vic2NyaWJlcnMoKSB7XHJcbiAgICAgICAgdGhpcy5hZGRUb2FzdFN1YnNjcmliZXIgPSB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmFkZFRvYXN0LnN1YnNjcmliZSgodG9hc3Q6IFRvYXN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkVG9hc3QodG9hc3QpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyVG9hc3RzU3Vic2NyaWJlciA9IHRoaXMudG9hc3RlclNlcnZpY2UuY2xlYXJUb2FzdHMuc3Vic2NyaWJlKChjbGVhcldyYXBwZXI6IElDbGVhcldyYXBwZXIpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRvYXN0cyhjbGVhcldyYXBwZXIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkVG9hc3QodG9hc3Q6IFRvYXN0KSB7XHJcbiAgICAgICAgaWYgKHRvYXN0LnRvYXN0Q29udGFpbmVySWQgJiYgdGhpcy50b2FzdGVyY29uZmlnLnRvYXN0Q29udGFpbmVySWRcclxuICAgICAgICAgICAgJiYgdG9hc3QudG9hc3RDb250YWluZXJJZCAhPT0gdGhpcy50b2FzdGVyY29uZmlnLnRvYXN0Q29udGFpbmVySWQpIHsgcmV0dXJuIH07XHJcblxyXG4gICAgICAgIGlmICghdG9hc3QudHlwZSBcclxuICAgICAgICAgICAgfHwgIXRoaXMudG9hc3RlcmNvbmZpZy50eXBlQ2xhc3Nlc1t0b2FzdC50eXBlXVxyXG4gICAgICAgICAgICB8fCAhdGhpcy50b2FzdGVyY29uZmlnLmljb25DbGFzc2VzW3RvYXN0LnR5cGVdKSB7XHJcbiAgICAgICAgICAgIHRvYXN0LnR5cGUgPSB0aGlzLnRvYXN0ZXJjb25maWcuZGVmYXVsdFRvYXN0VHlwZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRvYXN0ZXJjb25maWcucHJldmVudER1cGxpY2F0ZXMgJiYgdGhpcy50b2FzdHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAodG9hc3QudG9hc3RJZCAmJiB0aGlzLnRvYXN0cy5zb21lKHQgPT4gdC50b2FzdElkID09PSB0b2FzdC50b2FzdElkKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudG9hc3RzLnNvbWUodCA9PiB0LmJvZHkgPT09IHRvYXN0LmJvZHkpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzTnVsbE9yVW5kZWZpbmVkKHRvYXN0LnNob3dDbG9zZUJ1dHRvbikpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRvYXN0ZXJjb25maWcuc2hvd0Nsb3NlQnV0dG9uID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgdG9hc3Quc2hvd0Nsb3NlQnV0dG9uID0gdGhpcy50b2FzdGVyY29uZmlnLnNob3dDbG9zZUJ1dHRvblt0b2FzdC50eXBlXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy50b2FzdGVyY29uZmlnLnNob3dDbG9zZUJ1dHRvbiA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICAgICAgICB0b2FzdC5zaG93Q2xvc2VCdXR0b24gPSA8Ym9vbGVhbj50aGlzLnRvYXN0ZXJjb25maWcuc2hvd0Nsb3NlQnV0dG9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodG9hc3Quc2hvd0Nsb3NlQnV0dG9uKSB7XHJcbiAgICAgICAgICAgIHRvYXN0LmNsb3NlSHRtbCA9IHRvYXN0LmNsb3NlSHRtbCB8fCB0aGlzLnRvYXN0ZXJjb25maWcuY2xvc2VIdG1sO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdG9hc3QuYm9keU91dHB1dFR5cGUgPSB0b2FzdC5ib2R5T3V0cHV0VHlwZSB8fCB0aGlzLnRvYXN0ZXJjb25maWcuYm9keU91dHB1dFR5cGU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRvYXN0ZXJjb25maWcubmV3ZXN0T25Ub3ApIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHMudW5zaGlmdCh0b2FzdCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGltaXRFeGNlZWRlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0cy5wb3AoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RzLnB1c2godG9hc3QpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0xpbWl0RXhjZWVkZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHMuc2hpZnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRvYXN0Lm9uU2hvd0NhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHRvYXN0Lm9uU2hvd0NhbGxiYWNrKHRvYXN0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc0xpbWl0RXhjZWVkZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9hc3RlcmNvbmZpZy5saW1pdCAmJiB0aGlzLnRvYXN0cy5sZW5ndGggPiB0aGlzLnRvYXN0ZXJjb25maWcubGltaXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZW1vdmVBbGxUb2FzdHMoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMudG9hc3RzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVG9hc3QodGhpcy50b2FzdHNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsZWFyVG9hc3RzKGNsZWFyV3JhcHBlcjogSUNsZWFyV3JhcHBlcikge1xyXG4gICAgICAgIGNvbnN0IHRvYXN0SWQgPSBjbGVhcldyYXBwZXIudG9hc3RJZCA7XHJcbiAgICAgICAgY29uc3QgdG9hc3RDb250YWluZXJJZCA9IGNsZWFyV3JhcHBlci50b2FzdENvbnRhaW5lcklkO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc051bGxPclVuZGVmaW5lZCh0b2FzdENvbnRhaW5lcklkKSB8fCAodG9hc3RDb250YWluZXJJZCA9PT0gdGhpcy50b2FzdGVyY29uZmlnLnRvYXN0Q29udGFpbmVySWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUb2FzdHNBY3Rpb24odG9hc3RJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2xlYXJUb2FzdHNBY3Rpb24odG9hc3RJZD86IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0b2FzdElkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVG9hc3QodGhpcy50b2FzdHMuZmlsdGVyKHQgPT4gdC50b2FzdElkID09PSB0b2FzdElkKVswXSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxUb2FzdHMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0b2FzdElkT3JEZWZhdWx0KHRvYXN0OiBUb2FzdCkge1xyXG4gICAgICAgIHJldHVybiB0b2FzdC50b2FzdElkIHx8ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNOdWxsT3JVbmRlZmluZWQodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmFkZFRvYXN0U3Vic2NyaWJlcikgeyB0aGlzLmFkZFRvYXN0U3Vic2NyaWJlci51bnN1YnNjcmliZSgpOyB9XHJcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJUb2FzdHNTdWJzY3JpYmVyKSB7IHRoaXMuY2xlYXJUb2FzdHNTdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7IH1cclxuICAgIH1cclxufVxyXG4iXX0=