@alauda-fe/common
Version:
Alauda frontend team common codes.
140 lines • 19.5 kB
JavaScript
import { ThemeService } from '@alauda/ui';
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, } from '@angular/core';
import { map } from 'rxjs';
import { publishRef } from '../../../../core/public-api';
import { NotifyService } from '../notify.service';
import { NOTIFY_PUSH_TYPE } from '../utils';
import * as i0 from "@angular/core";
import * as i1 from "../notify.service";
import * as i2 from "@alauda/ui";
import * as i3 from "@angular/common";
import * as i4 from "@angular/forms";
import * as i5 from "../../../../effect-directive/e2e-attribute-binding.directive";
import * as i6 from "./notification-list/notification-list.component";
import * as i7 from "../../../../translate/translate.pipe";
function HeaderNotifyComponent_div_2_Template(rf, ctx) { if (rf & 1) {
const _r1 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "div", 5)(1, "span", 6);
i0.ɵɵtext(2);
i0.ɵɵpipe(3, "translate");
i0.ɵɵelementEnd();
i0.ɵɵelementStart(4, "div", 7)(5, "span", 8);
i0.ɵɵtext(6);
i0.ɵɵpipe(7, "translate");
i0.ɵɵelementEnd();
i0.ɵɵelementStart(8, "aui-switch", 9);
i0.ɵɵlistener("ngModelChange", function HeaderNotifyComponent_div_2_Template_aui_switch_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.switchPush($event)); });
i0.ɵɵtwoWayListener("ngModelChange", function HeaderNotifyComponent_div_2_Template_aui_switch_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.push, $event) || (ctx_r1.push = $event); return i0.ɵɵresetView($event); });
i0.ɵɵelementEnd()()();
} if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext();
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 3, "message"), "");
i0.ɵɵadvance(4);
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(7, 5, "notify_push"), "");
i0.ɵɵadvance(2);
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.push);
} }
function HeaderNotifyComponent_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵelement(1, "acl-notification-list", 11);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext(2);
i0.ɵɵadvance();
i0.ɵɵproperty("list", ctx_r1.list);
} }
function HeaderNotifyComponent_ng_container_3_ng_template_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 12);
i0.ɵɵelement(1, "img", 13);
i0.ɵɵpipe(2, "async");
i0.ɵɵelementStart(3, "span", 14);
i0.ɵɵtext(4);
i0.ɵɵpipe(5, "translate");
i0.ɵɵelementEnd()();
} if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext(2);
i0.ɵɵadvance();
i0.ɵɵproperty("src", i0.ɵɵpipeBind1(2, 2, ctx_r1.noDataSrc$), i0.ɵɵsanitizeUrl);
i0.ɵɵadvance(3);
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(5, 4, "no_message"), " ");
} }
function HeaderNotifyComponent_ng_container_3_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainerStart(0);
i0.ɵɵtemplate(1, HeaderNotifyComponent_ng_container_3_ng_container_1_Template, 2, 1, "ng-container", 10)(2, HeaderNotifyComponent_ng_container_3_ng_template_2_Template, 6, 6, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
i0.ɵɵelementContainerEnd();
} if (rf & 2) {
const elseTemplate_r3 = i0.ɵɵreference(3);
const ctx_r1 = i0.ɵɵnextContext();
i0.ɵɵadvance();
i0.ɵɵproperty("ngIf", ctx_r1.list == null ? null : ctx_r1.list.length)("ngIfElse", elseTemplate_r3);
} }
export class HeaderNotifyComponent {
beforeUnloadHandle() {
this.notifyService.destroy();
}
constructor(notifyService, theme, cdr) {
this.notifyService = notifyService;
this.theme = theme;
this.cdr = cdr;
this.active = false;
this.visible = false;
this.noDataSrc$ = this.theme.currentTheme$.pipe(map(theme => `images/${theme}/no-message.svg`), publishRef());
}
ngOnInit() {
this.notifyService.watchNotify();
this.notifyService.userName$.subscribe(() => {
this.watchMessageConfigMap();
});
this.getNotifyList();
}
watchMessageConfigMap() {
this.pushEnabled = true;
this.push =
'' + this.notifyService.getCacheLocalValue(NOTIFY_PUSH_TYPE) === 'true';
this.cdr.markForCheck();
}
getNotifyList() {
this.notifyService.getNotifyList().subscribe((res) => {
this.list = res;
this.cdr.markForCheck();
});
}
openNotify() {
this.active = true;
}
closeNotify() {
this.active = false;
}
switchPush(enabled) {
this.notifyService.addCacheLocalValue(NOTIFY_PUSH_TYPE, enabled);
}
ngOnDestroy() {
this.notifyService.destroy();
}
static { this.ɵfac = function HeaderNotifyComponent_Factory(t) { return new (t || HeaderNotifyComponent)(i0.ɵɵdirectiveInject(i1.NotifyService), i0.ɵɵdirectiveInject(i2.ThemeService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: HeaderNotifyComponent, selectors: [["acl-header-notify"]], hostBindings: function HeaderNotifyComponent_HostBindings(rf, ctx) { if (rf & 1) {
i0.ɵɵlistener("beforeunload", function HeaderNotifyComponent_beforeunload_HostBindingHandler() { return ctx.beforeUnloadHandle(); }, false, i0.ɵɵresolveWindow);
} }, decls: 4, vars: 5, consts: [["elseTemplate", ""], ["icon", "volume", 1, "plg-header-icon-button", 3, "click"], ["drawerClass", "header-notify", "offsetY", "64px", 3, "close", "visible", "width", "hideOnClickOutside"], ["class", "header", 4, "auiDrawerHeader"], [4, "auiDrawerContent"], [1, "header"], [1, "text"], [1, "header_push"], [1, "label"], ["name", "push", 3, "ngModelChange", "ngModel"], [4, "ngIf", "ngIfElse"], [3, "list"], [1, "noData"], [3, "src"], [1, "noData_text"]], template: function HeaderNotifyComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "aui-icon", 1);
i0.ɵɵlistener("click", function HeaderNotifyComponent_Template_aui_icon_click_0_listener() { return ctx.active ? ctx.closeNotify() : ctx.openNotify(); });
i0.ɵɵelementEnd();
i0.ɵɵelementStart(1, "aui-drawer", 2);
i0.ɵɵlistener("close", function HeaderNotifyComponent_Template_aui_drawer_close_1_listener() { return ctx.closeNotify(); });
i0.ɵɵtemplate(2, HeaderNotifyComponent_div_2_Template, 9, 7, "div", 3)(3, HeaderNotifyComponent_ng_container_3_Template, 4, 2, "ng-container", 4);
i0.ɵɵelementEnd();
} if (rf & 2) {
i0.ɵɵclassProp("isActive", ctx.active);
i0.ɵɵadvance();
i0.ɵɵproperty("visible", ctx.active)("width", 400)("hideOnClickOutside", true);
} }, dependencies: [i3.NgIf, i2.IconComponent, i2.DrawerComponent, i2.DrawerHeaderDirective, i2.DrawerContentDirective, i2.SwitchComponent, i4.NgControlStatus, i4.NgModel, i5.E2eAttributeBindingDirective, i6.NotificationListComponent, i3.AsyncPipe, i7.TranslatePipe], styles: [".header[_ngcontent-%COMP%]{display:flex;justify-content:space-between}.header[_ngcontent-%COMP%] .text[_ngcontent-%COMP%]{color:rgb(var(--aui-color-n-2));font-weight:500;font-size:var(--aui-font-size-l)}.header_push[_ngcontent-%COMP%]{display:flex;font-size:var(--aui-font-size-s);font-weight:400;color:rgb(var(--aui-color-n-1));align-items:center}.header_push[_ngcontent-%COMP%] .label[_ngcontent-%COMP%]{margin-right:8px} .aui-drawer.header-notify .noData{display:flex;flex-direction:column;justify-content:center;align-items:center;width:100%;height:100%} .aui-drawer.header-notify .noData img{width:160px} .aui-drawer.header-notify .noData_text{color:rgb(var(--aui-color-n-1));font-weight:400;margin-top:16px;font-size:var(--aui-font-size-xl)} .aui-drawer.header-notify .aui-drawer__body{padding:20px!important} aui-notification .platform-class{border-left:4px solid #1cb6cc} aui-notification .platform-class .aui-notification__icon{color:#1cb6cc}"], changeDetection: 0 }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(HeaderNotifyComponent, [{
type: Component,
args: [{ selector: 'acl-header-notify', changeDetection: ChangeDetectionStrategy.OnPush, template: "<aui-icon\n class=\"plg-header-icon-button\"\n [class.isActive]=\"active\"\n icon=\"volume\"\n (click)=\"active ? closeNotify() : openNotify()\"\n></aui-icon>\n\n<aui-drawer\n drawerClass=\"header-notify\"\n offsetY=\"64px\"\n [visible]=\"active\"\n (close)=\"closeNotify()\"\n [width]=\"400\"\n [hideOnClickOutside]=\"true\"\n>\n <div\n *auiDrawerHeader\n class=\"header\"\n >\n <span class=\"text\"> {{ 'message' | translate }}</span>\n <!-- TODO: \u8FD9\u4E2A\u7248\u672C\u6CA1\u6709\u81EA\u52A8\u53D1\u9001\u7684\u6D88\u606F\uFF0C\u7528\u6237\u624B\u518C\u6CA1\u6709\u529E\u6CD5\u63CF\u8FF0\u8FD9\u90E8\u5206\u529F\u80FD, \u4E0D\u5224\u65AD config map \u503C -->\n <!-- <div class=\"header_push\" *ngIf=\"pushEnabled\"> -->\n <div class=\"header_push\">\n <span class=\"label\"> {{ 'notify_push' | translate }}</span>\n <aui-switch\n name=\"push\"\n (ngModelChange)=\"switchPush($event)\"\n [(ngModel)]=\"push\"\n >\n </aui-switch>\n </div>\n </div>\n <ng-container *auiDrawerContent>\n <ng-container *ngIf=\"list?.length; else elseTemplate\">\n <acl-notification-list [list]=\"list\"></acl-notification-list>\n </ng-container>\n <ng-template #elseTemplate>\n <div class=\"noData\">\n <img [src]=\"noDataSrc$ | async\" />\n <span class=\"noData_text\">\n {{ 'no_message' | translate }}\n </span>\n </div>\n </ng-template>\n </ng-container>\n</aui-drawer>\n", styles: [".header{display:flex;justify-content:space-between}.header .text{color:rgb(var(--aui-color-n-2));font-weight:500;font-size:var(--aui-font-size-l)}.header_push{display:flex;font-size:var(--aui-font-size-s);font-weight:400;color:rgb(var(--aui-color-n-1));align-items:center}.header_push .label{margin-right:8px}::ng-deep .aui-drawer.header-notify .noData{display:flex;flex-direction:column;justify-content:center;align-items:center;width:100%;height:100%}::ng-deep .aui-drawer.header-notify .noData img{width:160px}::ng-deep .aui-drawer.header-notify .noData_text{color:rgb(var(--aui-color-n-1));font-weight:400;margin-top:16px;font-size:var(--aui-font-size-xl)}::ng-deep .aui-drawer.header-notify .aui-drawer__body{padding:20px!important}::ng-deep aui-notification .platform-class{border-left:4px solid #1cb6cc}::ng-deep aui-notification .platform-class .aui-notification__icon{color:#1cb6cc}\n"] }]
}], () => [{ type: i1.NotifyService }, { type: i2.ThemeService }, { type: i0.ChangeDetectorRef }], { beforeUnloadHandle: [{
type: HostListener,
args: ['window:beforeunload']
}] }); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(HeaderNotifyComponent, { className: "HeaderNotifyComponent" }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLW5vdGlmeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvcGFnZS1zY2FmZm9sZC9wYWdlLWhlYWRlci9oZWFkZXItbm90aWZ5L2NvbXBvbmVudC9oZWFkZXItbm90aWZ5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9wYWdlLXNjYWZmb2xkL3BhZ2UtaGVhZGVyL2hlYWRlci1ub3RpZnkvY29tcG9uZW50L2hlYWRlci1ub3RpZnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMxQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxHQUdiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQVcsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7Ozs7O0lDTWpELEFBSkYsOEJBR0MsY0FDb0I7SUFBQyxZQUEyQjs7SUFBQSxpQkFBTztJQUlwRCxBQURGLDhCQUF5QixjQUNIO0lBQUMsWUFBK0I7O0lBQUEsaUJBQU87SUFDM0QscUNBSUM7SUFGQywyTUFBaUIseUJBQWtCLEtBQUM7SUFDcEMsa1NBQWtCO0lBSXhCLEFBREUsQUFERSxpQkFBYSxFQUNULEVBQ0Y7OztJQVpnQixlQUEyQjtJQUEzQiwrREFBMkI7SUFJeEIsZUFBK0I7SUFBL0IsbUVBQStCO0lBSWxELGVBQWtCO0lBQWxCLDJDQUFrQjs7O0lBTXRCLDZCQUFzRDtJQUNwRCw0Q0FBNkQ7Ozs7SUFBdEMsY0FBYTtJQUFiLGtDQUFhOzs7SUFHcEMsK0JBQW9CO0lBQ2xCLDBCQUFrQzs7SUFDbEMsZ0NBQTBCO0lBQ3hCLFlBQ0Y7O0lBQ0YsQUFERSxpQkFBTyxFQUNIOzs7SUFKQyxjQUEwQjtJQUExQiwrRUFBMEI7SUFFN0IsZUFDRjtJQURFLG1FQUNGOzs7SUFUTiw2QkFBZ0M7SUFJOUIsQUFIQSx3R0FBc0QseUhBRzNCOzs7OztJQUhaLGNBQW9CO0lBQUEsQUFBcEIsc0VBQW9CLDZCQUFpQjs7QURaeEQsTUFBTSxPQUFPLHFCQUFxQjtJQU9oQyxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBT0QsWUFDbUIsYUFBNEIsRUFDNUIsS0FBbUIsRUFDbkIsR0FBc0I7UUFGdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNuQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQWxCekMsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFTaEIsZUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDeEMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsVUFBVSxLQUFLLGlCQUFpQixDQUFDLEVBQzlDLFVBQVUsRUFBRSxDQUNiLENBQUM7SUFNQyxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUMxQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJO1lBQ1AsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxNQUFNLENBQUM7UUFDMUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBYyxFQUFFLEVBQUU7WUFDOUQsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7WUFDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQWdCO1FBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQy9CLENBQUM7c0ZBMURVLHFCQUFxQjtvRUFBckIscUJBQXFCO1lBQXJCLHdHQUFBLHdCQUFvQiwrQkFBQzs7WUNyQmxDLG1DQUtDO1lBREMsaUhBQWtCLGlCQUFhLEdBQUcsZ0JBQVksSUFBQztZQUNoRCxpQkFBVztZQUVaLHFDQU9DO1lBSEMsc0dBQVMsaUJBQWEsSUFBQztZQXFCdkIsQUFqQkEsc0VBR0MsMkVBYytCO1lBYWxDLGlCQUFhOztZQTNDWCxzQ0FBeUI7WUFRekIsY0FBa0I7WUFHbEIsQUFEQSxBQUZBLG9DQUFrQixjQUVMLDRCQUNjOzs7aUZEUWhCLHFCQUFxQjtjQU5qQyxTQUFTOzJCQUNFLG1CQUFtQixtQkFHWix1QkFBdUIsQ0FBQyxNQUFNO3lHQVMvQyxrQkFBa0I7a0JBRGpCLFlBQVk7bUJBQUMscUJBQXFCOztrRkFOeEIscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnQGFsYXVkYS91aSc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSG9zdExpc3RlbmVyLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgcHVibGlzaFJlZiB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvcHVibGljLWFwaSc7XG5pbXBvcnQgeyBOb3RpZnlTZXJ2aWNlIH0gZnJvbSAnLi4vbm90aWZ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgTWVzc2FnZSwgTk9USUZZX1BVU0hfVFlQRSB9IGZyb20gJy4uL3V0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWNsLWhlYWRlci1ub3RpZnknLFxuICB0ZW1wbGF0ZVVybDogJy4vaGVhZGVyLW5vdGlmeS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2hlYWRlci1ub3RpZnkuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEhlYWRlck5vdGlmeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgYWN0aXZlID0gZmFsc2U7XG4gIHZpc2libGUgPSBmYWxzZTtcbiAgcHVzaDogYm9vbGVhbjtcbiAgcHVzaEVuYWJsZWQ6IGJvb2xlYW47XG4gIGxpc3Q6IE1lc3NhZ2VbXTtcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcpXG4gIGJlZm9yZVVubG9hZEhhbmRsZSgpIHtcbiAgICB0aGlzLm5vdGlmeVNlcnZpY2UuZGVzdHJveSgpO1xuICB9XG5cbiAgbm9EYXRhU3JjJCA9IHRoaXMudGhlbWUuY3VycmVudFRoZW1lJC5waXBlKFxuICAgIG1hcCh0aGVtZSA9PiBgaW1hZ2VzLyR7dGhlbWV9L25vLW1lc3NhZ2Uuc3ZnYCksXG4gICAgcHVibGlzaFJlZigpLFxuICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbm90aWZ5U2VydmljZTogTm90aWZ5U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRoZW1lOiBUaGVtZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5ub3RpZnlTZXJ2aWNlLndhdGNoTm90aWZ5KCk7XG4gICAgdGhpcy5ub3RpZnlTZXJ2aWNlLnVzZXJOYW1lJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy53YXRjaE1lc3NhZ2VDb25maWdNYXAoKTtcbiAgICB9KTtcbiAgICB0aGlzLmdldE5vdGlmeUxpc3QoKTtcbiAgfVxuXG4gIHdhdGNoTWVzc2FnZUNvbmZpZ01hcCgpIHtcbiAgICB0aGlzLnB1c2hFbmFibGVkID0gdHJ1ZTtcbiAgICB0aGlzLnB1c2ggPVxuICAgICAgJycgKyB0aGlzLm5vdGlmeVNlcnZpY2UuZ2V0Q2FjaGVMb2NhbFZhbHVlKE5PVElGWV9QVVNIX1RZUEUpID09PSAndHJ1ZSc7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXROb3RpZnlMaXN0KCkge1xuICAgIHRoaXMubm90aWZ5U2VydmljZS5nZXROb3RpZnlMaXN0KCkuc3Vic2NyaWJlKChyZXM6IE1lc3NhZ2VbXSkgPT4ge1xuICAgICAgdGhpcy5saXN0ID0gcmVzO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBvcGVuTm90aWZ5KCkge1xuICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgfVxuXG4gIGNsb3NlTm90aWZ5KCkge1xuICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2hQdXNoKGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLm5vdGlmeVNlcnZpY2UuYWRkQ2FjaGVMb2NhbFZhbHVlKE5PVElGWV9QVVNIX1RZUEUsIGVuYWJsZWQpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5ub3RpZnlTZXJ2aWNlLmRlc3Ryb3koKTtcbiAgfVxufVxuIiwiPGF1aS1pY29uXG4gIGNsYXNzPVwicGxnLWhlYWRlci1pY29uLWJ1dHRvblwiXG4gIFtjbGFzcy5pc0FjdGl2ZV09XCJhY3RpdmVcIlxuICBpY29uPVwidm9sdW1lXCJcbiAgKGNsaWNrKT1cImFjdGl2ZSA/IGNsb3NlTm90aWZ5KCkgOiBvcGVuTm90aWZ5KClcIlxuPjwvYXVpLWljb24+XG5cbjxhdWktZHJhd2VyXG4gIGRyYXdlckNsYXNzPVwiaGVhZGVyLW5vdGlmeVwiXG4gIG9mZnNldFk9XCI2NHB4XCJcbiAgW3Zpc2libGVdPVwiYWN0aXZlXCJcbiAgKGNsb3NlKT1cImNsb3NlTm90aWZ5KClcIlxuICBbd2lkdGhdPVwiNDAwXCJcbiAgW2hpZGVPbkNsaWNrT3V0c2lkZV09XCJ0cnVlXCJcbj5cbiAgPGRpdlxuICAgICphdWlEcmF3ZXJIZWFkZXJcbiAgICBjbGFzcz1cImhlYWRlclwiXG4gID5cbiAgICA8c3BhbiBjbGFzcz1cInRleHRcIj4ge3sgJ21lc3NhZ2UnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDwhLS0gVE9ETzog6L+Z5Liq54mI5pys5rKh5pyJ6Ieq5Yqo5Y+R6YCB55qE5raI5oGv77yM55So5oi35omL5YaM5rKh5pyJ5Yqe5rOV5o+P6L+w6L+Z6YOo5YiG5Yqf6IO9LCDkuI3liKTmlq0gY29uZmlnIG1hcCDlgLwgLS0+XG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwiaGVhZGVyX3B1c2hcIiAqbmdJZj1cInB1c2hFbmFibGVkXCI+IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJfcHVzaFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPiB7eyAnbm90aWZ5X3B1c2gnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgPGF1aS1zd2l0Y2hcbiAgICAgICAgbmFtZT1cInB1c2hcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzd2l0Y2hQdXNoKCRldmVudClcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInB1c2hcIlxuICAgICAgPlxuICAgICAgPC9hdWktc3dpdGNoPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqYXVpRHJhd2VyQ29udGVudD5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGlzdD8ubGVuZ3RoOyBlbHNlIGVsc2VUZW1wbGF0ZVwiPlxuICAgICAgPGFjbC1ub3RpZmljYXRpb24tbGlzdCBbbGlzdF09XCJsaXN0XCI+PC9hY2wtbm90aWZpY2F0aW9uLWxpc3Q+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNlbHNlVGVtcGxhdGU+XG4gICAgICA8ZGl2IGNsYXNzPVwibm9EYXRhXCI+XG4gICAgICAgIDxpbWcgW3NyY109XCJub0RhdGFTcmMkIHwgYXN5bmNcIiAvPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm5vRGF0YV90ZXh0XCI+XG4gICAgICAgICAge3sgJ25vX21lc3NhZ2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9hdWktZHJhd2VyPlxuIl19