@firestitch/app-message 13.0.0 → 13.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/modules/message-queues/components/queue/queue.component.d.ts +5 -5
- package/app/modules/message-queues/pipes/linkify.pipe.d.ts +1 -1
- package/{esm2015/app/modules/app-message/app-message.module.js → esm2020/app/modules/app-message/app-message.module.mjs} +5 -5
- package/esm2020/app/modules/message-preview/components/preview/preview.component.mjs +26 -0
- package/{esm2015/app/modules/message-preview/message-preview.module.js → esm2020/app/modules/message-preview/message-preview.module.mjs} +5 -5
- package/esm2020/app/modules/message-queues/components/queue/queue.component.mjs +210 -0
- package/esm2020/app/modules/message-queues/components/queues/queues.component.mjs +157 -0
- package/esm2020/app/modules/message-queues/components/recipient/recipient.component.mjs +26 -0
- package/{esm2015/app/modules/message-queues/message-queues.module.js → esm2020/app/modules/message-queues/message-queues.module.mjs} +5 -5
- package/esm2020/app/modules/message-queues/pipes/linkify.pipe.mjs +22 -0
- package/{esm2015/app/modules/message-queues/pipes/truncate.pipe.js → esm2020/app/modules/message-queues/pipes/truncate.pipe.mjs} +4 -4
- package/esm2020/app/modules/message-queues/services/message-queue.service.mjs +29 -0
- package/esm2020/app/modules/message-templates/components/template/template.component.mjs +81 -0
- package/{esm2015/app/modules/message-templates/components/templates/templates.component.js → esm2020/app/modules/message-templates/components/templates/templates.component.mjs} +5 -8
- package/{esm2015/app/modules/message-templates/message-templates.module.js → esm2020/app/modules/message-templates/message-templates.module.mjs} +5 -5
- package/esm2020/app/modules/messages/components/attachments/attachments.component.mjs +81 -0
- package/esm2020/app/modules/messages/components/message/message.component.mjs +129 -0
- package/esm2020/app/modules/messages/components/messages/messages.component.mjs +72 -0
- package/{esm2015/app/modules/messages/messages.module.js → esm2020/app/modules/messages/messages.module.mjs} +5 -5
- package/esm2020/app/modules/webhooks/components/webhooks/webhooks.component.mjs +61 -0
- package/{esm2015/app/modules/webhooks/webhooks.module.js → esm2020/app/modules/webhooks/webhooks.module.mjs} +5 -5
- package/fesm2015/firestitch-app-message.mjs +1286 -0
- package/fesm2015/firestitch-app-message.mjs.map +1 -0
- package/fesm2020/firestitch-app-message.mjs +1289 -0
- package/fesm2020/firestitch-app-message.mjs.map +1 -0
- package/package.json +22 -9
- package/bundles/firestitch-app-message.umd.js +0 -1861
- package/bundles/firestitch-app-message.umd.js.map +0 -1
- package/esm2015/app/modules/message-preview/components/preview/preview.component.js +0 -29
- package/esm2015/app/modules/message-queues/components/queue/queue.component.js +0 -214
- package/esm2015/app/modules/message-queues/components/queues/queues.component.js +0 -148
- package/esm2015/app/modules/message-queues/components/recipient/recipient.component.js +0 -31
- package/esm2015/app/modules/message-queues/pipes/linkify.pipe.js +0 -22
- package/esm2015/app/modules/message-queues/services/message-queue.service.js +0 -25
- package/esm2015/app/modules/message-templates/components/template/template.component.js +0 -84
- package/esm2015/app/modules/messages/components/attachments/attachments.component.js +0 -85
- package/esm2015/app/modules/messages/components/message/message.component.js +0 -133
- package/esm2015/app/modules/messages/components/messages/messages.component.js +0 -75
- package/esm2015/app/modules/webhooks/components/webhooks/webhooks.component.js +0 -65
- package/fesm2015/firestitch-app-message.js +0 -1308
- package/fesm2015/firestitch-app-message.js.map +0 -1
- /package/{esm2015/app/helpers/index-name-value.js → esm2020/app/helpers/index-name-value.mjs} +0 -0
- /package/{esm2015/app/helpers/index.js → esm2020/app/helpers/index.mjs} +0 -0
- /package/{esm2015/app/modules/app-message/injectors/app-message-config.injector.js → esm2020/app/modules/app-message/injectors/app-message-config.injector.mjs} +0 -0
- /package/{esm2015/app/modules/app-message/injectors/index.js → esm2020/app/modules/app-message/injectors/index.mjs} +0 -0
- /package/{esm2015/app/modules/app-message/interfaces/app-message-config.js → esm2020/app/modules/app-message/interfaces/app-message-config.mjs} +0 -0
- /package/{esm2015/app/modules/app-message/interfaces/index.js → esm2020/app/modules/app-message/interfaces/index.mjs} +0 -0
- /package/{esm2015/app/modules/app-message/types/index.js → esm2020/app/modules/app-message/types/index.mjs} +0 -0
- /package/{esm2015/app/modules/app-message/types/types.type.js → esm2020/app/modules/app-message/types/types.type.mjs} +0 -0
- /package/{esm2015/app/modules/message-preview/components/index.js → esm2020/app/modules/message-preview/components/index.mjs} +0 -0
- /package/{esm2015/app/modules/message-preview/components/preview/index.js → esm2020/app/modules/message-preview/components/preview/index.mjs} +0 -0
- /package/{esm2015/app/modules/message-queues/consts/index.js → esm2020/app/modules/message-queues/consts/index.mjs} +0 -0
- /package/{esm2015/app/modules/message-queues/consts/message-queue-event-type.const.js → esm2020/app/modules/message-queues/consts/message-queue-event-type.const.mjs} +0 -0
- /package/{esm2015/app/modules/message-queues/consts/message-queue-states.const.js → esm2020/app/modules/message-queues/consts/message-queue-states.const.mjs} +0 -0
- /package/{esm2015/app/modules/message-queues/enums/email-message-queue-format.enum.js → esm2020/app/modules/message-queues/enums/email-message-queue-format.enum.mjs} +0 -0
- /package/{esm2015/app/modules/message-queues/enums/index.js → esm2020/app/modules/message-queues/enums/index.mjs} +0 -0
- /package/{esm2015/app/modules/message-queues/enums/message-queue-event-type.enum.js → esm2020/app/modules/message-queues/enums/message-queue-event-type.enum.mjs} +0 -0
- /package/{esm2015/app/modules/message-queues/enums/message-queue-state.enum.js → esm2020/app/modules/message-queues/enums/message-queue-state.enum.mjs} +0 -0
- /package/{esm2015/app/modules/message-queues/enums/message-queue-type.enum.js → esm2020/app/modules/message-queues/enums/message-queue-type.enum.mjs} +0 -0
- /package/{esm2015/app/modules/message-templates/components/index.js → esm2020/app/modules/message-templates/components/index.mjs} +0 -0
- /package/{esm2015/app/modules/message-templates/components/template/index.js → esm2020/app/modules/message-templates/components/template/index.mjs} +0 -0
- /package/{esm2015/app/modules/message-templates/components/templates/index.js → esm2020/app/modules/message-templates/components/templates/index.mjs} +0 -0
- /package/{esm2015/app/modules/messages/components/attachments/index.js → esm2020/app/modules/messages/components/attachments/index.mjs} +0 -0
- /package/{esm2015/app/modules/messages/components/index.js → esm2020/app/modules/messages/components/index.mjs} +0 -0
- /package/{esm2015/app/modules/messages/components/message/index.js → esm2020/app/modules/messages/components/message/index.mjs} +0 -0
- /package/{esm2015/app/modules/messages/components/messages/index.js → esm2020/app/modules/messages/components/messages/index.mjs} +0 -0
- /package/{esm2015/app/modules/messages/consts/email-message-formats.const.js → esm2020/app/modules/messages/consts/email-message-formats.const.mjs} +0 -0
- /package/{esm2015/app/modules/messages/consts/index.js → esm2020/app/modules/messages/consts/index.mjs} +0 -0
- /package/{esm2015/app/modules/messages/enums/email-message-format.enum.js → esm2020/app/modules/messages/enums/email-message-format.enum.mjs} +0 -0
- /package/{esm2015/app/modules/messages/enums/index.js → esm2020/app/modules/messages/enums/index.mjs} +0 -0
- /package/{esm2015/firestitch-app-message.js → esm2020/firestitch-app-message.mjs} +0 -0
- /package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { Component, Inject } from '@angular/core';
|
|
2
|
-
import { MAT_DIALOG_DATA, MatDialogRef, MatDialog } from '@angular/material/dialog';
|
|
3
|
-
import { FsMessage } from '@firestitch/message';
|
|
4
|
-
import { tap } from 'rxjs/operators';
|
|
5
|
-
import { PreviewComponent } from '../../../../modules/message-preview/components';
|
|
6
|
-
import { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@angular/material/dialog";
|
|
9
|
-
import * as i2 from "@firestitch/message";
|
|
10
|
-
import * as i3 from "@firestitch/dialog";
|
|
11
|
-
import * as i4 from "@angular/material/form-field";
|
|
12
|
-
import * as i5 from "@angular/material/tabs";
|
|
13
|
-
import * as i6 from "@firestitch/label";
|
|
14
|
-
import * as i7 from "@firestitch/text-editor";
|
|
15
|
-
import * as i8 from "@angular/material/button";
|
|
16
|
-
import * as i9 from "@firestitch/skeleton";
|
|
17
|
-
import * as i10 from "@angular/forms";
|
|
18
|
-
import * as i11 from "@firestitch/form";
|
|
19
|
-
import * as i12 from "@angular/common";
|
|
20
|
-
import * as i13 from "@angular/material/input";
|
|
21
|
-
export class TemplateComponent {
|
|
22
|
-
constructor(_data, _config, _dialogRef, _message, _dialog) {
|
|
23
|
-
this._data = _data;
|
|
24
|
-
this._config = _config;
|
|
25
|
-
this._dialogRef = _dialogRef;
|
|
26
|
-
this._message = _message;
|
|
27
|
-
this._dialog = _dialog;
|
|
28
|
-
this.htmlEditorconfig = {
|
|
29
|
-
language: 'html',
|
|
30
|
-
insertSpaces: true,
|
|
31
|
-
tabSize: 2,
|
|
32
|
-
};
|
|
33
|
-
this.cssEditorconfig = {
|
|
34
|
-
language: 'scss',
|
|
35
|
-
insertSpaces: true,
|
|
36
|
-
tabSize: 2,
|
|
37
|
-
};
|
|
38
|
-
this.save = (event) => {
|
|
39
|
-
return this._config.saveMessageTemplate(this.messageTemplate)
|
|
40
|
-
.pipe(tap((messageTemplate) => {
|
|
41
|
-
this._message.success('Saved Changes');
|
|
42
|
-
if (event.submitter === 'save-close') {
|
|
43
|
-
this._dialogRef.close(messageTemplate);
|
|
44
|
-
}
|
|
45
|
-
}));
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
ngOnInit() {
|
|
49
|
-
if (this._data.messageTemplate.id) {
|
|
50
|
-
this._config.loadMessageTemplate(this._data.messageTemplate)
|
|
51
|
-
.subscribe(messageTemplate => {
|
|
52
|
-
this.messageTemplate = messageTemplate;
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
this.messageTemplate = {};
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
openPreview() {
|
|
60
|
-
this._dialog.open(PreviewComponent, {
|
|
61
|
-
data: {
|
|
62
|
-
styles: this.messageTemplate.styles,
|
|
63
|
-
html: this.messageTemplate.content,
|
|
64
|
-
},
|
|
65
|
-
width: '95%',
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
TemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TemplateComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: FS_APP_MESSAGE_CONFIG }, { token: i1.MatDialogRef }, { token: i2.FsMessage }, { token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
|
|
70
|
-
TemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TemplateComponent, selector: "ng-component", ngImport: i0, template: "<form\n fsForm\n [submit]=\"save\"\n #form=\"ngForm\"\n *fsSkeleton=\"messageTemplate\"\n [confirmTabs]=\"false\">\n <fs-dialog *ngIf=\"messageTemplate\">\n <div mat-dialog-title>Message Template</div>\n <mat-dialog-content>\n <mat-form-field class=\"name\">\n <input\n matInput\n placeholder=\"Name\"\n [(ngModel)]=\"messageTemplate.name\"\n name=\"name\"\n >\n </mat-form-field>\n <div [@.disabled]=\"true\">\n <mat-tab-group\n mat-align-tabs=\"start\"\n [dynamicHeight]=\"false\">\n <mat-tab label=\"Content\">\n <ng-template matTabContent>\n <div class=\"content\">\n <fs-label-field>\n <fs-text-editor\n [(ngModel)]=\"messageTemplate.content\"\n name=\"body\"\n [config]=\"htmlEditorconfig\">\n </fs-text-editor>\n <fs-label-message>\n {$content} will be replaced with the message content.\n </fs-label-message>\n </fs-label-field>\n </div>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Styles\">\n <ng-template matTabContent>\n <div class=\"styles\">\n <fs-text-editor\n [(ngModel)]=\"messageTemplate.styles\"\n name=\"styles\"\n [config]=\"cssEditorconfig\">\n </fs-text-editor>\n </div>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button mat-button type=\"submit\" color=\"primary\" name=\"close\">Save</button>\n <button mat-button type=\"submit\" name=\"save-close\">Save & Close</button>\n <button mat-button (click)=\"openPreview()\" type=\"button\">Preview</button>\n <button mat-button [mat-dialog-close]=\"null\" type=\"button\">Cancel</button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>\n", styles: [".name{width:100%}:host ::ng-deep .mat-tab-body-content,:host ::ng-deep .mat-tab-body{overflow:visible}\n"], components: [{ type: i3.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileActionPlacement", "mobileWidth", "mode"] }, { type: i4.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i5.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i5.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby"], exportAs: ["matTab"] }, { type: i6.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i7.FsTextEditorComponent, selector: "fs-text-editor", inputs: ["config", "scrollable"], outputs: ["init", "blur"] }, { type: i6.FsLabelMessageComponent, selector: "fs-label-message" }, { type: i8.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i9.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i11.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"] }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i13.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i11.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { type: i5.MatTabContent, selector: "[matTabContent]" }, { type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i11.FsButtonDirective, selector: "[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]", inputs: ["name", "dirtySubmit", "form"] }, { type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }] });
|
|
71
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TemplateComponent, decorators: [{
|
|
72
|
-
type: Component,
|
|
73
|
-
args: [{
|
|
74
|
-
templateUrl: './template.component.html',
|
|
75
|
-
styleUrls: ['./template.component.scss']
|
|
76
|
-
}]
|
|
77
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
78
|
-
type: Inject,
|
|
79
|
-
args: [MAT_DIALOG_DATA]
|
|
80
|
-
}] }, { type: undefined, decorators: [{
|
|
81
|
-
type: Inject,
|
|
82
|
-
args: [FS_APP_MESSAGE_CONFIG]
|
|
83
|
-
}] }, { type: i1.MatDialogRef }, { type: i2.FsMessage }, { type: i1.MatDialog }]; } });
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2UtdGVtcGxhdGVzL2NvbXBvbmVudHMvdGVtcGxhdGUvdGVtcGxhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2UtdGVtcGxhdGVzL2NvbXBvbmVudHMvdGVtcGxhdGUvdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSWhELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNsRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBUXZFLE1BQU0sT0FBTyxpQkFBaUI7SUFlNUIsWUFDbUMsS0FBSyxFQUNDLE9BQTJCLEVBQzFELFVBQTJDLEVBQzNDLFFBQW1CLEVBQ25CLE9BQWtCO1FBSk8sVUFBSyxHQUFMLEtBQUssQ0FBQTtRQUNDLFlBQU8sR0FBUCxPQUFPLENBQW9CO1FBQzFELGVBQVUsR0FBVixVQUFVLENBQWlDO1FBQzNDLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsWUFBTyxHQUFQLE9BQU8sQ0FBVztRQWpCckIscUJBQWdCLEdBQXVCO1lBQzVDLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLE9BQU8sRUFBRSxDQUFDO1NBQ1gsQ0FBQztRQUVLLG9CQUFlLEdBQXVCO1lBQzNDLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLE9BQU8sRUFBRSxDQUFDO1NBQ1gsQ0FBQztRQStCSyxTQUFJLEdBQUcsQ0FBQyxLQUFrQixFQUFFLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7aUJBQzFELElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxZQUFZLEVBQUU7b0JBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2lCQUN4QztZQUNILENBQUMsQ0FBQyxDQUNILENBQUM7UUFDTixDQUFDLENBQUE7SUFqQ0csQ0FBQztJQUVFLFFBQVE7UUFDYixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRTtZQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO2lCQUMzRCxTQUFTLENBQUMsZUFBZSxDQUFDLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDbEMsSUFBSSxFQUFFO2dCQUNKLE1BQU0sRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU07Z0JBQ25DLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU87YUFDbkM7WUFDRCxLQUFLLEVBQUUsS0FBSztTQUNiLENBQUMsQ0FBQztJQUNMLENBQUM7OytHQTFDVSxpQkFBaUIsa0JBZ0JsQixlQUFlLGFBQ2YscUJBQXFCO21HQWpCcEIsaUJBQWlCLG9EQ25COUIsdWxFQTJEQTs0RkR4Q2EsaUJBQWlCO2tCQUo3QixTQUFTO21CQUFDO29CQUNULFdBQVcsRUFBRSwyQkFBMkI7b0JBQ3hDLFNBQVMsRUFBRSxDQUFDLDJCQUEyQixDQUFDO2lCQUN6Qzs7MEJBaUJJLE1BQU07MkJBQUMsZUFBZTs7MEJBQ3RCLE1BQU07MkJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiwgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuaW1wb3J0IHsgRnNNZXNzYWdlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbWVzc2FnZSc7XG5pbXBvcnQgeyBGc1RleHRFZGl0b3JDb25maWcgfSBmcm9tICdAZmlyZXN0aXRjaC90ZXh0LWVkaXRvcic7XG5pbXBvcnQgeyBTdWJtaXRFdmVudCB9IGZyb20gJ0BmaXJlc3RpdGNoL2Zvcm0nO1xuXG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFByZXZpZXdDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2R1bGVzL21lc3NhZ2UtcHJldmlldy9jb21wb25lbnRzJztcbmltcG9ydCB7IEZTX0FQUF9NRVNTQUdFX0NPTkZJRyB9IGZyb20gJy4uLy4uLy4uL2FwcC1tZXNzYWdlL2luamVjdG9ycyc7XG5pbXBvcnQgeyBGc0FwcE1lc3NhZ2VDb25maWcgfSBmcm9tICcuLi8uLi8uLi9hcHAtbWVzc2FnZS9pbnRlcmZhY2VzJztcblxuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL3RlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGVtcGxhdGUuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHVibGljIG1lc3NhZ2VUZW1wbGF0ZTtcbiAgcHVibGljIGh0bWxFZGl0b3Jjb25maWc6IEZzVGV4dEVkaXRvckNvbmZpZyA9IHtcbiAgICBsYW5ndWFnZTogJ2h0bWwnLFxuICAgIGluc2VydFNwYWNlczogdHJ1ZSxcbiAgICB0YWJTaXplOiAyLFxuICB9O1xuXG4gIHB1YmxpYyBjc3NFZGl0b3Jjb25maWc6IEZzVGV4dEVkaXRvckNvbmZpZyA9IHtcbiAgICBsYW5ndWFnZTogJ3Njc3MnLFxuICAgIGluc2VydFNwYWNlczogdHJ1ZSxcbiAgICB0YWJTaXplOiAyLFxuICB9O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHJpdmF0ZSBfZGF0YSxcbiAgICBASW5qZWN0KEZTX0FQUF9NRVNTQUdFX0NPTkZJRykgcHJpdmF0ZSBfY29uZmlnOiBGc0FwcE1lc3NhZ2VDb25maWcsXG4gICAgcHJpdmF0ZSBfZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVDb21wb25lbnQ+LFxuICAgIHByaXZhdGUgX21lc3NhZ2U6IEZzTWVzc2FnZSxcbiAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZyxcbiAgKSB7IH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2RhdGEubWVzc2FnZVRlbXBsYXRlLmlkKSB7XG4gICAgICB0aGlzLl9jb25maWcubG9hZE1lc3NhZ2VUZW1wbGF0ZSh0aGlzLl9kYXRhLm1lc3NhZ2VUZW1wbGF0ZSlcbiAgICAgIC5zdWJzY3JpYmUobWVzc2FnZVRlbXBsYXRlID0+IHtcbiAgICAgICAgdGhpcy5tZXNzYWdlVGVtcGxhdGUgPSBtZXNzYWdlVGVtcGxhdGU7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tZXNzYWdlVGVtcGxhdGUgPSB7fTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3BlblByZXZpZXcoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlhbG9nLm9wZW4oUHJldmlld0NvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICBzdHlsZXM6IHRoaXMubWVzc2FnZVRlbXBsYXRlLnN0eWxlcyxcbiAgICAgICAgaHRtbDogdGhpcy5tZXNzYWdlVGVtcGxhdGUuY29udGVudCxcbiAgICAgIH0sXG4gICAgICB3aWR0aDogJzk1JScsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZSA9IChldmVudDogU3VibWl0RXZlbnQpID0+IHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLnNhdmVNZXNzYWdlVGVtcGxhdGUodGhpcy5tZXNzYWdlVGVtcGxhdGUpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChtZXNzYWdlVGVtcGxhdGUpID0+IHtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1NhdmVkIENoYW5nZXMnKTtcbiAgICAgICAgICBpZiAoZXZlbnQuc3VibWl0dGVyID09PSAnc2F2ZS1jbG9zZScpIHtcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5jbG9zZShtZXNzYWdlVGVtcGxhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cbn1cbiIsIjxmb3JtXG4gICAgZnNGb3JtXG4gICAgW3N1Ym1pdF09XCJzYXZlXCJcbiAgICAjZm9ybT1cIm5nRm9ybVwiXG4gICAgKmZzU2tlbGV0b249XCJtZXNzYWdlVGVtcGxhdGVcIlxuICAgIFtjb25maXJtVGFic109XCJmYWxzZVwiPlxuICA8ZnMtZGlhbG9nICpuZ0lmPVwibWVzc2FnZVRlbXBsYXRlXCI+XG4gICAgPGRpdiBtYXQtZGlhbG9nLXRpdGxlPk1lc3NhZ2UgVGVtcGxhdGU8L2Rpdj5cbiAgICA8bWF0LWRpYWxvZy1jb250ZW50PlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibmFtZVwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTmFtZVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlVGVtcGxhdGUubmFtZVwiXG4gICAgICAgICAgbmFtZT1cIm5hbWVcIlxuICAgICAgICAgID5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8ZGl2IFtALmRpc2FibGVkXT1cInRydWVcIj5cbiAgICAgICAgPG1hdC10YWItZ3JvdXBcbiAgICAgICAgICAgIG1hdC1hbGlnbi10YWJzPVwic3RhcnRcIlxuICAgICAgICAgICAgW2R5bmFtaWNIZWlnaHRdPVwiZmFsc2VcIj5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIkNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxmcy10ZXh0LWVkaXRvclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2VUZW1wbGF0ZS5jb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cImh0bWxFZGl0b3Jjb25maWdcIj5cbiAgICAgICAgICAgICAgICAgIDwvZnMtdGV4dC1lZGl0b3I+XG4gICAgICAgICAgICAgICAgICA8ZnMtbGFiZWwtbWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgICAgJiMxMjM7JGNvbnRlbnQmIzEyNTsgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBtZXNzYWdlIGNvbnRlbnQuXG4gICAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsLW1lc3NhZ2U+XG4gICAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIlN0eWxlc1wiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHlsZXNcIj5cbiAgICAgICAgICAgICAgICA8ZnMtdGV4dC1lZGl0b3JcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZVRlbXBsYXRlLnN0eWxlc1wiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwic3R5bGVzXCJcbiAgICAgICAgICAgICAgICAgIFtjb25maWddPVwiY3NzRWRpdG9yY29uZmlnXCI+XG4gICAgICAgICAgICAgICAgPC9mcy10ZXh0LWVkaXRvcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY29sb3I9XCJwcmltYXJ5XCIgbmFtZT1cImNsb3NlXCI+U2F2ZTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwic2F2ZS1jbG9zZVwiPlNhdmUgJiBDbG9zZTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJvcGVuUHJldmlldygpXCIgdHlwZT1cImJ1dHRvblwiPlByZXZpZXc8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0LWRpYWxvZy1jbG9zZV09XCJudWxsXCIgdHlwZT1cImJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuICA8L2ZzLWRpYWxvZz5cbjwvZm9ybT5cbiJdfQ==
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { Component, ViewChild, Inject, ChangeDetectionStrategy, Input } from '@angular/core';
|
|
2
|
-
import { FsListComponent } from '@firestitch/list';
|
|
3
|
-
import { ActionMode } from '@firestitch/filter';
|
|
4
|
-
import { Subject } from 'rxjs';
|
|
5
|
-
import { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';
|
|
6
|
-
import { FsMessage } from '@firestitch/message';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@firestitch/message";
|
|
9
|
-
import * as i2 from "@firestitch/list";
|
|
10
|
-
import * as i3 from "@firestitch/common";
|
|
11
|
-
export class AttachmentsComponent {
|
|
12
|
-
constructor(_config, _message) {
|
|
13
|
-
this._config = _config;
|
|
14
|
-
this._message = _message;
|
|
15
|
-
this.list = null;
|
|
16
|
-
this.config = null;
|
|
17
|
-
this._destroy$ = new Subject();
|
|
18
|
-
}
|
|
19
|
-
ngOnInit() {
|
|
20
|
-
this.config = {
|
|
21
|
-
rowActions: [],
|
|
22
|
-
actions: [
|
|
23
|
-
{
|
|
24
|
-
label: 'Upload',
|
|
25
|
-
mode: ActionMode.File,
|
|
26
|
-
select: (fsFile) => {
|
|
27
|
-
this._config.uploadMessageAttachment(this.message, fsFile)
|
|
28
|
-
.subscribe(() => {
|
|
29
|
-
this._message.success('Saved attachment');
|
|
30
|
-
this.list.reload();
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
],
|
|
35
|
-
fetch: query => {
|
|
36
|
-
return this._config.loadMessageAttachments(this.message, query);
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
if (this._config.downloadMessageAttachment) {
|
|
40
|
-
this.config.rowActions
|
|
41
|
-
.push({
|
|
42
|
-
click: data => {
|
|
43
|
-
return this._config.downloadMessageAttachment(data);
|
|
44
|
-
},
|
|
45
|
-
label: 'Download',
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
if (this._config.deleteMessageAttachment) {
|
|
49
|
-
this.config.rowActions
|
|
50
|
-
.push({
|
|
51
|
-
click: data => {
|
|
52
|
-
return this._config.deleteMessageAttachment(data);
|
|
53
|
-
},
|
|
54
|
-
remove: {
|
|
55
|
-
title: 'Confirm',
|
|
56
|
-
template: 'Are you sure you would like to delete this template?',
|
|
57
|
-
},
|
|
58
|
-
label: 'Delete',
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
ngOnDestroy() {
|
|
63
|
-
this._destroy$.next();
|
|
64
|
-
this._destroy$.complete();
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
AttachmentsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AttachmentsComponent, deps: [{ token: FS_APP_MESSAGE_CONFIG }, { token: i1.FsMessage }], target: i0.ɵɵFactoryTarget.Component });
|
|
68
|
-
AttachmentsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AttachmentsComponent, selector: "fs-app-message-attachments", inputs: { message: "message" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<fs-list [config]=\"config\">\n <fs-list-column title=\"File Name\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.filename}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"File Size\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.size | fsFormatBytes}}\n </ng-template>\n </fs-list-column>\n</fs-list>", components: [{ type: i2.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }], directives: [{ type: i2.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i2.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }], pipes: { "fsFormatBytes": i3.FsFormatBytesPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
69
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AttachmentsComponent, decorators: [{
|
|
70
|
-
type: Component,
|
|
71
|
-
args: [{
|
|
72
|
-
selector: 'fs-app-message-attachments',
|
|
73
|
-
templateUrl: './attachments.component.html',
|
|
74
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
75
|
-
}]
|
|
76
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
77
|
-
type: Inject,
|
|
78
|
-
args: [FS_APP_MESSAGE_CONFIG]
|
|
79
|
-
}] }, { type: i1.FsMessage }]; }, propDecorators: { list: [{
|
|
80
|
-
type: ViewChild,
|
|
81
|
-
args: [FsListComponent, { static: true }]
|
|
82
|
-
}], message: [{
|
|
83
|
-
type: Input
|
|
84
|
-
}] } });
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2VzL2NvbXBvbmVudHMvYXR0YWNobWVudHMvYXR0YWNobWVudHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2VzL2NvbXBvbmVudHMvYXR0YWNobWVudHMvYXR0YWNobWVudHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJaEgsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7O0FBUWhELE1BQU0sT0FBTyxvQkFBb0I7SUFXL0IsWUFDeUMsT0FBMkIsRUFDMUQsUUFBbUI7UUFEWSxZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQUMxRCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBVnRCLFNBQUksR0FBb0IsSUFBSSxDQUFDO1FBSTdCLFdBQU0sR0FBaUIsSUFBSSxDQUFDO1FBRTNCLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBSzlCLENBQUM7SUFFRSxRQUFRO1FBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLFVBQVUsRUFBRSxFQUFFO1lBQ2QsT0FBTyxFQUFFO2dCQUNQO29CQUNFLEtBQUssRUFBRSxRQUFRO29CQUNmLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtvQkFDckIsTUFBTSxFQUFFLENBQUMsTUFBYyxFQUFFLEVBQUU7d0JBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUM7NkJBQ3pELFNBQVMsQ0FBQyxHQUFHLEVBQUU7NEJBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQzs0QkFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDckIsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQztpQkFDRjthQUNGO1lBQ0QsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2xFLENBQUM7U0FDRixDQUFBO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLHlCQUF5QixFQUFFO1lBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtpQkFDbkIsSUFBSSxDQUNIO2dCQUNFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtvQkFDWixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RELENBQUM7Z0JBQ0QsS0FBSyxFQUFFLFVBQVU7YUFDbEIsQ0FDRixDQUFDO1NBQ0w7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUU7WUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVO2lCQUNuQixJQUFJLENBQ0g7Z0JBQ0UsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO29CQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEQsQ0FBQztnQkFDRCxNQUFNLEVBQUU7b0JBQ04sS0FBSyxFQUFFLFNBQVM7b0JBQ2hCLFFBQVEsRUFBRSxzREFBc0Q7aUJBQ2pFO2dCQUNELEtBQUssRUFBRSxRQUFRO2FBQ2hCLENBQ0YsQ0FBQztTQUNMO0lBQ0gsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7O2tIQXJFVSxvQkFBb0Isa0JBWXJCLHFCQUFxQjtzR0FacEIsb0JBQW9CLHdJQUVwQixlQUFlLDhEQ3JCNUIseVdBV1U7NEZEUUcsb0JBQW9CO2tCQUxoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw0QkFBNEI7b0JBQ3RDLFdBQVcsRUFBRSw4QkFBOEI7b0JBQzNDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs7MEJBYUksTUFBTTsyQkFBQyxxQkFBcUI7b0VBVHhCLElBQUk7c0JBRFYsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUc1QixPQUFPO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkLCBJbmplY3QsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBGc0ZpbGUgfSBmcm9tICdAZmlyZXN0aXRjaC9maWxlJztcblxuaW1wb3J0IHsgRnNMaXN0Q29tcG9uZW50LCBGc0xpc3RDb25maWcgfSBmcm9tICdAZmlyZXN0aXRjaC9saXN0JztcbmltcG9ydCB7IEFjdGlvbk1vZGUgfSBmcm9tICdAZmlyZXN0aXRjaC9maWx0ZXInO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEZTX0FQUF9NRVNTQUdFX0NPTkZJRyB9IGZyb20gJy4uLy4uLy4uL2FwcC1tZXNzYWdlL2luamVjdG9ycyc7XG5pbXBvcnQgeyBGc0FwcE1lc3NhZ2VDb25maWcgfSBmcm9tICcuLi8uLi8uLi9hcHAtbWVzc2FnZS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZzTWVzc2FnZSB9IGZyb20gJ0BmaXJlc3RpdGNoL21lc3NhZ2UnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZzLWFwcC1tZXNzYWdlLWF0dGFjaG1lbnRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2F0dGFjaG1lbnRzLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEF0dGFjaG1lbnRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBWaWV3Q2hpbGQoRnNMaXN0Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBcbiAgcHVibGljIGxpc3Q6IEZzTGlzdENvbXBvbmVudCA9IG51bGw7XG5cbiAgQElucHV0KCkgcHVibGljIG1lc3NhZ2U7XG5cbiAgcHVibGljIGNvbmZpZzogRnNMaXN0Q29uZmlnID0gbnVsbDtcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChGU19BUFBfTUVTU0FHRV9DT05GSUcpIHByaXZhdGUgX2NvbmZpZzogRnNBcHBNZXNzYWdlQ29uZmlnLFxuICAgIHByaXZhdGUgX21lc3NhZ2U6IEZzTWVzc2FnZSxcbiAgKSB7IH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICByb3dBY3Rpb25zOiBbXSxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnVXBsb2FkJyxcbiAgICAgICAgICBtb2RlOiBBY3Rpb25Nb2RlLkZpbGUsXG4gICAgICAgICAgc2VsZWN0OiAoZnNGaWxlOiBGc0ZpbGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbmZpZy51cGxvYWRNZXNzYWdlQXR0YWNobWVudCh0aGlzLm1lc3NhZ2UsIGZzRmlsZSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1NhdmVkIGF0dGFjaG1lbnQnKTtcbiAgICAgICAgICAgICAgdGhpcy5saXN0LnJlbG9hZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgZmV0Y2g6IHF1ZXJ5ID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5sb2FkTWVzc2FnZUF0dGFjaG1lbnRzKHRoaXMubWVzc2FnZSwgcXVlcnkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb25maWcuZG93bmxvYWRNZXNzYWdlQXR0YWNobWVudCkge1xuICAgICAgdGhpcy5jb25maWcucm93QWN0aW9uc1xuICAgICAgICAucHVzaChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGljazogZGF0YSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb25maWcuZG93bmxvYWRNZXNzYWdlQXR0YWNobWVudChkYXRhKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYWJlbDogJ0Rvd25sb2FkJyxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb25maWcuZGVsZXRlTWVzc2FnZUF0dGFjaG1lbnQpIHtcbiAgICAgIHRoaXMuY29uZmlnLnJvd0FjdGlvbnNcbiAgICAgICAgLnB1c2goXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xpY2s6IGRhdGEgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmRlbGV0ZU1lc3NhZ2VBdHRhY2htZW50KGRhdGEpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlbW92ZToge1xuICAgICAgICAgICAgICB0aXRsZTogJ0NvbmZpcm0nLFxuICAgICAgICAgICAgICB0ZW1wbGF0ZTogJ0FyZSB5b3Ugc3VyZSB5b3Ugd291bGQgbGlrZSB0byBkZWxldGUgdGhpcyB0ZW1wbGF0ZT8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhYmVsOiAnRGVsZXRlJyxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG59XG4iLCI8ZnMtbGlzdCBbY29uZmlnXT1cImNvbmZpZ1wiPlxuICA8ZnMtbGlzdC1jb2x1bW4gdGl0bGU9XCJGaWxlIE5hbWVcIj5cbiAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1jZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIHt7cm93LmZpbGVuYW1lfX1cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2ZzLWxpc3QtY29sdW1uPlxuICA8ZnMtbGlzdC1jb2x1bW4gdGl0bGU9XCJGaWxlIFNpemVcIj5cbiAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1jZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIHt7cm93LnNpemUgfCBmc0Zvcm1hdEJ5dGVzfX1cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2ZzLWxpc3QtY29sdW1uPlxuPC9mcy1saXN0PiJdfQ==
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject } from '@angular/core';
|
|
2
|
-
import { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';
|
|
3
|
-
import { FsMessage } from '@firestitch/message';
|
|
4
|
-
import { FsPrompt } from '@firestitch/prompt';
|
|
5
|
-
import { switchMap, tap } from 'rxjs/operators';
|
|
6
|
-
import { of } from 'rxjs';
|
|
7
|
-
import { PreviewComponent } from '../../../../modules/message-preview/components';
|
|
8
|
-
import { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';
|
|
9
|
-
import { EmailMessageFormats } from '../../consts';
|
|
10
|
-
import { EmailMessageFormat } from '../../enums';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "@firestitch/prompt";
|
|
13
|
-
import * as i2 from "@firestitch/message";
|
|
14
|
-
import * as i3 from "@angular/material/dialog";
|
|
15
|
-
import * as i4 from "@firestitch/dialog";
|
|
16
|
-
import * as i5 from "@angular/material/tabs";
|
|
17
|
-
import * as i6 from "@angular/material/form-field";
|
|
18
|
-
import * as i7 from "@firestitch/label";
|
|
19
|
-
import * as i8 from "@angular/material/select";
|
|
20
|
-
import * as i9 from "@angular/material/core";
|
|
21
|
-
import * as i10 from "@firestitch/text-editor";
|
|
22
|
-
import * as i11 from "@firestitch/html-editor";
|
|
23
|
-
import * as i12 from "../attachments/attachments.component";
|
|
24
|
-
import * as i13 from "@angular/material/button";
|
|
25
|
-
import * as i14 from "@firestitch/skeleton";
|
|
26
|
-
import * as i15 from "@angular/forms";
|
|
27
|
-
import * as i16 from "@firestitch/form";
|
|
28
|
-
import * as i17 from "@angular/common";
|
|
29
|
-
import * as i18 from "@firestitch/tabs";
|
|
30
|
-
import * as i19 from "@angular/material/input";
|
|
31
|
-
export class MessageComponent {
|
|
32
|
-
constructor(_config, _data, _prompt, _message, _dialog, _cdRef) {
|
|
33
|
-
this._config = _config;
|
|
34
|
-
this._data = _data;
|
|
35
|
-
this._prompt = _prompt;
|
|
36
|
-
this._message = _message;
|
|
37
|
-
this._dialog = _dialog;
|
|
38
|
-
this._cdRef = _cdRef;
|
|
39
|
-
this.tab = 'general';
|
|
40
|
-
this.messageTemplates = [];
|
|
41
|
-
this.emailMessageFormats = EmailMessageFormats;
|
|
42
|
-
this.emailMessageFormat = EmailMessageFormat;
|
|
43
|
-
this.save = () => {
|
|
44
|
-
return this._config.saveMessage(this.message)
|
|
45
|
-
.pipe(tap(() => {
|
|
46
|
-
this._message.success('Saved Changes');
|
|
47
|
-
}));
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
ngOnInit() {
|
|
51
|
-
this._config.loadMessage(this._data.message)
|
|
52
|
-
.subscribe((message) => {
|
|
53
|
-
this.message = message;
|
|
54
|
-
if (this.message.emailMessage && this.message.emailMessage.customize === undefined) {
|
|
55
|
-
this.message.emailMessage.customize = true;
|
|
56
|
-
}
|
|
57
|
-
if (this.message.smsMessage && this.message.smsMessage.customize === undefined) {
|
|
58
|
-
this.message.smsMessage.customize = true;
|
|
59
|
-
}
|
|
60
|
-
this.message.reference = String(message.tag)
|
|
61
|
-
.toLocaleLowerCase()
|
|
62
|
-
.split('_')
|
|
63
|
-
.map((item) => item.charAt(0).toUpperCase() + item.slice(1))
|
|
64
|
-
.join('');
|
|
65
|
-
this._cdRef.markForCheck();
|
|
66
|
-
});
|
|
67
|
-
this._config.loadMessageTemplates()
|
|
68
|
-
.subscribe((data) => {
|
|
69
|
-
this.messageTemplates = data.data;
|
|
70
|
-
this._cdRef.markForCheck();
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
openPreview() {
|
|
74
|
-
const emailMessage = this.message.emailMessage;
|
|
75
|
-
let html = emailMessage.customize ? emailMessage.body : this.message.defaultEmailBody;
|
|
76
|
-
let styles = emailMessage.styles || '';
|
|
77
|
-
if (emailMessage.messageTemplateId) {
|
|
78
|
-
const messageTemplate = this.messageTemplates
|
|
79
|
-
.find((item) => {
|
|
80
|
-
return emailMessage.messageTemplateId === item.id;
|
|
81
|
-
});
|
|
82
|
-
if (messageTemplate) {
|
|
83
|
-
html = messageTemplate.content.replace('{$content}', html);
|
|
84
|
-
styles = `${messageTemplate.styles || ''}\n\n${styles}`;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
this._dialog.open(PreviewComponent, {
|
|
88
|
-
data: {
|
|
89
|
-
styles,
|
|
90
|
-
html,
|
|
91
|
-
},
|
|
92
|
-
width: '95%'
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
sendTest(type) {
|
|
96
|
-
of(true)
|
|
97
|
-
.pipe(switchMap(() => {
|
|
98
|
-
return type === 'email' ? this._config.getTestEmail() : of('');
|
|
99
|
-
}), switchMap((default_) => {
|
|
100
|
-
const typeName = type === 'email' ? 'an email' : 'phone number';
|
|
101
|
-
return this._prompt.input({
|
|
102
|
-
label: `Please enter ${typeName} to send test to`,
|
|
103
|
-
title: 'Send Test',
|
|
104
|
-
commitLabel: 'Send',
|
|
105
|
-
default: default_,
|
|
106
|
-
required: true
|
|
107
|
-
});
|
|
108
|
-
}))
|
|
109
|
-
.subscribe((value) => {
|
|
110
|
-
this._config.testMessage(this.message, value, type)
|
|
111
|
-
.subscribe(() => {
|
|
112
|
-
this._message.success('Test Sent');
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
MessageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MessageComponent, deps: [{ token: FS_APP_MESSAGE_CONFIG }, { token: MAT_DIALOG_DATA }, { token: i1.FsPrompt }, { token: i2.FsMessage }, { token: i3.MatDialog }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
118
|
-
MessageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MessageComponent, selector: "ng-component", ngImport: i0, template: "<form\n fsForm\n [submit]=\"save\"\n #form=\"ngForm\"\n *fsSkeleton=\"message\"\n [confirmTabs]=\"false\">\n <fs-dialog *ngIf=\"message\">\n <div mat-dialog-title>Edit Message</div>\n <mat-dialog-content>\n <mat-tab-group \n fsTabs \n [(selected)]=\"tab\">\n <mat-tab label=\"General\" name=\"general\">\n <ng-template matTabContent>\n <div class=\"fs-column\">\n <mat-form-field>\n <input\n matInput\n placeholder=\"Name\"\n [(ngModel)]=\"message.name\"\n name=\"Name\"\n required>\n </mat-form-field>\n <fs-label-field>\n <fs-label>Reference</fs-label>\n {{message.reference}}\n </fs-label-field>\n <mat-form-field>\n <input\n matInput\n placeholder=\"Description\"\n [(ngModel)]=\"message.description\"\n name=\"description\">\n </mat-form-field>\n\n <div class=\"fs-row.gap-small.wrap\">\n <mat-form-field>\n <input\n matInput\n placeholder=\"From Email\"\n [(ngModel)]=\"message.emailMessage.fromEmail\"\n name=\"from_email\">\n </mat-form-field>\n <mat-form-field>\n <input\n matInput\n placeholder=\"From Name\"\n [(ngModel)]=\"message.emailMessage.fromName\"\n name=\"from_name\">\n </mat-form-field>\n <mat-form-field>\n <input\n matInput\n placeholder=\"Reply To\"\n [(ngModel)]=\"message.emailMessage.replyTo\"\n name=\"reply_to\">\n </mat-form-field>\n </div>\n\n <div class=\"fs-row.gap-small.wrap\">\n <mat-form-field>\n <input\n matInput\n placeholder=\"To\"\n [(ngModel)]=\"message.emailMessage.toRecipients\"\n name=\"to\">\n </mat-form-field>\n <mat-form-field>\n <input\n matInput\n placeholder=\"CC\"\n [(ngModel)]=\"message.emailMessage.ccRecipients\"\n name=\"cc\">\n </mat-form-field>\n <mat-form-field>\n <input\n matInput\n placeholder=\"BCC\"\n [(ngModel)]=\"message.emailMessage.bccRecipients\"\n name=\"bcc\">\n </mat-form-field>\n </div>\n </div>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Email Message\" *ngIf=\"message.emailMessage\" name=\"email\">\n <ng-template matTabContent>\n <div class=\"fs-column\">\n <div class=\"fs-row.gap-small\">\n <mat-form-field>\n <mat-select\n required\n placeholder=\"Customize Message\"\n [(ngModel)]=\"message.emailMessage.customize\"\n name=\"customizeEmail\">\n <mat-option [value]=\"true\">Yes</mat-option>\n <mat-option [value]=\"false\">No</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-select\n required\n placeholder=\"Format\"\n [(ngModel)]=\"message.emailMessage.format\"\n name=\"format\">\n <mat-option *ngFor=\"let item of emailMessageFormats\" [value]=\"item.value\">\n {{item.name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-select\n placeholder=\"Template\"\n [(ngModel)]=\"message.emailMessage.messageTemplateId\"\n name=\"template\">\n <mat-option [value]=\"null\">None</mat-option>\n <mat-option *ngFor=\"let item of messageTemplates\" [value]=\"item.id\">\n {{item.name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <ng-container *ngIf=\"message.emailMessage.customize\">\n <mat-form-field>\n <input\n matInput\n placeholder=\"Subject\"\n [(ngModel)]=\"message.emailMessage.subject\"\n name=\"name\"\n required>\n </mat-form-field>\n\n <div [@.disabled]=\"true\">\n <mat-tab-group [dynamicHeight]=\"false\">\n <mat-tab label=\"Content\">\n <ng-template matTabContent>\n <ng-container *ngIf=\"message.emailMessage.format===emailMessageFormat.HTML\">\n <fs-text-editor \n [(ngModel)]=\"message.emailMessage.body\"\n name=\"body\"\n [config]=\"{ language: 'html '}\">\n </fs-text-editor>\n </ng-container>\n\n <ng-container *ngIf=\"message.emailMessage.format===emailMessageFormat.RichText\">\n <fs-html-editor \n [(ngModel)]=\"message.emailMessage.body\"\n name=\"body\">\n </fs-html-editor>\n </ng-container>\n\n <ng-container *ngIf=\"message.emailMessage.format===emailMessageFormat.Text\">\n <fs-text-editor \n [(ngModel)]=\"message.emailMessage.body\"\n name=\"emailMessageBody\"\n [config]=\"{ language: 'text' }\">\n </fs-text-editor>\n </ng-container>\n </ng-template>\n </mat-tab>\n <mat-tab\n *ngIf=\"message.emailMessage.format===emailMessageFormat.HTML || message.emailMessage.format===emailMessageFormat.RichText\"\n label=\"Styles\">\n <ng-template matTabContent>\n <fs-text-editor\n [(ngModel)]=\"message.emailMessage.styles\"\n name=\"styles\"\n [config]=\"{ language: 'scss' }\">\n </fs-text-editor>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!message.emailMessage.customize\">\n <fs-label-field>\n <fs-label>Subject</fs-label>\n {{message.defaultEmailSubject}}\n </fs-label-field>\n <div>\n <fs-label-field>\n <fs-label>Content</fs-label>\n <div class=\"email-body-html-default\">\n <fs-html-renderer\n *ngIf=\"message.emailMessage.format===emailMessageFormat.RichText || message.emailMessage.format===emailMessageFormat.HTML\"\n [html]=\"message.defaultEmailBody\">\n </fs-html-renderer>\n </div>\n <div\n class=\"email-body-text-default\"\n *ngIf=\"message.emailMessage.format===emailMessageFormat.Text\">\n {{message.defaultEmailBody}}\n </div>\n </fs-label-field>\n </div>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n\n <ng-container *ngIf=\"!!message.smsMessage\">\n <mat-tab label=\"SMS Message\" name=\"sms\">\n <ng-template matTabContent>\n <mat-form-field>\n <mat-select\n required\n placeholder=\"Customize Message\"\n [(ngModel)]=\"message.smsMessage.customize\"\n name=\"customizeSms\">\n <mat-option [value]=\"true\">Yes</mat-option>\n <mat-option [value]=\"false\">No</mat-option>\n </mat-select>\n </mat-form-field>\n <div\n *ngIf=\"message.smsMessage.customize\"\n [@.disabled]=\"true\">\n <mat-tab-group [dynamicHeight]=\"false\">\n <mat-tab label=\"Content\">\n <ng-template matTabContent>\n <fs-text-editor\n [(ngModel)]=\"message.smsMessage.message\"\n name=\"smsMessageMessage\"\n [config]=\"{ language: 'text '}\">\n </fs-text-editor>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </div>\n <fs-label-field *ngIf=\"!message.smsMessage.customize\">\n <fs-label>Message</fs-label>\n {{message.defaultSmsMessage}}\n </fs-label-field>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <mat-tab label=\"Attachments\" *ngIf=\"message.emailMessage\" name=\"attachments\">\n <ng-template matTabContent>\n <fs-app-message-attachments \n [message]=\"message\">\n </fs-app-message-attachments>\n </ng-template>\n </mat-tab>\n\n <mat-tab label=\"Variables\" *ngIf=\"message.variables\">\n <ng-template matTabContent>\n <div *ngFor=\"let variable of message.variables\" class=\"variable\">\n {{variable.name}}\n </div>\n </ng-template>\n </mat-tab>\n\n <mat-tab label=\"Defaults\">\n <ng-template matTabContent>\n <ng-container *ngIf=\"message.emailMessage\">\n <h2 *ngIf=\"message.emailMessage && message.smsMessage\">Email</h2>\n <fs-label-field>\n <fs-label>Subject</fs-label>\n <div class=\"content\">{{message.defaultEmailSubject}}</div>\n </fs-label-field>\n <fs-label-field>\n <fs-label>Content</fs-label>\n <div class=\"content\">{{message.defaultEmailBody}}</div>\n </fs-label-field>\n </ng-container>\n <ng-container *ngIf=\"message.smsMessage\">\n <h2 *ngIf=\"message.emailMessage && message.smsMessage\">SMS</h2>\n <fs-label-field>\n <fs-label>Content</fs-label>\n <div class=\"content\">{{message.defaultSmsMessage}}</div>\n </fs-label-field>\n </ng-container>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n\n </mat-dialog-content>\n <mat-dialog-actions>\n <ng-container *ngIf=\"tab==='email' || tab==='sms' || tab==='general'; else done\">\n <button \n mat-button \n color=\"primary\">\n Save\n </button> \n <ng-container *ngIf=\"tab==='email'\">\n <button \n mat-button\n type=\"button\"\n (click)=\"openPreview()\"\n type=\"button\">\n Preview\n </button>\n <button\n mat-button\n type=\"button\"\n (click)=\"sendTest('email')\"\n type=\"button\">\n Send Test Email\n </button>\n </ng-container>\n <ng-container *ngIf=\"tab==='sms'\">\n <button \n mat-button\n type=\"button\"\n (click)=\"sendTest('sms')\"\n type=\"button\">\n Send Test SMS\n </button>\n </ng-container>\n <button \n mat-button \n [mat-dialog-close]=\"null\" \n type=\"button\">\n Cancel\n </button>\n </ng-container> \n <ng-template #done>\n <button \n mat-button \n color=\"primary\"\n [mat-dialog-close]=\"null\" \n type=\"button\">\n Close\n </button>\n </ng-template>\n </mat-dialog-actions>\n </fs-dialog>\n</form>\n", styles: ["fs-label-field .content{white-space:pre-wrap}:host ::ng-deep .mat-tab-body-content,:host ::ng-deep .mat-tab-body{overflow:visible}:host ::ng-deep .sms-message{width:100%}:host ::ng-deep .email-body-text-default{white-space:pre-line}.fs-column .mat-form-field{flex:1}.email-body-text{width:100%}.variable{margin-bottom:4px}\n"], components: [{ type: i4.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileActionPlacement", "mobileWidth", "mode"] }, { type: i5.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i5.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby"], exportAs: ["matTab"] }, { type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i7.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i7.FsLabelComponent, selector: "fs-label" }, { type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i10.FsTextEditorComponent, selector: "fs-text-editor", inputs: ["config", "scrollable"], outputs: ["init", "blur"] }, { type: i11.FsHtmlEditorComponent, selector: "fs-html-editor", inputs: ["config", "hint"] }, { type: i11.FsHtmlRendererComponent, selector: "fs-html-renderer", inputs: ["html"] }, { type: i12.AttachmentsComponent, selector: "fs-app-message-attachments", inputs: ["message"] }, { type: i13.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i14.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i15.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i15.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i15.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i16.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"] }, { type: i17.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i18.FsTabsHeaderTabGroupDirective, selector: "mat-tab-group, matTabGroup, [matTabGroup]", inputs: ["orientation", "selected", "selectedData"], outputs: ["selectedChange", "selectedDataChange"], exportAs: ["fsTabsHeaderTabGroup"] }, { type: i18.FsTabsTabDirective, selector: "mat-tab,matTab", inputs: ["name", "data"], exportAs: ["fsTabsTab"] }, { type: i5.MatTabContent, selector: "[matTabContent]" }, { type: i19.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i15.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i15.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i15.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i16.FsFormRequiredDirective, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }, { type: i16.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { type: i17.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i16.FsButtonDirective, selector: "[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]", inputs: ["name", "dirtySubmit", "form"] }, { type: i3.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
119
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MessageComponent, decorators: [{
|
|
120
|
-
type: Component,
|
|
121
|
-
args: [{
|
|
122
|
-
templateUrl: './message.component.html',
|
|
123
|
-
styleUrls: ['./message.component.scss'],
|
|
124
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
125
|
-
}]
|
|
126
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
127
|
-
type: Inject,
|
|
128
|
-
args: [FS_APP_MESSAGE_CONFIG]
|
|
129
|
-
}] }, { type: undefined, decorators: [{
|
|
130
|
-
type: Inject,
|
|
131
|
-
args: [MAT_DIALOG_DATA]
|
|
132
|
-
}] }, { type: i1.FsPrompt }, { type: i2.FsMessage }, { type: i3.MatDialog }, { type: i0.ChangeDetectorRef }]; } });
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvbWVzc2FnZXMvY29tcG9uZW50cy9tZXNzYWdlL21lc3NhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2VzL2NvbXBvbmVudHMvbWVzc2FnZS9tZXNzYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRXRHLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUWpELE1BQU0sT0FBTyxnQkFBZ0I7SUFRM0IsWUFDeUMsT0FBMkIsRUFDakMsS0FBSyxFQUM5QixPQUFpQixFQUNqQixRQUFtQixFQUNuQixPQUFrQixFQUNsQixNQUF5QjtRQUxNLFlBQU8sR0FBUCxPQUFPLENBQW9CO1FBQ2pDLFVBQUssR0FBTCxLQUFLLENBQUE7UUFDOUIsWUFBTyxHQUFQLE9BQU8sQ0FBVTtRQUNqQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFlBQU8sR0FBUCxPQUFPLENBQVc7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFYNUIsUUFBRyxHQUFHLFNBQVMsQ0FBQztRQUNoQixxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDdEIsd0JBQW1CLEdBQUcsbUJBQW1CLENBQUM7UUFDMUMsdUJBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUF3Q3hDLFNBQUksR0FBRyxHQUFHLEVBQUU7WUFDakIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2lCQUMxQyxJQUFJLENBQ0gsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDUCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN6QyxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ04sQ0FBQyxDQUFBO0lBckNELENBQUM7SUFFTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7YUFDekMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7WUFFdkIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFO2dCQUNsRixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2FBQzVDO1lBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFO2dCQUM5RSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2FBQzFDO1lBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7aUJBQ3pDLGlCQUFpQixFQUFFO2lCQUNuQixLQUFLLENBQUMsR0FBRyxDQUFDO2lCQUNWLEdBQUcsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNuRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFWixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRTthQUNoQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNsQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQVdNLFdBQVc7UUFDaEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDL0MsSUFBSSxJQUFJLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztRQUN0RixJQUFJLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUV2QyxJQUFJLFlBQVksQ0FBQyxpQkFBaUIsRUFBRTtZQUNsQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCO2lCQUMxQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDYixPQUFPLFlBQVksQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BELENBQUMsQ0FBQyxDQUFDO1lBRUwsSUFBSSxlQUFlLEVBQUU7Z0JBQ25CLElBQUksR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzNELE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxNQUFNLElBQUksRUFBRSxPQUFPLE1BQU0sRUFBRSxDQUFDO2FBQ3pEO1NBQ0Y7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNsQyxJQUFJLEVBQUU7Z0JBQ0osTUFBTTtnQkFDTixJQUFJO2FBQ0w7WUFDRCxLQUFLLEVBQUUsS0FBSztTQUNiLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxRQUFRLENBQUMsSUFBSTtRQUNsQixFQUFFLENBQUMsSUFBSSxDQUFDO2FBQ0wsSUFBSSxDQUNILFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDYixPQUFPLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNyQixNQUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztZQUVoRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUN4QixLQUFLLEVBQUUsZ0JBQWdCLFFBQVEsa0JBQWtCO2dCQUNqRCxLQUFLLEVBQUUsV0FBVztnQkFDbEIsV0FBVyxFQUFFLE1BQU07Z0JBQ25CLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixRQUFRLEVBQUUsSUFBSTthQUNmLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUU7WUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDO2lCQUNoRCxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzs4R0F6R1UsZ0JBQWdCLGtCQVNqQixxQkFBcUIsYUFDckIsZUFBZTtrR0FWZCxnQkFBZ0Isb0RDdEI3Qiw2MVpBeVVBOzRGRG5UYSxnQkFBZ0I7a0JBTDVCLFNBQVM7bUJBQUM7b0JBQ1QsV0FBVyxFQUFFLDBCQUEwQjtvQkFDdkMsU0FBUyxFQUFFLENBQUMsMEJBQTBCLENBQUM7b0JBQ3ZDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs7MEJBVUksTUFBTTsyQkFBQyxxQkFBcUI7OzBCQUM1QixNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcbmltcG9ydCB7IEZzUHJvbXB0IH0gZnJvbSAnQGZpcmVzdGl0Y2gvcHJvbXB0JztcblxuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQcmV2aWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kdWxlcy9tZXNzYWdlLXByZXZpZXcvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBGU19BUFBfTUVTU0FHRV9DT05GSUcgfSBmcm9tICcuLi8uLi8uLi9hcHAtbWVzc2FnZS9pbmplY3RvcnMnO1xuaW1wb3J0IHsgRnNBcHBNZXNzYWdlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFbWFpbE1lc3NhZ2VGb3JtYXRzIH0gZnJvbSAnLi4vLi4vY29uc3RzJztcbmltcG9ydCB7IEVtYWlsTWVzc2FnZUZvcm1hdCB9IGZyb20gJy4uLy4uL2VudW1zJztcblxuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL21lc3NhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tZXNzYWdlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwdWJsaWMgbWVzc2FnZTtcbiAgcHVibGljIHRhYiA9ICdnZW5lcmFsJztcbiAgcHVibGljIG1lc3NhZ2VUZW1wbGF0ZXMgPSBbXTtcbiAgcHVibGljIGVtYWlsTWVzc2FnZUZvcm1hdHMgPSBFbWFpbE1lc3NhZ2VGb3JtYXRzO1xuICBwdWJsaWMgZW1haWxNZXNzYWdlRm9ybWF0ID0gRW1haWxNZXNzYWdlRm9ybWF0O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KEZTX0FQUF9NRVNTQUdFX0NPTkZJRykgcHJpdmF0ZSBfY29uZmlnOiBGc0FwcE1lc3NhZ2VDb25maWcsXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHByaXZhdGUgX2RhdGEsXG4gICAgcHJpdmF0ZSBfcHJvbXB0OiBGc1Byb21wdCxcbiAgICBwcml2YXRlIF9tZXNzYWdlOiBGc01lc3NhZ2UsXG4gICAgcHJpdmF0ZSBfZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBfY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLl9jb25maWcubG9hZE1lc3NhZ2UodGhpcy5fZGF0YS5tZXNzYWdlKVxuICAgICAgLnN1YnNjcmliZSgobWVzc2FnZSkgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuXG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2UuZW1haWxNZXNzYWdlICYmIHRoaXMubWVzc2FnZS5lbWFpbE1lc3NhZ2UuY3VzdG9taXplID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2UuZW1haWxNZXNzYWdlLmN1c3RvbWl6ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZS5zbXNNZXNzYWdlICYmIHRoaXMubWVzc2FnZS5zbXNNZXNzYWdlLmN1c3RvbWl6ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlLnNtc01lc3NhZ2UuY3VzdG9taXplID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubWVzc2FnZS5yZWZlcmVuY2UgPSBTdHJpbmcobWVzc2FnZS50YWcpXG4gICAgICAgICAgLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICAgICAgICAuc3BsaXQoJ18nKVxuICAgICAgICAgIC5tYXAoKGl0ZW06IHN0cmluZykgPT4gaXRlbS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGl0ZW0uc2xpY2UoMSkpXG4gICAgICAgICAgLmpvaW4oJycpO1xuXG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9jb25maWcubG9hZE1lc3NhZ2VUZW1wbGF0ZXMoKVxuICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2VUZW1wbGF0ZXMgPSBkYXRhLmRhdGE7XG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLnNhdmVNZXNzYWdlKHRoaXMubWVzc2FnZSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnU2F2ZWQgQ2hhbmdlcycpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuUHJldmlldygpOiB2b2lkIHtcbiAgICBjb25zdCBlbWFpbE1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2UuZW1haWxNZXNzYWdlO1xuICAgIGxldCBodG1sID0gZW1haWxNZXNzYWdlLmN1c3RvbWl6ZSA/IGVtYWlsTWVzc2FnZS5ib2R5IDogdGhpcy5tZXNzYWdlLmRlZmF1bHRFbWFpbEJvZHk7XG4gICAgbGV0IHN0eWxlcyA9IGVtYWlsTWVzc2FnZS5zdHlsZXMgfHwgJyc7XG5cbiAgICBpZiAoZW1haWxNZXNzYWdlLm1lc3NhZ2VUZW1wbGF0ZUlkKSB7XG4gICAgICBjb25zdCBtZXNzYWdlVGVtcGxhdGUgPSB0aGlzLm1lc3NhZ2VUZW1wbGF0ZXNcbiAgICAgICAgLmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gZW1haWxNZXNzYWdlLm1lc3NhZ2VUZW1wbGF0ZUlkID09PSBpdGVtLmlkO1xuICAgICAgICB9KTtcblxuICAgICAgaWYgKG1lc3NhZ2VUZW1wbGF0ZSkge1xuICAgICAgICBodG1sID0gbWVzc2FnZVRlbXBsYXRlLmNvbnRlbnQucmVwbGFjZSgneyRjb250ZW50fScsIGh0bWwpO1xuICAgICAgICBzdHlsZXMgPSBgJHttZXNzYWdlVGVtcGxhdGUuc3R5bGVzIHx8ICcnfVxcblxcbiR7c3R5bGVzfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fZGlhbG9nLm9wZW4oUHJldmlld0NvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICBzdHlsZXMsXG4gICAgICAgIGh0bWwsXG4gICAgICB9LFxuICAgICAgd2lkdGg6ICc5NSUnXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2VuZFRlc3QodHlwZSkge1xuICAgIG9mKHRydWUpXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2VtYWlsJyA/IHRoaXMuX2NvbmZpZy5nZXRUZXN0RW1haWwoKSA6IG9mKCcnKTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoZGVmYXVsdF8pID0+IHtcbiAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IHR5cGUgPT09ICdlbWFpbCcgPyAnYW4gZW1haWwnIDogJ3Bob25lIG51bWJlcic7XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvbXB0LmlucHV0KHtcbiAgICAgICAgICAgIGxhYmVsOiBgUGxlYXNlIGVudGVyICR7dHlwZU5hbWV9IHRvIHNlbmQgdGVzdCB0b2AsXG4gICAgICAgICAgICB0aXRsZTogJ1NlbmQgVGVzdCcsXG4gICAgICAgICAgICBjb21taXRMYWJlbDogJ1NlbmQnLFxuICAgICAgICAgICAgZGVmYXVsdDogZGVmYXVsdF8sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuX2NvbmZpZy50ZXN0TWVzc2FnZSh0aGlzLm1lc3NhZ2UsIHZhbHVlLCB0eXBlKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdUZXN0IFNlbnQnKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG59XG4iLCI8Zm9ybVxuICAgIGZzRm9ybVxuICAgIFtzdWJtaXRdPVwic2F2ZVwiXG4gICAgI2Zvcm09XCJuZ0Zvcm1cIlxuICAgICpmc1NrZWxldG9uPVwibWVzc2FnZVwiXG4gICAgW2NvbmZpcm1UYWJzXT1cImZhbHNlXCI+XG4gIDxmcy1kaWFsb2cgKm5nSWY9XCJtZXNzYWdlXCI+XG4gICAgPGRpdiBtYXQtZGlhbG9nLXRpdGxlPkVkaXQgTWVzc2FnZTwvZGl2PlxuICAgIDxtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgICA8bWF0LXRhYi1ncm91cCBcbiAgICAgICAgICBmc1RhYnMgXG4gICAgICAgICAgWyhzZWxlY3RlZCldPVwidGFiXCI+XG4gICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiR2VuZXJhbFwiIG5hbWU9XCJnZW5lcmFsXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtY29sdW1uXCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIk5hbWVcIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cIk5hbWVcIlxuICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgICA8ZnMtbGFiZWw+UmVmZXJlbmNlPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICB7e21lc3NhZ2UucmVmZXJlbmNlfX1cbiAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy1yb3cuZ2FwLXNtYWxsLndyYXBcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGcm9tIEVtYWlsXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS5mcm9tRW1haWxcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZnJvbV9lbWFpbFwiPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRnJvbSBOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS5mcm9tTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmcm9tX25hbWVcIj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlJlcGx5IFRvXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS5yZXBseVRvXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInJlcGx5X3RvXCI+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzLXJvdy5nYXAtc21hbGwud3JhcFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlRvXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS50b1JlY2lwaWVudHNcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwidG9cIj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNDXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS5jY1JlY2lwaWVudHNcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY2NcIj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkJDQ1wiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UuYmNjUmVjaXBpZW50c1wiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJiY2NcIj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJFbWFpbCBNZXNzYWdlXCIgKm5nSWY9XCJtZXNzYWdlLmVtYWlsTWVzc2FnZVwiIG5hbWU9XCJlbWFpbFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzLWNvbHVtblwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtcm93LmdhcC1zbWFsbFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkN1c3RvbWl6ZSBNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmN1c3RvbWl6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImN1c3RvbWl6ZUVtYWlsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJ0cnVlXCI+WWVzPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZmFsc2VcIj5ObzwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRm9ybWF0XCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS5mb3JtYXRcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZm9ybWF0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgZW1haWxNZXNzYWdlRm9ybWF0c1wiIFt2YWx1ZV09XCJpdGVtLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0ubmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS5tZXNzYWdlVGVtcGxhdGVJZFwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0ZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJudWxsXCI+Tm9uZTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBtZXNzYWdlVGVtcGxhdGVzXCIgW3ZhbHVlXT1cIml0ZW0uaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbS5uYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmN1c3RvbWl6ZVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlN1YmplY3RcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLnN1YmplY3RcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IFtALmRpc2FibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtdGFiLWdyb3VwIFtkeW5hbWljSGVpZ2h0XT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiQ29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmZvcm1hdD09PWVtYWlsTWVzc2FnZUZvcm1hdC5IVE1MXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxmcy10ZXh0LWVkaXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS5ib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJ7IGxhbmd1YWdlOiAnaHRtbCAnfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZzLXRleHQtZWRpdG9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlLmVtYWlsTWVzc2FnZS5mb3JtYXQ9PT1lbWFpbE1lc3NhZ2VGb3JtYXQuUmljaFRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZzLWh0bWwtZWRpdG9yICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZnMtaHRtbC1lZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmZvcm1hdD09PWVtYWlsTWVzc2FnZUZvcm1hdC5UZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxmcy10ZXh0LWVkaXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJlbWFpbE1lc3NhZ2VCb2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cInsgbGFuZ3VhZ2U6ICd0ZXh0JyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZnMtdGV4dC1lZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmZvcm1hdD09PWVtYWlsTWVzc2FnZUZvcm1hdC5IVE1MIHx8IG1lc3NhZ2UuZW1haWxNZXNzYWdlLmZvcm1hdD09PWVtYWlsTWVzc2FnZUZvcm1hdC5SaWNoVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlN0eWxlc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZzLXRleHQtZWRpdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2Uuc3R5bGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInN0eWxlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwieyBsYW5ndWFnZTogJ3Njc3MnIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZnMtdGV4dC1lZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW1lc3NhZ2UuZW1haWxNZXNzYWdlLmN1c3RvbWl6ZVwiPlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5TdWJqZWN0PC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIHt7bWVzc2FnZS5kZWZhdWx0RW1haWxTdWJqZWN0fX1cbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5Db250ZW50PC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtYWlsLWJvZHktaHRtbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGZzLWh0bWwtcmVuZGVyZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibWVzc2FnZS5lbWFpbE1lc3NhZ2UuZm9ybWF0PT09ZW1haWxNZXNzYWdlRm9ybWF0LlJpY2hUZXh0IHx8IG1lc3NhZ2UuZW1haWxNZXNzYWdlLmZvcm1hdD09PWVtYWlsTWVzc2FnZUZvcm1hdC5IVE1MXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtodG1sXT1cIm1lc3NhZ2UuZGVmYXVsdEVtYWlsQm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZnMtaHRtbC1yZW5kZXJlcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVtYWlsLWJvZHktdGV4dC1kZWZhdWx0XCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlLmZvcm1hdD09PWVtYWlsTWVzc2FnZUZvcm1hdC5UZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3ttZXNzYWdlLmRlZmF1bHRFbWFpbEJvZHl9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9tYXQtdGFiPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIW1lc3NhZ2Uuc21zTWVzc2FnZVwiPlxuICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiU01TIE1lc3NhZ2VcIiBuYW1lPVwic21zXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJDdXN0b21pemUgTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1lc3NhZ2Uuc21zTWVzc2FnZS5jdXN0b21pemVcIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cImN1c3RvbWl6ZVNtc1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidHJ1ZVwiPlllczwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImZhbHNlXCI+Tm88L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwibWVzc2FnZS5zbXNNZXNzYWdlLmN1c3RvbWl6ZVwiXG4gICAgICAgICAgICAgICAgICBbQC5kaXNhYmxlZF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPG1hdC10YWItZ3JvdXAgW2R5bmFtaWNIZWlnaHRdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiQ29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICA8ZnMtdGV4dC1lZGl0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZS5zbXNNZXNzYWdlLm1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInNtc01lc3NhZ2VNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwieyBsYW5ndWFnZTogJ3RleHQgJ31cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2ZzLXRleHQtZWRpdG9yPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICAgICAgICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cIiFtZXNzYWdlLnNtc01lc3NhZ2UuY3VzdG9taXplXCI+XG4gICAgICAgICAgICAgICAgICA8ZnMtbGFiZWw+TWVzc2FnZTwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgICB7e21lc3NhZ2UuZGVmYXVsdFNtc01lc3NhZ2V9fVxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiQXR0YWNobWVudHNcIiAqbmdJZj1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlXCIgbmFtZT1cImF0dGFjaG1lbnRzXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICA8ZnMtYXBwLW1lc3NhZ2UtYXR0YWNobWVudHMgXG4gICAgICAgICAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VcIj5cbiAgICAgICAgICAgIDwvZnMtYXBwLW1lc3NhZ2UtYXR0YWNobWVudHM+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9tYXQtdGFiPlxuXG4gICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiVmFyaWFibGVzXCIgKm5nSWY9XCJtZXNzYWdlLnZhcmlhYmxlc1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdmFyaWFibGUgb2YgbWVzc2FnZS52YXJpYWJsZXNcIiBjbGFzcz1cInZhcmlhYmxlXCI+XG4gICAgICAgICAgICAgIHt7dmFyaWFibGUubmFtZX19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L21hdC10YWI+XG5cbiAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJEZWZhdWx0c1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlXCI+XG4gICAgICAgICAgICAgIDxoMiAqbmdJZj1cIm1lc3NhZ2UuZW1haWxNZXNzYWdlICYmIG1lc3NhZ2Uuc21zTWVzc2FnZVwiPkVtYWlsPC9oMj5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5TdWJqZWN0PC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPnt7bWVzc2FnZS5kZWZhdWx0RW1haWxTdWJqZWN0fX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5Db250ZW50PC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPnt7bWVzc2FnZS5kZWZhdWx0RW1haWxCb2R5fX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2Uuc21zTWVzc2FnZVwiPlxuICAgICAgICAgICAgICA8aDIgKm5nSWY9XCJtZXNzYWdlLmVtYWlsTWVzc2FnZSAmJiBtZXNzYWdlLnNtc01lc3NhZ2VcIj5TTVM8L2gyPlxuICAgICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsPkNvbnRlbnQ8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+e3ttZXNzYWdlLmRlZmF1bHRTbXNNZXNzYWdlfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbWF0LXRhYj5cbiAgICAgIDwvbWF0LXRhYi1ncm91cD5cblxuICAgIDwvbWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFiPT09J2VtYWlsJyB8fCB0YWI9PT0nc21zJyB8fCB0YWI9PT0nZ2VuZXJhbCc7IGVsc2UgZG9uZVwiPlxuICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgbWF0LWJ1dHRvbiBcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgIFNhdmVcbiAgICAgICAgPC9idXR0b24+ICAgICBcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYj09PSdlbWFpbCdcIj5cbiAgICAgICAgICA8YnV0dG9uICAgICAgICAgICAgXG4gICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvcGVuUHJldmlldygpXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgUHJldmlld1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbmRUZXN0KCdlbWFpbCcpXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgU2VuZCBUZXN0IEVtYWlsXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFiPT09J3NtcydcIj5cbiAgICAgICAgICA8YnV0dG9uICAgICAgICAgICAgXG4gICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZW5kVGVzdCgnc21zJylcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICBTZW5kIFRlc3QgU01TXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgbWF0LWJ1dHRvbiBcbiAgICAgICAgICAgIFttYXQtZGlhbG9nLWNsb3NlXT1cIm51bGxcIiBcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICBDYW5jZWxcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj4gXG4gICAgICA8bmctdGVtcGxhdGUgI2RvbmU+XG4gICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICBtYXQtYnV0dG9uIFxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIFttYXQtZGlhbG9nLWNsb3NlXT1cIm51bGxcIiBcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICBDbG9zZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG4gIDwvZnMtZGlhbG9nPlxuPC9mb3JtPlxuIl19
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { Component, Inject, ViewChild } from '@angular/core';
|
|
2
|
-
import { MatDialog } from '@angular/material/dialog';
|
|
3
|
-
import { takeUntil, map } from 'rxjs/operators';
|
|
4
|
-
import { Subject } from 'rxjs';
|
|
5
|
-
import { FsListComponent } from '@firestitch/list';
|
|
6
|
-
import { ItemType } from '@firestitch/filter';
|
|
7
|
-
import { MessageComponent } from '../message';
|
|
8
|
-
import { EmailMessageFormats } from '../../consts';
|
|
9
|
-
import { indexNameValue } from '../../../../helpers';
|
|
10
|
-
import { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "@angular/material/dialog";
|
|
13
|
-
import * as i2 from "@firestitch/list";
|
|
14
|
-
import * as i3 from "@angular/common";
|
|
15
|
-
export class MessagesComponent {
|
|
16
|
-
constructor(_config, _dialog) {
|
|
17
|
-
this._config = _config;
|
|
18
|
-
this._dialog = _dialog;
|
|
19
|
-
this.list = null;
|
|
20
|
-
this.config = null;
|
|
21
|
-
this.emailMessageFormats = {};
|
|
22
|
-
this._destroy$ = new Subject();
|
|
23
|
-
}
|
|
24
|
-
ngOnInit() {
|
|
25
|
-
this.emailMessageFormats = indexNameValue(EmailMessageFormats);
|
|
26
|
-
this.config = {
|
|
27
|
-
filters: [
|
|
28
|
-
{
|
|
29
|
-
name: 'keyword',
|
|
30
|
-
type: ItemType.Keyword,
|
|
31
|
-
label: 'Search'
|
|
32
|
-
}
|
|
33
|
-
],
|
|
34
|
-
fetch: query => {
|
|
35
|
-
return this._config.loadMessages(query)
|
|
36
|
-
.pipe(map(response => {
|
|
37
|
-
return ({ data: response.data, paging: response.paging });
|
|
38
|
-
}));
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
open(message) {
|
|
43
|
-
const dialogRef = this._dialog.open(MessageComponent, {
|
|
44
|
-
data: {
|
|
45
|
-
message: message,
|
|
46
|
-
},
|
|
47
|
-
width: '85%'
|
|
48
|
-
});
|
|
49
|
-
dialogRef.afterClosed()
|
|
50
|
-
.pipe(takeUntil(this._destroy$))
|
|
51
|
-
.subscribe(() => {
|
|
52
|
-
this.list.reload();
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
ngOnDestroy() {
|
|
56
|
-
this._destroy$.next();
|
|
57
|
-
this._destroy$.complete();
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
MessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MessagesComponent, deps: [{ token: FS_APP_MESSAGE_CONFIG }, { token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
|
|
61
|
-
MessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MessagesComponent, selector: "fs-app-messages", viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<fs-list [config]=\"config\">\n <fs-list-column title=\"Name\" name=\"name\" [sortable]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n <a (click)=\"open(row)\">{{row.name}}</a>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Email Format\">\n <ng-template fs-list-cell let-row=\"row\">\n {{emailMessageFormats[row.emailMessage.format]}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Email Message Template\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.emailMessage.messageTemplate?.name || 'None'}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Customized Message\">\n <ng-template fs-list-cell let-row=\"row\">\n <ng-container *ngIf=\"row.emailMessage?.customize || row.smsMessage?.customize; else noCustomize\">\n <ng-container *ngIf=\"row.emailMessage?.customize\">\n {{row.emailMessage.customize ? 'Email' : ''}}\n </ng-container> \n <ng-container *ngIf=\"row.smsMessage?.customize\">\n {{row.smsMessage.customize ? 'SMS' : ''}}\n </ng-container> \n </ng-container>\n <ng-template #noCustomize>\n None\n </ng-template>\n </ng-template>\n </fs-list-column>\n</fs-list>\n", components: [{ type: i2.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }], directives: [{ type: i2.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i2.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
62
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MessagesComponent, decorators: [{
|
|
63
|
-
type: Component,
|
|
64
|
-
args: [{
|
|
65
|
-
selector: 'fs-app-messages',
|
|
66
|
-
templateUrl: './messages.component.html'
|
|
67
|
-
}]
|
|
68
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
69
|
-
type: Inject,
|
|
70
|
-
args: [FS_APP_MESSAGE_CONFIG]
|
|
71
|
-
}] }, { type: i1.MatDialog }]; }, propDecorators: { list: [{
|
|
72
|
-
type: ViewChild,
|
|
73
|
-
args: [FsListComponent, { static: true }]
|
|
74
|
-
}] } });
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2VzL2NvbXBvbmVudHMvbWVzc2FnZXMvbWVzc2FnZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2VzL2NvbXBvbmVudHMvbWVzc2FnZXMvbWVzc2FnZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sa0JBQWtCLENBQUM7QUFDakUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM5QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7OztBQU92RSxNQUFNLE9BQU8saUJBQWlCO0lBVTVCLFlBQ3lDLE9BQTJCLEVBQzFELE9BQWtCO1FBRGEsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFDMUQsWUFBTyxHQUFQLE9BQU8sQ0FBVztRQVRyQixTQUFJLEdBQW9CLElBQUksQ0FBQztRQUU3QixXQUFNLEdBQWlCLElBQUksQ0FBQztRQUM1Qix3QkFBbUIsR0FBRyxFQUFFLENBQUM7UUFFeEIsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFLOUIsQ0FBQztJQUVFLFFBQVE7UUFDYixJQUFJLENBQUMsbUJBQW1CLEdBQUcsY0FBYyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFL0QsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxJQUFJLEVBQUUsU0FBUztvQkFDZixJQUFJLEVBQUUsUUFBUSxDQUFDLE9BQU87b0JBQ3RCLEtBQUssRUFBRSxRQUFRO2lCQUNoQjthQUNGO1lBQ0QsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO3FCQUN0QyxJQUFJLENBQ0gsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUNiLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtnQkFDM0QsQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUM7U0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVNLElBQUksQ0FBQyxPQUFPO1FBQ2pCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3BELElBQUksRUFBRTtnQkFDSixPQUFPLEVBQUUsT0FBTzthQUNqQjtZQUNELEtBQUssRUFBRSxLQUFLO1NBQ2IsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLFdBQVcsRUFBRTthQUN0QixJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUI7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDOzsrR0F6RFUsaUJBQWlCLGtCQVdsQixxQkFBcUI7bUdBWHBCLGlCQUFpQiw2RkFFakIsZUFBZSw4REN0QjVCLHd2Q0FnQ0E7NEZEWmEsaUJBQWlCO2tCQUo3QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFdBQVcsRUFBRSwyQkFBMkI7aUJBQ3pDOzswQkFZSSxNQUFNOzJCQUFDLHFCQUFxQjtvRUFSeEIsSUFBSTtzQkFEVixTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyB0YWtlVW50aWwsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgRnNMaXN0Q29tcG9uZW50LCBGc0xpc3RDb25maWcgfSBmcm9tICdAZmlyZXN0aXRjaC9saXN0JztcbmltcG9ydCB7IEl0ZW1UeXBlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZmlsdGVyJztcblxuaW1wb3J0IHsgTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4uL21lc3NhZ2UnO1xuaW1wb3J0IHsgRW1haWxNZXNzYWdlRm9ybWF0cyB9IGZyb20gJy4uLy4uL2NvbnN0cyc7XG5pbXBvcnQgeyBpbmRleE5hbWVWYWx1ZSB9IGZyb20gJy4uLy4uLy4uLy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgRlNfQVBQX01FU1NBR0VfQ09ORklHIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvaW5qZWN0b3JzJztcbmltcG9ydCB7IEZzQXBwTWVzc2FnZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2FwcC1tZXNzYWdlL2ludGVyZmFjZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmcy1hcHAtbWVzc2FnZXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVzc2FnZXMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBWaWV3Q2hpbGQoRnNMaXN0Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgbGlzdDogRnNMaXN0Q29tcG9uZW50ID0gbnVsbDtcblxuICBwdWJsaWMgY29uZmlnOiBGc0xpc3RDb25maWcgPSBudWxsO1xuICBwdWJsaWMgZW1haWxNZXNzYWdlRm9ybWF0cyA9IHt9O1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KEZTX0FQUF9NRVNTQUdFX0NPTkZJRykgcHJpdmF0ZSBfY29uZmlnOiBGc0FwcE1lc3NhZ2VDb25maWcsXG4gICAgcHJpdmF0ZSBfZGlhbG9nOiBNYXREaWFsb2csXG4gICkgeyB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZW1haWxNZXNzYWdlRm9ybWF0cyA9IGluZGV4TmFtZVZhbHVlKEVtYWlsTWVzc2FnZUZvcm1hdHMpO1xuXG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICBmaWx0ZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAna2V5d29yZCcsXG4gICAgICAgICAgdHlwZTogSXRlbVR5cGUuS2V5d29yZCxcbiAgICAgICAgICBsYWJlbDogJ1NlYXJjaCdcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGZldGNoOiBxdWVyeSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcubG9hZE1lc3NhZ2VzKHF1ZXJ5KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICh7IGRhdGE6IHJlc3BvbnNlLmRhdGEsIHBhZ2luZzogcmVzcG9uc2UucGFnaW5nIH0pXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3BlbihtZXNzYWdlKSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nLm9wZW4oTWVzc2FnZUNvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIHdpZHRoOiAnODUlJ1xuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKClcbiAgICAucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JClcbiAgICApXG4gICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmxpc3QucmVsb2FkKCk7XG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPGZzLWxpc3QgW2NvbmZpZ109XCJjb25maWdcIj5cbiAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiTmFtZVwiIG5hbWU9XCJuYW1lXCIgW3NvcnRhYmxlXT1cInRydWVcIj5cbiAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1jZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIDxhIChjbGljayk9XCJvcGVuKHJvdylcIj57e3Jvdy5uYW1lfX08L2E+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9mcy1saXN0LWNvbHVtbj5cbiAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiRW1haWwgRm9ybWF0XCI+XG4gICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtY2VsbCBsZXQtcm93PVwicm93XCI+XG4gICAgICB7e2VtYWlsTWVzc2FnZUZvcm1hdHNbcm93LmVtYWlsTWVzc2FnZS5mb3JtYXRdfX1cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2ZzLWxpc3QtY29sdW1uPlxuICA8ZnMtbGlzdC1jb2x1bW4gdGl0bGU9XCJFbWFpbCBNZXNzYWdlIFRlbXBsYXRlXCI+XG4gICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtY2VsbCBsZXQtcm93PVwicm93XCI+XG4gICAgICB7e3Jvdy5lbWFpbE1lc3NhZ2UubWVzc2FnZVRlbXBsYXRlPy5uYW1lIHx8ICdOb25lJ319XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9mcy1saXN0LWNvbHVtbj5cbiAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiQ3VzdG9taXplZCBNZXNzYWdlXCI+XG4gICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtY2VsbCBsZXQtcm93PVwicm93XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LmVtYWlsTWVzc2FnZT8uY3VzdG9taXplIHx8IHJvdy5zbXNNZXNzYWdlPy5jdXN0b21pemU7IGVsc2Ugbm9DdXN0b21pemVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdy5lbWFpbE1lc3NhZ2U/LmN1c3RvbWl6ZVwiPlxuICAgICAgICAgIHt7cm93LmVtYWlsTWVzc2FnZS5jdXN0b21pemUgPyAnRW1haWwnIDogJyd9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj4gXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cuc21zTWVzc2FnZT8uY3VzdG9taXplXCI+XG4gICAgICAgICAge3tyb3cuc21zTWVzc2FnZS5jdXN0b21pemUgPyAnU01TJyA6ICcnfX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+ICAgICAgICAgXG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm9DdXN0b21pemU+XG4gICAgICAgIE5vbmVcbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9mcy1saXN0LWNvbHVtbj5cbjwvZnMtbGlzdD5cbiJdfQ==
|