UNPKG

ngx-notification-bar

Version:

Angular notification bar component for Angular 2+ projects.

128 lines 18.9 kB
import { trigger, state, style, transition, animate } from '@angular/animations'; import { Component, Optional, Inject, InjectionToken } from '@angular/core'; import { NotificationBarService } from './notification-bar.service'; import { NotificationType } from './notification-bar.models'; import * as i0 from "@angular/core"; import * as i1 from "./notification-bar.service"; import * as i2 from "@angular/common"; export const MESSAGES_CONFIG = new InjectionToken('notification-bar.messages.config'); export class NotificationBarComponent { // closeSubscription: Subscription; constructor(notificationBarService, config) { this.notificationBarService = notificationBarService; this.config = config; this.notifications = []; this.defaults = { message: '', type: NotificationType.Info, autoHide: true, hideDelay: 3000, isHtml: false, allowClose: false, hideOnHover: true }; this.subscription = this.notificationBarService.onCreate.subscribe(this.addNotification.bind(this)); this.notificationBarService.onClose.subscribe(this.hideNotification.bind(this)); } ngOnInit() { } addNotification(notification) { const newNotification = Object.assign({}, this.defaults, notification); newNotification.typeValue = NotificationType[newNotification.type].toLowerCase(); if (this.config && this.config.messages) { newNotification.message = this.config.messages[notification.message] || notification.message; } this.notifications.push(newNotification); if (newNotification.autoHide) { window.setTimeout(() => { this.hideNotification(newNotification); }, newNotification.hideDelay); } } hideNotification(notification) { const index = this.notifications.indexOf(notification); this.notifications.splice(index, 1); } ngOnDestroy() { this.subscription.unsubscribe(); // this.closeSubscription.unsubscribe(); } hideOnHover(notification) { if (notification.hideOnHover) { this.hideNotification(notification); } } } /** @nocollapse */ NotificationBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: NotificationBarComponent, deps: [{ token: i1.NotificationBarService }, { token: MESSAGES_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); /** @nocollapse */ NotificationBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.4", type: NotificationBarComponent, selector: "notification-bar", ngImport: i0, template: ` <div class="notifications-container"> <div *ngFor="let notification of notifications; let i = index;" class="notification {{notification.typeValue}}" (mouseover)="hideOnHover(notification)" [@flyDown]> <span *ngIf="notification.isHtml" class="message" [innerHTML]="notification.message"></span> <span *ngIf="!notification.isHtml" class="message">{{notification.message}}</span> <span class="close-click" *ngIf="notification.allowClose" (click)="hideNotification(notification)">×</span> </div> </div> `, isInline: true, styles: [":host{position:relative;display:block}.notifications-container{position:fixed;top:0;right:0;left:0;line-height:25px;width:100%;z-index:6;overflow:hidden}.notification{position:relative;text-align:center;font-size:12px;color:#fff}.message{padding:0 12px}.error{background-color:#f64747;border-bottom:1px solid #f31515}.success{background-color:#03c9a9;border-bottom:1px solid #02aa8f}.warning{background-color:#f7ca18;border-bottom:1px solid #e7ba08}.info{background-color:#0c6997;border-bottom:1px solid #0c6997}.close-click{font-size:22px;cursor:pointer;padding:10px;position:relative;top:2px;margin:0 auto}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], animations: [ trigger('flyDown', [ state('in', style({ opacity: 1, transform: 'translateY(0)' })), transition('void => *', [ style({ opacity: 0, transform: 'translateY(-100%)' }), animate('600ms ease-in') ]), transition('* => void', [ animate('200ms ease-out', style({ opacity: 0, transform: 'translateY(-100%)' })) ]) ]) ] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.4", ngImport: i0, type: NotificationBarComponent, decorators: [{ type: Component, args: [{ selector: 'notification-bar', template: ` <div class="notifications-container"> <div *ngFor="let notification of notifications; let i = index;" class="notification {{notification.typeValue}}" (mouseover)="hideOnHover(notification)" [@flyDown]> <span *ngIf="notification.isHtml" class="message" [innerHTML]="notification.message"></span> <span *ngIf="!notification.isHtml" class="message">{{notification.message}}</span> <span class="close-click" *ngIf="notification.allowClose" (click)="hideNotification(notification)">×</span> </div> </div> `, animations: [ trigger('flyDown', [ state('in', style({ opacity: 1, transform: 'translateY(0)' })), transition('void => *', [ style({ opacity: 0, transform: 'translateY(-100%)' }), animate('600ms ease-in') ]), transition('* => void', [ animate('200ms ease-out', style({ opacity: 0, transform: 'translateY(-100%)' })) ]) ]) ], styles: [":host{position:relative;display:block}.notifications-container{position:fixed;top:0;right:0;left:0;line-height:25px;width:100%;z-index:6;overflow:hidden}.notification{position:relative;text-align:center;font-size:12px;color:#fff}.message{padding:0 12px}.error{background-color:#f64747;border-bottom:1px solid #f31515}.success{background-color:#03c9a9;border-bottom:1px solid #02aa8f}.warning{background-color:#f7ca18;border-bottom:1px solid #e7ba08}.info{background-color:#0c6997;border-bottom:1px solid #0c6997}.close-click{font-size:22px;cursor:pointer;padding:10px;position:relative;top:2px;margin:0 auto}\n"] }] }], ctorParameters: function () { return [{ type: i1.NotificationBarService }, { type: undefined, decorators: [{ type: Inject, args: [MESSAGES_CONFIG] }, { type: Optional }] }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm90aWZpY2F0aW9uLWJhci9zcmMvbGliL25vdGlmaWNhdGlvbi1iYXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUNILFNBQVMsRUFBVSxRQUFRLEVBQUUsTUFBTSxFQUNuQyxjQUFjLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBZ0IsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7OztBQUkzRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxjQUFjLENBQUMsa0NBQWtDLENBQUMsQ0FBQztBQXVGdEYsTUFBTSxPQUFPLHdCQUF3QjtJQWVqQyxtQ0FBbUM7SUFDbkMsWUFDWSxzQkFBOEMsRUFDVCxNQUF1QjtRQUQ1RCwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQ1QsV0FBTSxHQUFOLE1BQU0sQ0FBaUI7UUFoQnhFLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQUVuQyxhQUFRLEdBQUc7WUFDUCxPQUFPLEVBQUUsRUFBRTtZQUNYLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJO1lBQzNCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsU0FBUyxFQUFFLElBQUk7WUFDZixNQUFNLEVBQUUsS0FBSztZQUNiLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFdBQVcsRUFBRSxJQUFJO1NBQ3BCLENBQUM7UUFRRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRCxRQUFRLEtBQUssQ0FBQztJQUVkLGVBQWUsQ0FBQyxZQUEwQjtRQUN0QyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3ZFLGVBQWUsQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pGLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUNyQyxlQUFlLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDO1NBQ2hHO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFekMsSUFBSSxlQUFlLENBQUMsUUFBUSxFQUFFO1lBQzFCLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDM0MsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNqQztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxZQUEwQjtRQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV2RCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLHdDQUF3QztJQUM1QyxDQUFDO0lBRUQsV0FBVyxDQUFDLFlBQTBCO1FBQ2xDLElBQUksWUFBWSxDQUFDLFdBQVcsRUFBRTtZQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDdkM7SUFDTCxDQUFDOzt3SUF6RFEsd0JBQXdCLHdEQWtCckIsZUFBZTs0SEFsQmxCLHdCQUF3Qix3REFsQ3ZCOzs7Ozs7Ozs7OztLQVdULCszQkFDVztRQUNSLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDZixLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztnQkFDZCxPQUFPLEVBQUUsQ0FBQztnQkFDVixTQUFTLEVBQUUsZUFBZTthQUM3QixDQUFDLENBQUM7WUFDSCxVQUFVLENBQUMsV0FBVyxFQUFFO2dCQUNwQixLQUFLLENBQUM7b0JBQ0YsT0FBTyxFQUFFLENBQUM7b0JBQ1YsU0FBUyxFQUFFLG1CQUFtQjtpQkFDakMsQ0FBQztnQkFDRixPQUFPLENBQUMsZUFBZSxDQUFDO2FBQzNCLENBQUM7WUFDRixVQUFVLENBQUMsV0FBVyxFQUFFO2dCQUNwQixPQUFPLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDO29CQUM1QixPQUFPLEVBQUUsQ0FBQztvQkFDVixTQUFTLEVBQUUsbUJBQW1CO2lCQUNqQyxDQUFDLENBQUM7YUFDTixDQUFDO1NBQ0wsQ0FBQztLQUNMOzJGQUVRLHdCQUF3QjtrQkFyRnBDLFNBQVM7K0JBQ0ksa0JBQWtCLFlBa0RsQjs7Ozs7Ozs7Ozs7S0FXVCxjQUNXO3dCQUNSLE9BQU8sQ0FBQyxTQUFTLEVBQUU7NEJBQ2YsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7Z0NBQ2QsT0FBTyxFQUFFLENBQUM7Z0NBQ1YsU0FBUyxFQUFFLGVBQWU7NkJBQzdCLENBQUMsQ0FBQzs0QkFDSCxVQUFVLENBQUMsV0FBVyxFQUFFO2dDQUNwQixLQUFLLENBQUM7b0NBQ0YsT0FBTyxFQUFFLENBQUM7b0NBQ1YsU0FBUyxFQUFFLG1CQUFtQjtpQ0FDakMsQ0FBQztnQ0FDRixPQUFPLENBQUMsZUFBZSxDQUFDOzZCQUMzQixDQUFDOzRCQUNGLFVBQVUsQ0FBQyxXQUFXLEVBQUU7Z0NBQ3BCLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUM7b0NBQzVCLE9BQU8sRUFBRSxDQUFDO29DQUNWLFNBQVMsRUFBRSxtQkFBbUI7aUNBQ2pDLENBQUMsQ0FBQzs2QkFDTixDQUFDO3lCQUNMLENBQUM7cUJBQ0w7OzBCQW9CSSxNQUFNOzJCQUFDLGVBQWU7OzBCQUFHLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0cmlnZ2VyLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIGFuaW1hdGUgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCwgT25Jbml0LCBPcHRpb25hbCwgSW5qZWN0LFxyXG4gICAgSW5qZWN0aW9uVG9rZW4sIE9uRGVzdHJveVxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgTm90aWZpY2F0aW9uQmFyU2VydmljZSB9IGZyb20gJy4vbm90aWZpY2F0aW9uLWJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90aWZpY2F0aW9uLCBOb3RpZmljYXRpb25UeXBlIH0gZnJvbSAnLi9ub3RpZmljYXRpb24tYmFyLm1vZGVscyc7XHJcbmltcG9ydCB7IE1lc3NhZ2VzQ29uZmlnIH0gZnJvbSAnLi9tZXNzYWdlLWNvbmZpZyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IE1FU1NBR0VTX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbignbm90aWZpY2F0aW9uLWJhci5tZXNzYWdlcy5jb25maWcnKTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdub3RpZmljYXRpb24tYmFyJyxcclxuICAgIHN0eWxlczogW2BcclxuICAgICAgICA6aG9zdCB7XHJcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICB9XHJcbiAgICAgICAgLm5vdGlmaWNhdGlvbnMtY29udGFpbmVyIHtcclxuICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgICAgICAgIHRvcDogMHB4O1xyXG4gICAgICAgICAgcmlnaHQ6IDA7XHJcbiAgICAgICAgICBsZWZ0OiAwO1xyXG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDI1cHg7XHJcbiAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgIHotaW5kZXg6IDY7XHJcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAubm90aWZpY2F0aW9uIHtcclxuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDtcclxuICAgICAgICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgICAgIH1cclxuICAgICAgICAubWVzc2FnZSB7XHJcbiAgICAgICAgICBwYWRkaW5nOiAwIDEycHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC5lcnJvciB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjY0NzQ3O1xyXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMzE1MTU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC5zdWNjZXNzIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwM0M5QTk7XHJcbiAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzAyYWE4ZjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLndhcm5pbmcge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Y3Q0ExODtcclxuICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTdiYTA4O1xyXG4gICAgICAgIH1cclxuICAgICAgICAuaW5mbyB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMGM2OTk3O1xyXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMwYzY5OTc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC5jbG9zZS1jbGljayB7XHJcbiAgICAgICAgICBmb250LXNpemU6IDIycHg7XHJcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgICBwYWRkaW5nOiAxMHB4O1xyXG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgICAgdG9wOiAycHg7XHJcbiAgICAgICAgICBtYXJnaW46IDAgYXV0bztcclxuICAgICAgICB9XHJcbiAgICBgXSxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmaWNhdGlvbnMtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG5vdGlmaWNhdGlvbiBvZiBub3RpZmljYXRpb25zOyBsZXQgaSA9IGluZGV4O1wiXHJcbiAgICAgICAgICAgICAgICAgY2xhc3M9XCJub3RpZmljYXRpb24ge3tub3RpZmljYXRpb24udHlwZVZhbHVlfX1cIlxyXG4gICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGlkZU9uSG92ZXIobm90aWZpY2F0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgW0BmbHlEb3duXT5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibm90aWZpY2F0aW9uLmlzSHRtbFwiIGNsYXNzPVwibWVzc2FnZVwiIFtpbm5lckhUTUxdPVwibm90aWZpY2F0aW9uLm1lc3NhZ2VcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFub3RpZmljYXRpb24uaXNIdG1sXCIgY2xhc3M9XCJtZXNzYWdlXCI+e3tub3RpZmljYXRpb24ubWVzc2FnZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjbG9zZS1jbGlja1wiICpuZ0lmPVwibm90aWZpY2F0aW9uLmFsbG93Q2xvc2VcIiAoY2xpY2spPVwiaGlkZU5vdGlmaWNhdGlvbihub3RpZmljYXRpb24pXCI+w5c8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgYCxcclxuICAgIGFuaW1hdGlvbnM6IFtcclxuICAgICAgICB0cmlnZ2VyKCdmbHlEb3duJywgW1xyXG4gICAgICAgICAgICBzdGF0ZSgnaW4nLCBzdHlsZSh7XHJcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxLFxyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKSdcclxuICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IConLCBbXHJcbiAgICAgICAgICAgICAgICBzdHlsZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMCxcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0xMDAlKSdcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgnNjAwbXMgZWFzZS1pbicpXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCcqID0+IHZvaWQnLCBbXHJcbiAgICAgICAgICAgICAgICBhbmltYXRlKCcyMDBtcyBlYXNlLW91dCcsIHN0eWxlKHtcclxuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTEwMCUpJ1xyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgXSlcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbkJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgICBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25bXSA9IFtdO1xyXG5cclxuICAgIGRlZmF1bHRzID0ge1xyXG4gICAgICAgIG1lc3NhZ2U6ICcnLFxyXG4gICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuSW5mbyxcclxuICAgICAgICBhdXRvSGlkZTogdHJ1ZSxcclxuICAgICAgICBoaWRlRGVsYXk6IDMwMDAsXHJcbiAgICAgICAgaXNIdG1sOiBmYWxzZSxcclxuICAgICAgICBhbGxvd0Nsb3NlOiBmYWxzZSxcclxuICAgICAgICBoaWRlT25Ib3ZlcjogdHJ1ZVxyXG4gICAgfTtcclxuXHJcbiAgICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICAgIC8vIGNsb3NlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvbkJhclNlcnZpY2U6IE5vdGlmaWNhdGlvbkJhclNlcnZpY2UsXHJcbiAgICAgICAgQEluamVjdChNRVNTQUdFU19DT05GSUcpIEBPcHRpb25hbCgpIHByaXZhdGUgY29uZmlnPzogTWVzc2FnZXNDb25maWdcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5ub3RpZmljYXRpb25CYXJTZXJ2aWNlLm9uQ3JlYXRlLnN1YnNjcmliZSh0aGlzLmFkZE5vdGlmaWNhdGlvbi5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkJhclNlcnZpY2Uub25DbG9zZS5zdWJzY3JpYmUodGhpcy5oaWRlTm90aWZpY2F0aW9uLmJpbmQodGhpcykpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkgeyB9XHJcblxyXG4gICAgYWRkTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgbmV3Tm90aWZpY2F0aW9uID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5kZWZhdWx0cywgbm90aWZpY2F0aW9uKTtcclxuICAgICAgICBuZXdOb3RpZmljYXRpb24udHlwZVZhbHVlID0gTm90aWZpY2F0aW9uVHlwZVtuZXdOb3RpZmljYXRpb24udHlwZV0udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcubWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgbmV3Tm90aWZpY2F0aW9uLm1lc3NhZ2UgPSB0aGlzLmNvbmZpZy5tZXNzYWdlc1tub3RpZmljYXRpb24ubWVzc2FnZV0gfHwgbm90aWZpY2F0aW9uLm1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMucHVzaChuZXdOb3RpZmljYXRpb24pO1xyXG5cclxuICAgICAgICBpZiAobmV3Tm90aWZpY2F0aW9uLmF1dG9IaWRlKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZU5vdGlmaWNhdGlvbihuZXdOb3RpZmljYXRpb24pO1xyXG4gICAgICAgICAgICB9LCBuZXdOb3RpZmljYXRpb24uaGlkZURlbGF5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaGlkZU5vdGlmaWNhdGlvbihub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5ub3RpZmljYXRpb25zLmluZGV4T2Yobm90aWZpY2F0aW9uKTtcclxuXHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAvLyB0aGlzLmNsb3NlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGlkZU9uSG92ZXIobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24pIHtcclxuICAgICAgICBpZiAobm90aWZpY2F0aW9uLmhpZGVPbkhvdmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZU5vdGlmaWNhdGlvbihub3RpZmljYXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=