com.phloxui
Version:
PhloxUI Ng2+ Framework
208 lines (207 loc) • 24.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, HostListener } from '@angular/core';
import { PhloxAppService } from '../../../../service/PhloxAppService.service';
import { NeedFocusService } from '../../../../service/NeedFocusService.service';
import { ObservableManager } from '../../../../service/ObservableManager.service';
import { NotificationManager } from '../../../../service/NotificationManager.service';
import { PhloxAppInfoService } from '../../../../service/PhloxAppInfoService.service';
import { PhloxAppInfo } from '../../../../component/model/PhloxAppInfo';
import { AbstractSideSlidePanel } from '../../../AbstractSideSlidePanel';
var /** @type {?} */ TYPE_NAME = "phx-notifier";
var /** @type {?} */ SUB_TOPIC_NAME = 'phlox-notifier';
var PhloxNotifier = /** @class */ (function (_super) {
tslib_1.__extends(PhloxNotifier, _super);
function PhloxNotifier(phloxAppService, observableMgr, needFocusService, notificationManager, phloxAppInfoService) {
var _this = _super.call(this, phloxAppService, observableMgr, needFocusService, PhloxNotifier.SUB_TOPIC_NAME) || this;
_this.notificationManager = notificationManager;
if (phloxAppInfoService != null) {
phloxAppInfoService.getAppInfo().then(function (result) {
_this.phloxAppInfo = result;
});
}
return _this;
}
/**
* @return {?}
*/
PhloxNotifier.prototype.ngOnInit = /**
* @return {?}
*/
function () {
_super.prototype.ngOnInit.call(this);
};
/**
* @return {?}
*/
PhloxNotifier.prototype.isRinging = /**
* @return {?}
*/
function () {
if (this.notificationManager !== null && typeof this.notificationManager !== 'undefined') {
var /** @type {?} */ unReadArray = this.getUnreadNotifications();
if (unReadArray !== null && typeof unReadArray !== 'undefined') {
return unReadArray.length > 0;
}
}
return false;
};
/**
* @return {?}
*/
PhloxNotifier.prototype.getUnreadNotifications = /**
* @return {?}
*/
function () {
if (this.notificationManager !== null && typeof this.notificationManager !== 'undefined') {
var /** @type {?} */ unReadArray = this.notificationManager.getUnreadNotifications();
if (unReadArray !== null && typeof unReadArray !== 'undefined') {
return unReadArray;
}
}
return [];
};
/**
* @return {?}
*/
PhloxNotifier.prototype.getNotifications = /**
* @return {?}
*/
function () {
var /** @type {?} */ result = [];
if (this.notificationManager !== null && typeof this.notificationManager !== 'undefined') {
var /** @type {?} */ allNotifyArray = this.notificationManager.getNotifications();
var /** @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') {
var /** @type {?} */ overLength = 0;
if (allNotifyArray.length > maxNotification) {
overLength = allNotifyArray.length - maxNotification;
var /** @type {?} */ removeArray = allNotifyArray.slice(0, overLength);
try {
for (var removeArray_1 = tslib_1.__values(removeArray), removeArray_1_1 = removeArray_1.next(); !removeArray_1_1.done; removeArray_1_1 = removeArray_1.next()) {
var r = removeArray_1_1.value;
this.notificationManager.clear(r);
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (removeArray_1_1 && !removeArray_1_1.done && (_a = removeArray_1.return)) _a.call(removeArray_1);
}
finally { if (e_1) throw e_1.error; }
}
allNotifyArray = this.notificationManager.getNotifications();
}
try {
for (var allNotifyArray_1 = tslib_1.__values(allNotifyArray), allNotifyArray_1_1 = allNotifyArray_1.next(); !allNotifyArray_1_1.done; allNotifyArray_1_1 = allNotifyArray_1.next()) {
var n = allNotifyArray_1_1.value;
result.push(n);
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (allNotifyArray_1_1 && !allNotifyArray_1_1.done && (_b = allNotifyArray_1.return)) _b.call(allNotifyArray_1);
}
finally { if (e_2) throw e_2.error; }
}
}
}
return result;
var e_1, _a, e_2, _b;
};
/**
* @param {?} $event
* @param {?} notification
* @return {?}
*/
PhloxNotifier.prototype.onNotificationClicked = /**
* @param {?} $event
* @param {?} notification
* @return {?}
*/
function ($event, notification) {
if (notification === null || typeof notification === 'undefined') {
return;
}
if (this.notificationManager !== null && typeof this.notificationManager !== 'undefined') {
this.notificationManager.clear(notification);
}
};
/**
* @param {?} event
* @return {?}
*/
PhloxNotifier.prototype.onToggle = /**
* @param {?} event
* @return {?}
*/
function (event) {
_super.prototype.onToggle.call(this, event);
// mark as read
if (this.notificationManager !== null && typeof this.notificationManager !== 'undefined') {
this.notificationManager.markAsReadAll();
}
};
/**
* @param {?} event
* @return {?}
*/
PhloxNotifier.prototype.onClick = /**
* @param {?} event
* @return {?}
*/
function (event) {
event.stopPropagation();
};
PhloxNotifier.TYPE_NAME = TYPE_NAME;
PhloxNotifier.SUB_TOPIC_NAME = SUB_TOPIC_NAME;
PhloxNotifier.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: "<div class=\"phx-notifier\" [class.active]=\"isActive()\" (click)=\"onToggle($event)\">\n\t<div class=\"wrapper\">\n\t\t<div>\n\t\t\t<div class=\"table-wrapper fluid\">\n\t\t\t\t<div class=\"table-row-wrapper\">\n\t\t\t\t\t<div class=\"table-cell-wrapper middle\">\n\t\t\t\t\t\t<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" class=\"bell\" [class.ringing]=\"isRinging()\"\n\t\t\t\t\t\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t\t\t\t\t\t\tviewBox=\"0 0 30 30\" style=\"enable-background: new 0 0 30 30;\"\n\t\t\t\t\t\t\txml:space=\"preserve\">\n\t\t\t\t\t\t\t\t<g>\n\t\t\t\t\t\t\t\t\t<g>\n\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\td=\"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\n\t\t\t\t\t\t\t\t\t\t\tc-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\" />\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div>\n\t\t\t<div class=\"table-wrapper fluid\">\n\t\t\t\t<div class=\"table-row-wrapper\">\n\t\t\t\t\t<div class=\"table-cell-wrapper middle\">\n\t\t\t\t\t\t<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" class=\"bell\" [class.ringing]=\"isRinging()\"\n\t\t\t\t\t\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t\t\t\t\t\t\tviewBox=\"0 0 30 30\" style=\"enable-background: new 0 0 30 30;\"\n\t\t\t\t\t\t\txml:space=\"preserve\">\n\t\t\t\t\t\t\t\t<g>\n\t\t\t\t\t\t\t\t\t<g>\n\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\td=\"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\n\t\t\t\t\t\t\t\t\t\tL15.147,24.513z M15.147,24.873\" />\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n<div class=\"phx-notifier-side-panel right\" [class.active]=\"isActive()\">\n\t<div class=\"row\" *ngFor=\"let notify of getNotifications(); let i = index;\" (click)=\"onNotificationClicked($event, notify)\">\n\t\t{{notify.title}} --> click to clear\n\t</div>\n</div>\n"
},] },
];
/** @nocollapse */
PhloxNotifier.ctorParameters = function () { return [
{ type: PhloxAppService, },
{ type: ObservableManager, },
{ type: NeedFocusService, },
{ type: NotificationManager, },
{ type: PhloxAppInfoService, },
]; };
PhloxNotifier.propDecorators = {
"onClick": [{ type: HostListener, args: ['click', ['$event'],] },],
};
return PhloxNotifier;
}(AbstractSideSlidePanel));
export { PhloxNotifier };
function PhloxNotifier_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
PhloxNotifier.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
PhloxNotifier.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
PhloxNotifier.propDecorators;
/** @type {?} */
PhloxNotifier.TYPE_NAME;
/** @type {?} */
PhloxNotifier.SUB_TOPIC_NAME;
/** @type {?} */
PhloxNotifier.prototype.notificationManager;
/** @type {?} */
PhloxNotifier.prototype.phloxAppInfo;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGhsb3hOb3RpZmllci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvcGFnZS9tYWluL21lbnUuaW50ZXJuYWwvUGhsb3hOb3RpZmllci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFpQixZQUFZLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBR3pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUV0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDeEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFLekUscUJBQU0sU0FBUyxHQUFXLGNBQWMsQ0FBQztBQUV6QyxxQkFBTSxjQUFjLEdBQVcsZ0JBQWdCLENBQUM7O0lBeURiLHlDQUFzQjtJQVN2RCx1QkFBWSxlQUFnQyxFQUFFLGFBQWdDLEVBQUUsZ0JBQWtDLEVBQUUsbUJBQXdDLEVBQUUsbUJBQXdDO1FBQXRNLFlBQ0Usa0JBQU0sZUFBZSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLENBQUMsY0FBYyxDQUFDLFNBU3RGO1FBUEMsS0FBSSxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO1FBRS9DLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDaEMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLENBQUMsSUFB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QWlCO2dCQURqQixnQkFBZ0I7Z0JBRWhCLG1CQUFtQjtnQkFDbkIsbUJBQW1COzs7NEJBc0t6QixZQUFZLFNBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDOzt3QkE3S25DO0VBMEVtQyxzQkFBc0I7U0FBNUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgSG9zdExpc3RlbmVyLCBFbGVtZW50UmVmLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFBobG94QXBwIH0gZnJvbSAnLi4vLi4vLi4vUGhsb3hBcHAuY29tcG9uZW50JztcbmltcG9ydCB7IFBobG94QXBwU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2UvUGhsb3hBcHBTZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmVlZEZvY3VzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2UvTmVlZEZvY3VzU2VydmljZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9ic2VydmFibGVNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZS9PYnNlcnZhYmxlTWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbk1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlL05vdGlmaWNhdGlvbk1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQaGxveEFwcEluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZS9QaGxveEFwcEluZm9TZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi9tb2RlbC9Ob3RpZmljYXRpb24nO1xuaW1wb3J0IHsgUGhsb3hBcHBJbmZvIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tcG9uZW50L21vZGVsL1BobG94QXBwSW5mbyc7XG5pbXBvcnQgeyBBYnN0cmFjdFNpZGVTbGlkZVBhbmVsIH0gZnJvbSAnLi4vLi4vLi4vQWJzdHJhY3RTaWRlU2xpZGVQYW5lbCc7XG5pbXBvcnQgeyBJTm90aWZpY2F0aW9uTWFuYWdlciB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlL0lOb3RpZmljYXRpb25NYW5hZ2VyJztcblxuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5jb25zdCBUWVBFX05BTUU6IHN0cmluZyA9IFwicGh4LW5vdGlmaWVyXCI7XG5cbmNvbnN0IFNVQl9UT1BJQ19OQU1FOiBzdHJpbmcgPSAncGhsb3gtbm90aWZpZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcbiAgc2VsZWN0b3I6IFRZUEVfTkFNRSxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwicGh4LW5vdGlmaWVyXCIgW2NsYXNzLmFjdGl2ZV09XCJpc0FjdGl2ZSgpXCIgKGNsaWNrKT1cIm9uVG9nZ2xlKCRldmVudClcIj5cblx0PGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cblx0XHQ8ZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLXdyYXBwZXIgZmx1aWRcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLXJvdy13cmFwcGVyXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLWNlbGwtd3JhcHBlciBtaWRkbGVcIj5cblx0XHRcdFx0XHRcdDxzdmcgdmVyc2lvbj1cIjEuMVwiIGlkPVwiTGF5ZXJfMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cImJlbGxcIiBbY2xhc3MucmluZ2luZ109XCJpc1JpbmdpbmcoKVwiXG5cdFx0XHRcdFx0XHRcdHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIHg9XCIwcHhcIiB5PVwiMHB4XCJcblx0XHRcdFx0XHRcdFx0dmlld0JveD1cIjAgMCAzMCAzMFwiIHN0eWxlPVwiZW5hYmxlLWJhY2tncm91bmQ6IG5ldyAwIDAgMzAgMzA7XCJcblx0XHRcdFx0XHRcdFx0eG1sOnNwYWNlPVwicHJlc2VydmVcIj5cblx0XHRcdFx0XHRcdFx0XHQ8Zz5cblx0XHRcdFx0XHRcdFx0XHRcdDxnPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8cGF0aFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGQ9XCJNMjEuOTUxLDE5LjE3NWwtMS0xLjIyMXYtMy4yNzFjMC0zLjEyMy0yLTUuNzIzLTUtNi4yOTRWNy41NzVjMC0wLjY3My0wLjgyNy0xLjIyMS0xLjUtMS4yMjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjLTAuNjczLDAtMS41LDAuNTQ4LTEuNSwxLjIyMXYwLjgxNGMtMywwLjU3LTUsMy4xNzEtNSw2LjI5NHYzLjI3MWwtMSwxLjIyMXYwLjcxaC0xdjJoMTd2LTJoLTFWMTkuMTc1eiBNMjIuNzc5LDE5LjE3NVwiIC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2c+XG5cdFx0XHRcdFx0XHRcdFx0PC9nPlxuXHRcdFx0XHRcdFx0XHQ8L3N2Zz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0XHQ8ZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLXdyYXBwZXIgZmx1aWRcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLXJvdy13cmFwcGVyXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLWNlbGwtd3JhcHBlciBtaWRkbGVcIj5cblx0XHRcdFx0XHRcdDxzdmcgdmVyc2lvbj1cIjEuMVwiIGlkPVwiTGF5ZXJfMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cImJlbGxcIiBbY2xhc3MucmluZ2luZ109XCJpc1JpbmdpbmcoKVwiXG5cdFx0XHRcdFx0XHRcdHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIHg9XCIwcHhcIiB5PVwiMHB4XCJcblx0XHRcdFx0XHRcdFx0dmlld0JveD1cIjAgMCAzMCAzMFwiIHN0eWxlPVwiZW5hYmxlLWJhY2tncm91bmQ6IG5ldyAwIDAgMzAgMzA7XCJcblx0XHRcdFx0XHRcdFx0eG1sOnNwYWNlPVwicHJlc2VydmVcIj5cblx0XHRcdFx0XHRcdFx0XHQ8Zz5cblx0XHRcdFx0XHRcdFx0XHRcdDxnPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2c+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8cGF0aFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGQ9XCJNMTUuMTQ3LDI0LjUxM2MxLjEzNiwwLDIuMTE3LTAuNjI4LDIuNTc0LTEuNjI4aC01LjE0OUMxMy4wMywyMy44ODUsMTQuMDExLDI0LjUxMywxNS4xNDcsMjQuNTEzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdEwxNS4xNDcsMjQuNTEzeiBNMTUuMTQ3LDI0Ljg3M1wiIC8+XG5cdFx0XHRcdFx0XHRcdFx0PC9nPlxuXHRcdFx0XHRcdFx0XHQ8L3N2Zz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJwaHgtbm90aWZpZXItc2lkZS1wYW5lbCByaWdodFwiIFtjbGFzcy5hY3RpdmVdPVwiaXNBY3RpdmUoKVwiPlxuXHQ8ZGl2IGNsYXNzPVwicm93XCIgKm5nRm9yPVwibGV0IG5vdGlmeSBvZiBnZXROb3RpZmljYXRpb25zKCk7IGxldCBpID0gaW5kZXg7XCIgKGNsaWNrKT1cIm9uTm90aWZpY2F0aW9uQ2xpY2tlZCgkZXZlbnQsIG5vdGlmeSlcIj5cblx0XHR7e25vdGlmeS50aXRsZX19IC0tPiBjbGljayB0byBjbGVhclxuXHQ8L2Rpdj5cbjwvZGl2PlxuYFxufSlcbmV4cG9ydCBjbGFzcyBQaGxveE5vdGlmaWVyIGV4dGVuZHMgQWJzdHJhY3RTaWRlU2xpZGVQYW5lbCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUWVBFX05BTUU6IHN0cmluZyA9IFRZUEVfTkFNRTtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNVQl9UT1BJQ19OQU1FOiBzdHJpbmcgPSBTVUJfVE9QSUNfTkFNRTtcblxuICBwcml2YXRlIG5vdGlmaWNhdGlvbk1hbmFnZXI6IElOb3RpZmljYXRpb25NYW5hZ2VyO1xuICBwcml2YXRlIHBobG94QXBwSW5mbzogUGhsb3hBcHBJbmZvO1xuXG4gIGNvbnN0cnVjdG9yKHBobG94QXBwU2VydmljZTogUGhsb3hBcHBTZXJ2aWNlLCBvYnNlcnZhYmxlTWdyOiBPYnNlcnZhYmxlTWFuYWdlciwgbmVlZEZvY3VzU2VydmljZTogTmVlZEZvY3VzU2VydmljZSwgbm90aWZpY2F0aW9uTWFuYWdlcjogTm90aWZpY2F0aW9uTWFuYWdlciwgcGhsb3hBcHBJbmZvU2VydmljZTogUGhsb3hBcHBJbmZvU2VydmljZSkge1xuICAgIHN1cGVyKHBobG94QXBwU2VydmljZSwgb2JzZXJ2YWJsZU1nciwgbmVlZEZvY3VzU2VydmljZSwgUGhsb3hOb3RpZmllci5TVUJfVE9QSUNfTkFNRSk7XG5cbiAgICB0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIgPSBub3RpZmljYXRpb25NYW5hZ2VyO1xuXG4gICAgaWYgKHBobG94QXBwSW5mb1NlcnZpY2UgIT0gbnVsbCkge1xuICAgICAgcGhsb3hBcHBJbmZvU2VydmljZS5nZXRBcHBJbmZvKCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMucGhsb3hBcHBJbmZvID0gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gIH1cblxuICBwdWJsaWMgaXNSaW5naW5nKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMubm90aWZpY2F0aW9uTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxldCB1blJlYWRBcnJheSA9IHRoaXMuZ2V0VW5yZWFkTm90aWZpY2F0aW9ucygpO1xuXG4gICAgICBpZiAodW5SZWFkQXJyYXkgIT09IG51bGwgJiYgdHlwZW9mIHVuUmVhZEFycmF5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gdW5SZWFkQXJyYXkubGVuZ3RoID4gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldFVucmVhZE5vdGlmaWNhdGlvbnMoKTogTm90aWZpY2F0aW9uW10ge1xuICAgIGlmICh0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMubm90aWZpY2F0aW9uTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxldCB1blJlYWRBcnJheSA9IHRoaXMubm90aWZpY2F0aW9uTWFuYWdlci5nZXRVbnJlYWROb3RpZmljYXRpb25zKCk7XG5cbiAgICAgIGlmICh1blJlYWRBcnJheSAhPT0gbnVsbCAmJiB0eXBlb2YgdW5SZWFkQXJyYXkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB1blJlYWRBcnJheTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBwdWJsaWMgZ2V0Tm90aWZpY2F0aW9ucygpOiBOb3RpZmljYXRpb25bXSB7XG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIGlmICh0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMubm90aWZpY2F0aW9uTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxldCBhbGxOb3RpZnlBcnJheSA9IHRoaXMubm90aWZpY2F0aW9uTWFuYWdlci5nZXROb3RpZmljYXRpb25zKCk7XG4gICAgICBsZXQgbWF4Tm90aWZpY2F0aW9uID0gUGhsb3hBcHBJbmZvLkRFRkFVTFRfTUFYX05PVElGSUNBVElPTlM7XG4gICAgICBpZiAodGhpcy5waGxveEFwcEluZm8gIT09IG51bGwgJiYgdHlwZW9mIHRoaXMucGhsb3hBcHBJbmZvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAodGhpcy5waGxveEFwcEluZm8uc2V0dGluZ3MgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMucGhsb3hBcHBJbmZvLnNldHRpbmdzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIG1heE5vdGlmaWNhdGlvbiA9IHRoaXMucGhsb3hBcHBJbmZvLnNldHRpbmdzLk1BWF9OT1RJRklDQVRJT05TO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhbGxOb3RpZnlBcnJheSAhPT0gbnVsbCAmJiB0eXBlb2YgYWxsTm90aWZ5QXJyYXkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGxldCBvdmVyTGVuZ3RoID0gMDtcbiAgICAgICAgaWYgKGFsbE5vdGlmeUFycmF5Lmxlbmd0aCA+IG1heE5vdGlmaWNhdGlvbikge1xuICAgICAgICAgIG92ZXJMZW5ndGggPSBhbGxOb3RpZnlBcnJheS5sZW5ndGggLSBtYXhOb3RpZmljYXRpb247XG5cbiAgICAgICAgICBsZXQgcmVtb3ZlQXJyYXkgPSBhbGxOb3RpZnlBcnJheS5zbGljZSgwLCBvdmVyTGVuZ3RoKTtcblxuICAgICAgICAgIGZvciAobGV0IHIgb2YgcmVtb3ZlQXJyYXkpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uTWFuYWdlci5jbGVhcihyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWxsTm90aWZ5QXJyYXkgPSB0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIuZ2V0Tm90aWZpY2F0aW9ucygpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgbiBvZiBhbGxOb3RpZnlBcnJheSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKG4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBvbk5vdGlmaWNhdGlvbkNsaWNrZWQoJGV2ZW50OiBFdmVudCwgbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24pOiB2b2lkIHtcbiAgICBpZiAobm90aWZpY2F0aW9uID09PSBudWxsIHx8IHR5cGVvZiBub3RpZmljYXRpb24gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMubm90aWZpY2F0aW9uTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uTWFuYWdlci5jbGVhcihub3RpZmljYXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblRvZ2dsZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIHN1cGVyLm9uVG9nZ2xlKGV2ZW50KTtcblxuICAgIC8vIG1hcmsgYXMgcmVhZFxuICAgIGlmICh0aGlzLm5vdGlmaWNhdGlvbk1hbmFnZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMubm90aWZpY2F0aW9uTWFuYWdlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uTWFuYWdlci5tYXJrQXNSZWFkQWxsKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG59XG4iXX0=