UNPKG

@vamidicreations/angular2-toaster

Version:

An Angular Toaster Notification library based on AngularJS-Toaster

186 lines 23.2 kB
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Rlci1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FuZ3VsYXIyLXRvYXN0ZXIvc3JjL2xpYi90b2FzdGVyLWNvbnRhaW5lci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBR1IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDOzs7OztBQXlCbEQsTUFBTSxPQUFPLHlCQUF5QjtJQVNsQyxZQUFZLGNBQThCO1FBRm5DLFdBQU0sR0FBWSxFQUFFLENBQUM7UUFHeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDekMsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDNUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1NBQzVDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixLQUFLLENBQUMsS0FBWSxFQUFFLGFBQXVCO1FBQ3ZDLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRTtZQUN2QixLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2hDO1FBRUQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUM1RCxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVk7WUFDcEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFD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QUFpQixDQUFDLEtBQVU7UUFDaEMsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFdBQVcsQ0FBQztJQUMxRCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQUU7UUFDdkUsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FBRTtJQUNqRixDQUFDOzt1SEFySlEseUJBQXlCOzJHQUF6Qix5QkFBeUIscUdBbkJ4Qjs7Ozs7Ozs7Ozs7Ozs7OztTQWdCTCxvWkFDTyxXQUFXOzRGQUVkLHlCQUF5QjtrQkFyQnJDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7O1NBZ0JMO29CQUNMLFVBQVUsRUFBRSxXQUFXO2lCQUMxQjtxR0FNWSxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgXG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LCBcbiAgICBPbkluaXQsXG4gICAgT25EZXN0cm95IFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zaXRpb25zIH0gZnJvbSAnLi90cmFuc2l0aW9ucyc7XG5pbXBvcnQgeyBUb2FzdGVyQ29uZmlnIH0gZnJvbSAnLi90b2FzdGVyLWNvbmZpZyc7XG5pbXBvcnQgeyBUb2FzdGVyU2VydmljZX0gZnJvbSAnLi90b2FzdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUNsZWFyV3JhcHBlciB9IGZyb20gJy4vY2xlYXJXcmFwcGVyJztcbmltcG9ydCB7IFRvYXN0IH0gZnJvbSAnLi90b2FzdCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndG9hc3Rlci1jb250YWluZXInLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b2FzdC1jb250YWluZXJcIiBbbmdDbGFzc109XCJbdG9hc3RlcmNvbmZpZy5wb3NpdGlvbkNsYXNzXVwiPlxuICAgICAgICAgICAgPGRpdiB0b2FzdENvbXAgKm5nRm9yPVwibGV0IHRvYXN0IG9mIHRvYXN0c1wiIGNsYXNzPVwidG9hc3RcIiBbdG9hc3RdPVwidG9hc3RcIlxuICAgICAgICAgICAgICAgIFt0b2FzdGVyY29uZmlnXT1cInRvYXN0ZXJjb25maWdcIlxuICAgICAgICAgICAgICAgIFtAdG9hc3RTdGF0ZV09XCJ0b2FzdGVyY29uZmlnLmFuaW1hdGlvblwiXG4gICAgICAgICAgICAgICAgW3RpdGxlQ2xhc3NdPVwidG9hc3RlcmNvbmZpZy50aXRsZUNsYXNzXCJcbiAgICAgICAgICAgICAgICBbbWVzc2FnZUNsYXNzXT1cInRvYXN0ZXJjb25maWcubWVzc2FnZUNsYXNzXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJbXG4gICAgICAgICAgICAgICAgICAgIHRvYXN0ZXJjb25maWcuaWNvbkNsYXNzZXNbdG9hc3QudHlwZV0sXG4gICAgICAgICAgICAgICAgICAgIHRvYXN0ZXJjb25maWcudHlwZUNsYXNzZXNbdG9hc3QudHlwZV1cbiAgICAgICAgICAgICAgICBdXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2sodG9hc3QpXCIgKGNsaWNrRXZlbnQpPVwiY2hpbGRDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAocmVtb3ZlVG9hc3RFdmVudCk9XCJyZW1vdmVUb2FzdCgkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgYCxcbiAgICBhbmltYXRpb25zOiBUcmFuc2l0aW9uc1xufSlcbmV4cG9ydCBjbGFzcyBUb2FzdGVyQ29udGFpbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgYWRkVG9hc3RTdWJzY3JpYmVyOiBhbnk7XG4gICAgcHJpdmF0ZSBjbGVhclRvYXN0c1N1YnNjcmliZXI6IGFueTtcbiAgICBwcml2YXRlIHRvYXN0ZXJTZXJ2aWNlOiBUb2FzdGVyU2VydmljZTtcblxuICAgIEBJbnB1dCgpIHRvYXN0ZXJjb25maWc6IFRvYXN0ZXJDb25maWc7XG5cbiAgICBwdWJsaWMgdG9hc3RzOiBUb2FzdFtdID0gW107XG5cbiAgICBjb25zdHJ1Y3Rvcih0b2FzdGVyU2VydmljZTogVG9hc3RlclNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZSA9IHRvYXN0ZXJTZXJ2aWNlO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaWJlcnMoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNOdWxsT3JVbmRlZmluZWQodGhpcy50b2FzdGVyY29uZmlnKSkge1xuICAgICAgICAgICAgdGhpcy50b2FzdGVyY29uZmlnID0gbmV3IFRvYXN0ZXJDb25maWcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGV2ZW50IGhhbmRsZXJzXG4gICAgY2xpY2sodG9hc3Q6IFRvYXN0LCBpc0Nsb3NlQnV0dG9uPzogYm9vbGVhbikge1xuICAgICAgICBpZiAodG9hc3Qub25DbGlja0NhbGxiYWNrKSB7XG4gICAgICAgICAgICB0b2FzdC5vbkNsaWNrQ2FsbGJhY2sodG9hc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFwVG9EaXNtaXNzID0gIXRoaXMuaXNOdWxsT3JVbmRlZmluZWQodG9hc3QudGFwVG9EaXNtaXNzKSBcbiAgICAgICAgICAgID8gdG9hc3QudGFwVG9EaXNtaXNzXG4gICAgICAgICAgICA6IHRoaXMudG9hc3RlcmNvbmZpZy50YXBUb0Rpc21pc3M7XG5cbiAgICAgICAgaWYgKHRhcFRvRGlzbWlzcyB8fCAodG9hc3Quc2hvd0Nsb3NlQnV0dG9uICYmIGlzQ2xvc2VCdXR0b24pKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRvYXN0KHRvYXN0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNoaWxkQ2xpY2soJGV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5jbGljaygkZXZlbnQudmFsdWUudG9hc3QsICRldmVudC52YWx1ZS5pc0Nsb3NlQnV0dG9uKTtcbiAgICB9XG5cbiAgICByZW1vdmVUb2FzdCh0b2FzdDogVG9hc3QpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnRvYXN0cy5pbmRleE9mKHRvYXN0KTtcbiAgICAgICAgaWYgKGluZGV4IDwgMCkgeyByZXR1cm4gfTtcblxuICAgICAgICBjb25zdCB0b2FzdElkID0gdGhpcy50b2FzdElkT3JEZWZhdWx0KHRvYXN0KTtcblxuICAgICAgICB0aGlzLnRvYXN0cy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgIGlmICh0b2FzdC5vbkhpZGVDYWxsYmFjaykgeyB0b2FzdC5vbkhpZGVDYWxsYmFjayh0b2FzdCk7IH1cbiAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5fcmVtb3ZlVG9hc3RTdWJqZWN0Lm5leHQoeyB0b2FzdElkOiB0b2FzdElkLCB0b2FzdENvbnRhaW5lcklkOiB0b2FzdC50b2FzdENvbnRhaW5lcklkIH0pO1xuICAgIH1cblxuICAgIC8vIHByaXZhdGUgZnVuY3Rpb25zXG4gICAgcHJpdmF0ZSByZWdpc3RlclN1YnNjcmliZXJzKCkge1xuICAgICAgICB0aGlzLmFkZFRvYXN0U3Vic2NyaWJlciA9IHRoaXMudG9hc3RlclNlcnZpY2UuYWRkVG9hc3Quc3Vic2NyaWJlKCh0b2FzdDogVG9hc3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkVG9hc3QodG9hc3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNsZWFyVG9hc3RzU3Vic2NyaWJlciA9IHRoaXMudG9hc3RlclNlcnZpY2UuY2xlYXJUb2FzdHMuc3Vic2NyaWJlKChjbGVhcldyYXBwZXI6IElDbGVhcldyYXBwZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUb2FzdHMoY2xlYXJXcmFwcGVyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRUb2FzdCh0b2FzdDogVG9hc3QpIHtcbiAgICAgICAgaWYgKHRvYXN0LnRvYXN0Q29udGFpbmVySWQgJiYgdGhpcy50b2FzdGVyY29uZmlnLnRvYXN0Q29udGFpbmVySWRcbiAgICAgICAgICAgICYmIHRvYXN0LnRvYXN0Q29udGFpbmVySWQgIT09IHRoaXMudG9hc3RlcmNvbmZpZy50b2FzdENvbnRhaW5lcklkKSB7IHJldHVybiB9O1xuXG4gICAgICAgIGlmICghdG9hc3QudHlwZSBcbiAgICAgICAgICAgIHx8ICF0aGlzLnRvYXN0ZXJjb25maWcudHlwZUNsYXNzZXNbdG9hc3QudHlwZV1cbiAgICAgICAgICAgIHx8ICF0aGlzLnRvYXN0ZXJjb25maWcuaWNvbkNsYXNzZXNbdG9hc3QudHlwZV0pIHtcbiAgICAgICAgICAgIHRvYXN0LnR5cGUgPSB0aGlzLnRvYXN0ZXJjb25maWcuZGVmYXVsdFRvYXN0VHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRvYXN0ZXJjb25maWcucHJldmVudER1cGxpY2F0ZXMgJiYgdGhpcy50b2FzdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKHRvYXN0LnRvYXN0SWQgJiYgdGhpcy50b2FzdHMuc29tZSh0ID0+IHQudG9hc3RJZCA9PT0gdG9hc3QudG9hc3RJZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudG9hc3RzLnNvbWUodCA9PiB0LmJvZHkgPT09IHRvYXN0LmJvZHkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNOdWxsT3JVbmRlZmluZWQodG9hc3Quc2hvd0Nsb3NlQnV0dG9uKSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRvYXN0ZXJjb25maWcuc2hvd0Nsb3NlQnV0dG9uID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHRvYXN0LnNob3dDbG9zZUJ1dHRvbiA9IHRoaXMudG9hc3RlcmNvbmZpZy5zaG93Q2xvc2VCdXR0b25bdG9hc3QudHlwZV07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnRvYXN0ZXJjb25maWcuc2hvd0Nsb3NlQnV0dG9uID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICB0b2FzdC5zaG93Q2xvc2VCdXR0b24gPSA8Ym9vbGVhbj50aGlzLnRvYXN0ZXJjb25maWcuc2hvd0Nsb3NlQnV0dG9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRvYXN0LnNob3dDbG9zZUJ1dHRvbikge1xuICAgICAgICAgICAgdG9hc3QuY2xvc2VIdG1sID0gdG9hc3QuY2xvc2VIdG1sIHx8IHRoaXMudG9hc3RlcmNvbmZpZy5jbG9zZUh0bWw7XG4gICAgICAgIH1cblxuICAgICAgICB0b2FzdC5ib2R5T3V0cHV0VHlwZSA9IHRvYXN0LmJvZHlPdXRwdXRUeXBlIHx8IHRoaXMudG9hc3RlcmNvbmZpZy5ib2R5T3V0cHV0VHlwZTtcblxuICAgICAgICBpZiAodGhpcy50b2FzdGVyY29uZmlnLm5ld2VzdE9uVG9wKSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0cy51bnNoaWZ0KHRvYXN0KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGltaXRFeGNlZWRlZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHMucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0cy5wdXNoKHRvYXN0KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGltaXRFeGNlZWRlZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHMuc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b2FzdC5vblNob3dDYWxsYmFjaykge1xuICAgICAgICAgICAgdG9hc3Qub25TaG93Q2FsbGJhY2sodG9hc3QpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0xpbWl0RXhjZWVkZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvYXN0ZXJjb25maWcubGltaXQgJiYgdGhpcy50b2FzdHMubGVuZ3RoID4gdGhpcy50b2FzdGVyY29uZmlnLmxpbWl0O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlQWxsVG9hc3RzKCkge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy50b2FzdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVG9hc3QodGhpcy50b2FzdHNbaV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhclRvYXN0cyhjbGVhcldyYXBwZXI6IElDbGVhcldyYXBwZXIpIHtcbiAgICAgICAgY29uc3QgdG9hc3RJZCA9IGNsZWFyV3JhcHBlci50b2FzdElkIDtcbiAgICAgICAgY29uc3QgdG9hc3RDb250YWluZXJJZCA9IGNsZWFyV3JhcHBlci50b2FzdENvbnRhaW5lcklkO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTnVsbE9yVW5kZWZpbmVkKHRvYXN0Q29udGFpbmVySWQpIHx8ICh0b2FzdENvbnRhaW5lcklkID09PSB0aGlzLnRvYXN0ZXJjb25maWcudG9hc3RDb250YWluZXJJZCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUb2FzdHNBY3Rpb24odG9hc3RJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyVG9hc3RzQWN0aW9uKHRvYXN0SWQ/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRvYXN0SWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVG9hc3QodGhpcy50b2FzdHMuZmlsdGVyKHQgPT4gdC50b2FzdElkID09PSB0b2FzdElkKVswXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUFsbFRvYXN0cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b2FzdElkT3JEZWZhdWx0KHRvYXN0OiBUb2FzdCkge1xuICAgICAgICByZXR1cm4gdG9hc3QudG9hc3RJZCB8fCAnJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCc7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmFkZFRvYXN0U3Vic2NyaWJlcikgeyB0aGlzLmFkZFRvYXN0U3Vic2NyaWJlci51bnN1YnNjcmliZSgpOyB9XG4gICAgICAgIGlmICh0aGlzLmNsZWFyVG9hc3RzU3Vic2NyaWJlcikgeyB0aGlzLmNsZWFyVG9hc3RzU3Vic2NyaWJlci51bnN1YnNjcmliZSgpOyB9XG4gICAgfVxufVxuIl19