@lowcodeunit/applications-flow-common 1.33.167-lets-get-social-ish → 1.33.171-social-ui
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/esm2020/lcu.api.mjs +2 -1
- package/esm2020/lib/applications-flow.module.mjs +17 -8
- package/esm2020/lib/controls/processor-details-form/processor-details-form.component.mjs +6 -6
- package/esm2020/lib/dialogs/new-application-dialog/new-application-dialog.component.mjs +1 -1
- package/esm2020/lib/dialogs/processor-details-dialog/processor-details-dialog.component.mjs +153 -0
- package/esm2020/lib/elements/breadcrumb/breadcrumb.component.mjs +9 -7
- package/esm2020/lib/elements/dynamic-tabs/dynamic-tabs.component.mjs +2 -2
- package/esm2020/lib/elements/feed-card-sm/feed-card-sm.component.mjs +2 -2
- package/esm2020/lib/elements/form-card/form-card.component.mjs +2 -2
- package/esm2020/lib/elements/gh-control/gh-control.component.mjs +2 -2
- package/esm2020/lib/elements/main-feed-card/main-feed-card.component.mjs +2 -2
- package/esm2020/lib/elements/project-info-card/project-info-card.component.mjs +5 -4
- package/esm2020/lib/elements/projects/controls/builds/builds.component.mjs +2 -2
- package/esm2020/lib/elements/projects/controls/create-project-wizard/create-project-wizard.component.mjs +2 -2
- package/esm2020/lib/elements/projects/controls/forms/source-control/source-control.component.mjs +2 -2
- package/esm2020/lib/elements/projects/controls/git-auth/git-auth.component.mjs +2 -2
- package/esm2020/lib/elements/projects/controls/header/header.component.mjs +2 -2
- package/esm2020/lib/elements/projects/controls/hosting-details-form-group/hosting-details-form-group.component.mjs +2 -2
- package/esm2020/lib/elements/projects/controls/project-items/project-items.component.mjs +2 -2
- package/esm2020/lib/elements/projects/controls/project-tabs/project-tabs.component.mjs +2 -2
- package/esm2020/lib/elements/projects/controls/tabs/apps-flow/apps-flow.component.mjs +2 -2
- package/esm2020/lib/elements/projects/controls/tabs/apps-flow/npm-package-select/npm-package-select.component.mjs +2 -2
- package/esm2020/lib/elements/projects/controls/tabs/devops/devops.component.mjs +2 -2
- package/esm2020/lib/elements/projects/controls/tabs/dfs-modifiers/dfs-modifiers.component.mjs +2 -2
- package/esm2020/lib/elements/projects/controls/tabs/domains/domains.component.mjs +2 -2
- package/esm2020/lib/elements/projects/controls/tabs/general/forms/project-details/project-details.component.mjs +2 -2
- package/esm2020/lib/elements/projects/controls/tabs/general/forms/root-directory/root-directory.component.mjs +2 -2
- package/esm2020/lib/elements/projects/controls/tabs/general/general.component.mjs +2 -2
- package/esm2020/lib/elements/projects/projects.component.mjs +2 -2
- package/esm2020/lib/elements/slotted-card/slotted-card.component.mjs +15 -12
- package/fesm2015/lowcodeunit-applications-flow-common.mjs +235 -75
- package/fesm2015/lowcodeunit-applications-flow-common.mjs.map +1 -1
- package/fesm2020/lowcodeunit-applications-flow-common.mjs +229 -74
- package/fesm2020/lowcodeunit-applications-flow-common.mjs.map +1 -1
- package/lcu.api.d.ts +1 -0
- package/lib/applications-flow.module.d.ts +10 -8
- package/lib/controls/processor-details-form/processor-details-form.component.d.ts +3 -2
- package/lib/dialogs/processor-details-dialog/processor-details-dialog.component.d.ts +31 -0
- package/lib/elements/breadcrumb/breadcrumb.component.d.ts +1 -0
- package/lib/elements/project-info-card/project-info-card.component.d.ts +2 -1
- package/lib/elements/slotted-card/slotted-card.component.d.ts +7 -3
- package/package.json +1 -1
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { Component, Inject, ViewChild } from '@angular/core';
|
|
2
|
+
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
3
|
+
import { Guid } from '@lcu/common';
|
|
4
|
+
import { ProcessorDetailsFormComponent } from '../../controls/processor-details-form/processor-details-form.component';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../../services/eac.service";
|
|
7
|
+
import * as i2 from "@angular/material/dialog";
|
|
8
|
+
import * as i3 from "@angular/material/button";
|
|
9
|
+
import * as i4 from "@angular/material/icon";
|
|
10
|
+
import * as i5 from "../../controls/processor-details-form/processor-details-form.component";
|
|
11
|
+
import * as i6 from "@angular/flex-layout/flex";
|
|
12
|
+
export class ProcessorDetailsDialogComponent {
|
|
13
|
+
constructor(eacSvc, dialogRef, data) {
|
|
14
|
+
this.eacSvc = eacSvc;
|
|
15
|
+
this.dialogRef = dialogRef;
|
|
16
|
+
this.data = data;
|
|
17
|
+
}
|
|
18
|
+
get Application() {
|
|
19
|
+
return this.State?.EaC?.Applications[this.data.applicationLookup] || {};
|
|
20
|
+
}
|
|
21
|
+
get Environment() {
|
|
22
|
+
return this.State?.EaC?.Environments[this.data.environmentLookup];
|
|
23
|
+
}
|
|
24
|
+
get SourceControls() {
|
|
25
|
+
return this.Environment?.Sources || {};
|
|
26
|
+
}
|
|
27
|
+
get SourceControlLookups() {
|
|
28
|
+
return Object.keys(this.Environment?.Sources || {});
|
|
29
|
+
}
|
|
30
|
+
get State() {
|
|
31
|
+
return this.eacSvc.State;
|
|
32
|
+
}
|
|
33
|
+
ngOnInit() {
|
|
34
|
+
}
|
|
35
|
+
CloseDialog() {
|
|
36
|
+
this.dialogRef.close();
|
|
37
|
+
}
|
|
38
|
+
SaveProcessorDetails(event) {
|
|
39
|
+
const app = this.Application;
|
|
40
|
+
app.LookupConfig.AllowedMethods =
|
|
41
|
+
this.ProcessorDetailsFormControls.MethodsFormControl?.value
|
|
42
|
+
?.split(' ')
|
|
43
|
+
.filter((v) => !!v);
|
|
44
|
+
app.Processor.Type = this.ProcessorDetailsFormControls.ProcessorType;
|
|
45
|
+
switch (app.Processor.Type) {
|
|
46
|
+
case 'DFS':
|
|
47
|
+
app.Processor.DefaultFile =
|
|
48
|
+
this.ProcessorDetailsFormControls.DefaultFileFormControl.value ||
|
|
49
|
+
'index.html';
|
|
50
|
+
app.LowCodeUnit = {
|
|
51
|
+
Type: this.ProcessorDetailsFormControls.LCUType,
|
|
52
|
+
};
|
|
53
|
+
switch (app.LowCodeUnit.Type) {
|
|
54
|
+
case 'GitHub':
|
|
55
|
+
app.LowCodeUnit.Organization =
|
|
56
|
+
this.SourceControls[this.ProcessorDetailsFormControls.SourceControlFormControl.value].Organization;
|
|
57
|
+
app.LowCodeUnit.Repository =
|
|
58
|
+
this.SourceControls[this.ProcessorDetailsFormControls.SourceControlFormControl.value].Repository;
|
|
59
|
+
app.LowCodeUnit.Build =
|
|
60
|
+
this.ProcessorDetailsFormControls.BuildFormControl.value;
|
|
61
|
+
app.LowCodeUnit.Path =
|
|
62
|
+
this.Environment.DevOpsActions[this.SourceControls[this.ProcessorDetailsFormControls.SourceControlFormControl.value].DevOpsActionTriggerLookups[0]].Path;
|
|
63
|
+
// console.log("sourceControl lookup: ", this.ProcessorDetailsFormControls.SourceControlFormControl.value);
|
|
64
|
+
app.LowCodeUnit.SourceControlLookup =
|
|
65
|
+
this.ProcessorDetailsFormControls.SourceControlFormControl.value;
|
|
66
|
+
break;
|
|
67
|
+
case 'NPM':
|
|
68
|
+
app.LowCodeUnit.Package =
|
|
69
|
+
this.ProcessorDetailsFormControls.PackageFormControl.value;
|
|
70
|
+
app.LowCodeUnit.Version =
|
|
71
|
+
this.ProcessorDetailsFormControls.VersionFormControl.value;
|
|
72
|
+
break;
|
|
73
|
+
case 'WordPress':
|
|
74
|
+
app.LowCodeUnit.APIRoot =
|
|
75
|
+
this.ProcessorDetailsFormControls.APIRootFormControl.value;
|
|
76
|
+
break;
|
|
77
|
+
case 'Zip':
|
|
78
|
+
app.LowCodeUnit.ZipFile =
|
|
79
|
+
this.ProcessorDetailsFormControls.ZipFileFormControl.value;
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
break;
|
|
83
|
+
case 'OAuth':
|
|
84
|
+
app.Processor.Scopes =
|
|
85
|
+
this.ProcessorDetailsFormControls.ScopesFormControl.value.split(' ');
|
|
86
|
+
app.Processor.TokenLookup =
|
|
87
|
+
this.ProcessorDetailsFormControls.TokenLookupFormControl.value;
|
|
88
|
+
app.LowCodeUnit = {
|
|
89
|
+
Type: this.ProcessorDetailsFormControls.LCUType,
|
|
90
|
+
};
|
|
91
|
+
switch (app.LowCodeUnit.Type) {
|
|
92
|
+
case 'GitHubOAuth':
|
|
93
|
+
app.LowCodeUnit.ClientID =
|
|
94
|
+
this.ProcessorDetailsFormControls.ClientIDFormControl.value;
|
|
95
|
+
app.LowCodeUnit.ClientSecret =
|
|
96
|
+
this.ProcessorDetailsFormControls.ClientSecretFormControl.value;
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
break;
|
|
100
|
+
case 'Proxy':
|
|
101
|
+
app.Processor.InboundPath =
|
|
102
|
+
this.ProcessorDetailsFormControls.InboundPathFormControl.value;
|
|
103
|
+
app.LowCodeUnit = {
|
|
104
|
+
Type: this.ProcessorDetailsFormControls.LCUType,
|
|
105
|
+
};
|
|
106
|
+
switch (app.LowCodeUnit.Type) {
|
|
107
|
+
case 'API':
|
|
108
|
+
app.LowCodeUnit.APIRoot =
|
|
109
|
+
this.ProcessorDetailsFormControls.APIRootFormControl.value;
|
|
110
|
+
app.LowCodeUnit.Security =
|
|
111
|
+
this.ProcessorDetailsFormControls.SecurityFormControl.value;
|
|
112
|
+
break;
|
|
113
|
+
case 'SPA':
|
|
114
|
+
app.LowCodeUnit.SPARoot =
|
|
115
|
+
this.ProcessorDetailsFormControls.SPARootFormControl.value;
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
break;
|
|
119
|
+
case 'Redirect':
|
|
120
|
+
app.Processor.IncludeRequest =
|
|
121
|
+
!!this.ProcessorDetailsFormControls.IncludeRequestFormControl.value;
|
|
122
|
+
app.Processor.Permanent =
|
|
123
|
+
!!this.ProcessorDetailsFormControls.PermanentFormControl.value;
|
|
124
|
+
app.Processor.PreserveMethod =
|
|
125
|
+
!!this.ProcessorDetailsFormControls.PreserveMethodFormControl.value;
|
|
126
|
+
app.Processor.Redirect =
|
|
127
|
+
this.ProcessorDetailsFormControls.RedirectFormControl.value;
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
if (!app.LookupConfig.PathRegex.startsWith('/')) {
|
|
131
|
+
app.LookupConfig.PathRegex = `/${app.LookupConfig.PathRegex}`;
|
|
132
|
+
}
|
|
133
|
+
const saveAppReq = {
|
|
134
|
+
ProjectLookup: this.data.projectLookup,
|
|
135
|
+
Application: app,
|
|
136
|
+
ApplicationLookup: this.data.applicationLookup || Guid.CreateRaw(),
|
|
137
|
+
};
|
|
138
|
+
this.eacSvc.SaveApplicationAsCode(saveAppReq);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
ProcessorDetailsDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ProcessorDetailsDialogComponent, deps: [{ token: i1.EaCService }, { token: i2.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
142
|
+
ProcessorDetailsDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: ProcessorDetailsDialogComponent, selector: "lcu-processor-details-dialog", viewQueries: [{ propertyName: "ProcessorDetailsFormControls", first: true, predicate: ProcessorDetailsFormComponent, descendants: true }], ngImport: i0, template: "<div class=\"dialog-header\" fxLayoutAlign=\"end center\">\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<lcu-processor-details-form \n more-details \n [editing-application]=\"Application\"\n [editing-application-lookup]=\"data.applicationLookup\" \n [source-control-lookups]=\"SourceControlLookups\"\n [project-lookup]=\"data.projectLookup\"\n (save-form-event)=\"SaveProcessorDetails($event)\"\n>\n</lcu-processor-details-form>\n", styles: [""], components: [{ type: i3.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"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.ProcessorDetailsFormComponent, selector: "lcu-processor-details-form", inputs: ["editing-application", "editing-application-lookup", "has-save-button", "source-control-lookups", "project-lookup"], outputs: ["save-form-event"] }], directives: [{ type: i6.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }] });
|
|
143
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ProcessorDetailsDialogComponent, decorators: [{
|
|
144
|
+
type: Component,
|
|
145
|
+
args: [{ selector: 'lcu-processor-details-dialog', template: "<div class=\"dialog-header\" fxLayoutAlign=\"end center\">\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<lcu-processor-details-form \n more-details \n [editing-application]=\"Application\"\n [editing-application-lookup]=\"data.applicationLookup\" \n [source-control-lookups]=\"SourceControlLookups\"\n [project-lookup]=\"data.projectLookup\"\n (save-form-event)=\"SaveProcessorDetails($event)\"\n>\n</lcu-processor-details-form>\n", styles: [""] }]
|
|
146
|
+
}], ctorParameters: function () { return [{ type: i1.EaCService }, { type: i2.MatDialogRef }, { type: undefined, decorators: [{
|
|
147
|
+
type: Inject,
|
|
148
|
+
args: [MAT_DIALOG_DATA]
|
|
149
|
+
}] }]; }, propDecorators: { ProcessorDetailsFormControls: [{
|
|
150
|
+
type: ViewChild,
|
|
151
|
+
args: [ProcessorDetailsFormComponent]
|
|
152
|
+
}] } });
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzc29yLWRldGFpbHMtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi9zcmMvbGliL2RpYWxvZ3MvcHJvY2Vzc29yLWRldGFpbHMtZGlhbG9nL3Byb2Nlc3Nvci1kZXRhaWxzLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24vc3JjL2xpYi9kaWFsb2dzL3Byb2Nlc3Nvci1kZXRhaWxzLWRpYWxvZy9wcm9jZXNzb3ItZGV0YWlscy1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuQyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQzs7Ozs7Ozs7QUFpQnZILE1BQU0sT0FBTywrQkFBK0I7SUF5QjFDLFlBQXNCLE1BQWtCLEVBQy9CLFNBQXdELEVBQy9CLElBQWdDO1FBRjVDLFdBQU0sR0FBTixNQUFNLENBQVk7UUFDL0IsY0FBUyxHQUFULFNBQVMsQ0FBK0M7UUFDL0IsU0FBSSxHQUFKLElBQUksQ0FBNEI7SUFBSSxDQUFDO0lBdEJ2RSxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxRSxDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxJ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Q0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDL0Q7UUFFRCxNQUFNLFVBQVUsR0FBc0M7WUFDcEQsYUFBYSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUN0QyxXQUFXLEVBQUUsR0FBRztZQUNoQixpQkFBaUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7U0FDbkUsQ0FBQztRQUVGLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDaEQsQ0FBQzs7NEhBL0tVLCtCQUErQix3RUEyQmhDLGVBQWU7Z0hBM0JkLCtCQUErQixrSUFFL0IsNkJBQTZCLGdEQ3ZCMUMsZ2hCQWVBOzJGRE1hLCtCQUErQjtrQkFOM0MsU0FBUzsrQkFDRSw4QkFBOEI7OzBCQWdDckMsTUFBTTsyQkFBQyxlQUFlOzRDQXhCbEIsNEJBQTRCO3NCQURsQyxTQUFTO3VCQUFDLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgR3VpZCB9IGZyb20gJ0BsY3UvY29tbW9uJztcbmltcG9ydCB7IEVhQ0FwcGxpY2F0aW9uQXNDb2RlLCBFYUNFbnZpcm9ubWVudEFzQ29kZSwgRWFDU291cmNlQ29udHJvbCB9IGZyb20gJ0BzZW1hbnRpY2pzL2NvbW1vbic7XG5pbXBvcnQgeyBQcm9jZXNzb3JEZXRhaWxzRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbnRyb2xzL3Byb2Nlc3Nvci1kZXRhaWxzLWZvcm0vcHJvY2Vzc29yLWRldGFpbHMtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRWFDU2VydmljZSwgU2F2ZUFwcGxpY2F0aW9uQXNDb2RlRXZlbnRSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWFjLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25zRmxvd1N0YXRlIH0gZnJvbSAnLi4vLi4vc3RhdGUvYXBwbGljYXRpb25zLWZsb3cuc3RhdGUnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc29yRGV0YWlsc0RpYWxvZ0RhdGEge1xuICBhcHBsaWNhdGlvbkxvb2t1cDogc3RyaW5nO1xuICBlbnZpcm9ubWVudExvb2t1cDogc3RyaW5nO1xuICBwcm9qZWN0TG9va3VwOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xjdS1wcm9jZXNzb3ItZGV0YWlscy1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvY2Vzc29yLWRldGFpbHMtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHJvY2Vzc29yLWRldGFpbHMtZGlhbG9nLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5cbmV4cG9ydCBjbGFzcyBQcm9jZXNzb3JEZXRhaWxzRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBAVmlld0NoaWxkKFByb2Nlc3NvckRldGFpbHNGb3JtQ29tcG9uZW50KVxuICBwdWJsaWMgUHJvY2Vzc29yRGV0YWlsc0Zvcm1Db250cm9sczogUHJvY2Vzc29yRGV0YWlsc0Zvcm1Db21wb25lbnQ7XG5cbiAgcHVibGljIGdldCBBcHBsaWNhdGlvbigpOiBFYUNBcHBsaWNhdGlvbkFzQ29kZSB7XG4gICAgcmV0dXJuIHRoaXMuU3RhdGU/LkVhQz8uQXBwbGljYXRpb25zW3RoaXMuZGF0YS5hcHBsaWNhdGlvbkxvb2t1cF0gfHwge307XG4gIH1cblxuICBwdWJsaWMgZ2V0IEVudmlyb25tZW50KCk6IEVhQ0Vudmlyb25tZW50QXNDb2RlIHtcbiAgICByZXR1cm4gdGhpcy5TdGF0ZT8uRWFDPy5FbnZpcm9ubWVudHNbdGhpcy5kYXRhLmVudmlyb25tZW50TG9va3VwXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgU291cmNlQ29udHJvbHMoKTogeyBbbG9va3VwOiBzdHJpbmddOiBFYUNTb3VyY2VDb250cm9sIH0ge1xuICAgIHJldHVybiB0aGlzLkVudmlyb25tZW50Py5Tb3VyY2VzIHx8IHt9O1xuICB9XG5cbiAgcHVibGljIGdldCBTb3VyY2VDb250cm9sTG9va3VwcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5FbnZpcm9ubWVudD8uU291cmNlcyB8fCB7fSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IFN0YXRlKCk6IEFwcGxpY2F0aW9uc0Zsb3dTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjU3ZjLlN0YXRlO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGVhY1N2YzogRWFDU2VydmljZSwgXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFByb2Nlc3NvckRldGFpbHNEaWFsb2dDb21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogUHJvY2Vzc29yRGV0YWlsc0RpYWxvZ0RhdGEpIHsgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgfVxuXG4gIHB1YmxpYyBDbG9zZURpYWxvZygpe1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICBwdWJsaWMgU2F2ZVByb2Nlc3NvckRldGFpbHMoZXZlbnQ6IGFueSk6IHZvaWQge1xuXG4gICAgY29uc3QgYXBwOiBFYUNBcHBsaWNhdGlvbkFzQ29kZSA9IHRoaXMuQXBwbGljYXRpb247XG4gICAgYXBwLkxvb2t1cENvbmZpZy5BbGxvd2VkTWV0aG9kcyA9XG4gICAgICB0aGlzLlByb2Nlc3NvckRldGFpbHNGb3JtQ29udHJvbHMuTWV0aG9kc0Zvcm1Db250cm9sPy52YWx1ZVxuICAgICAgICA/LnNwbGl0KCcgJylcbiAgICAgICAgLmZpbHRlcigodjogc3RyaW5nKSA9PiAhIXYpO1xuICAgIGFwcC5Qcm9jZXNzb3IuVHlwZSA9IHRoaXMuUHJvY2Vzc29yRGV0YWlsc0Zvcm1Db250cm9scy5Qcm9jZXNzb3JUeXBlO1xuXG4gICAgc3dpdGNoIChhcHAuUHJvY2Vzc29yLlR5cGUpIHtcbiAgICAgIGNhc2UgJ0RGUyc6XG4gICAgICAgIGFwcC5Qcm9jZXNzb3IuRGVmYXVsdEZpbGUgPVxuICAgICAgICAgIHRoaXMuUHJvY2Vzc29yRGV0YWlsc0Zvcm1Db250cm9scy5EZWZhdWx0RmlsZUZvcm1Db250cm9sLnZhbHVlIHx8XG4gICAgICAgICAgJ2luZGV4Lmh0bWwnO1xuXG4gICAgICAgIGFwcC5Mb3dDb2RlVW5pdCA9IHtcbiAgICAgICAgICBUeXBlOiB0aGlzLlByb2Nlc3NvckRldGFpbHNGb3JtQ29udHJvbHMuTENVVHlwZSxcbiAgICAgICAgfTtcblxuICAgICAgICBzd2l0Y2ggKGFwcC5Mb3dDb2RlVW5pdC5UeXBlKSB7XG4gICAgICAgICAgY2FzZSAnR2l0SHViJzpcbiAgICAgICAgICAgIGFwcC5Mb3dDb2RlVW5pdC5Pcmdhbml6YXRpb24gPVxuICAgICAgICAgICAgICB0aGlzLlNvdXJjZUNvbnRyb2xzW1xuICAgICAgICAgICAgICAgIHRoaXMuUHJvY2Vzc29yRGV0YWlsc0Zvcm1Db250cm9scy5Tb3VyY2VDb250cm9sRm9ybUNvbnRyb2wudmFsdWVcbiAgICAgICAgICAgICAgXS5Pcmdhbml6YXRpb247XG5cbiAgICAgICAgICAgIGFwcC5Mb3dDb2RlVW5pdC5SZXBvc2l0b3J5ID1cbiAgICAgICAgICAgICAgdGhpcy5Tb3VyY2VDb250cm9sc1tcbiAgICAgICAgICAgICAgICB0aGlzLlByb2Nlc3NvckRldGFpbHNGb3JtQ29udHJvbHMuU291cmNlQ29udHJvbEZvcm1Db250cm9sLnZhbHVlXG4gICAgICAgICAgICAgIF0uUmVwb3NpdG9yeTtcblxuICAgICAgICAgICAgYXBwLkxvd0NvZGVVbml0LkJ1aWxkID1cbiAgICAgICAgICAgICAgdGhpcy5Qcm9jZXNzb3JEZXRhaWxzRm9ybUNvbnRyb2xzLkJ1aWxkRm9ybUNvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgICAgIGFwcC5Mb3dDb2RlVW5pdC5QYXRoID1cbiAgICAgICAgICAgICAgdGhpcy5FbnZpcm9ubWVudC5EZXZPcHNBY3Rpb25zW1xuICAgICAgICAgICAgICAgIHRoaXMuU291cmNlQ29udHJvbHNbXG4gICAgICAgICAgICAgICAgICB0aGlzLlByb2Nlc3NvckRldGFpbHNGb3JtQ29udHJvbHMuU291cmNlQ29udHJvbEZvcm1Db250cm9sLnZhbHVlXG4gICAgICAgICAgICAgICAgXS5EZXZPcHNBY3Rpb25UcmlnZ2VyTG9va3Vwc1swXVxuICAgICAgICAgICAgICBdLlBhdGg7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInNvdXJjZUNvbnRyb2wgbG9va3VwOiBcIiwgdGhpcy5Qcm9jZXNzb3JEZXRhaWxzRm9ybUNvbnRyb2xzLlNvdXJjZUNvbnRyb2xGb3JtQ29udHJvbC52YWx1ZSk7XG5cbiAgICAgICAgICAgIGFwcC5Mb3dDb2RlVW5pdC5Tb3VyY2VDb250cm9sTG9va3VwID1cbiAgICAgICAgICAgICAgdGhpcy5Qcm9jZXNzb3JEZXRhaWxzRm9ybUNvbnRyb2xzLlNvdXJjZUNvbnRyb2xGb3JtQ29udHJvbC52YWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnTlBNJzpcbiAgICAgICAgICAgIGFwcC5Mb3dDb2RlVW5pdC5QYWNrYWdlID1cbiAgICAgICAgICAgICAgdGhpcy5Qcm9jZXNzb3JEZXRhaWxzRm9ybUNvbnRyb2xzLlBhY2thZ2VGb3JtQ29udHJvbC52YWx1ZTtcblxuICAgICAgICAgICAgYXBwLkxvd0NvZGVVbml0LlZlcnNpb24gPVxuICAgICAgICAgICAgICB0aGlzLlByb2Nlc3NvckRldGFpbHNGb3JtQ29udHJvbHMuVmVyc2lvbkZvcm1Db250cm9sLnZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdXb3JkUHJlc3MnOlxuICAgICAgICAgICAgYXBwLkxvd0NvZGVVbml0LkFQSVJvb3QgPVxuICAgICAgICAgICAgICB0aGlzLlByb2Nlc3NvckRldGFpbHNGb3JtQ29udHJvbHMuQVBJUm9vdEZvcm1Db250cm9sLnZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdaaXAnOlxuICAgICAgICAgICAgYXBwLkxvd0NvZGVVbml0LlppcEZpbGUgPVxuICAgICAgICAgICAgICB0aGlzLlByb2Nlc3NvckRldGFpbHNGb3JtQ29udHJvbHMuWmlwRmlsZUZvcm1Db250cm9sLnZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ09BdXRoJzpcbiAgICAgICAgYXBwLlByb2Nlc3Nvci5TY29wZXMgPVxuICAgICAgICAgIHRoaXMuUHJvY2Vzc29yRGV0YWlsc0Zvcm1Db250cm9scy5TY29wZXNGb3JtQ29udHJvbC52YWx1ZS5zcGxpdCgnICcpO1xuXG4gICAgICAgIGFwcC5Qcm9jZXNzb3IuVG9rZW5Mb29rdXAgPVxuICAgICAgICAgIHRoaXMuUHJvY2Vzc29yRGV0YWlsc0Zvcm1Db250cm9scy5Ub2tlbkxvb2t1cEZvcm1Db250cm9sLnZhbHVlO1xuXG4gICAgICAgIGFwcC5Mb3dDb2RlVW5pdCA9IHtcbiAgICAgICAgICBUeXBlOiB0aGlzLlByb2Nlc3NvckRldGFpbHNGb3JtQ29udHJvbHMuTENVVHlwZSxcbiAgICAgICAgfTtcblxuICAgICAgICBzd2l0Y2ggKGFwcC5Mb3dDb2RlVW5pdC5UeXBlKSB7XG4gICAgICAgICAgY2FzZSAnR2l0SHViT0F1dGgnOlxuICAgICAgICAgICAgYXBwLkxvd0NvZGVVbml0LkNsaWVudElEID1cbiAgICAgICAgICAgICAgdGhpcy5Qcm9jZXNzb3JEZXRhaWxzRm9ybUNvbnRyb2xzLkNsaWVudElERm9ybUNvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgICAgIGFwcC5Mb3dDb2RlVW5pdC5DbGllbnRTZWNyZXQgPVxuICAgICAgICAgICAgICB0aGlzLlByb2Nlc3NvckRldGFpbHNGb3JtQ29udHJvbHMuQ2xpZW50U2VjcmV0Rm9ybUNvbnRyb2wudmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnUHJveHknOlxuICAgICAgICBhcHAuUHJvY2Vzc29yLkluYm91bmRQYXRoID1cbiAgICAgICAgICB0aGlzLlByb2Nlc3NvckRldGFpbHNGb3JtQ29udHJvbHMuSW5ib3VuZFBhdGhGb3JtQ29udHJvbC52YWx1ZTtcblxuICAgICAgICBhcHAuTG93Q29kZVVuaXQgPSB7XG4gICAgICAgICAgVHlwZTogdGhpcy5Qcm9jZXNzb3JEZXRhaWxzRm9ybUNvbnRyb2xzLkxDVVR5cGUsXG4gICAgICAgIH07XG5cbiAgICAgICAgc3dpdGNoIChhcHAuTG93Q29kZVVuaXQuVHlwZSkge1xuICAgICAgICAgIGNhc2UgJ0FQSSc6XG4gICAgICAgICAgICBhcHAuTG93Q29kZVVuaXQuQVBJUm9vdCA9XG4gICAgICAgICAgICAgIHRoaXMuUHJvY2Vzc29yRGV0YWlsc0Zvcm1Db250cm9scy5BUElSb290Rm9ybUNvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgICAgIGFwcC5Mb3dDb2RlVW5pdC5TZWN1cml0eSA9XG4gICAgICAgICAgICAgIHRoaXMuUHJvY2Vzc29yRGV0YWlsc0Zvcm1Db250cm9scy5TZWN1cml0eUZvcm1Db250cm9sLnZhbHVlO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ1NQQSc6XG4gICAgICAgICAgICBhcHAuTG93Q29kZVVuaXQuU1BBUm9vdCA9XG4gICAgICAgICAgICAgIHRoaXMuUHJvY2Vzc29yRGV0YWlsc0Zvcm1Db250cm9scy5TUEFSb290Rm9ybUNvbnRyb2wudmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnUmVkaXJlY3QnOlxuICAgICAgICBhcHAuUHJvY2Vzc29yLkluY2x1ZGVSZXF1ZXN0ID1cbiAgICAgICAgICAhIXRoaXMuUHJvY2Vzc29yRGV0YWlsc0Zvcm1Db250cm9scy5JbmNsdWRlUmVxdWVzdEZvcm1Db250cm9sLnZhbHVlO1xuXG4gICAgICAgIGFwcC5Qcm9jZXNzb3IuUGVybWFuZW50ID1cbiAgICAgICAgICAhIXRoaXMuUHJvY2Vzc29yRGV0YWlsc0Zvcm1Db250cm9scy5QZXJtYW5lbnRGb3JtQ29udHJvbC52YWx1ZTtcblxuICAgICAgICBhcHAuUHJvY2Vzc29yLlByZXNlcnZlTWV0aG9kID1cbiAgICAgICAgICAhIXRoaXMuUHJvY2Vzc29yRGV0YWlsc0Zvcm1Db250cm9scy5QcmVzZXJ2ZU1ldGhvZEZvcm1Db250cm9sLnZhbHVlO1xuXG4gICAgICAgIGFwcC5Qcm9jZXNzb3IuUmVkaXJlY3QgPVxuICAgICAgICAgIHRoaXMuUHJvY2Vzc29yRGV0YWlsc0Zvcm1Db250cm9scy5SZWRpcmVjdEZvcm1Db250cm9sLnZhbHVlO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoIWFwcC5Mb29rdXBDb25maWcuUGF0aFJlZ2V4LnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgYXBwLkxvb2t1cENvbmZpZy5QYXRoUmVnZXggPSBgLyR7YXBwLkxvb2t1cENvbmZpZy5QYXRoUmVnZXh9YDtcbiAgICB9XG5cbiAgICBjb25zdCBzYXZlQXBwUmVxOiBTYXZlQXBwbGljYXRpb25Bc0NvZGVFdmVudFJlcXVlc3QgPSB7XG4gICAgICBQcm9qZWN0TG9va3VwOiB0aGlzLmRhdGEucHJvamVjdExvb2t1cCxcbiAgICAgIEFwcGxpY2F0aW9uOiBhcHAsXG4gICAgICBBcHBsaWNhdGlvbkxvb2t1cDogdGhpcy5kYXRhLmFwcGxpY2F0aW9uTG9va3VwIHx8IEd1aWQuQ3JlYXRlUmF3KCksXG4gICAgfTtcblxuICAgIHRoaXMuZWFjU3ZjLlNhdmVBcHBsaWNhdGlvbkFzQ29kZShzYXZlQXBwUmVxKTtcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiZGlhbG9nLWhlYWRlclwiIGZ4TGF5b3V0QWxpZ249XCJlbmQgY2VudGVyXCI+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIkNsb3NlRGlhbG9nKClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5jYW5jZWw8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+XG5cbjxsY3UtcHJvY2Vzc29yLWRldGFpbHMtZm9ybSBcbiAgICBtb3JlLWRldGFpbHMgXG4gICAgW2VkaXRpbmctYXBwbGljYXRpb25dPVwiQXBwbGljYXRpb25cIlxuICAgIFtlZGl0aW5nLWFwcGxpY2F0aW9uLWxvb2t1cF09XCJkYXRhLmFwcGxpY2F0aW9uTG9va3VwXCIgXG4gICAgW3NvdXJjZS1jb250cm9sLWxvb2t1cHNdPVwiU291cmNlQ29udHJvbExvb2t1cHNcIlxuICAgIFtwcm9qZWN0LWxvb2t1cF09XCJkYXRhLnByb2plY3RMb29rdXBcIlxuICAgIChzYXZlLWZvcm0tZXZlbnQpPVwiU2F2ZVByb2Nlc3NvckRldGFpbHMoJGV2ZW50KVwiXG4+XG48L2xjdS1wcm9jZXNzb3ItZGV0YWlscy1mb3JtPlxuIl19
|
|
@@ -6,17 +6,19 @@ import * as i3 from "@angular/material/icon";
|
|
|
6
6
|
import * as i4 from "@angular/material/menu";
|
|
7
7
|
import * as i5 from "@angular/flex-layout/flex";
|
|
8
8
|
import * as i6 from "@angular/common";
|
|
9
|
-
import * as i7 from "
|
|
9
|
+
import * as i7 from "skeleton-elements/angular";
|
|
10
|
+
import * as i8 from "@angular/router";
|
|
10
11
|
export class BreadcrumbComponent {
|
|
11
12
|
constructor(eacSvc) {
|
|
12
13
|
this.eacSvc = eacSvc;
|
|
14
|
+
this.SkeletonEffect = 'wave';
|
|
13
15
|
}
|
|
14
16
|
get ApplicationsBank() {
|
|
15
17
|
return this.State?.EaC?.Applications || {};
|
|
16
18
|
}
|
|
17
19
|
get Applications() {
|
|
18
20
|
const apps = {};
|
|
19
|
-
this.SelectedProject?.ApplicationLookups
|
|
21
|
+
this.SelectedProject?.ApplicationLookups?.forEach((appLookup) => {
|
|
20
22
|
apps[appLookup] = this.ApplicationsBank[appLookup];
|
|
21
23
|
});
|
|
22
24
|
return apps;
|
|
@@ -44,7 +46,7 @@ export class BreadcrumbComponent {
|
|
|
44
46
|
}) || [];
|
|
45
47
|
appRoutes = appRoutes.filter((ar) => ar != null);
|
|
46
48
|
let routeBases = [];
|
|
47
|
-
appRoutes
|
|
49
|
+
appRoutes?.forEach((appRoute) => {
|
|
48
50
|
const appRouteParts = appRoute.split('/');
|
|
49
51
|
const appRouteBase = `/${appRouteParts[1]}`;
|
|
50
52
|
if (routeBases.indexOf(appRouteBase) < 0) {
|
|
@@ -77,7 +79,7 @@ export class BreadcrumbComponent {
|
|
|
77
79
|
let routeSetKeys = Object.keys(routeSet);
|
|
78
80
|
routeSetKeys = routeSetKeys.sort((a, b) => a.localeCompare(b));
|
|
79
81
|
const routeSetResult = {};
|
|
80
|
-
routeSetKeys
|
|
82
|
+
routeSetKeys?.forEach((rsk) => (routeSetResult[rsk] = routeSet[rsk]));
|
|
81
83
|
return routeSetResult;
|
|
82
84
|
}
|
|
83
85
|
get SelectedProject() {
|
|
@@ -97,10 +99,10 @@ export class BreadcrumbComponent {
|
|
|
97
99
|
}
|
|
98
100
|
}
|
|
99
101
|
BreadcrumbComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: BreadcrumbComponent, deps: [{ token: i1.EaCService }], target: i0.ɵɵFactoryTarget.Component });
|
|
100
|
-
BreadcrumbComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: BreadcrumbComponent, selector: "lcu-breadcrumb", inputs: { Enterprise: ["enterprise", "Enterprise"], ApplicationLookup: ["application-lookup", "ApplicationLookup"], ProjectLookup: ["project-lookup", "ProjectLookup"], SelectedRoute: ["selected-route", "SelectedRoute"] }, ngImport: i0, template: "<div class=\"breadcrumb-container\" fxLayout=\"row\">\n\n <div *ngIf=\"
|
|
102
|
+
BreadcrumbComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: BreadcrumbComponent, selector: "lcu-breadcrumb", inputs: { Enterprise: ["enterprise", "Enterprise"], ApplicationLookup: ["application-lookup", "ApplicationLookup"], ProjectLookup: ["project-lookup", "ProjectLookup"], SelectedRoute: ["selected-route", "SelectedRoute"] }, ngImport: i0, template: "<div class=\"breadcrumb-container\" fxLayout=\"row\">\n\n \n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <ng-container *ngIf=\"State?.Loading\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Enterprise Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading && Enterprise\">\n <div class=\"crumb-name\" [routerLink]=\"['/enterprises']\">{{Enterprise?.Name}}</div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"enterpriseMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n\n <mat-menu #enterpriseMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item [routerLink]=\"['/enterprises']\">\n <span>{{Enterprise?.Name}}</span>\n </button>\n </mat-menu>\n </ng-container>\n\n </div>\n\n <div *ngIf=\"ProjectLookup && SelectedProject\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <span class=\"seperator\">/</span>\n\n <ng-container *ngIf=\"State?.Loading\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Project Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n\n <div \n class=\"crumb-name\" \n [routerLink]=\"['/projects', ProjectLookup]\"\n >\n {{SelectedProject?.Project?.Name}}\n </div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"projectMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n\n \n \n <mat-menu #projectMenu=\"matMenu\" xPosition=\"before\">\n <button \n mat-menu-item \n *ngFor=\"let projectLookup of ProjectLookups\" \n [routerLink]=\"['/projects', projectLookup]\"\n >\n <span *ngIf=\"Projects[projectLookup]; let pro;\">{{pro.Project?.Name}}</span>\n </button>\n </mat-menu>\n\n </ng-container>\n\n </div>\n\n <div *ngIf=\"SelectedRoute\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <span class=\"seperator\">/</span>\n\n <ng-container *ngIf=\"State?.Loading\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Route Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n <div \n class=\"crumb-name\" \n [routerLink]=\"['/routes', SelectedRoute, ProjectLookup]\"\n >\n {{SelectedRoute}}\n </div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"routeMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n \n <mat-menu #routeMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item *ngFor=\"let appRoute of Routes\" [routerLink]=\"['/routes', appRoute, ProjectLookup]\">\n <span *ngIf=\"appRoute\">{{appRoute}}</span>\n </button>\n </mat-menu>\n </ng-container>\n\n </div>\n\n <div *ngIf=\"SelectedApplication && ApplicationLookup\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <span class=\"seperator\">/</span>\n\n <ng-container *ngIf=\"State?.Loading\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Application Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n\n <div class=\"crumb-name\" \n [routerLink]=\"['/applications', ApplicationLookup, SelectedRoute, ProjectLookup]\"\n >\n {{SelectedApplication?.Application?.Name}}\n </div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"applicationMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n \n <mat-menu #applicationMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item *ngFor=\"let appLookup of CurrentRouteApplicationLookups\"\n [routerLink]=\"['/applications', appLookup, SelectedRoute, ProjectLookup]\">\n <span *ngIf=\"RoutedApplications[SelectedRoute][appLookup];\n let app\">{{app.Application?.Name}}</span>\n </button>\n </mat-menu>\n </ng-container>\n\n </div>\n\n\n</div>\n", styles: [".breadcrumb-container{background-color:#ebecf0;margin:10px 30px}.seperator{font-size:25px;padding:10px}.crumb-name{cursor:pointer}\n"], components: [{ type: i2.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"] }, { type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }], directives: [{ type: i5.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i5.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.SkeletonTextDirective, selector: "[skeleton-text]", inputs: ["effect"] }, { type: i8.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
101
103
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: BreadcrumbComponent, decorators: [{
|
|
102
104
|
type: Component,
|
|
103
|
-
args: [{ selector: 'lcu-breadcrumb', template: "<div class=\"breadcrumb-container\" fxLayout=\"row\">\n\n <div *ngIf=\"
|
|
105
|
+
args: [{ selector: 'lcu-breadcrumb', template: "<div class=\"breadcrumb-container\" fxLayout=\"row\">\n\n \n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <ng-container *ngIf=\"State?.Loading\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Enterprise Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading && Enterprise\">\n <div class=\"crumb-name\" [routerLink]=\"['/enterprises']\">{{Enterprise?.Name}}</div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"enterpriseMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n\n <mat-menu #enterpriseMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item [routerLink]=\"['/enterprises']\">\n <span>{{Enterprise?.Name}}</span>\n </button>\n </mat-menu>\n </ng-container>\n\n </div>\n\n <div *ngIf=\"ProjectLookup && SelectedProject\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <span class=\"seperator\">/</span>\n\n <ng-container *ngIf=\"State?.Loading\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Project Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n\n <div \n class=\"crumb-name\" \n [routerLink]=\"['/projects', ProjectLookup]\"\n >\n {{SelectedProject?.Project?.Name}}\n </div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"projectMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n\n \n \n <mat-menu #projectMenu=\"matMenu\" xPosition=\"before\">\n <button \n mat-menu-item \n *ngFor=\"let projectLookup of ProjectLookups\" \n [routerLink]=\"['/projects', projectLookup]\"\n >\n <span *ngIf=\"Projects[projectLookup]; let pro;\">{{pro.Project?.Name}}</span>\n </button>\n </mat-menu>\n\n </ng-container>\n\n </div>\n\n <div *ngIf=\"SelectedRoute\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <span class=\"seperator\">/</span>\n\n <ng-container *ngIf=\"State?.Loading\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Route Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n <div \n class=\"crumb-name\" \n [routerLink]=\"['/routes', SelectedRoute, ProjectLookup]\"\n >\n {{SelectedRoute}}\n </div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"routeMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n \n <mat-menu #routeMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item *ngFor=\"let appRoute of Routes\" [routerLink]=\"['/routes', appRoute, ProjectLookup]\">\n <span *ngIf=\"appRoute\">{{appRoute}}</span>\n </button>\n </mat-menu>\n </ng-container>\n\n </div>\n\n <div *ngIf=\"SelectedApplication && ApplicationLookup\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <span class=\"seperator\">/</span>\n\n <ng-container *ngIf=\"State?.Loading\">\n <div skeleton-text [effect]=\"SkeletonEffect\">Application Name</div>\n </ng-container>\n\n <ng-container *ngIf=\"!State?.Loading\">\n\n <div class=\"crumb-name\" \n [routerLink]=\"['/applications', ApplicationLookup, SelectedRoute, ProjectLookup]\"\n >\n {{SelectedApplication?.Application?.Name}}\n </div>\n\n <button mat-icon-button [matMenuTriggerFor]=\"applicationMenu\">\n <mat-icon>expand_more</mat-icon>\n </button>\n \n <mat-menu #applicationMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item *ngFor=\"let appLookup of CurrentRouteApplicationLookups\"\n [routerLink]=\"['/applications', appLookup, SelectedRoute, ProjectLookup]\">\n <span *ngIf=\"RoutedApplications[SelectedRoute][appLookup];\n let app\">{{app.Application?.Name}}</span>\n </button>\n </mat-menu>\n </ng-container>\n\n </div>\n\n\n</div>\n", styles: [".breadcrumb-container{background-color:#ebecf0;margin:10px 30px}.seperator{font-size:25px;padding:10px}.crumb-name{cursor:pointer}\n"] }]
|
|
104
106
|
}], ctorParameters: function () { return [{ type: i1.EaCService }]; }, propDecorators: { Enterprise: [{
|
|
105
107
|
type: Input,
|
|
106
108
|
args: ['enterprise']
|
|
@@ -114,4 +116,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
|
|
|
114
116
|
type: Input,
|
|
115
117
|
args: ['selected-route']
|
|
116
118
|
}] } });
|
|
117
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24vc3JjL2xpYi9lbGVtZW50cy9icmVhZGNydW1iL2JyZWFkY3J1bWIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uL3NyYy9saWIvZWxlbWVudHMvYnJlYWRjcnVtYi9icmVhZGNydW1iLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFVekQsTUFBTSxPQUFPLG1CQUFtQjtJQTZIOUIsWUFBc0IsTUFBa0I7UUFBbEIsV0FBTSxHQUFOLE1BQU0sQ0FBWTtJQUFHLENBQUM7SUFoSDVDLElBQVcsZ0JBQWdCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsWUFBWSxJQUFJLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ3JCLE1BQU0sSUFBSSxHQUErQyxFQUFFLENBQUM7UUFFNUQsSUFBSSxDQUFDLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFpQixFQUFFLEVBQUU7WUFDckUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQVcsbUJBQW1CO1FBQzVCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyRSxDQUFDO0lBRUQsSUFBVyw4QkFBOEI7UUFDdkMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFD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Q0FBQyxDQUFDO1FBRTNDLHFDQUFxQztRQUVyQyx3REFBd0Q7UUFHeEQsbUVBQW1FO1FBRW5FLHFEQUFxRDtJQUN2RCxDQUFDO0lBRVMsS0FBSyxDQUFDLGlCQUFpQjtJQUNqQyxDQUFDOztnSEE3SVUsbUJBQW1CO29HQUFuQixtQkFBbUIsb1JDVmhDLHVuR0ErRUE7MkZEckVhLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxnQkFBZ0I7aUdBTW5CLFVBQVU7c0JBRGhCLEtBQUs7dUJBQUMsWUFBWTtnQkFJWixpQkFBaUI7c0JBRHZCLEtBQUs7dUJBQUMsb0JBQW9CO2dCQUlwQixhQUFhO3NCQURuQixLQUFLO3VCQUFDLGdCQUFnQjtnQkFJaEIsYUFBYTtzQkFEbkIsS0FBSzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVhQ0FwcGxpY2F0aW9uQXNDb2RlIH0gZnJvbSAnQHNlbWFudGljanMvY29tbW9uJztcbmltcG9ydCB7IEVhQ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lYWMuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbnNGbG93U3RhdGUgfSBmcm9tICcuLi8uLi9zdGF0ZS9hcHBsaWNhdGlvbnMtZmxvdy5zdGF0ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xjdS1icmVhZGNydW1iJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2JyZWFkY3J1bWIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9icmVhZGNydW1iLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEJyZWFkY3J1bWJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoJ2VudGVycHJpc2UnKVxuICBwdWJsaWMgRW50ZXJwcmlzZTogYW55O1xuXG4gIEBJbnB1dCgnYXBwbGljYXRpb24tbG9va3VwJylcbiAgcHVibGljIEFwcGxpY2F0aW9uTG9va3VwOiBzdHJpbmc7XG5cbiAgQElucHV0KCdwcm9qZWN0LWxvb2t1cCcpXG4gIHB1YmxpYyBQcm9qZWN0TG9va3VwOiBzdHJpbmc7XG5cbiAgQElucHV0KCdzZWxlY3RlZC1yb3V0ZScpXG4gIHB1YmxpYyBTZWxlY3RlZFJvdXRlOiBzdHJpbmc7XG5cbiAgcHVibGljIGdldCBBcHBsaWNhdGlvbnNCYW5rKCk6IHsgW2xvb2t1cDogc3RyaW5nXTogRWFDQXBwbGljYXRpb25Bc0NvZGUgfSB7XG4gICAgcmV0dXJuIHRoaXMuU3RhdGU/LkVhQz8uQXBwbGljYXRpb25zIHx8IHt9O1xuICB9XG5cbiAgcHVibGljIGdldCBBcHBsaWNhdGlvbnMoKTogeyBbbG9va3VwOiBzdHJpbmddOiBFYUNBcHBsaWNhdGlvbkFzQ29kZSB9IHtcbiAgICBjb25zdCBhcHBzOiB7IFtsb29rdXA6IHN0cmluZ106IEVhQ0FwcGxpY2F0aW9uQXNDb2RlIH0gPSB7fTtcblxuICAgIHRoaXMuU2VsZWN0ZWRQcm9qZWN0Py5BcHBsaWNhdGlvbkxvb2t1cHMuZm9yRWFjaCgoYXBwTG9va3VwOiBzdHJpbmcpID0+IHtcbiAgICAgIGFwcHNbYXBwTG9va3VwXSA9IHRoaXMuQXBwbGljYXRpb25zQmFua1thcHBMb29rdXBdO1xuICAgIH0pO1xuICAgIHJldHVybiBhcHBzO1xuICB9XG5cbiAgcHVibGljIGdldCBTZWxlY3RlZEFwcGxpY2F0aW9uKCk6IEVhQ0FwcGxpY2F0aW9uQXNDb2RlIHtcbiAgICByZXR1cm4gdGhpcy5TdGF0ZT8uRWFDPy5BcHBsaWNhdGlvbnNbdGhpcy5BcHBsaWNhdGlvbkxvb2t1cF0gfHwge307XG4gIH1cblxuICBwdWJsaWMgZ2V0IEN1cnJlbnRSb3V0ZUFwcGxpY2F0aW9uTG9va3VwcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5Sb3V0ZWRBcHBsaWNhdGlvbnNbdGhpcy5TZWxlY3RlZFJvdXRlXSB8fCB7fSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IFByb2plY3RzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuU3RhdGU/LkVhQz8uUHJvamVjdHMgfHwge307XG4gIH1cblxuICBwdWJsaWMgZ2V0IFByb2plY3RMb29rdXBzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5TdGF0ZT8uRWFDPy5Qcm9qZWN0cyB8fCB7fSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IFJvdXRlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5Sb3V0ZWRBcHBsaWNhdGlvbnMgfHwge30pO1xuICB9XG5cbiAgcHVibGljIGdldCBSb3V0ZWRBcHBsaWNhdGlvbnMoKToge1xuICAgIFtyb3V0ZTogc3RyaW5nXTogeyBbbG9va3VwOiBzdHJpbmddOiBFYUNBcHBsaWNhdGlvbkFzQ29kZSB9O1xuICB9IHtcbiAgICBjb25zdCBhcHBMb29rdXBzID0gT2JqZWN0LmtleXModGhpcy5BcHBsaWNhdGlvbnMpO1xuXG4gICAgY29uc3QgYXBwcyA9IGFwcExvb2t1cHMubWFwKChhcHBMb29rdXApID0+IHRoaXMuQXBwbGljYXRpb25zW2FwcExvb2t1cF0pO1xuXG4gICAgbGV0IGFwcFJvdXRlcyA9XG4gICAgICBhcHBzLm1hcCgoYXBwKSA9PiB7XG4gICAgICAgIHJldHVybiBhcHAuTG9va3VwQ29uZmlnPy5QYXRoUmVnZXgucmVwbGFjZSgnLionLCAnJyk7XG4gICAgICB9KSB8fCBbXTtcblxuICAgIGFwcFJvdXRlcyA9IGFwcFJvdXRlcy5maWx0ZXIoKGFyKSA9PiBhciAhPSBudWxsKTtcblxuICAgIGxldCByb3V0ZUJhc2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgYXBwUm91dGVzLmZvckVhY2goKGFwcFJvdXRlKSA9PiB7XG4gICAgICBjb25zdCBhcHBSb3V0ZVBhcnRzID0gYXBwUm91dGUuc3BsaXQoJy8nKTtcblxuICAgICAgY29uc3QgYXBwUm91dGVCYXNlID0gYC8ke2FwcFJvdXRlUGFydHNbMV19YDtcblxuICAgICAgaWYgKHJvdXRlQmFzZXMuaW5kZXhPZihhcHBSb3V0ZUJhc2UpIDwgMCkge1xuICAgICAgICByb3V0ZUJhc2VzLnB1c2goYXBwUm91dGVCYXNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCB3b3JraW5nQXBwTG9va3VwcyA9IFsuLi4oYXBwTG9va3VwcyB8fCBbXSldO1xuXG4gICAgcm91dGVCYXNlcyA9IHJvdXRlQmFzZXMuc29ydCgoYSwgYikgPT4gYi5sb2NhbGVDb21wYXJlKGEpKTtcblxuICAgIGNvbnN0IHJvdXRlU2V0ID1cbiAgICAgIHJvdXRlQmFzZXMucmVkdWNlKChwcmV2Um91dGVNYXAsIGN1cnJlbnRSb3V0ZUJhc2UpID0+IHtcbiAgICAgICAgY29uc3Qgcm91dGVNYXAgPSB7XG4gICAgICAgICAgLi4ucHJldlJvdXRlTWFwLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGZpbHRlcmVkQXBwTG9va3VwcyA9IHdvcmtpbmdBcHBMb29rdXBzLmZpbHRlcigod2FsKSA9PiB7XG4gICAgICAgICAgY29uc3Qgd2EgPSB0aGlzLkFwcGxpY2F0aW9uc1t3YWxdO1xuXG4gICAgICAgICAgcmV0dXJuIHdhLkxvb2t1cENvbmZpZz8uUGF0aFJlZ2V4LnN0YXJ0c1dpdGgoY3VycmVudFJvdXRlQmFzZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJvdXRlTWFwW2N1cnJlbnRSb3V0ZUJhc2VdID1cbiAgICAgICAgICBmaWx0ZXJlZEFwcExvb2t1cHMucmVkdWNlKChwcmV2QXBwTWFwLCBhcHBMb29rdXApID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFwcE1hcCA9IHtcbiAgICAgICAgICAgICAgLi4ucHJldkFwcE1hcCxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGFwcE1hcFthcHBMb29rdXBdID0gdGhpcy5BcHBsaWNhdGlvbnNbYXBwTG9va3VwXTtcblxuICAgICAgICAgICAgcmV0dXJuIGFwcE1hcDtcbiAgICAgICAgICB9LCB7fSkgfHwge307XG5cbiAgICAgICAgd29ya2luZ0FwcExvb2t1cHMgPSB3b3JraW5nQXBwTG9va3Vwcy5maWx0ZXIoKHdhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZpbHRlcmVkQXBwTG9va3Vwcy5pbmRleE9mKHdhKSA8IDA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByb3V0ZU1hcDtcbiAgICAgIH0sIHt9KSB8fCB7fTtcblxuICAgIGxldCByb3V0ZVNldEtleXMgPSBPYmplY3Qua2V5cyhyb3V0ZVNldCk7XG5cbiAgICByb3V0ZVNldEtleXMgPSByb3V0ZVNldEtleXMuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcblxuICAgIGNvbnN0IHJvdXRlU2V0UmVzdWx0ID0ge307XG5cbiAgICByb3V0ZVNldEtleXMuZm9yRWFjaCgocnNrKSA9PiAocm91dGVTZXRSZXN1bHRbcnNrXSA9IHJvdXRlU2V0W3Jza10pKTtcblxuICAgIHJldHVybiByb3V0ZVNldFJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgU2VsZWN0ZWRQcm9qZWN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuU3RhdGU/LkVhQz8uUHJvamVjdHNbdGhpcy5Qcm9qZWN0TG9va3VwXSB8fCB7fTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgU3RhdGUoKTogQXBwbGljYXRpb25zRmxvd1N0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5lYWNTdmMuU3RhdGU7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZWFjU3ZjOiBFYUNTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlU3RhdGVDaGFuZ2UoKS50aGVuKChlYWMpID0+IHt9KTtcblxuICAgIC8vIGNvbnNvbGUubG9nKFwic3RhdGU6IFwiLCB0aGlzLlN0YXRlKVxuXG4gICAgLy8gY29uc29sZS5sb2coXCJzZWxlY3RlZCBlbnRlcnByaXNlOiBcIiwgdGhpcy5FbnRlcnByaXNlKVxuXG5cbiAgICAvLyBjb25zb2xlLmxvZygnU2VsZWN0ZWQgcHJvamVjdDogJywgdGhpcy5TZWxlY3RlZFByb2plY3QuUHJvamVjdCk7XG5cbiAgICAvLyBjb25zb2xlLmxvZygnU2VsZWN0ZWRSb3V0ZTonLCB0aGlzLlNlbGVjdGVkUm91dGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZVN0YXRlQ2hhbmdlKCk6IFByb21pc2U8dm9pZD4ge1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYnJlYWRjcnVtYi1jb250YWluZXJcIiBmeExheW91dD1cInJvd1wiPlxuXG4gICAgPGRpdiAqbmdJZj1cIkVudGVycHJpc2VcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcnVtYi1uYW1lXCIgW3JvdXRlckxpbmtdPVwiWycvZW50ZXJwcmlzZXMnXVwiPnt7RW50ZXJwcmlzZS5OYW1lfX08L2Rpdj5cblxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZW50ZXJwcmlzZU1lbnVcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5leHBhbmRfbW9yZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxtYXQtbWVudSAjZW50ZXJwcmlzZU1lbnU9XCJtYXRNZW51XCIgeFBvc2l0aW9uPVwiYmVmb3JlXCI+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW3JvdXRlckxpbmtdPVwiWycvZW50ZXJwcmlzZXMnXVwiPlxuICAgICAgICAgICAgPHNwYW4+e3tFbnRlcnByaXNlLk5hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L21hdC1tZW51PlxuXG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiUHJvamVjdExvb2t1cCAmJiBTZWxlY3RlZFByb2plY3RcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+XG5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzZXBlcmF0b3JcIj4vPC9zcGFuPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcnVtYi1uYW1lXCIgW3JvdXRlckxpbmtdPVwiWycvcHJvamVjdHMnLCBQcm9qZWN0TG9va3VwXVwiPnt7U2VsZWN0ZWRQcm9qZWN0LlByb2plY3QuTmFtZX19PC9kaXY+XG5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInByb2plY3RNZW51XCI+XG4gICAgICAgICAgICA8bWF0LWljb24+ZXhwYW5kX21vcmU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgICAgICA8bWF0LW1lbnUgI3Byb2plY3RNZW51PVwibWF0TWVudVwiIHhQb3NpdGlvbj1cImJlZm9yZVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nRm9yPVwibGV0IHByb2plY3RMb29rdXAgb2YgUHJvamVjdExvb2t1cHNcIiBbcm91dGVyTGlua109XCJbJy9wcm9qZWN0cycsIHByb2plY3RMb29rdXBdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIlByb2plY3RzW3Byb2plY3RMb29rdXBdOyBsZXQgcHJvO1wiPnt7cHJvLlByb2plY3QuTmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbWF0LW1lbnU+XG5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJTZWxlY3RlZFJvdXRlXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNlcGVyYXRvclwiPi88L3NwYW4+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNydW1iLW5hbWVcIiBbcm91dGVyTGlua109XCJbJy9yb3V0ZXMnLCBTZWxlY3RlZFJvdXRlLCBQcm9qZWN0TG9va3VwXVwiPnt7U2VsZWN0ZWRSb3V0ZX19PC9kaXY+XG5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInJvdXRlTWVudVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmV4cGFuZF9tb3JlPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIFxuICAgICAgICBcbiAgICAgICAgICAgIDxtYXQtbWVudSAjcm91dGVNZW51PVwibWF0TWVudVwiIHhQb3NpdGlvbj1cImJlZm9yZVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nRm9yPVwibGV0IGFwcFJvdXRlIG9mIFJvdXRlc1wiIFtyb3V0ZXJMaW5rXT1cIlsnL3JvdXRlcycsIGFwcFJvdXRlLCBQcm9qZWN0TG9va3VwXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJhcHBSb3V0ZVwiPnt7YXBwUm91dGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L21hdC1tZW51PlxuXG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiU2VsZWN0ZWRBcHBsaWNhdGlvbiAmJiBBcHBsaWNhdGlvbkxvb2t1cFwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj5cblxuICAgICAgICA8c3BhbiBjbGFzcz1cInNlcGVyYXRvclwiPi88L3NwYW4+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNydW1iLW5hbWVcIiBcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL2FwcGxpY2F0aW9ucycsIEFwcGxpY2F0aW9uTG9va3VwLCBTZWxlY3RlZFJvdXRlLCBQcm9qZWN0TG9va3VwXVwiPlxuICAgICAgICAgICAge3tTZWxlY3RlZEFwcGxpY2F0aW9uLkFwcGxpY2F0aW9uLk5hbWV9fTwvZGl2PlxuXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJhcHBsaWNhdGlvbk1lbnVcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5leHBhbmRfbW9yZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICBcbiAgICAgICAgICAgIDxtYXQtbWVudSAjYXBwbGljYXRpb25NZW51PVwibWF0TWVudVwiIHhQb3NpdGlvbj1cImJlZm9yZVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nRm9yPVwibGV0IGFwcExvb2t1cCBvZiBDdXJyZW50Um91dGVBcHBsaWNhdGlvbkxvb2t1cHNcIlxuICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9hcHBsaWNhdGlvbnMnLCBhcHBMb29rdXAsIFNlbGVjdGVkUm91dGUsIFByb2plY3RMb29rdXBdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIlJvdXRlZEFwcGxpY2F0aW9uc1tTZWxlY3RlZFJvdXRlXVthcHBMb29rdXBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFwcFwiPnt7YXBwLkFwcGxpY2F0aW9uLk5hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L21hdC1tZW51PlxuXG4gICAgPC9kaXY+XG5cblxuPC9kaXY+XG4iXX0=
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24vc3JjL2xpYi9lbGVtZW50cy9icmVhZGNydW1iL2JyZWFkY3J1bWIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uL3NyYy9saWIvZWxlbWVudHMvYnJlYWRjcnVtYi9icmVhZGNydW1iLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7O0FBVXpELE1BQU0sT0FBTyxtQkFBbUI7SUErSDlCLFlBQXNCLE1BQWtCO1FBQWxCLFdBQU0sR0FBTixNQUFNLENBQVk7UUFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7SUFDL0IsQ0FBQztJQXBIRCxJQUFXLGdCQUFnQjtRQUN6QixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFlBQVksSUFBSSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQVcsWUFBWTtRQUNyQixNQUFNLElBQUksR0FBK0MsRUFBRSxDQUFDO1FBRTVELElBQUksQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBaUIsRUFBRSxFQUFFO1lBQ3RFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFXLG1CQUFtQjtRQUM1QixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckUsQ0FBQztJQUVELElBQVcs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SSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztRQUUzQyxxQ0FBcUM7UUFFckMsd0RBQXdEO1FBR3hELG1FQUFtRTtRQUVuRSxxREFBcUQ7SUFDdkQsQ0FBQztJQUVTLEtBQUssQ0FBQyxpQkFBaUI7SUFDakMsQ0FBQzs7Z0hBakpVLG1CQUFtQjtvR0FBbkIsbUJBQW1CLG9SQ1ZoQywwM0lBNkhBOzJGRG5IYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsZ0JBQWdCO2lHQU1uQixVQUFVO3NCQURoQixLQUFLO3VCQUFDLFlBQVk7Z0JBSVosaUJBQWlCO3NCQUR2QixLQUFLO3VCQUFDLG9CQUFvQjtnQkFJcEIsYUFBYTtzQkFEbkIsS0FBSzt1QkFBQyxnQkFBZ0I7Z0JBSWhCLGFBQWE7c0JBRG5CLEtBQUs7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFYUNBcHBsaWNhdGlvbkFzQ29kZSB9IGZyb20gJ0BzZW1hbnRpY2pzL2NvbW1vbic7XG5pbXBvcnQgeyBFYUNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWFjLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25zRmxvd1N0YXRlIH0gZnJvbSAnLi4vLi4vc3RhdGUvYXBwbGljYXRpb25zLWZsb3cuc3RhdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsY3UtYnJlYWRjcnVtYicsXG4gIHRlbXBsYXRlVXJsOiAnLi9icmVhZGNydW1iLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYnJlYWRjcnVtYi5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBCcmVhZGNydW1iQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCdlbnRlcnByaXNlJylcbiAgcHVibGljIEVudGVycHJpc2U6IGFueTtcblxuICBASW5wdXQoJ2FwcGxpY2F0aW9uLWxvb2t1cCcpXG4gIHB1YmxpYyBBcHBsaWNhdGlvbkxvb2t1cDogc3RyaW5nO1xuXG4gIEBJbnB1dCgncHJvamVjdC1sb29rdXAnKVxuICBwdWJsaWMgUHJvamVjdExvb2t1cDogc3RyaW5nO1xuXG4gIEBJbnB1dCgnc2VsZWN0ZWQtcm91dGUnKVxuICBwdWJsaWMgU2VsZWN0ZWRSb3V0ZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBnZXQgQXBwbGljYXRpb25zQmFuaygpOiB7IFtsb29rdXA6IHN0cmluZ106IEVhQ0FwcGxpY2F0aW9uQXNDb2RlIH0ge1xuICAgIHJldHVybiB0aGlzLlN0YXRlPy5FYUM/LkFwcGxpY2F0aW9ucyB8fCB7fTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgQXBwbGljYXRpb25zKCk6IHsgW2xvb2t1cDogc3RyaW5nXTogRWFDQXBwbGljYXRpb25Bc0NvZGUgfSB7XG4gICAgY29uc3QgYXBwczogeyBbbG9va3VwOiBzdHJpbmddOiBFYUNBcHBsaWNhdGlvbkFzQ29kZSB9ID0ge307XG5cbiAgICB0aGlzLlNlbGVjdGVkUHJvamVjdD8uQXBwbGljYXRpb25Mb29rdXBzPy5mb3JFYWNoKChhcHBMb29rdXA6IHN0cmluZykgPT4ge1xuICAgICAgYXBwc1thcHBMb29rdXBdID0gdGhpcy5BcHBsaWNhdGlvbnNCYW5rW2FwcExvb2t1cF07XG4gICAgfSk7XG4gICAgcmV0dXJuIGFwcHM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IFNlbGVjdGVkQXBwbGljYXRpb24oKTogRWFDQXBwbGljYXRpb25Bc0NvZGUge1xuICAgIHJldHVybiB0aGlzLlN0YXRlPy5FYUM/LkFwcGxpY2F0aW9uc1t0aGlzLkFwcGxpY2F0aW9uTG9va3VwXSB8fCB7fTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgQ3VycmVudFJvdXRlQXBwbGljYXRpb25Mb29rdXBzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLlJvdXRlZEFwcGxpY2F0aW9uc1t0aGlzLlNlbGVjdGVkUm91dGVdIHx8IHt9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgUHJvamVjdHMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5TdGF0ZT8uRWFDPy5Qcm9qZWN0cyB8fCB7fTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgUHJvamVjdExvb2t1cHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLlN0YXRlPy5FYUM/LlByb2plY3RzIHx8IHt9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgUm91dGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLlJvdXRlZEFwcGxpY2F0aW9ucyB8fCB7fSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IFJvdXRlZEFwcGxpY2F0aW9ucygpOiB7XG4gICAgW3JvdXRlOiBzdHJpbmddOiB7IFtsb29rdXA6IHN0cmluZ106IEVhQ0FwcGxpY2F0aW9uQXNDb2RlIH07XG4gIH0ge1xuICAgIGNvbnN0IGFwcExvb2t1cHMgPSBPYmplY3Qua2V5cyh0aGlzLkFwcGxpY2F0aW9ucyk7XG5cbiAgICBjb25zdCBhcHBzID0gYXBwTG9va3Vwcy5tYXAoKGFwcExvb2t1cCkgPT4gdGhpcy5BcHBsaWNhdGlvbnNbYXBwTG9va3VwXSk7XG5cbiAgICBsZXQgYXBwUm91dGVzID1cbiAgICAgIGFwcHMubWFwKChhcHApID0+IHtcbiAgICAgICAgcmV0dXJuIGFwcC5Mb29rdXBDb25maWc/LlBhdGhSZWdleC5yZXBsYWNlKCcuKicsICcnKTtcbiAgICAgIH0pIHx8IFtdO1xuXG4gICAgYXBwUm91dGVzID0gYXBwUm91dGVzLmZpbHRlcigoYXIpID0+IGFyICE9IG51bGwpO1xuXG4gICAgbGV0IHJvdXRlQmFzZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBhcHBSb3V0ZXM/LmZvckVhY2goKGFwcFJvdXRlKSA9PiB7XG4gICAgICBjb25zdCBhcHBSb3V0ZVBhcnRzID0gYXBwUm91dGUuc3BsaXQoJy8nKTtcblxuICAgICAgY29uc3QgYXBwUm91dGVCYXNlID0gYC8ke2FwcFJvdXRlUGFydHNbMV19YDtcblxuICAgICAgaWYgKHJvdXRlQmFzZXMuaW5kZXhPZihhcHBSb3V0ZUJhc2UpIDwgMCkge1xuICAgICAgICByb3V0ZUJhc2VzLnB1c2goYXBwUm91dGVCYXNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCB3b3JraW5nQXBwTG9va3VwcyA9IFsuLi4oYXBwTG9va3VwcyB8fCBbXSldO1xuXG4gICAgcm91dGVCYXNlcyA9IHJvdXRlQmFzZXMuc29ydCgoYSwgYikgPT4gYi5sb2NhbGVDb21wYXJlKGEpKTtcblxuICAgIGNvbnN0IHJvdXRlU2V0ID1cbiAgICAgIHJvdXRlQmFzZXMucmVkdWNlKChwcmV2Um91dGVNYXAsIGN1cnJlbnRSb3V0ZUJhc2UpID0+IHtcbiAgICAgICAgY29uc3Qgcm91dGVNYXAgPSB7XG4gICAgICAgICAgLi4ucHJldlJvdXRlTWFwLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGZpbHRlcmVkQXBwTG9va3VwcyA9IHdvcmtpbmdBcHBMb29rdXBzLmZpbHRlcigod2FsKSA9PiB7XG4gICAgICAgICAgY29uc3Qgd2EgPSB0aGlzLkFwcGxpY2F0aW9uc1t3YWxdO1xuXG4gICAgICAgICAgcmV0dXJuIHdhLkxvb2t1cENvbmZpZz8uUGF0aFJlZ2V4LnN0YXJ0c1dpdGgoY3VycmVudFJvdXRlQmFzZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJvdXRlTWFwW2N1cnJlbnRSb3V0ZUJhc2VdID1cbiAgICAgICAgICBmaWx0ZXJlZEFwcExvb2t1cHMucmVkdWNlKChwcmV2QXBwTWFwLCBhcHBMb29rdXApID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFwcE1hcCA9IHtcbiAgICAgICAgICAgICAgLi4ucHJldkFwcE1hcCxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGFwcE1hcFthcHBMb29rdXBdID0gdGhpcy5BcHBsaWNhdGlvbnNbYXBwTG9va3VwXTtcblxuICAgICAgICAgICAgcmV0dXJuIGFwcE1hcDtcbiAgICAgICAgICB9LCB7fSkgfHwge307XG5cbiAgICAgICAgd29ya2luZ0FwcExvb2t1cHMgPSB3b3JraW5nQXBwTG9va3Vwcy5maWx0ZXIoKHdhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZpbHRlcmVkQXBwTG9va3Vwcy5pbmRleE9mKHdhKSA8IDA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByb3V0ZU1hcDtcbiAgICAgIH0sIHt9KSB8fCB7fTtcblxuICAgIGxldCByb3V0ZVNldEtleXMgPSBPYmplY3Qua2V5cyhyb3V0ZVNldCk7XG5cbiAgICByb3V0ZVNldEtleXMgPSByb3V0ZVNldEtleXMuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcblxuICAgIGNvbnN0IHJvdXRlU2V0UmVzdWx0ID0ge307XG5cbiAgICByb3V0ZVNldEtleXM/LmZvckVhY2goKHJzaykgPT4gKHJvdXRlU2V0UmVzdWx0W3Jza10gPSByb3V0ZVNldFtyc2tdKSk7XG5cbiAgICByZXR1cm4gcm91dGVTZXRSZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IFNlbGVjdGVkUHJvamVjdCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLlN0YXRlPy5FYUM/LlByb2plY3RzW3RoaXMuUHJvamVjdExvb2t1cF0gfHwge307XG4gIH1cblxuICBwdWJsaWMgZ2V0IFN0YXRlKCk6IEFwcGxpY2F0aW9uc0Zsb3dTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjU3ZjLlN0YXRlO1xuICB9XG5cbiAgcHVibGljIFNrZWxldG9uRWZmZWN0OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGVhY1N2YzogRWFDU2VydmljZSkge1xuICAgIHRoaXMuU2tlbGV0b25FZmZlY3QgPSAnd2F2ZSc7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZVN0YXRlQ2hhbmdlKCkudGhlbigoZWFjKSA9PiB7fSk7XG5cbiAgICAvLyBjb25zb2xlLmxvZyhcInN0YXRlOiBcIiwgdGhpcy5TdGF0ZSlcblxuICAgIC8vIGNvbnNvbGUubG9nKFwic2VsZWN0ZWQgZW50ZXJwcmlzZTogXCIsIHRoaXMuRW50ZXJwcmlzZSlcblxuXG4gICAgLy8gY29uc29sZS5sb2coJ1NlbGVjdGVkIHByb2plY3Q6ICcsIHRoaXMuU2VsZWN0ZWRQcm9qZWN0LlByb2plY3QpO1xuXG4gICAgLy8gY29uc29sZS5sb2coJ1NlbGVjdGVkUm91dGU6JywgdGhpcy5TZWxlY3RlZFJvdXRlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVTdGF0ZUNoYW5nZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImJyZWFkY3J1bWItY29udGFpbmVyXCIgZnhMYXlvdXQ9XCJyb3dcIj5cblxuICAgIFxuXG4gICAgPGRpdiAgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJTdGF0ZT8uTG9hZGluZ1wiPlxuICAgICAgICAgICAgPGRpdiBza2VsZXRvbi10ZXh0IFtlZmZlY3RdPVwiU2tlbGV0b25FZmZlY3RcIj5FbnRlcnByaXNlIE5hbWU8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFTdGF0ZT8uTG9hZGluZyAmJiBFbnRlcnByaXNlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3J1bWItbmFtZVwiIFtyb3V0ZXJMaW5rXT1cIlsnL2VudGVycHJpc2VzJ11cIj57e0VudGVycHJpc2U/Lk5hbWV9fTwvZGl2PlxuXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZW50ZXJwcmlzZU1lbnVcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+ZXhwYW5kX21vcmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxtYXQtbWVudSAjZW50ZXJwcmlzZU1lbnU9XCJtYXRNZW51XCIgeFBvc2l0aW9uPVwiYmVmb3JlXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFtyb3V0ZXJMaW5rXT1cIlsnL2VudGVycHJpc2VzJ11cIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57e0VudGVycHJpc2U/Lk5hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiUHJvamVjdExvb2t1cCAmJiBTZWxlY3RlZFByb2plY3RcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+XG5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzZXBlcmF0b3JcIj4vPC9zcGFuPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJTdGF0ZT8uTG9hZGluZ1wiPlxuICAgICAgICAgICAgPGRpdiBza2VsZXRvbi10ZXh0IFtlZmZlY3RdPVwiU2tlbGV0b25FZmZlY3RcIj5Qcm9qZWN0IE5hbWU8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFTdGF0ZT8uTG9hZGluZ1wiPlxuXG4gICAgICAgIDxkaXYgXG4gICAgICAgICAgICBjbGFzcz1cImNydW1iLW5hbWVcIiBcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL3Byb2plY3RzJywgUHJvamVjdExvb2t1cF1cIlxuICAgICAgICA+XG4gICAgICAgICAgICB7e1NlbGVjdGVkUHJvamVjdD8uUHJvamVjdD8uTmFtZX19XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJwcm9qZWN0TWVudVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmV4cGFuZF9tb3JlPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgXG4gICAgICAgIFxuICAgICAgICAgICAgPG1hdC1tZW51ICNwcm9qZWN0TWVudT1cIm1hdE1lbnVcIiB4UG9zaXRpb249XCJiZWZvcmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0gXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcHJvamVjdExvb2t1cCBvZiBQcm9qZWN0TG9va3Vwc1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvcHJvamVjdHMnLCBwcm9qZWN0TG9va3VwXVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiUHJvamVjdHNbcHJvamVjdExvb2t1cF07IGxldCBwcm87XCI+e3twcm8uUHJvamVjdD8uTmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbWF0LW1lbnU+XG5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJTZWxlY3RlZFJvdXRlXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPlxuXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2VwZXJhdG9yXCI+Lzwvc3Bhbj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiU3RhdGU/LkxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxkaXYgc2tlbGV0b24tdGV4dCBbZWZmZWN0XT1cIlNrZWxldG9uRWZmZWN0XCI+Um91dGUgTmFtZTwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIVN0YXRlPy5Mb2FkaW5nXCI+XG4gICAgICAgICAgICA8ZGl2IFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3J1bWItbmFtZVwiIFxuICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL3JvdXRlcycsIFNlbGVjdGVkUm91dGUsIFByb2plY3RMb29rdXBdXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7e1NlbGVjdGVkUm91dGV9fVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJyb3V0ZU1lbnVcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+ZXhwYW5kX21vcmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIFxuICAgICAgICAgICAgPG1hdC1tZW51ICNyb3V0ZU1lbnU9XCJtYXRNZW51XCIgeFBvc2l0aW9uPVwiYmVmb3JlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAqbmdGb3I9XCJsZXQgYXBwUm91dGUgb2YgUm91dGVzXCIgW3JvdXRlckxpbmtdPVwiWycvcm91dGVzJywgYXBwUm91dGUsIFByb2plY3RMb29rdXBdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImFwcFJvdXRlXCI+e3thcHBSb3V0ZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiU2VsZWN0ZWRBcHBsaWNhdGlvbiAmJiBBcHBsaWNhdGlvbkxvb2t1cFwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj5cblxuICAgICAgICA8c3BhbiBjbGFzcz1cInNlcGVyYXRvclwiPi88L3NwYW4+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlN0YXRlPy5Mb2FkaW5nXCI+XG4gICAgICAgICAgICA8ZGl2IHNrZWxldG9uLXRleHQgW2VmZmVjdF09XCJTa2VsZXRvbkVmZmVjdFwiPkFwcGxpY2F0aW9uIE5hbWU8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFTdGF0ZT8uTG9hZGluZ1wiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3J1bWItbmFtZVwiIFxuICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL2FwcGxpY2F0aW9ucycsIEFwcGxpY2F0aW9uTG9va3VwLCBTZWxlY3RlZFJvdXRlLCBQcm9qZWN0TG9va3VwXVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3tTZWxlY3RlZEFwcGxpY2F0aW9uPy5BcHBsaWNhdGlvbj8uTmFtZX19XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImFwcGxpY2F0aW9uTWVudVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5leHBhbmRfbW9yZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgXG4gICAgICAgICAgICA8bWF0LW1lbnUgI2FwcGxpY2F0aW9uTWVudT1cIm1hdE1lbnVcIiB4UG9zaXRpb249XCJiZWZvcmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBhcHBMb29rdXAgb2YgQ3VycmVudFJvdXRlQXBwbGljYXRpb25Mb29rdXBzXCJcbiAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvYXBwbGljYXRpb25zJywgYXBwTG9va3VwLCBTZWxlY3RlZFJvdXRlLCBQcm9qZWN0TG9va3VwXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJSb3V0ZWRBcHBsaWNhdGlvbnNbU2VsZWN0ZWRSb3V0ZV1bYXBwTG9va3VwXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcHBcIj57e2FwcC5BcHBsaWNhdGlvbj8uTmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPC9kaXY+XG5cblxuPC9kaXY+XG4iXX0=
|