UNPKG

angular2-toaster-2

Version:

An Angular Toaster Notification library based on AngularJS-Toaster

189 lines 23.8 kB
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Rlci1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FuZ3VsYXIyLXRvYXN0ZXIvc3JjL2xpYi90b2FzdGVyLWNvbnRhaW5lci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBR1IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7O0FBMEJqRCxNQUFNLE9BQU8seUJBQXlCO0lBQzFCLGtCQUFrQixDQUFNO0lBQ3hCLHFCQUFxQixDQUFNO0lBQzNCLGNBQWMsQ0FBaUI7SUFFOUIsYUFBYSxDQUFnQjtJQUUvQixNQUFNLEdBQVksRUFBRSxDQUFDO0lBRTVCLFlBQVksY0FBOEI7UUFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDekMsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDNUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1NBQzVDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixLQUFLLENBQUMsS0FBWSxFQUFFLGFBQXVCO1FBQ3ZDLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRTtZQUN2QixLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2hDO1FBRUQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUM1RCxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVk7WUFDcEIsQ0FBQyxDQUFDLElB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QUFFLENBQUM7SUFDL0IsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQVU7UUFDaEMsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFdBQVcsQ0FBQztJQUMxRCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQUU7UUFDdkUsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FBRTtJQUNqRixDQUFDO3VHQXJKUSx5QkFBeUI7MkZBQXpCLHlCQUF5QixxR0FuQnhCOzs7Ozs7Ozs7Ozs7Ozs7O1NBZ0JMLGljQUNPLFdBQVc7OzJGQUVkLHlCQUF5QjtrQkFyQnJDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7O1NBZ0JMO29CQUNMLFVBQVUsRUFBRSxXQUFXO2lCQUMxQjtxR0FNWSxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBJbnB1dCwgXHJcbiAgICBPbkluaXQsXHJcbiAgICBPbkRlc3Ryb3kgXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYW5zaXRpb25zIH0gZnJvbSAnLi90cmFuc2l0aW9ucyc7XHJcbmltcG9ydCB7IFRvYXN0ZXJDb25maWcgfSBmcm9tICcuL3RvYXN0ZXItY29uZmlnJztcclxuaW1wb3J0IHsgVG9hc3RlclNlcnZpY2V9IGZyb20gJy4vdG9hc3Rlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSUNsZWFyV3JhcHBlciB9IGZyb20gJy4vY2xlYXJXcmFwcGVyJztcclxuaW1wb3J0IHsgVG9hc3QgfSBmcm9tICcuL3RvYXN0JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd0b2FzdGVyLWNvbnRhaW5lcicsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b2FzdC1jb250YWluZXJcIiBbbmdDbGFzc109XCJbdG9hc3RlcmNvbmZpZy5wb3NpdGlvbkNsYXNzXVwiPlxyXG4gICAgICAgICAgICA8ZGl2IHRvYXN0Q29tcCAqbmdGb3I9XCJsZXQgdG9hc3Qgb2YgdG9hc3RzXCIgY2xhc3M9XCJ0b2FzdFwiIFt0b2FzdF09XCJ0b2FzdFwiXHJcbiAgICAgICAgICAgICAgICBbdG9hc3RlcmNvbmZpZ109XCJ0b2FzdGVyY29uZmlnXCJcclxuICAgICAgICAgICAgICAgIFtAdG9hc3RTdGF0ZV09XCJ0b2FzdGVyY29uZmlnLmFuaW1hdGlvblwiXHJcbiAgICAgICAgICAgICAgICBbdGl0bGVDbGFzc109XCJ0b2FzdGVyY29uZmlnLnRpdGxlQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgW21lc3NhZ2VDbGFzc109XCJ0b2FzdGVyY29uZmlnLm1lc3NhZ2VDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJbXHJcbiAgICAgICAgICAgICAgICAgICAgdG9hc3RlcmNvbmZpZy5pY29uQ2xhc3Nlc1t0b2FzdC50eXBlXSxcclxuICAgICAgICAgICAgICAgICAgICB0b2FzdGVyY29uZmlnLnR5cGVDbGFzc2VzW3RvYXN0LnR5cGVdXHJcbiAgICAgICAgICAgICAgICBdXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGljayh0b2FzdClcIiAoY2xpY2tFdmVudCk9XCJjaGlsZENsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKHJlbW92ZVRvYXN0RXZlbnQpPVwicmVtb3ZlVG9hc3QoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgYCxcclxuICAgIGFuaW1hdGlvbnM6IFRyYW5zaXRpb25zXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUb2FzdGVyQ29udGFpbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgcHJpdmF0ZSBhZGRUb2FzdFN1YnNjcmliZXI6IGFueTtcclxuICAgIHByaXZhdGUgY2xlYXJUb2FzdHNTdWJzY3JpYmVyOiBhbnk7XHJcbiAgICBwcml2YXRlIHRvYXN0ZXJTZXJ2aWNlOiBUb2FzdGVyU2VydmljZTtcclxuXHJcbiAgICBASW5wdXQoKSB0b2FzdGVyY29uZmlnOiBUb2FzdGVyQ29uZmlnO1xyXG5cclxuICAgIHB1YmxpYyB0b2FzdHM6IFRvYXN0W10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0b2FzdGVyU2VydmljZTogVG9hc3RlclNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlID0gdG9hc3RlclNlcnZpY2U7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmliZXJzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNOdWxsT3JVbmRlZmluZWQodGhpcy50b2FzdGVyY29uZmlnKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJjb25maWcgPSBuZXcgVG9hc3RlckNvbmZpZygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBldmVudCBoYW5kbGVyc1xyXG4gICAgY2xpY2sodG9hc3Q6IFRvYXN0LCBpc0Nsb3NlQnV0dG9uPzogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh0b2FzdC5vbkNsaWNrQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgdG9hc3Qub25DbGlja0NhbGxiYWNrKHRvYXN0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRhcFRvRGlzbWlzcyA9ICF0aGlzLmlzTnVsbE9yVW5kZWZpbmVkKHRvYXN0LnRhcFRvRGlzbWlzcykgXHJcbiAgICAgICAgICAgID8gdG9hc3QudGFwVG9EaXNtaXNzXHJcbiAgICAgICAgICAgIDogdGhpcy50b2FzdGVyY29uZmlnLnRhcFRvRGlzbWlzcztcclxuXHJcbiAgICAgICAgaWYgKHRhcFRvRGlzbWlzcyB8fCAodG9hc3Quc2hvd0Nsb3NlQnV0dG9uICYmIGlzQ2xvc2VCdXR0b24pKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVG9hc3QodG9hc3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjaGlsZENsaWNrKCRldmVudDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jbGljaygkZXZlbnQudmFsdWUudG9hc3QsICRldmVudC52YWx1ZS5pc0Nsb3NlQnV0dG9uKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVUb2FzdCh0b2FzdDogVG9hc3QpIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudG9hc3RzLmluZGV4T2YodG9hc3QpO1xyXG4gICAgICAgIGlmIChpbmRleCA8IDApIHsgcmV0dXJuIH07XHJcblxyXG4gICAgICAgIGNvbnN0IHRvYXN0SWQgPSB0aGlzLnRvYXN0SWRPckRlZmF1bHQodG9hc3QpO1xyXG5cclxuICAgICAgICB0aGlzLnRvYXN0cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgICAgICBpZiAodG9hc3Qub25IaWRlQ2FsbGJhY2spIHsgdG9hc3Qub25IaWRlQ2FsbGJhY2sodG9hc3QpOyB9XHJcbiAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5fcmVtb3ZlVG9hc3RTdWJqZWN0Lm5leHQoeyB0b2FzdElkOiB0b2FzdElkLCB0b2FzdENvbnRhaW5lcklkOiB0b2FzdC50b2FzdENvbnRhaW5lcklkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHByaXZhdGUgZnVuY3Rpb25zXHJcbiAgICBwcml2YXRlIHJlZ2lzdGVyU3Vic2NyaWJlcnMoKSB7XHJcbiAgICAgICAgdGhpcy5hZGRUb2FzdFN1YnNjcmliZXIgPSB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmFkZFRvYXN0LnN1YnNjcmliZSgodG9hc3Q6IFRvYXN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkVG9hc3QodG9hc3QpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFyVG9hc3RzU3Vic2NyaWJlciA9IHRoaXMudG9hc3RlclNlcnZpY2UuY2xlYXJUb2FzdHMuc3Vic2NyaWJlKChjbGVhcldyYXBwZXI6IElDbGVhcldyYXBwZXIpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclRvYXN0cyhjbGVhcldyYXBwZXIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkVG9hc3QodG9hc3Q6IFRvYXN0KSB7XHJcbiAgICAgICAgaWYgKHRvYXN0LnRvYXN0Q29udGFpbmVySWQgJiYgdGhpcy50b2FzdGVyY29uZmlnLnRvYXN0Q29udGFpbmVySWRcclxuICAgICAgICAgICAgJiYgdG9hc3QudG9hc3RDb250YWluZXJJZCAhPT0gdGhpcy50b2FzdGVyY29uZmlnLnRvYXN0Q29udGFpbmVySWQpIHsgcmV0dXJuIH07XHJcblxyXG4gICAgICAgIGlmICghdG9hc3QudHlwZSBcclxuICAgICAgICAgICAgfHwgIXRoaXMudG9hc3RlcmNvbmZpZy50eXBlQ2xhc3Nlc1t0b2FzdC50eXBlXVxyXG4gICAgICAgICAgICB8fCAhdGhpcy50b2FzdGVyY29uZmlnLmljb25DbGFzc2VzW3RvYXN0LnR5cGVdKSB7XHJcbiAgICAgICAgICAgIHRvYXN0LnR5cGUgPSB0aGlzLnRvYXN0ZXJjb25maWcuZGVmYXVsdFRvYXN0VHlwZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRvYXN0ZXJjb25maWcucHJldmVudER1cGxpY2F0ZXMgJiYgdGhpcy50b2FzdHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAodG9hc3QudG9hc3RJZCAmJiB0aGlzLnRvYXN0cy5zb21lKHQgPT4gdC50b2FzdElkID09PSB0b2FzdC50b2FzdElkKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudG9hc3RzLnNvbWUodCA9PiB0LmJvZHkgPT09IHRvYXN0LmJvZHkpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzTnVsbE9yVW5kZWZpbmVkKHRvYXN0LnNob3dDbG9zZUJ1dHRvbikpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRvYXN0ZXJjb25maWcuc2hvd0Nsb3NlQnV0dG9uID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgdG9hc3Quc2hvd0Nsb3NlQnV0dG9uID0gdGhpcy50b2FzdGVyY29uZmlnLnNob3dDbG9zZUJ1dHRvblt0b2FzdC50eXBlXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy50b2FzdGVyY29uZmlnLnNob3dDbG9zZUJ1dHRvbiA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICAgICAgICB0b2FzdC5zaG93Q2xvc2VCdXR0b24gPSA8Ym9vbGVhbj50aGlzLnRvYXN0ZXJjb25maWcuc2hvd0Nsb3NlQnV0dG9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodG9hc3Quc2hvd0Nsb3NlQnV0dG9uKSB7XHJcbiAgICAgICAgICAgIHRvYXN0LmNsb3NlSHRtbCA9IHRvYXN0LmNsb3NlSHRtbCB8fCB0aGlzLnRvYXN0ZXJjb25maWcuY2xvc2VIdG1sO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdG9hc3QuYm9keU91dHB1dFR5cGUgPSB0b2FzdC5ib2R5T3V0cHV0VHlwZSB8fCB0aGlzLnRvYXN0ZXJjb25maWcuYm9keU91dHB1dFR5cGU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRvYXN0ZXJjb25maWcubmV3ZXN0T25Ub3ApIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHMudW5zaGlmdCh0b2FzdCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGltaXRFeGNlZWRlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0cy5wb3AoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RzLnB1c2godG9hc3QpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0xpbWl0RXhjZWVkZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHMuc2hpZnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRvYXN0Lm9uU2hvd0NhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHRvYXN0Lm9uU2hvd0NhbGxiYWNrKHRvYXN0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc0xpbWl0RXhjZWVkZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9hc3RlcmNvbmZpZy5saW1pdCAmJiB0aGlzLnRvYXN0cy5sZW5ndGggPiB0aGlzLnRvYXN0ZXJjb25maWcubGltaXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZW1vdmVBbGxUb2FzdHMoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMudG9hc3RzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVG9hc3QodGhpcy50b2FzdHNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsZWFyVG9hc3RzKGNsZWFyV3JhcHBlcjogSUNsZWFyV3JhcHBlcikge1xyXG4gICAgICAgIGNvbnN0IHRvYXN0SWQgPSBjbGVhcldyYXBwZXIudG9hc3RJZCA7XHJcbiAgICAgICAgY29uc3QgdG9hc3RDb250YWluZXJJZCA9IGNsZWFyV3JhcHBlci50b2FzdENvbnRhaW5lcklkO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc051bGxPclVuZGVmaW5lZCh0b2FzdENvbnRhaW5lcklkKSB8fCAodG9hc3RDb250YWluZXJJZCA9PT0gdGhpcy50b2FzdGVyY29uZmlnLnRvYXN0Q29udGFpbmVySWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUb2FzdHNBY3Rpb24odG9hc3RJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2xlYXJUb2FzdHNBY3Rpb24odG9hc3RJZD86IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0b2FzdElkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVG9hc3QodGhpcy50b2FzdHMuZmlsdGVyKHQgPT4gdC50b2FzdElkID09PSB0b2FzdElkKVswXSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxUb2FzdHMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0b2FzdElkT3JEZWZhdWx0KHRvYXN0OiBUb2FzdCkge1xyXG4gICAgICAgIHJldHVybiB0b2FzdC50b2FzdElkIHx8ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNOdWxsT3JVbmRlZmluZWQodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmFkZFRvYXN0U3Vic2NyaWJlcikgeyB0aGlzLmFkZFRvYXN0U3Vic2NyaWJlci51bnN1YnNjcmliZSgpOyB9XHJcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJUb2FzdHNTdWJzY3JpYmVyKSB7IHRoaXMuY2xlYXJUb2FzdHNTdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7IH1cclxuICAgIH1cclxufVxyXG4iXX0=