@vamidicreations/angular2-toaster
Version:
An Angular Toaster Notification library based on AngularJS-Toaster
186 lines • 23.2 kB
JavaScript
import { Component, Input } from '@angular/core';
import { Transitions } from './transitions';
import { ToasterConfig } from './toaster-config';
import { ToasterService } from './toaster.service';
import * as i0 from "@angular/core";
import * as i1 from "./toaster.service";
import * as i2 from "./toast.component";
import * as i3 from "@angular/common";
export class ToasterContainerComponent {
constructor(toasterService) {
this.toasts = [];
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();
}
}
}
ToasterContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ToasterContainerComponent, deps: [{ token: i1.ToasterService }], target: i0.ɵɵFactoryTarget.Component });
ToasterContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", 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, components: [{ type: i2.ToastComponent, selector: "[toastComp]", inputs: ["toasterconfig", "toast", "titleClass", "messageClass"], outputs: ["clickEvent", "removeToastEvent"] }], directives: [{ type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], animations: Transitions });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Rlci1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FuZ3VsYXIyLXRvYXN0ZXIvc3JjL2xpYi90b2FzdGVyLWNvbnRhaW5lci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBR1IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDOzs7OztBQXlCbEQsTUFBTSxPQUFPLHlCQUF5QjtJQVNsQyxZQUFZLGNBQThCO1FBRm5DLFdBQU0sR0FBWSxFQUFFLENBQUM7UUFHeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDekMsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDNUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1NBQzVDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixLQUFLLENBQUMsS0FBWSxFQUFFLGFBQXVCO1FBQ3ZDLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRTtZQUN2QixLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2hDO1FBRUQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUM1RCxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVk7WUFDcEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO1FBRXRDLElBQUksWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsSUFBSSxhQUFhLENBQUMsRUFBRTtZQUMxRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFXO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVk7UUFDcEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQUUsT0FBTTtTQUFFO1FBQUEsQ0FBQztRQUUxQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTdCLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRTtZQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7U0FBRTtRQUMxRCxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUNqSCxDQUFDO0lBRUQsb0JBQW9CO0lBQ1osbUJBQW1CO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFZLEVBQUUsRUFBRTtZQUM5RSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQTJCLEVBQUUsRUFBRTtZQUNuRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLFFBQVEsQ0FBQyxLQUFZO1FBQ3pCLElBQUksS0FBSyxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCO2VBQzFELEtBQUssQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFO1lBQUUsT0FBTTtTQUFFO1FBQUEsQ0FBQztRQUVsRixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUk7ZUFDUixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7ZUFDM0MsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEQsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDO1NBQ3BEO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNoRSxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDckUsT0FBTzthQUNWO2lCQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDckQsT0FBTzthQUNWO1NBQ0o7UUFFRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDL0MsSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxLQUFLLFFBQVEsRUFBRTtnQkFDeEQsS0FBSyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDMUU7aUJBQU0sSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxLQUFLLFNBQVMsRUFBRTtnQkFDaEUsS0FBSyxDQUFDLGVBQWUsR0FBWSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQzthQUN2RTtTQUNKO1FBRUQsSUFBSSxLQUFLLENBQUMsZUFBZSxFQUFFO1lBQ3ZCLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztTQUNyRTtRQUVELEtBQUssQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQztRQUVqRixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFO2dCQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ3JCO1NBQ0o7YUFBTTtZQUNILElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFO2dCQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3ZCO1NBQ0o7UUFFRCxJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUU7WUFDdEIsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMvQjtJQUNMLENBQUM7SUFFTyxlQUFlO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7SUFDckYsQ0FBQztJQUVPLGVBQWU7UUFDbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwQztJQUNMLENBQUM7SUFFTyxXQUFXLENBQUMsWUFBMkI7UUFDM0MsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBRTtRQUN0QyxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQztRQUV2RCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ3hHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNuQztJQUNMLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxPQUFnQjtRQUN0QyxJQUFJLE9BQU8sRUFBRTtZQUNULElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkU7YUFBTTtZQUNILElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUMxQjtJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUFZO1FBQ2pDLE9BQU8sS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQVU7UUFDaEMsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFdBQVcsQ0FBQztJQUMxRCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQUU7UUFDdkUsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FBRTtJQUNqRixDQUFDOzt1SEFySlEseUJBQXlCOzJHQUF6Qix5QkFBeUIscUdBbkJ4Qjs7Ozs7Ozs7Ozs7Ozs7OztTQWdCTCxvWkFDTyxXQUFXOzRGQUVkLHlCQUF5QjtrQkFyQnJDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7O1NBZ0JMO29CQUNMLFVBQVUsRUFBRSxXQUFXO2lCQUMxQjtxR0FNWSxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgXG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LCBcbiAgICBPbkluaXQsXG4gICAgT25EZXN0cm95IFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zaXRpb25zIH0gZnJvbSAnLi90cmFuc2l0aW9ucyc7XG5pbXBvcnQgeyBUb2FzdGVyQ29uZmlnIH0gZnJvbSAnLi90b2FzdGVyLWNvbmZpZyc7XG5pbXBvcnQgeyBUb2FzdGVyU2VydmljZX0gZnJvbSAnLi90b2FzdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUNsZWFyV3JhcHBlciB9IGZyb20gJy4vY2xlYXJXcmFwcGVyJztcbmltcG9ydCB7IFRvYXN0IH0gZnJvbSAnLi90b2FzdCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndG9hc3Rlci1jb250YWluZXInLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b2FzdC1jb250YWluZXJcIiBbbmdDbGFzc109XCJbdG9hc3RlcmNvbmZpZy5wb3NpdGlvbkNsYXNzXVwiPlxuICAgICAgICAgICAgPGRpdiB0b2FzdENvbXAgKm5nRm9yPVwibGV0IHRvYXN0IG9mIHRvYXN0c1wiIGNsYXNzPVwidG9hc3RcIiBbdG9hc3RdPVwidG9hc3RcIlxuICAgICAgICAgICAgICAgIFt0b2FzdGVyY29uZmlnXT1cInRvYXN0ZXJjb25maWdcIlxuICAgICAgICAgICAgICAgIFtAdG9hc3RTdGF0ZV09XCJ0b2FzdGVyY29uZmlnLmFuaW1hdGlvblwiXG4gICAgICAgICAgICAgICAgW3RpdGxlQ2xhc3NdPVwidG9hc3RlcmNvbmZpZy50aXRsZUNsYXNzXCJcbiAgICAgICAgICAgICAgICBbbWVzc2FnZUNsYXNzXT1cInRvYXN0ZXJjb25maWcubWVzc2FnZUNsYXNzXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJbXG4gICAgICAgICAgICAgICAgICAgIHRvYXN0ZXJjb25maWcuaWNvbkNsYXNzZXNbdG9hc3QudHlwZV0sXG4gICAgICAgICAgICAgICAgICAgIHRvYXN0ZXJjb25maWcudHlwZUNsYXNzZXNbdG9hc3QudHlwZV1cbiAgICAgICAgICAgICAgICBdXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2sodG9hc3QpXCIgKGNsaWNrRXZlbnQpPVwiY2hpbGRDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAocmVtb3ZlVG9hc3RFdmVudCk9XCJyZW1vdmVUb2FzdCgkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgYCxcbiAgICBhbmltYXRpb25zOiBUcmFuc2l0aW9uc1xufSlcbmV4cG9ydCBjbGFzcyBUb2FzdGVyQ29udGFpbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgYWRkVG9hc3RTdWJzY3JpYmVyOiBhbnk7XG4gICAgcHJpdmF0ZSBjbGVhclRvYXN0c1N1YnNjcmliZXI6IGFueTtcbiAgICBwcml2YXRlIHRvYXN0ZXJTZXJ2aWNlOiBUb2FzdGVyU2VydmljZTtcblxuICAgIEBJbnB1dCgpIHRvYXN0ZXJjb25maWc6IFRvYXN0ZXJDb25maWc7XG5cbiAgICBwdWJsaWMgdG9hc3RzOiBUb2FzdFtdID0gW107XG5cbiAgICBjb25zdHJ1Y3Rvcih0b2FzdGVyU2VydmljZTogVG9hc3RlclNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZSA9IHRvYXN0ZXJTZXJ2aWNlO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaWJlcnMoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNOdWxsT3JVbmRlZmluZWQodGhpcy50b2FzdGVyY29uZmlnKSkge1xuICAgICAgICAgICAgdGhpcy50b2FzdGVyY29uZmlnID0gbmV3IFRvYXN0ZXJDb25maWcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGV2ZW50IGhhbmRsZXJzXG4gICAgY2xpY2sodG9hc3Q6IFRvYXN0LCBpc0Nsb3NlQnV0dG9uPzogYm9vbGVhbikge1xuICAgICAgICBpZiAodG9hc3Qub25DbGlja0NhbGxiYWNrKSB7XG4gICAgICAgICAgICB0b2FzdC5vbkNsaWNrQ2FsbGJhY2sodG9hc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFwVG9EaXNtaXNzID0gIXRoaXMuaXNOdWxsT3JVbmRlZmluZWQodG9hc3QudGFwVG9EaXNtaXNzKSBcbiAgICAgICAgICAgID8gdG9hc3QudGFwVG9EaXNtaXNzXG4gICAgICAgICAgICA6IHRoaXMudG9hc3RlcmNvbmZpZy50YXBUb0Rpc21pc3M7XG5cbiAgICAgICAgaWYgKHRhcFRvRGlzbWlzcyB8fCAodG9hc3Quc2hvd0Nsb3NlQnV0dG9uICYmIGlzQ2xvc2VCdXR0b24pKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRvYXN0KHRvYXN0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNoaWxkQ2xpY2soJGV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5jbGljaygkZXZlbnQudmFsdWUudG9hc3QsICRldmVudC52YWx1ZS5pc0Nsb3NlQnV0dG9uKTtcbiAgICB9XG5cbiAgICByZW1vdmVUb2FzdCh0b2FzdDogVG9hc3QpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnRvYXN0cy5pbmRleE9mKHRvYXN0KTtcbiAgICAgICAgaWYgKGluZGV4IDwgMCkgeyByZXR1cm4gfTtcblxuICAgICAgICBjb25zdCB0b2FzdElkID0gdGhpcy50b2FzdElkT3JEZWZhdWx0KHRvYXN0KTtcblxuICAgICAgICB0aGlzLnRvYXN0cy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgIGlmICh0b2FzdC5vbkhpZGVDYWxsYmFjaykgeyB0b2FzdC5vbkhpZGVDYWxsYmFjayh0b2FzdCk7IH1cbiAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5fcmVtb3ZlVG9hc3RTdWJqZWN0Lm5leHQoeyB0b2FzdElkOiB0b2FzdElkLCB0b2FzdENvbnRhaW5lcklkOiB0b2FzdC50b2FzdENvbnRhaW5lcklkIH0pO1xuICAgIH1cblxuICAgIC8vIHByaXZhdGUgZnVuY3Rpb25zXG4gICAgcHJpdmF0ZSByZWdpc3RlclN1YnNjcmliZXJzKCkge1xuICAgICAgICB0aGlzLmFkZFRvYXN0U3Vic2NyaWJlciA9IHRoaXMudG9hc3RlclNlcnZpY2UuYWRkVG9hc3Quc3Vic2NyaWJlKCh0b2FzdDogVG9hc3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkVG9hc3QodG9hc3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNsZWFyVG9hc3RzU3Vic2NyaWJlciA9IHRoaXMudG9hc3RlclNlcnZpY2UuY2xlYXJUb2FzdHMuc3Vic2NyaWJlKChjbGVhcldyYXBwZXI6IElDbGVhcldyYXBwZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUb2FzdHMoY2xlYXJXcmFwcGVyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRUb2FzdCh0b2FzdDogVG9hc3QpIHtcbiAgICAgICAgaWYgKHRvYXN0LnRvYXN0Q29udGFpbmVySWQgJiYgdGhpcy50b2FzdGVyY29uZmlnLnRvYXN0Q29udGFpbmVySWRcbiAgICAgICAgICAgICYmIHRvYXN0LnRvYXN0Q29udGFpbmVySWQgIT09IHRoaXMudG9hc3RlcmNvbmZpZy50b2FzdENvbnRhaW5lcklkKSB7IHJldHVybiB9O1xuXG4gICAgICAgIGlmICghdG9hc3QudHlwZSBcbiAgICAgICAgICAgIHx8ICF0aGlzLnRvYXN0ZXJjb25maWcudHlwZUNsYXNzZXNbdG9hc3QudHlwZV1cbiAgICAgICAgICAgIHx8ICF0aGlzLnRvYXN0ZXJjb25maWcuaWNvbkNsYXNzZXNbdG9hc3QudHlwZV0pIHtcbiAgICAgICAgICAgIHRvYXN0LnR5cGUgPSB0aGlzLnRvYXN0ZXJjb25maWcuZGVmYXVsdFRvYXN0VHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRvYXN0ZXJjb25maWcucHJldmVudER1cGxpY2F0ZXMgJiYgdGhpcy50b2FzdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKHRvYXN0LnRvYXN0SWQgJiYgdGhpcy50b2FzdHMuc29tZSh0ID0+IHQudG9hc3RJZCA9PT0gdG9hc3QudG9hc3RJZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudG9hc3RzLnNvbWUodCA9PiB0LmJvZHkgPT09IHRvYXN0LmJvZHkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNOdWxsT3JVbmRlZmluZWQodG9hc3Quc2hvd0Nsb3NlQnV0dG9uKSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRvYXN0ZXJjb25maWcuc2hvd0Nsb3NlQnV0dG9uID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHRvYXN0LnNob3dDbG9zZUJ1dHRvbiA9IHRoaXMudG9hc3RlcmNvbmZpZy5zaG93Q2xvc2VCdXR0b25bdG9hc3QudHlwZV07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnRvYXN0ZXJjb25maWcuc2hvd0Nsb3NlQnV0dG9uID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICB0b2FzdC5zaG93Q2xvc2VCdXR0b24gPSA8Ym9vbGVhbj50aGlzLnRvYXN0ZXJjb25maWcuc2hvd0Nsb3NlQnV0dG9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRvYXN0LnNob3dDbG9zZUJ1dHRvbikge1xuICAgICAgICAgICAgdG9hc3QuY2xvc2VIdG1sID0gdG9hc3QuY2xvc2VIdG1sIHx8IHRoaXMudG9hc3RlcmNvbmZpZy5jbG9zZUh0bWw7XG4gICAgICAgIH1cblxuICAgICAgICB0b2FzdC5ib2R5T3V0cHV0VHlwZSA9IHRvYXN0LmJvZHlPdXRwdXRUeXBlIHx8IHRoaXMudG9hc3RlcmNvbmZpZy5ib2R5T3V0cHV0VHlwZTtcblxuICAgICAgICBpZiAodGhpcy50b2FzdGVyY29uZmlnLm5ld2VzdE9uVG9wKSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0cy51bnNoaWZ0KHRvYXN0KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGltaXRFeGNlZWRlZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHMucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0cy5wdXNoKHRvYXN0KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGltaXRFeGNlZWRlZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHMuc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b2FzdC5vblNob3dDYWxsYmFjaykge1xuICAgICAgICAgICAgdG9hc3Qub25TaG93Q2FsbGJhY2sodG9hc3QpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0xpbWl0RXhjZWVkZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvYXN0ZXJjb25maWcubGltaXQgJiYgdGhpcy50b2FzdHMubGVuZ3RoID4gdGhpcy50b2FzdGVyY29uZmlnLmxpbWl0O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlQWxsVG9hc3RzKCkge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy50b2FzdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVG9hc3QodGhpcy50b2FzdHNbaV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhclRvYXN0cyhjbGVhcldyYXBwZXI6IElDbGVhcldyYXBwZXIpIHtcbiAgICAgICAgY29uc3QgdG9hc3RJZCA9IGNsZWFyV3JhcHBlci50b2FzdElkIDtcbiAgICAgICAgY29uc3QgdG9hc3RDb250YWluZXJJZCA9IGNsZWFyV3JhcHBlci50b2FzdENvbnRhaW5lcklkO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTnVsbE9yVW5kZWZpbmVkKHRvYXN0Q29udGFpbmVySWQpIHx8ICh0b2FzdENvbnRhaW5lcklkID09PSB0aGlzLnRvYXN0ZXJjb25maWcudG9hc3RDb250YWluZXJJZCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUb2FzdHNBY3Rpb24odG9hc3RJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyVG9hc3RzQWN0aW9uKHRvYXN0SWQ/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRvYXN0SWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVG9hc3QodGhpcy50b2FzdHMuZmlsdGVyKHQgPT4gdC50b2FzdElkID09PSB0b2FzdElkKVswXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUFsbFRvYXN0cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b2FzdElkT3JEZWZhdWx0KHRvYXN0OiBUb2FzdCkge1xuICAgICAgICByZXR1cm4gdG9hc3QudG9hc3RJZCB8fCAnJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCc7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmFkZFRvYXN0U3Vic2NyaWJlcikgeyB0aGlzLmFkZFRvYXN0U3Vic2NyaWJlci51bnN1YnNjcmliZSgpOyB9XG4gICAgICAgIGlmICh0aGlzLmNsZWFyVG9hc3RzU3Vic2NyaWJlcikgeyB0aGlzLmNsZWFyVG9hc3RzU3Vic2NyaWJlci51bnN1YnNjcmliZSgpOyB9XG4gICAgfVxufVxuIl19