UNPKG

io.parrots

Version:

Parrots.io App

214 lines (212 loc) 21.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { Component, HostListener } from '@angular/core'; import { PhloxAppService } from 'com.phloxui'; import { NeedFocusService } from 'com.phloxui'; import { ObservableManager } from 'com.phloxui'; import { NotificationManager } from 'com.phloxui'; import { PhloxAppInfoService } from 'com.phloxui'; import { PhloxAppInfo } from 'com.phloxui'; import { AbstractSideSlidePanel } from 'com.phloxui'; const /** @type {?} */ TYPE_NAME = "parrots-notifier"; const /** @type {?} */ SUB_TOPIC_NAME = 'parrots-notifier'; export class ParrotsNotifier extends AbstractSideSlidePanel { /** * @param {?} phloxAppService * @param {?} observableMgr * @param {?} needFocusService * @param {?} notificationManager * @param {?} phloxAppInfoService */ constructor(phloxAppService, observableMgr, needFocusService, notificationManager, phloxAppInfoService) { super(phloxAppService, observableMgr, needFocusService, ParrotsNotifier.SUB_TOPIC_NAME); this.notificationManager = notificationManager; if (phloxAppInfoService != null) { phloxAppInfoService.getAppInfo().then((result) => { this.phloxAppInfo = result; }); } } /** * @return {?} */ ngOnInit() { super.ngOnInit(); } /** * @return {?} */ isRinging() { if (this.notificationManager !== null && typeof this.notificationManager !== 'undefined') { let /** @type {?} */ unReadArray = this.getUnreadNotifications(); if (unReadArray !== null && typeof unReadArray !== 'undefined') { return unReadArray.length > 0; } } return false; } /** * @return {?} */ getUnreadNotifications() { if (this.notificationManager !== null && typeof this.notificationManager !== 'undefined') { let /** @type {?} */ unReadArray = this.notificationManager.getUnreadNotifications(); if (unReadArray !== null && typeof unReadArray !== 'undefined') { return unReadArray; } } return []; } /** * @return {?} */ getNotifications() { let /** @type {?} */ result = []; if (this.notificationManager !== null && typeof this.notificationManager !== 'undefined') { let /** @type {?} */ allNotifyArray = this.notificationManager.getNotifications(); let /** @type {?} */ maxNotification = PhloxAppInfo.DEFAULT_MAX_NOTIFICATIONS; if (this.phloxAppInfo !== null && typeof this.phloxAppInfo !== 'undefined') { if (this.phloxAppInfo.settings !== null && typeof this.phloxAppInfo.settings !== 'undefined') { maxNotification = this.phloxAppInfo.settings.MAX_NOTIFICATIONS; } } if (allNotifyArray !== null && typeof allNotifyArray !== 'undefined') { let /** @type {?} */ overLength = 0; if (allNotifyArray.length > maxNotification) { overLength = allNotifyArray.length - maxNotification; let /** @type {?} */ removeArray = allNotifyArray.slice(0, overLength); for (let /** @type {?} */ r of removeArray) { this.notificationManager.clear(r); } allNotifyArray = this.notificationManager.getNotifications(); } for (let /** @type {?} */ n of allNotifyArray) { result.push(n); } } } return result; } /** * @param {?} $event * @param {?} notification * @return {?} */ onNotificationClicked($event, notification) { if (notification === null || typeof notification === 'undefined') { return; } if (this.notificationManager !== null && typeof this.notificationManager !== 'undefined') { this.notificationManager.clear(notification); } } /** * @param {?} event * @return {?} */ onToggle(event) { super.onToggle(event); // mark as read if (this.notificationManager !== null && typeof this.notificationManager !== 'undefined') { this.notificationManager.markAsReadAll(); } } /** * @param {?} event * @return {?} */ onClick(event) { event.stopPropagation(); } } ParrotsNotifier.TYPE_NAME = TYPE_NAME; ParrotsNotifier.SUB_TOPIC_NAME = SUB_TOPIC_NAME; ParrotsNotifier.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: `<div class="parrots-notifier" [class.active]="isActive()" (click)="onToggle($event)"> <div class="wrapper"> <div> <div class="table-wrapper fluid"> <div class="table-row-wrapper"> <div class="table-cell-wrapper middle"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" class="bell" [class.ringing]="isRinging()" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background: new 0 0 30 30;" xml:space="preserve"> <g> <g> <path d="M21.951,19.175l-1-1.221v-3.271c0-3.123-2-5.723-5-6.294V7.575c0-0.673-0.827-1.221-1.5-1.221 c-0.673,0-1.5,0.548-1.5,1.221v0.814c-3,0.57-5,3.171-5,6.294v3.271l-1,1.221v0.71h-1v2h17v-2h-1V19.175z M22.779,19.175" /> </g> </g> </svg> </div> </div> </div> </div> <div> <div class="table-wrapper fluid"> <div class="table-row-wrapper"> <div class="table-cell-wrapper middle"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" class="bell" [class.ringing]="isRinging()" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background: new 0 0 30 30;" xml:space="preserve"> <g> <g> </g> <path d="M15.147,24.513c1.136,0,2.117-0.628,2.574-1.628h-5.149C13.03,23.885,14.011,24.513,15.147,24.513 L15.147,24.513z M15.147,24.873" /> </g> </svg> </div> </div> </div> </div> </div> </div> <div class="parrots-notifier-side-panel right" [class.active]="isActive()"> <div class="row" *ngFor="let notify of getNotifications(); let i = index;" (click)="onNotificationClicked($event, notify)"> {{notify.title}} --> click to clear </div> </div> ` },] }, ]; /** @nocollapse */ ParrotsNotifier.ctorParameters = () => [ { type: PhloxAppService, }, { type: ObservableManager, }, { type: NeedFocusService, }, { type: NotificationManager, }, { type: PhloxAppInfoService, }, ]; ParrotsNotifier.propDecorators = { "onClick": [{ type: HostListener, args: ['click', ['$event'],] },], }; function ParrotsNotifier_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ ParrotsNotifier.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ ParrotsNotifier.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ ParrotsNotifier.propDecorators; /** @type {?} */ ParrotsNotifier.TYPE_NAME; /** @type {?} */ ParrotsNotifier.SUB_TOPIC_NAME; /** @type {?} */ ParrotsNotifier.prototype.notificationManager; /** @type {?} */ ParrotsNotifier.prototype.phloxAppInfo; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFycm90c05vdGlmaWVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lvLnBhcnJvdHMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L3BhZ2UvbWFpbi9tZW51LmludGVybmFsL1BhcnJvdHNOb3RpZmllci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWxELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBS3JELHVCQUFNLFNBQVMsR0FBVyxrQkFBa0IsQ0FBQztBQUM3Qyx1QkFBTSxjQUFjLEdBQVcsa0JBQWtCLENBQUM7QUF5RGxELE1BQU0sc0JBQXVCLFNBQVEsc0JBQXNCOzs7Ozs7OztJQVN6RCxZQUFZLGVBQWdDLEVBQUUsYUFBZ0MsRUFBRSxnQkFBa0MsRUFBRSxtQkFBd0MsRUFBRSxtQkFBd0M7UUFDcE0sS0FBSyxDQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXhGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztRQUUvQyxFQUFFLENBQUMsQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLG1CQUFtQixDQUFDLFVBQVUsRUFB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QUFnQjtZQUVoQixtQkFBbUI7WUFDbkIsbUJBQW1COzs7d0JBcUt6QixZQUFZLFNBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBQaGxveEFwcFNlcnZpY2UgfSBmcm9tICdjb20ucGhsb3h1aSc7XG5pbXBvcnQgeyBOZWVkRm9jdXNTZXJ2aWNlIH0gZnJvbSAnY29tLnBobG94dWknO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZU1hbmFnZXIgfSBmcm9tICdjb20ucGhsb3h1aSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25NYW5hZ2VyIH0gZnJvbSAnY29tLnBobG94dWknO1xuaW1wb3J0IHsgUGhsb3hBcHBJbmZvU2VydmljZSB9IGZyb20gJ2NvbS5waGxveHVpJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbiB9IGZyb20gJ2NvbS5waGxveHVpJztcbmltcG9ydCB7IFBobG94QXBwSW5mbyB9IGZyb20gJ2NvbS5waGxveHVpJztcbmltcG9ydCB7IEFic3RyYWN0U2lkZVNsaWRlUGFuZWwgfSBmcm9tICdjb20ucGhsb3h1aSc7XG5pbXBvcnQgeyBJTm90aWZpY2F0aW9uTWFuYWdlciB9IGZyb20gJ2NvbS5waGxveHVpJztcblxuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5jb25zdCBUWVBFX05BTUU6IHN0cmluZyA9IFwicGFycm90cy1ub3RpZmllclwiO1xuY29uc3QgU1VCX1RPUElDX05BTUU6IHN0cmluZyA9ICdwYXJyb3RzLW5vdGlmaWVyJztcblxuQENvbXBvbmVudCh7XG4gIG1vZHVsZUlkOiBtb2R1bGUuaWQsXG4gIHNlbGVjdG9yOiBUWVBFX05BTUUsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInBhcnJvdHMtbm90aWZpZXJcIiBbY2xhc3MuYWN0aXZlXT1cImlzQWN0aXZlKClcIiAoY2xpY2spPVwib25Ub2dnbGUoJGV2ZW50KVwiPlxuXHQ8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxuXHRcdDxkaXY+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtd3JhcHBlciBmbHVpZFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtcm93LXdyYXBwZXJcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtY2VsbC13cmFwcGVyIG1pZGRsZVwiPlxuXHRcdFx0XHRcdFx0PHN2ZyB2ZXJzaW9uPVwiMS4xXCIgaWQ9XCJMYXllcl8xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwiYmVsbFwiIFtjbGFzcy5yaW5naW5nXT1cImlzUmluZ2luZygpXCJcblx0XHRcdFx0XHRcdFx0eG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIgeD1cIjBweFwiIHk9XCIwcHhcIlxuXHRcdFx0XHRcdFx0XHR2aWV3Qm94PVwiMCAwIDMwIDMwXCIgc3R5bGU9XCJlbmFibGUtYmFja2dyb3VuZDogbmV3IDAgMCAzMCAzMDtcIlxuXHRcdFx0XHRcdFx0XHR4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiPlxuXHRcdFx0XHRcdFx0XHRcdDxnPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGc+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxwYXRoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZD1cIk0yMS45NTEsMTkuMTc1bC0xLTEuMjIxdi0zLjI3MWMwLTMuMTIzLTItNS43MjMtNS02LjI5NFY3LjU3NWMwLTAuNjczLTAuODI3LTEuMjIxLTEuNS0xLjIyMVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGMtMC42NzMsMC0xLjUsMC41NDgtMS41LDEuMjIxdjAuODE0Yy0zLDAuNTctNSwzLjE3MS01LDYuMjk0djMuMjcxbC0xLDEuMjIxdjAuNzFoLTF2MmgxN3YtMmgtMVYxOS4xNzV6IE0yMi43NzksMTkuMTc1XCIgLz5cblx0XHRcdFx0XHRcdFx0XHRcdDwvZz5cblx0XHRcdFx0XHRcdFx0XHQ8L2c+XG5cdFx0XHRcdFx0XHRcdDwvc3ZnPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHRcdDxkaXY+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtd3JhcHBlciBmbHVpZFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtcm93LXdyYXBwZXJcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtY2VsbC13cmFwcGVyIG1pZGRsZVwiPlxuXHRcdFx0XHRcdFx0PHN2ZyB2ZXJzaW9uPVwiMS4xXCIgaWQ9XCJMYXllcl8xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwiYmVsbFwiIFtjbGFzcy5yaW5naW5nXT1cImlzUmluZ2luZygpXCJcblx0XHRcdFx0XHRcdFx0eG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIgeD1cIjBweFwiIHk9XCIwcHhcIlxuXHRcdFx0XHRcdFx0XHR2aWV3Qm94PVwiMCAwIDMwIDMwXCIgc3R5bGU9XCJlbmFibGUtYmFja2dyb3VuZDogbmV3IDAgMCAzMCAzMDtcIlxuXHRcdFx0XHRcdFx0XHR4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiPlxuXHRcdFx0XHRcdFx0XHRcdDxnPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGc+XG5cblx0XHRcdFx0XHRcdFx0XHRcdDwvZz5cblx0XHRcdFx0XHRcdFx0XHRcdDxwYXRoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZD1cIk0xNS4xNDcsMjQuNTEzYzEuMTM2LDAsMi4xMTctMC42MjgsMi41NzQtMS42MjhoLTUuMTQ5QzEzLjAzLDIzLjg4NSwxNC4wMTEsMjQuNTEzLDE1LjE0NywyNC41MTNcblx0XHRcdFx0XHRcdFx0XHRcdFx0TDE1LjE0NywyNC41MTN6IE0xNS4xNDcsMjQuODczXCIgLz5cblx0XHRcdFx0XHRcdFx0XHQ8L2c+XG5cdFx0XHRcdFx0XHRcdDwvc3ZnPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInBhcnJvdHMtbm90aWZpZXItc2lkZS1wYW5lbCByaWdodFwiIFtjbGFzcy5hY3RpdmVdPVwiaXNBY3RpdmUoKVwiPlxuXHQ8ZGl2IGNsYXNzPVwicm93XCIgKm5nRm9yPVwibGV0IG5vdGlmeSBvZiBnZXROb3RpZmljYXRpb25zKCk7IGxldCBpID0gaW5kZXg7XCIgKGNsaWNrKT1cIm9uTm90aWZpY2F0aW9uQ2xpY2tlZCgkZXZlbnQsIG5vdGlmeSlcIj5cblx0XHR7e25vdGlmeS50aXRsZX19IC0tPiBjbGljayB0byBjbGVhclxuXHQ8L2Rpdj5cbjwvZGl2PlxuYFxufSlcbmV4cG9ydCBjbGFzcyBQYXJyb3RzTm90aWZpZXIgZXh0ZW5kcyBBYnN0cmFjdFNpZGVTbGlkZVBhbmVsIGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRZUEVfTkFNRTogc3RyaW5nID0gVFlQRV9OQU1FO1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1VCX1RPUElDX05BTUU6IHN0cmluZyA9IFNVQl9UT1BJQ19OQU1FO1xuXG4gIHByaXZhdGUgbm90aWZpY2F0aW9uTWFuYWdlcjogSU5vdGlmaWNhdGlvbk1hbmFnZXI7XG4gIHByaXZhdGUgcGhsb3hBcHBJbmZvOiBQaGxveEFwcEluZm87XG5cbiAgY29uc3RydWN0b3IocGhsb3hBcHBTZXJ2aWNlOiBQaGxveEFwcFNlcnZpY2UsIG9ic2VydmFibGVNZ3I6IE9ic2VydmFibGVNYW5hZ2VyLCBuZWVkRm9jdXNTZXJ2aWNlOiBOZWVkRm9jdXNTZXJ2aWNlLCBub3RpZmljYXRpb25NYW5hZ2VyOiBOb3RpZmljYXRpb25NYW5hZ2VyLCBwaGxveEFwcEluZm9TZXJ2aWNlOiBQaGxveEFwcEluZm9TZXJ2aWNlKSB7XG4gICAgc3VwZXIocGhsb3hBcHBTZXJ2aWNlLCBvYnNlcnZhYmxlTWdyLCBuZWVkRm9jdXNTZXJ2aWNlLCBQYXJyb3RzTm90aWZpZXIuU1VCX1RPUElDX05BTUUpO1xuXG4gICAgdGhpcy5ub3RpZmljYXRpb25NYW5hZ2VyID0gbm90aWZpY2F0aW9uTWFuYWdlcjtcblxuICAgIGlmIChwaGxveEFwcEluZm9TZXJ2aWNlICE9IG51bGwpIHtcbiAgICAgIHBobG94QXBwSW5mb1NlcnZpY2UuZ2V0QXBwSW5mbygpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICB0aGlzLnBobG94QXBwSW5mbyA9IHJlc3VsdDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICB9XG5cbiAgcHVibGljIGlzUmluZ2luZygpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5ub3RpZmljYXRpb25NYW5hZ2VyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsZXQgdW5SZWFkQXJyYXkgPSB0aGlzLmdldFVucmVhZE5vdGlmaWNhdGlvbnMoKTtcblxuICAgICAgaWYgKHVuUmVhZEFycmF5ICE9PSBudWxsICYmIHR5cGVvZiB1blJlYWRBcnJheSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHVuUmVhZEFycmF5Lmxlbmd0aCA+IDA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVbnJlYWROb3RpZmljYXRpb25zKCk6IE5vdGlmaWNhdGlvbltdIHtcbiAgICBpZiAodGhpcy5ub3RpZmljYXRpb25NYW5hZ2VyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsZXQgdW5SZWFkQXJyYXkgPSB0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIuZ2V0VW5yZWFkTm90aWZpY2F0aW9ucygpO1xuXG4gICAgICBpZiAodW5SZWFkQXJyYXkgIT09IG51bGwgJiYgdHlwZW9mIHVuUmVhZEFycmF5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gdW5SZWFkQXJyYXk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcHVibGljIGdldE5vdGlmaWNhdGlvbnMoKTogTm90aWZpY2F0aW9uW10ge1xuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBpZiAodGhpcy5ub3RpZmljYXRpb25NYW5hZ2VyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsZXQgYWxsTm90aWZ5QXJyYXkgPSB0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIuZ2V0Tm90aWZpY2F0aW9ucygpO1xuICAgICAgbGV0IG1heE5vdGlmaWNhdGlvbiA9IFBobG94QXBwSW5mby5ERUZBVUxUX01BWF9OT1RJRklDQVRJT05TO1xuICAgICAgaWYgKHRoaXMucGhsb3hBcHBJbmZvICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLnBobG94QXBwSW5mbyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKHRoaXMucGhsb3hBcHBJbmZvLnNldHRpbmdzICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLnBobG94QXBwSW5mby5zZXR0aW5ncyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBtYXhOb3RpZmljYXRpb24gPSB0aGlzLnBobG94QXBwSW5mby5zZXR0aW5ncy5NQVhfTk9USUZJQ0FUSU9OUztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYWxsTm90aWZ5QXJyYXkgIT09IG51bGwgJiYgdHlwZW9mIGFsbE5vdGlmeUFycmF5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsZXQgb3Zlckxlbmd0aCA9IDA7XG4gICAgICAgIGlmIChhbGxOb3RpZnlBcnJheS5sZW5ndGggPiBtYXhOb3RpZmljYXRpb24pIHtcbiAgICAgICAgICBvdmVyTGVuZ3RoID0gYWxsTm90aWZ5QXJyYXkubGVuZ3RoIC0gbWF4Tm90aWZpY2F0aW9uO1xuXG4gICAgICAgICAgbGV0IHJlbW92ZUFycmF5ID0gYWxsTm90aWZ5QXJyYXkuc2xpY2UoMCwgb3Zlckxlbmd0aCk7XG5cbiAgICAgICAgICBmb3IgKGxldCByIG9mIHJlbW92ZUFycmF5KSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIuY2xlYXIocik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFsbE5vdGlmeUFycmF5ID0gdGhpcy5ub3RpZmljYXRpb25NYW5hZ2VyLmdldE5vdGlmaWNhdGlvbnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IG4gb2YgYWxsTm90aWZ5QXJyYXkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgb25Ob3RpZmljYXRpb25DbGlja2VkKCRldmVudDogRXZlbnQsIG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uKTogdm9pZCB7XG4gICAgaWYgKG5vdGlmaWNhdGlvbiA9PT0gbnVsbCB8fCB0eXBlb2Ygbm90aWZpY2F0aW9uID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5ub3RpZmljYXRpb25NYW5hZ2VyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIuY2xlYXIobm90aWZpY2F0aW9uKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25Ub2dnbGUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBzdXBlci5vblRvZ2dsZShldmVudCk7XG5cbiAgICAvLyBtYXJrIGFzIHJlYWRcbiAgICBpZiAodGhpcy5ub3RpZmljYXRpb25NYW5hZ2VyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIubWFya0FzUmVhZEFsbCgpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgcHVibGljIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxufVxuIl19