@dereekb/dbx-web 12.5.9 → 12.6.0
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/esm2022/lib/extension/download/blob/download.blob.button.component.mjs +86 -0
- package/esm2022/lib/extension/download/blob/index.mjs +2 -0
- package/esm2022/lib/extension/download/index.mjs +2 -1
- package/esm2022/lib/extension/download/text/download.text.component.mjs +20 -18
- package/esm2022/lib/extension/index.mjs +3 -1
- package/esm2022/lib/extension/model/model.tracker.mjs +1 -1
- package/esm2022/lib/extension/model/model.tracker.view.storage.mjs +3 -3
- package/esm2022/lib/extension/preview/index.mjs +4 -0
- package/esm2022/lib/extension/preview/webfilepreview.mjs +2 -0
- package/esm2022/lib/extension/preview/webfilepreview.service.mjs +60 -0
- package/esm2022/lib/extension/preview/webfilepreview.service.preset.mjs +31 -0
- package/esm2022/lib/extension/widget/widget.service.mjs +1 -1
- package/esm2022/lib/extension/zip/index.mjs +5 -0
- package/esm2022/lib/extension/zip/zip.blob.mjs +16 -0
- package/esm2022/lib/extension/zip/zip.blob.preview.component.mjs +156 -0
- package/esm2022/lib/extension/zip/zip.blob.preview.list.component.mjs +121 -0
- package/esm2022/lib/extension/zip/zip.preview.component.mjs +71 -0
- package/esm2022/lib/extension/zip/zip.preview.dialog.component.mjs +44 -0
- package/esm2022/lib/interaction/iframe/embed.component.mjs +104 -0
- package/esm2022/lib/interaction/iframe/embed.dialog.component.mjs +43 -0
- package/esm2022/lib/interaction/iframe/iframe.component.mjs +7 -4
- package/esm2022/lib/interaction/iframe/iframe.dialog.component.mjs +37 -0
- package/esm2022/lib/interaction/iframe/index.mjs +4 -1
- package/fesm2022/dereekb-dbx-web.mjs +4596 -3899
- package/fesm2022/dereekb-dbx-web.mjs.map +1 -1
- package/lib/extension/_extension.scss +19 -0
- package/lib/extension/download/blob/download.blob.button.component.d.ts +55 -0
- package/lib/extension/download/blob/index.d.ts +1 -0
- package/lib/extension/download/index.d.ts +1 -0
- package/lib/extension/download/text/download.text.component.d.ts +7 -7
- package/lib/extension/index.d.ts +2 -0
- package/lib/extension/model/model.tracker.d.ts +3 -3
- package/lib/extension/preview/index.d.ts +3 -0
- package/lib/extension/preview/webfilepreview.d.ts +13 -0
- package/lib/extension/preview/webfilepreview.service.d.ts +31 -0
- package/lib/extension/preview/webfilepreview.service.preset.d.ts +13 -0
- package/lib/extension/widget/widget.service.d.ts +1 -1
- package/lib/extension/zip/_zip.scss +35 -0
- package/lib/extension/zip/index.d.ts +4 -0
- package/lib/extension/zip/zip.blob.d.ts +9 -0
- package/lib/extension/zip/zip.blob.preview.component.d.ts +54 -0
- package/lib/extension/zip/zip.blob.preview.list.component.d.ts +25 -0
- package/lib/extension/zip/zip.preview.component.d.ts +31 -0
- package/lib/extension/zip/zip.preview.dialog.component.d.ts +17 -0
- package/lib/interaction/iframe/_iframe.scss +13 -0
- package/lib/interaction/iframe/embed.component.d.ts +31 -0
- package/lib/interaction/iframe/embed.dialog.component.d.ts +17 -0
- package/lib/interaction/iframe/iframe.component.d.ts +0 -1
- package/lib/interaction/iframe/iframe.dialog.component.d.ts +13 -0
- package/lib/interaction/iframe/index.d.ts +3 -0
- package/lib/layout/style/_style.scss +2 -1
- package/lib/style/_config.scss +7 -1
- package/package.json +3 -2
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, input, signal } from '@angular/core';
|
|
2
|
+
import { DbxInjectionComponent } from '@dereekb/dbx-core';
|
|
3
|
+
import { JsonPipe, NgTemplateOutlet } from '@angular/common';
|
|
4
|
+
import { ZipReader, BlobReader } from '@zip.js/zip.js';
|
|
5
|
+
import { toObservable, toSignal } from '@angular/core/rxjs-interop';
|
|
6
|
+
import { DbxLoadingComponent } from '../../loading';
|
|
7
|
+
import { distinctUntilChanged, map, of, shareReplay, switchMap } from 'rxjs';
|
|
8
|
+
import { loadingStateContext, loadingStateFromObs, valueFromFinishedLoadingState } from '@dereekb/rxjs';
|
|
9
|
+
import { dbxZipBlobPreviewEntryTreeFromEntries } from './zip.blob';
|
|
10
|
+
import { DbxZipPreviewEntryListComponent } from './zip.blob.preview.list.component';
|
|
11
|
+
import { DbxBarHeaderComponent, DbxListEmptyContentComponent, DbxListTitleGroupDirective, DbxSpacerDirective, DbxValueListItemModifierDirective } from '../../layout';
|
|
12
|
+
import { DbxListItemAnchorModifierDirective } from '../../router';
|
|
13
|
+
import { DbxEmbedComponent } from '../../interaction';
|
|
14
|
+
import { MatToolbarModule } from '@angular/material/toolbar';
|
|
15
|
+
import { DbxButtonSpacerDirective, DbxIconButtonComponent } from '../../button';
|
|
16
|
+
import { DbxDownloadBlobButtonComponent } from '../download/blob/download.blob.button.component';
|
|
17
|
+
import * as i0 from "@angular/core";
|
|
18
|
+
/**
|
|
19
|
+
* Used to display a zip preview based on the input blob.
|
|
20
|
+
*/
|
|
21
|
+
export class DbxZipBlobPreviewComponent {
|
|
22
|
+
blob = input();
|
|
23
|
+
/**
|
|
24
|
+
* The download file name for the zip file.
|
|
25
|
+
*
|
|
26
|
+
* If not defined, then the file cannot be downloaded directly.
|
|
27
|
+
*/
|
|
28
|
+
downloadFileName = input();
|
|
29
|
+
hasBlob = computed(() => !!this.blob());
|
|
30
|
+
zipReader = computed(() => {
|
|
31
|
+
const blob = this.blob();
|
|
32
|
+
return blob ? new ZipReader(new BlobReader(blob)) : undefined;
|
|
33
|
+
});
|
|
34
|
+
downloadZipFileBlobButtonConfigSignal = computed(() => {
|
|
35
|
+
const blob = this.blob();
|
|
36
|
+
const fileName = this.downloadFileName();
|
|
37
|
+
let result = undefined;
|
|
38
|
+
if (blob && fileName) {
|
|
39
|
+
result = {
|
|
40
|
+
blob,
|
|
41
|
+
fileName: fileName ?? 'download.zip',
|
|
42
|
+
buttonDisplay: {
|
|
43
|
+
icon: 'download_for_offline',
|
|
44
|
+
text: 'Download Zip'
|
|
45
|
+
},
|
|
46
|
+
buttonStyle: {
|
|
47
|
+
type: 'stroked'
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
return result;
|
|
52
|
+
});
|
|
53
|
+
zipReader$ = toObservable(this.zipReader);
|
|
54
|
+
allEntriesLoadingState$ = loadingStateFromObs(this.zipReader$.pipe(switchMap((x) => (x ? x.getEntries() : of([])))));
|
|
55
|
+
allEntries$ = this.allEntriesLoadingState$.pipe(valueFromFinishedLoadingState(), distinctUntilChanged(), shareReplay(1));
|
|
56
|
+
allEntriesRoot$ = this.allEntries$.pipe(map((x) => dbxZipBlobPreviewEntryTreeFromEntries(x)), shareReplay(1));
|
|
57
|
+
allEntriesRootSignal = toSignal(this.allEntriesRoot$);
|
|
58
|
+
selectedNodeSignal = signal(undefined);
|
|
59
|
+
listTitleGroupDelegate = {
|
|
60
|
+
groupValueForItem: (item) => {
|
|
61
|
+
const group = item.itemValue.value.value.directory ? 'directory' : 'file';
|
|
62
|
+
return group;
|
|
63
|
+
},
|
|
64
|
+
dataForGroupValue: (value, items) => {
|
|
65
|
+
const data = {
|
|
66
|
+
title: (value === 'directory' ? 'Directories' : 'Files') + ` (${items.length})`,
|
|
67
|
+
value,
|
|
68
|
+
sort: value === 'directory' ? 0 : 1,
|
|
69
|
+
cssClasses: ['dbx-zip-blob-preview-list-group']
|
|
70
|
+
};
|
|
71
|
+
return data;
|
|
72
|
+
},
|
|
73
|
+
sortGroupsByData: (a, b) => {
|
|
74
|
+
return a.sort - b.sort;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
mode = computed(() => {
|
|
78
|
+
const selectedNode = this.selectedNodeSignal();
|
|
79
|
+
let mode = 'view_directory';
|
|
80
|
+
if (selectedNode && !selectedNode.value.value.directory) {
|
|
81
|
+
mode = 'view_entry';
|
|
82
|
+
}
|
|
83
|
+
return mode;
|
|
84
|
+
});
|
|
85
|
+
listEntries = computed(() => {
|
|
86
|
+
const allEntries = this.allEntriesRootSignal();
|
|
87
|
+
const selectedNode = this.selectedNodeSignal();
|
|
88
|
+
let entries;
|
|
89
|
+
if (selectedNode) {
|
|
90
|
+
if (selectedNode.value.value.directory) {
|
|
91
|
+
entries = selectedNode.children;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
entries = selectedNode.parent?.children;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
entries = allEntries?.children;
|
|
99
|
+
}
|
|
100
|
+
return entries ?? [];
|
|
101
|
+
});
|
|
102
|
+
listEntries$ = toObservable(this.listEntries);
|
|
103
|
+
listEntriesState$ = loadingStateFromObs(this.listEntries$);
|
|
104
|
+
selectedNodeIconSignal = computed(() => {
|
|
105
|
+
const selectedNode = this.selectedNodeSignal();
|
|
106
|
+
let icon;
|
|
107
|
+
if (selectedNode) {
|
|
108
|
+
if (selectedNode.value.value.directory) {
|
|
109
|
+
icon = 'folder';
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
icon = 'note';
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
icon = 'home';
|
|
117
|
+
}
|
|
118
|
+
return icon;
|
|
119
|
+
});
|
|
120
|
+
selectedNodePathSignal = computed(() => {
|
|
121
|
+
const selectedNode = this.selectedNodeSignal();
|
|
122
|
+
return ['Home', ...(selectedNode?.value.slashPathDetails.parts ?? [])].join(' > ');
|
|
123
|
+
});
|
|
124
|
+
selectedFileNodeSignal = computed(() => {
|
|
125
|
+
const selectedNode = this.selectedNodeSignal();
|
|
126
|
+
return selectedNode?.value.value.directory ? undefined : selectedNode;
|
|
127
|
+
});
|
|
128
|
+
selectedFileEntry$ = toObservable(this.selectedFileNodeSignal);
|
|
129
|
+
selectedFileEntryBlob$ = this.selectedFileEntry$.pipe(switchMap((x) => (x && x.value.getBlob ? x.value.getBlob() : of(undefined))), shareReplay(1));
|
|
130
|
+
selectedFileEntryBlobSignal = toSignal(this.selectedFileEntryBlob$);
|
|
131
|
+
context = loadingStateContext({ obs: this.allEntriesLoadingState$ });
|
|
132
|
+
ngOnDestroy() {
|
|
133
|
+
this.context.destroy();
|
|
134
|
+
}
|
|
135
|
+
makeEntryAnchor = (itemValue) => {
|
|
136
|
+
return {
|
|
137
|
+
onClick: () => {
|
|
138
|
+
this.selectedNodeSignal.set(itemValue);
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
homeClicked = () => {
|
|
143
|
+
this.selectedNodeSignal.set(undefined);
|
|
144
|
+
};
|
|
145
|
+
backClicked = () => {
|
|
146
|
+
const selectedNode = this.selectedNodeSignal();
|
|
147
|
+
this.selectedNodeSignal.set(selectedNode?.parent);
|
|
148
|
+
};
|
|
149
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipBlobPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
150
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxZipBlobPreviewComponent, isStandalone: true, selector: "dbx-zip-blob-preview", inputs: { blob: { classPropertyName: "blob", publicName: "blob", isSignal: true, isRequired: false, transformFunction: null }, downloadFileName: { classPropertyName: "downloadFileName", publicName: "downloadFileName", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<dbx-loading [context]=\"context\">\n <div class=\"dbx-flex-bar dbx-zip-blob-preview-toolbar\">\n <dbx-icon-button [disabled]=\"!selectedNodeSignal()\" icon=\"arrow_upward\" text=\"Back\" (click)=\"backClicked()\"></dbx-icon-button>\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-icon-button [disabled]=\"!selectedNodeSignal()\" icon=\"home\" text=\"Home\" (click)=\"homeClicked()\"></dbx-icon-button>\n <dbx-spacer></dbx-spacer>\n @if (downloadZipFileBlobButtonConfigSignal()) {\n <dbx-download-blob-button [config]=\"downloadZipFileBlobButtonConfigSignal()\"></dbx-download-blob-button>\n }\n </div>\n <dbx-bar-header class=\"dbx-zip-blob-preview-header\" [icon]=\"selectedNodeIconSignal()\" [text]=\"selectedNodePathSignal()\"></dbx-bar-header>\n <div class=\"dbx-zip-blob-preview-content\">\n @switch (mode()) {\n @case ('view_directory') {\n <dbx-zip-preview-file-entry-list [state$]=\"listEntriesState$\" [dbxListTitleGroup]=\"listTitleGroupDelegate\" [dbxListItemModifier] [dbxListItemAnchorModifier]=\"makeEntryAnchor\"></dbx-zip-preview-file-entry-list>\n }\n @case ('view_entry') {\n <dbx-embed class=\"dbx-zip-blob-preview-content-embed\" [srcBlob]=\"selectedFileEntryBlobSignal()\"></dbx-embed>\n }\n }\n </div>\n</dbx-loading>\n", dependencies: [{ kind: "ngmodule", type: MatToolbarModule }, { kind: "directive", type: DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }, { kind: "component", type: DbxIconButtonComponent, selector: "dbx-icon-button" }, { kind: "component", type: DbxBarHeaderComponent, selector: "dbx-bar-header", inputs: ["text", "icon", "color"] }, { kind: "directive", type: DbxListTitleGroupDirective, selector: "[dbxListTitleGroup]", inputs: ["dbxListTitleGroup"] }, { kind: "component", type: DbxZipPreviewEntryListComponent, selector: "dbx-zip-preview-file-entry-list" }, { kind: "component", type: DbxEmbedComponent, selector: "dbx-embed", inputs: ["sanitizeUrl", "srcUrl", "type", "srcBlob"] }, { kind: "component", type: DbxLoadingComponent, selector: "dbx-loading", inputs: ["padding", "show", "text", "mode", "color", "diameter", "linear", "loading", "error", "context"] }, { kind: "directive", type: DbxValueListItemModifierDirective, selector: "dbxListItemModifier,[dbxListItemModifier]", inputs: ["dbxListItemModifier"] }, { kind: "directive", type: DbxListItemAnchorModifierDirective, selector: "[dbxListItemAnchorModifier]", inputs: ["dbxListItemAnchorModifier"] }, { kind: "component", type: DbxDownloadBlobButtonComponent, selector: "dbx-download-blob-button", inputs: ["config"] }, { kind: "directive", type: DbxSpacerDirective, selector: "dbx-spacer, [dbxSpacer]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
151
|
+
}
|
|
152
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipBlobPreviewComponent, decorators: [{
|
|
153
|
+
type: Component,
|
|
154
|
+
args: [{ selector: 'dbx-zip-blob-preview', standalone: true, imports: [MatToolbarModule, DbxButtonSpacerDirective, DbxIconButtonComponent, DbxBarHeaderComponent, DbxListTitleGroupDirective, DbxInjectionComponent, DbxZipPreviewEntryListComponent, DbxEmbedComponent, DbxLoadingComponent, JsonPipe, NgTemplateOutlet, DbxValueListItemModifierDirective, DbxListItemAnchorModifierDirective, DbxListTitleGroupDirective, DbxListEmptyContentComponent, DbxDownloadBlobButtonComponent, DbxSpacerDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: "<dbx-loading [context]=\"context\">\n <div class=\"dbx-flex-bar dbx-zip-blob-preview-toolbar\">\n <dbx-icon-button [disabled]=\"!selectedNodeSignal()\" icon=\"arrow_upward\" text=\"Back\" (click)=\"backClicked()\"></dbx-icon-button>\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-icon-button [disabled]=\"!selectedNodeSignal()\" icon=\"home\" text=\"Home\" (click)=\"homeClicked()\"></dbx-icon-button>\n <dbx-spacer></dbx-spacer>\n @if (downloadZipFileBlobButtonConfigSignal()) {\n <dbx-download-blob-button [config]=\"downloadZipFileBlobButtonConfigSignal()\"></dbx-download-blob-button>\n }\n </div>\n <dbx-bar-header class=\"dbx-zip-blob-preview-header\" [icon]=\"selectedNodeIconSignal()\" [text]=\"selectedNodePathSignal()\"></dbx-bar-header>\n <div class=\"dbx-zip-blob-preview-content\">\n @switch (mode()) {\n @case ('view_directory') {\n <dbx-zip-preview-file-entry-list [state$]=\"listEntriesState$\" [dbxListTitleGroup]=\"listTitleGroupDelegate\" [dbxListItemModifier] [dbxListItemAnchorModifier]=\"makeEntryAnchor\"></dbx-zip-preview-file-entry-list>\n }\n @case ('view_entry') {\n <dbx-embed class=\"dbx-zip-blob-preview-content-embed\" [srcBlob]=\"selectedFileEntryBlobSignal()\"></dbx-embed>\n }\n }\n </div>\n</dbx-loading>\n" }]
|
|
155
|
+
}] });
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemlwLmJsb2IucHJldmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL3NyYy9saWIvZXh0ZW5zaW9uL3ppcC96aXAuYmxvYi5wcmV2aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvc3JjL2xpYi9leHRlbnNpb24vemlwL3ppcC5ibG9iLnByZXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUMvRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQW9CLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RixPQUFPLEVBQWdCLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLDZCQUE2QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxxQ0FBcUMsRUFBa0MsTUFBTSxZQUFZLENBQUM7QUFDbkcsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLDRCQUE0QixFQUF5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dUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0LCBTaWduYWwsIHNpZ25hbCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYnhJbmplY3Rpb25Db21wb25lbnQgfSBmcm9tICdAZGVyZWVrYi9kYngtY29yZSc7XG5pbXBvcnQgeyBKc29uUGlwZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgWmlwUmVhZGVyLCBCbG9iUmVhZGVyLCBFbnRyeSwgRmlsZUVudHJ5IH0gZnJvbSAnQHppcC5qcy96aXAuanMnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IERieExvYWRpbmdDb21wb25lbnQgfSBmcm9tICcuLi8uLi9sb2FkaW5nJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIE9ic2VydmFibGUsIG9mLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMb2FkaW5nU3RhdGUsIGxvYWRpbmdTdGF0ZUNvbnRleHQsIGxvYWRpbmdTdGF0ZUZyb21PYnMsIHZhbHVlRnJvbUZpbmlzaGVkTG9hZGluZ1N0YXRlIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBkYnhaaXBCbG9iUHJldmlld0VudHJ5VHJlZUZyb21FbnRyaWVzLCBEYnhaaXBCbG9iUHJldmlld0VudHJ5VHJlZU5vZGUgfSBmcm9tICcuL3ppcC5ibG9iJztcbmltcG9ydCB7IERieFppcFByZXZpZXdFbnRyeUxpc3RDb21wb25lbnQgfSBmcm9tICcuL3ppcC5ibG9iLnByZXZpZXcubGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJ4QmFySGVhZGVyQ29tcG9uZW50LCBEYnhMaXN0RW1wdHlDb250ZW50Q29tcG9uZW50LCBEYnhMaXN0VGl0bGVHcm91cERhdGEsIERieExpc3RUaXRsZUdyb3VwRGlyZWN0aXZlLCBEYnhMaXN0VGl0bGVHcm91cFRpdGxlRGVsZWdhdGUsIERieFNwYWNlckRpcmVjdGl2ZSwgRGJ4VmFsdWVMaXN0SXRlbU1vZGlmaWVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vbGF5b3V0JztcbmltcG9ydCB7IEFuY2hvckZvclZhbHVlRnVuY3Rpb24sIERieExpc3RJdGVtQW5jaG9yTW9kaWZpZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9yb3V0ZXInO1xuaW1wb3J0IHsgRGJ4RW1iZWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmFjdGlvbic7XG5pbXBvcnQgeyBNYXRUb29sYmFyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbGJhcic7XG5pbXBvcnQgeyBEYnhCdXR0b25TcGFjZXJEaXJlY3RpdmUsIERieEljb25CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9idXR0b24nO1xuaW1wb3J0IHsgRGJ4RG93bmxvYWRCbG9iQnV0dG9uQ29tcG9uZW50LCBEYnhEb3dubG9hZEJsb2JCdXR0b25Db25maWcgfSBmcm9tICcuLi9kb3dubG9hZC9ibG9iL2Rvd25sb2FkLmJsb2IuYnV0dG9uLmNvbXBvbmVudCc7XG5cbmV4cG9ydCB0eXBlIERieFppcEJsb2JQcmV2aWV3TW9kZSA9ICd2aWV3X2RpcmVjdG9yeScgfCAndmlld19lbnRyeSc7XG5cbmV4cG9ydCB0eXBlIERieFppcEJsb2JQcmV2aWV3R3JvdXBWYWx1ZSA9ICdkaXJlY3RvcnknIHwgJ2ZpbGUnO1xuZXhwb3J0IHR5cGUgRGJ4WmlwQmxvYlByZXZpZXdHcm91cERhdGEgPSBEYnhMaXN0VGl0bGVHcm91cERhdGE8RGJ4WmlwQmxvYlByZXZpZXdHcm91cFZhbHVlPiAmIHsgc29ydDogbnVtYmVyIH07XG5cbi8qKlxuICogVXNlZCB0byBkaXNwbGF5IGEgemlwIHByZXZpZXcgYmFzZWQgb24gdGhlIGlucHV0IGJsb2IuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RieC16aXAtYmxvYi1wcmV2aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ppcC5ibG9iLnByZXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTWF0VG9vbGJhck1vZHVsZSwgRGJ4QnV0dG9uU3BhY2VyRGlyZWN0aXZlLCBEYnhJY29uQnV0dG9uQ29tcG9uZW50LCBEYnhCYXJIZWFkZXJDb21wb25lbnQsIERieExpc3RUaXRsZUdyb3VwRGlyZWN0aXZlLCBEYnhJbmplY3Rpb25Db21wb25lbnQsIERieFppcFByZXZpZXdFbnRyeUxpc3RDb21wb25lbnQsIERieEVtYmVkQ29tcG9uZW50LCBEYnhMb2FkaW5nQ29tcG9uZW50LCBKc29uUGlwZSwgTmdUZW1wbGF0ZU91dGxldCwgRGJ4VmFsdWVMaXN0SXRlbU1vZGlmaWVyRGlyZWN0aXZlLCBEYnhMaXN0SXRlbUFuY2hvck1vZGlmaWVyRGlyZWN0aXZlLCBEYnhMaXN0VGl0bGVHcm91cERpcmVjdGl2ZSwgRGJ4TGlzdEVtcHR5Q29udGVudENvbXBvbmVudCwgRGJ4RG93bmxvYWRCbG9iQnV0dG9uQ29tcG9uZW50LCBEYnhTcGFjZXJEaXJlY3RpdmVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBEYnhaaXBCbG9iUHJldmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHJlYWRvbmx5IGJsb2IgPSBpbnB1dDxNYXliZTxCbG9iPj4oKTtcblxuICAvKipcbiAgICogVGhlIGRvd25sb2FkIGZpbGUgbmFtZSBmb3IgdGhlIHppcCBmaWxlLlxuICAgKlxuICAgKiBJZiBub3QgZGVmaW5lZCwgdGhlbiB0aGUgZmlsZSBjYW5ub3QgYmUgZG93bmxvYWRlZCBkaXJlY3RseS5cbiAgICovXG4gIHJlYWRvbmx5IGRvd25sb2FkRmlsZU5hbWUgPSBpbnB1dDxNYXliZTxzdHJpbmc+PigpO1xuXG4gIHJlYWRvbmx5IGhhc0Jsb2IgPSBjb21wdXRlZCgoKSA9PiAhIXRoaXMuYmxvYigpKTtcblxuICByZWFkb25seSB6aXBSZWFkZXIgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmxvYiA9IHRoaXMuYmxvYigpO1xuICAgIHJldHVybiBibG9iID8gbmV3IFppcFJlYWRlcihuZXcgQmxvYlJlYWRlcihibG9iKSkgOiB1bmRlZmluZWQ7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGRvd25sb2FkWmlwRmlsZUJsb2JCdXR0b25Db25maWdTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmxvYiA9IHRoaXMuYmxvYigpO1xuICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5kb3dubG9hZEZpbGVOYW1lKCk7XG5cbiAgICBsZXQgcmVzdWx0OiBNYXliZTxEYnhEb3dubG9hZEJsb2JCdXR0b25Db25maWc+ID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGJsb2IgJiYgZmlsZU5hbWUpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgYmxvYixcbiAgICAgICAgZmlsZU5hbWU6IGZpbGVOYW1lID8/ICdkb3dubG9hZC56aXAnLFxuICAgICAgICBidXR0b25EaXNwbGF5OiB7XG4gICAgICAgICAgaWNvbjogJ2Rvd25sb2FkX2Zvcl9vZmZsaW5lJyxcbiAgICAgICAgICB0ZXh0OiAnRG93bmxvYWQgWmlwJ1xuICAgICAgICB9LFxuICAgICAgICBidXR0b25TdHlsZToge1xuICAgICAgICAgIHR5cGU6ICdzdHJva2VkJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHppcFJlYWRlciQgPSB0b09ic2VydmFibGUodGhpcy56aXBSZWFkZXIpO1xuXG4gIHJlYWRvbmx5IGFsbEVudHJpZXNMb2FkaW5nU3RhdGUkOiBPYnNlcnZhYmxlPExvYWRpbmdTdGF0ZTxFbnRyeVtdPj4gPSBsb2FkaW5nU3RhdGVGcm9tT2JzKHRoaXMuemlwUmVhZGVyJC5waXBlKHN3aXRjaE1hcCgoeCkgPT4gKHggPyB4LmdldEVudHJpZXMoKSA6IG9mKFtdKSkpKSk7XG4gIHJlYWRvbmx5IGFsbEVudHJpZXMkID0gdGhpcy5hbGxFbnRyaWVzTG9hZGluZ1N0YXRlJC5waXBlKHZhbHVlRnJvbUZpbmlzaGVkTG9hZGluZ1N0YXRlKCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHNoYXJlUmVwbGF5KDEpKTtcbiAgcmVhZG9ubHkgYWxsRW50cmllc1Jvb3QkID0gdGhpcy5hbGxFbnRyaWVzJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gZGJ4WmlwQmxvYlByZXZpZXdFbnRyeVRyZWVGcm9tRW50cmllcyh4KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBhbGxFbnRyaWVzUm9vdFNpZ25hbCA9IHRvU2lnbmFsKHRoaXMuYWxsRW50cmllc1Jvb3QkKTtcblxuICByZWFkb25seSBzZWxlY3RlZE5vZGVTaWduYWwgPSBzaWduYWw8TWF5YmU8RGJ4WmlwQmxvYlByZXZpZXdFbnRyeVRyZWVOb2RlPj4odW5kZWZpbmVkKTtcblxuICByZWFkb25seSBsaXN0VGl0bGVHcm91cERlbGVnYXRlOiBEYnhMaXN0VGl0bGVHcm91cFRpdGxlRGVsZWdhdGU8RGJ4WmlwQmxvYlByZXZpZXdFbnRyeVRyZWVOb2RlLCBEYnhaaXBCbG9iUHJldmlld0dyb3VwVmFsdWUsIERieFppcEJsb2JQcmV2aWV3R3JvdXBEYXRhPiA9IHtcbiAgICBncm91cFZhbHVlRm9ySXRlbTogKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwOiBEYnhaaXBCbG9iUHJldmlld0dyb3VwVmFsdWUgPSBpdGVtLml0ZW1WYWx1ZS52YWx1ZS52YWx1ZS5kaXJlY3RvcnkgPyAnZGlyZWN0b3J5JyA6ICdmaWxlJztcbiAgICAgIHJldHVybiBncm91cDtcbiAgICB9LFxuICAgIGRhdGFGb3JHcm91cFZhbHVlOiAodmFsdWU6IERieFppcEJsb2JQcmV2aWV3R3JvdXBWYWx1ZSwgaXRlbXMpID0+IHtcbiAgICAgIGNvbnN0IGRhdGE6IERieFppcEJsb2JQcmV2aWV3R3JvdXBEYXRhID0ge1xuICAgICAgICB0aXRsZTogKHZhbHVlID09PSAnZGlyZWN0b3J5JyA/ICdEaXJlY3RvcmllcycgOiAnRmlsZXMnKSArIGAgKCR7aXRlbXMubGVuZ3RofSlgLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgc29ydDogdmFsdWUgPT09ICdkaXJlY3RvcnknID8gMCA6IDEsXG4gICAgICAgIGNzc0NsYXNzZXM6IFsnZGJ4LXppcC1ibG9iLXByZXZpZXctbGlzdC1ncm91cCddXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICAgIHNvcnRHcm91cHNCeURhdGE6IChhLCBiKSA9PiB7XG4gICAgICByZXR1cm4gYS5zb3J0IC0gYi5zb3J0O1xuICAgIH1cbiAgfTtcblxuICByZWFkb25seSBtb2RlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkTm9kZSA9IHRoaXMuc2VsZWN0ZWROb2RlU2lnbmFsKCk7XG5cbiAgICBsZXQgbW9kZSA9ICd2aWV3X2RpcmVjdG9yeSc7XG5cbiAgICBpZiAoc2VsZWN0ZWROb2RlICYmICFzZWxlY3RlZE5vZGUudmFsdWUudmFsdWUuZGlyZWN0b3J5KSB7XG4gICAgICBtb2RlID0gJ3ZpZXdfZW50cnknO1xuICAgIH1cblxuICAgIHJldHVybiBtb2RlO1xuICB9KTtcblxuICByZWFkb25seSBsaXN0RW50cmllcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBhbGxFbnRyaWVzID0gdGhpcy5hbGxFbnRyaWVzUm9vdFNpZ25hbCgpO1xuICAgIGNvbnN0IHNlbGVjdGVkTm9kZSA9IHRoaXMuc2VsZWN0ZWROb2RlU2lnbmFsKCk7XG5cbiAgICBsZXQgZW50cmllczogTWF5YmU8RGJ4WmlwQmxvYlByZXZpZXdFbnRyeVRyZWVOb2RlW10+O1xuXG4gICAgaWYgKHNlbGVjdGVkTm9kZSkge1xuICAgICAgaWYgKHNlbGVjdGVkTm9kZS52YWx1ZS52YWx1ZS5kaXJlY3RvcnkpIHtcbiAgICAgICAgZW50cmllcyA9IHNlbGVjdGVkTm9kZS5jaGlsZHJlbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVudHJpZXMgPSBzZWxlY3RlZE5vZGUucGFyZW50Py5jaGlsZHJlbjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZW50cmllcyA9IGFsbEVudHJpZXM/LmNoaWxkcmVuO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRyaWVzID8/IFtdO1xuICB9KTtcblxuICByZWFkb25seSBsaXN0RW50cmllcyQgPSB0b09ic2VydmFibGUodGhpcy5saXN0RW50cmllcyk7XG4gIHJlYWRvbmx5IGxpc3RFbnRyaWVzU3RhdGUkID0gbG9hZGluZ1N0YXRlRnJvbU9icyh0aGlzLmxpc3RFbnRyaWVzJCk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0ZWROb2RlSWNvblNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSB0aGlzLnNlbGVjdGVkTm9kZVNpZ25hbCgpO1xuXG4gICAgbGV0IGljb246IHN0cmluZztcblxuICAgIGlmIChzZWxlY3RlZE5vZGUpIHtcbiAgICAgIGlmIChzZWxlY3RlZE5vZGUudmFsdWUudmFsdWUuZGlyZWN0b3J5KSB7XG4gICAgICAgIGljb24gPSAnZm9sZGVyJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGljb24gPSAnbm90ZSc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGljb24gPSAnaG9tZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGljb247XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkTm9kZVBhdGhTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWROb2RlID0gdGhpcy5zZWxlY3RlZE5vZGVTaWduYWwoKTtcbiAgICByZXR1cm4gWydIb21lJywgLi4uKHNlbGVjdGVkTm9kZT8udmFsdWUuc2xhc2hQYXRoRGV0YWlscy5wYXJ0cyA/PyBbXSldLmpvaW4oJyA+ICcpO1xuICB9KTtcblxuICByZWFkb25seSBzZWxlY3RlZEZpbGVOb2RlU2lnbmFsOiBTaWduYWw8TWF5YmU8RGJ4WmlwQmxvYlByZXZpZXdFbnRyeVRyZWVOb2RlPEZpbGVFbnRyeT4+PiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSB0aGlzLnNlbGVjdGVkTm9kZVNpZ25hbCgpO1xuICAgIHJldHVybiBzZWxlY3RlZE5vZGU/LnZhbHVlLnZhbHVlLmRpcmVjdG9yeSA/IHVuZGVmaW5lZCA6IChzZWxlY3RlZE5vZGUgYXMgRGJ4WmlwQmxvYlByZXZpZXdFbnRyeVRyZWVOb2RlPEZpbGVFbnRyeT4pO1xuICB9KTtcblxuICByZWFkb25seSBzZWxlY3RlZEZpbGVFbnRyeSQgPSB0b09ic2VydmFibGUodGhpcy5zZWxlY3RlZEZpbGVOb2RlU2lnbmFsKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRGaWxlRW50cnlCbG9iJDogT2JzZXJ2YWJsZTxNYXliZTxCbG9iPj4gPSB0aGlzLnNlbGVjdGVkRmlsZUVudHJ5JC5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4gKHggJiYgeC52YWx1ZS5nZXRCbG9iID8geC52YWx1ZS5nZXRCbG9iKCkgOiBvZih1bmRlZmluZWQpKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRGaWxlRW50cnlCbG9iU2lnbmFsOiBTaWduYWw8TWF5YmU8QmxvYj4+ID0gdG9TaWduYWwodGhpcy5zZWxlY3RlZEZpbGVFbnRyeUJsb2IkKTtcblxuICByZWFkb25seSBjb250ZXh0ID0gbG9hZGluZ1N0YXRlQ29udGV4dCh7IG9iczogdGhpcy5hbGxFbnRyaWVzTG9hZGluZ1N0YXRlJCB9KTtcblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRleHQuZGVzdHJveSgpO1xuICB9XG5cbiAgcmVhZG9ubHkgbWFrZUVudHJ5QW5jaG9yOiBBbmNob3JGb3JWYWx1ZUZ1bmN0aW9uPERieFppcEJsb2JQcmV2aWV3RW50cnlUcmVlTm9kZT4gPSAoaXRlbVZhbHVlKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVTaWduYWwuc2V0KGl0ZW1WYWx1ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICByZWFkb25seSBob21lQ2xpY2tlZCA9ICgpID0+IHtcbiAgICB0aGlzLnNlbGVjdGVkTm9kZVNpZ25hbC5zZXQodW5kZWZpbmVkKTtcbiAgfTtcblxuICByZWFkb25seSBiYWNrQ2xpY2tlZCA9ICgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSB0aGlzLnNlbGVjdGVkTm9kZVNpZ25hbCgpO1xuICAgIHRoaXMuc2VsZWN0ZWROb2RlU2lnbmFsLnNldChzZWxlY3RlZE5vZGU/LnBhcmVudCk7XG4gIH07XG59XG4iLCI8ZGJ4LWxvYWRpbmcgW2NvbnRleHRdPVwiY29udGV4dFwiPlxuICA8ZGl2IGNsYXNzPVwiZGJ4LWZsZXgtYmFyIGRieC16aXAtYmxvYi1wcmV2aWV3LXRvb2xiYXJcIj5cbiAgICA8ZGJ4LWljb24tYnV0dG9uIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWROb2RlU2lnbmFsKClcIiBpY29uPVwiYXJyb3dfdXB3YXJkXCIgdGV4dD1cIkJhY2tcIiAoY2xpY2spPVwiYmFja0NsaWNrZWQoKVwiPjwvZGJ4LWljb24tYnV0dG9uPlxuICAgIDxkYngtYnV0dG9uLXNwYWNlcj48L2RieC1idXR0b24tc3BhY2VyPlxuICAgIDxkYngtaWNvbi1idXR0b24gW2Rpc2FibGVkXT1cIiFzZWxlY3RlZE5vZGVTaWduYWwoKVwiIGljb249XCJob21lXCIgdGV4dD1cIkhvbWVcIiAoY2xpY2spPVwiaG9tZUNsaWNrZWQoKVwiPjwvZGJ4LWljb24tYnV0dG9uPlxuICAgIDxkYngtc3BhY2VyPjwvZGJ4LXNwYWNlcj5cbiAgICBAaWYgKGRvd25sb2FkWmlwRmlsZUJsb2JCdXR0b25Db25maWdTaWduYWwoKSkge1xuICAgICAgPGRieC1kb3dubG9hZC1ibG9iLWJ1dHRvbiBbY29uZmlnXT1cImRvd25sb2FkWmlwRmlsZUJsb2JCdXR0b25Db25maWdTaWduYWwoKVwiPjwvZGJ4LWRvd25sb2FkLWJsb2ItYnV0dG9uPlxuICAgIH1cbiAgPC9kaXY+XG4gIDxkYngtYmFyLWhlYWRlciBjbGFzcz1cImRieC16aXAtYmxvYi1wcmV2aWV3LWhlYWRlclwiIFtpY29uXT1cInNlbGVjdGVkTm9kZUljb25TaWduYWwoKVwiIFt0ZXh0XT1cInNlbGVjdGVkTm9kZVBhdGhTaWduYWwoKVwiPjwvZGJ4LWJhci1oZWFkZXI+XG4gIDxkaXYgY2xhc3M9XCJkYngtemlwLWJsb2ItcHJldmlldy1jb250ZW50XCI+XG4gICAgQHN3aXRjaCAobW9kZSgpKSB7XG4gICAgICBAY2FzZSAoJ3ZpZXdfZGlyZWN0b3J5Jykge1xuICAgICAgICA8ZGJ4LXppcC1wcmV2aWV3LWZpbGUtZW50cnktbGlzdCBbc3RhdGUkXT1cImxpc3RFbnRyaWVzU3RhdGUkXCIgW2RieExpc3RUaXRsZUdyb3VwXT1cImxpc3RUaXRsZUdyb3VwRGVsZWdhdGVcIiBbZGJ4TGlzdEl0ZW1Nb2RpZmllcl0gW2RieExpc3RJdGVtQW5jaG9yTW9kaWZpZXJdPVwibWFrZUVudHJ5QW5jaG9yXCI+PC9kYngtemlwLXByZXZpZXctZmlsZS1lbnRyeS1saXN0PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCd2aWV3X2VudHJ5Jykge1xuICAgICAgICA8ZGJ4LWVtYmVkIGNsYXNzPVwiZGJ4LXppcC1ibG9iLXByZXZpZXctY29udGVudC1lbWJlZFwiIFtzcmNCbG9iXT1cInNlbGVjdGVkRmlsZUVudHJ5QmxvYlNpZ25hbCgpXCI+PC9kYngtZW1iZWQ+XG4gICAgICB9XG4gICAgfVxuICA8L2Rpdj5cbjwvZGJ4LWxvYWRpbmc+XG4iXX0=
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
2
|
+
import { DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE, DbxListWrapperComponentImportsModule, provideDbxListViewWrapper, AbstractDbxSelectionListWrapperDirective, DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE, DbxSelectionValueListViewComponentImportsModule, provideDbxListView, AbstractDbxSelectionListViewDirective, AbstractDbxValueListViewItemComponent, DbxSpacerDirective } from '../../layout';
|
|
3
|
+
import { of } from 'rxjs';
|
|
4
|
+
import { DatePipe } from '@angular/common';
|
|
5
|
+
import { DbxIconButtonComponent } from '../../button';
|
|
6
|
+
import { DbxDownloadBlobButtonComponent } from '../download/blob/download.blob.button.component';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "../../layout/list/list.component";
|
|
9
|
+
import * as i2 from "../../layout/list/list.view.value.selection.component";
|
|
10
|
+
export function iconForDbxZipPreviewEntryWithSelection(entry) {
|
|
11
|
+
return entry.value.value.directory ? 'folder' : entry.value.mimeType ? 'note' : 'question_mark';
|
|
12
|
+
}
|
|
13
|
+
export class DbxZipPreviewEntryListComponent extends AbstractDbxSelectionListWrapperDirective {
|
|
14
|
+
constructor() {
|
|
15
|
+
super({
|
|
16
|
+
componentClass: DbxZipPreviewEntryListViewComponent,
|
|
17
|
+
defaultSelectionMode: 'view'
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipPreviewEntryListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
21
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DbxZipPreviewEntryListComponent, isStandalone: true, selector: "dbx-zip-preview-file-entry-list", providers: provideDbxListViewWrapper(DbxZipPreviewEntryListComponent), usesInheritance: true, ngImport: i0, template: "\n <dbx-list [state]=\"currentState$\" [config]=\"configSignal()\" [hasMore]=\"hasMore()\" [disabled]=\"disabled()\" [selectionMode]=\"selectionModeSignal()\">\n <ng-content top select=\"[top]\"></ng-content>\n <ng-content bottom select=\"[bottom]\"></ng-content>\n <ng-content empty select=\"[empty]\"></ng-content>\n <ng-content emptyLoading select=\"[emptyLoading]\"></ng-content>\n <ng-content end select=\"[end]\"></ng-content>\n </dbx-list>", isInline: true, dependencies: [{ kind: "ngmodule", type: DbxListWrapperComponentImportsModule }, { kind: "component", type: i1.DbxListComponent, selector: "dbx-list", inputs: ["padded", "state", "config", "disabled", "selectionMode", "hasMore"], outputs: ["contentScrolled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
22
|
+
}
|
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipPreviewEntryListComponent, decorators: [{
|
|
24
|
+
type: Component,
|
|
25
|
+
args: [{
|
|
26
|
+
selector: 'dbx-zip-preview-file-entry-list',
|
|
27
|
+
template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,
|
|
28
|
+
imports: [DbxListWrapperComponentImportsModule],
|
|
29
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
30
|
+
providers: provideDbxListViewWrapper(DbxZipPreviewEntryListComponent),
|
|
31
|
+
standalone: true
|
|
32
|
+
}]
|
|
33
|
+
}], ctorParameters: () => [] });
|
|
34
|
+
export class DbxZipPreviewEntryListViewComponent extends AbstractDbxSelectionListViewDirective {
|
|
35
|
+
config = {
|
|
36
|
+
componentClass: DbxZipPreviewEntryListViewItemComponent,
|
|
37
|
+
mapValuesToItemValues: (x) => of(x.map((y) => ({ ...y, icon: iconForDbxZipPreviewEntryWithSelection(y), itemValue: y })))
|
|
38
|
+
};
|
|
39
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipPreviewEntryListViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
40
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DbxZipPreviewEntryListViewComponent, isStandalone: true, selector: "dbx-zip-preview-file-entry-list-view", providers: provideDbxListView(DbxZipPreviewEntryListViewComponent), usesInheritance: true, ngImport: i0, template: "<dbx-selection-list-view [config]=\"config\"></dbx-selection-list-view>", isInline: true, dependencies: [{ kind: "ngmodule", type: DbxSelectionValueListViewComponentImportsModule }, { kind: "component", type: i2.DbxSelectionValueListViewComponent, selector: "dbx-selection-list-view" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
41
|
+
}
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipPreviewEntryListViewComponent, decorators: [{
|
|
43
|
+
type: Component,
|
|
44
|
+
args: [{
|
|
45
|
+
selector: 'dbx-zip-preview-file-entry-list-view',
|
|
46
|
+
template: DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,
|
|
47
|
+
imports: [DbxSelectionValueListViewComponentImportsModule],
|
|
48
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
49
|
+
standalone: true,
|
|
50
|
+
providers: provideDbxListView(DbxZipPreviewEntryListViewComponent)
|
|
51
|
+
}]
|
|
52
|
+
}] });
|
|
53
|
+
export class DbxZipPreviewEntryListViewItemComponent extends AbstractDbxValueListViewItemComponent {
|
|
54
|
+
get name() {
|
|
55
|
+
return this.itemValue.value.value.filename ?? 'hello';
|
|
56
|
+
}
|
|
57
|
+
get lastModDate() {
|
|
58
|
+
return this.itemValue.value.value.lastModDate ?? undefined;
|
|
59
|
+
}
|
|
60
|
+
get isDirectory() {
|
|
61
|
+
return this.itemValue.value.value.directory;
|
|
62
|
+
}
|
|
63
|
+
get canDownload() {
|
|
64
|
+
return !this.isDirectory;
|
|
65
|
+
}
|
|
66
|
+
get downloadBlobButtonConfig() {
|
|
67
|
+
return {
|
|
68
|
+
loadBlob: this.itemValue.value.getBlob,
|
|
69
|
+
fileName: this.itemValue.value.slashPathDetails.fileName,
|
|
70
|
+
buttonDisplay: {
|
|
71
|
+
icon: 'download',
|
|
72
|
+
text: 'Download'
|
|
73
|
+
},
|
|
74
|
+
buttonStyle: {
|
|
75
|
+
type: 'stroked'
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipPreviewEntryListViewItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
80
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxZipPreviewEntryListViewItemComponent, isStandalone: true, selector: "dbx-zip-preview-file-entry-list-view-item", usesInheritance: true, ngImport: i0, template: `
|
|
81
|
+
<div class="dbx-list-item-padded dbx-list-two-line-item">
|
|
82
|
+
<div class="item-left">
|
|
83
|
+
<div class="mat-subtitle-2">{{ name }}</div>
|
|
84
|
+
@if (lastModDate) {
|
|
85
|
+
<div class="item-details">{{ lastModDate | date: 'short' }}</div>
|
|
86
|
+
}
|
|
87
|
+
</div>
|
|
88
|
+
<dbx-spacer></dbx-spacer>
|
|
89
|
+
<div class="item-right">
|
|
90
|
+
@if (canDownload) {
|
|
91
|
+
<dbx-download-blob-button [config]="downloadBlobButtonConfig"></dbx-download-blob-button>
|
|
92
|
+
}
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
`, isInline: true, dependencies: [{ kind: "pipe", type: DatePipe, name: "date" }, { kind: "directive", type: DbxSpacerDirective, selector: "dbx-spacer, [dbxSpacer]" }, { kind: "component", type: DbxDownloadBlobButtonComponent, selector: "dbx-download-blob-button", inputs: ["config"] }] });
|
|
96
|
+
}
|
|
97
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipPreviewEntryListViewItemComponent, decorators: [{
|
|
98
|
+
type: Component,
|
|
99
|
+
args: [{
|
|
100
|
+
selector: 'dbx-zip-preview-file-entry-list-view-item',
|
|
101
|
+
template: `
|
|
102
|
+
<div class="dbx-list-item-padded dbx-list-two-line-item">
|
|
103
|
+
<div class="item-left">
|
|
104
|
+
<div class="mat-subtitle-2">{{ name }}</div>
|
|
105
|
+
@if (lastModDate) {
|
|
106
|
+
<div class="item-details">{{ lastModDate | date: 'short' }}</div>
|
|
107
|
+
}
|
|
108
|
+
</div>
|
|
109
|
+
<dbx-spacer></dbx-spacer>
|
|
110
|
+
<div class="item-right">
|
|
111
|
+
@if (canDownload) {
|
|
112
|
+
<dbx-download-blob-button [config]="downloadBlobButtonConfig"></dbx-download-blob-button>
|
|
113
|
+
}
|
|
114
|
+
</div>
|
|
115
|
+
</div>
|
|
116
|
+
`,
|
|
117
|
+
imports: [DatePipe, DbxIconButtonComponent, DbxSpacerDirective, DbxDownloadBlobButtonComponent],
|
|
118
|
+
standalone: true
|
|
119
|
+
}]
|
|
120
|
+
}] });
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemlwLmJsb2IucHJldmlldy5saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvc3JjL2xpYi9leHRlbnNpb24vemlwL3ppcC5ibG9iLnByZXZpZXcubGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQXNCLHFEQUFxRCxFQUFFLG9DQUFvQyxFQUFFLHlCQUF5QixFQUFFLHdDQUF3QyxFQUFFLGlFQUFpRSxFQUFFLCtDQUErQyxFQUFFLGtCQUFrQixFQUFFLHFDQUFxQyxFQUFtQyxxQ0FBcUMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvZCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEQsT0FBTyxFQUFFLDhCQUE4QixFQUErQixNQUFNLGlEQUFpRCxDQUFDOzs7O0FBSTlILE1BQU0sVUFBVSxzQ0FBc0MsQ0FBQyxLQUFxQztJQUMxRixPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7QUFDbEcsQ0FBQztBQVVELE1BQU0sT0FBTywrQkFBZ0MsU0FBUSx3Q0FBeUU7SUFDNUg7UUFDRSxLQUFLLENBQUM7WUFDSixjQUFjLEVBQUUsbUNBQW1DO1lBQ25ELG9CQUFvQixFQUFFLE1BQU07U0FDN0IsQ0FBQyxDQUFDO0lB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b3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGJ4VmFsdWVBc0xpc3RJdGVtLCBERUZBVUxUX0xJU1RfV1JBUFBFUl9DT01QT05FTlRfQ09ORklHVVJBVElPTl9URU1QTEFURSwgRGJ4TGlzdFdyYXBwZXJDb21wb25lbnRJbXBvcnRzTW9kdWxlLCBwcm92aWRlRGJ4TGlzdFZpZXdXcmFwcGVyLCBBYnN0cmFjdERieFNlbGVjdGlvbkxpc3RXcmFwcGVyRGlyZWN0aXZlLCBERUZBVUxUX0RCWF9TRUxFQ1RJT05fVkFMVUVfTElTVF9DT01QT05FTlRfQ09ORklHVVJBVElPTl9URU1QTEFURSwgRGJ4U2VsZWN0aW9uVmFsdWVMaXN0Vmlld0NvbXBvbmVudEltcG9ydHNNb2R1bGUsIHByb3ZpZGVEYnhMaXN0VmlldywgQWJzdHJhY3REYnhTZWxlY3Rpb25MaXN0Vmlld0RpcmVjdGl2ZSwgRGJ4U2VsZWN0aW9uVmFsdWVMaXN0Vmlld0NvbmZpZywgQWJzdHJhY3REYnhWYWx1ZUxpc3RWaWV3SXRlbUNvbXBvbmVudCwgRGJ4U3BhY2VyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vbGF5b3V0JztcbmltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEYnhaaXBCbG9iUHJldmlld0VudHJ5VHJlZU5vZGUgfSBmcm9tICcuL3ppcC5ibG9iJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERieEljb25CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9idXR0b24nO1xuaW1wb3J0IHsgRGJ4RG93bmxvYWRCbG9iQnV0dG9uQ29tcG9uZW50LCBEYnhEb3dubG9hZEJsb2JCdXR0b25Db25maWcgfSBmcm9tICcuLi9kb3dubG9hZC9ibG9iL2Rvd25sb2FkLmJsb2IuYnV0dG9uLmNvbXBvbmVudCc7XG5cbmV4cG9ydCB0eXBlIERieFppcFByZXZpZXdFbnRyeVdpdGhTZWxlY3Rpb24gPSBEYnhWYWx1ZUFzTGlzdEl0ZW08RGJ4WmlwQmxvYlByZXZpZXdFbnRyeVRyZWVOb2RlPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGljb25Gb3JEYnhaaXBQcmV2aWV3RW50cnlXaXRoU2VsZWN0aW9uKGVudHJ5OiBEYnhaaXBCbG9iUHJldmlld0VudHJ5VHJlZU5vZGUpIHtcbiAgcmV0dXJuIGVudHJ5LnZhbHVlLnZhbHVlLmRpcmVjdG9yeSA/ICdmb2xkZXInIDogZW50cnkudmFsdWUubWltZVR5cGUgPyAnbm90ZScgOiAncXVlc3Rpb25fbWFyayc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RieC16aXAtcHJldmlldy1maWxlLWVudHJ5LWxpc3QnLFxuICB0ZW1wbGF0ZTogREVGQVVMVF9MSVNUX1dSQVBQRVJfQ09NUE9ORU5UX0NPTkZJR1VSQVRJT05fVEVNUExBVEUsXG4gIGltcG9ydHM6IFtEYnhMaXN0V3JhcHBlckNvbXBvbmVudEltcG9ydHNNb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBwcm92aWRlRGJ4TGlzdFZpZXdXcmFwcGVyKERieFppcFByZXZpZXdFbnRyeUxpc3RDb21wb25lbnQpLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIERieFppcFByZXZpZXdFbnRyeUxpc3RDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdERieFNlbGVjdGlvbkxpc3RXcmFwcGVyRGlyZWN0aXZlPERieFppcFByZXZpZXdFbnRyeVdpdGhTZWxlY3Rpb24+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoe1xuICAgICAgY29tcG9uZW50Q2xhc3M6IERieFppcFByZXZpZXdFbnRyeUxpc3RWaWV3Q29tcG9uZW50LFxuICAgICAgZGVmYXVsdFNlbGVjdGlvbk1vZGU6ICd2aWV3J1xuICAgIH0pO1xuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RieC16aXAtcHJldmlldy1maWxlLWVudHJ5LWxpc3QtdmlldycsXG4gIHRlbXBsYXRlOiBERUZBVUxUX0RCWF9TRUxFQ1RJT05fVkFMVUVfTElTVF9DT01QT05FTlRfQ09ORklHVVJBVElPTl9URU1QTEFURSxcbiAgaW1wb3J0czogW0RieFNlbGVjdGlvblZhbHVlTGlzdFZpZXdDb21wb25lbnRJbXBvcnRzTW9kdWxlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogcHJvdmlkZURieExpc3RWaWV3KERieFppcFByZXZpZXdFbnRyeUxpc3RWaWV3Q29tcG9uZW50KVxufSlcbmV4cG9ydCBjbGFzcyBEYnhaaXBQcmV2aWV3RW50cnlMaXN0Vmlld0NvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0RGJ4U2VsZWN0aW9uTGlzdFZpZXdEaXJlY3RpdmU8RGJ4WmlwUHJldmlld0VudHJ5V2l0aFNlbGVjdGlvbj4ge1xuICByZWFkb25seSBjb25maWc6IERieFNlbGVjdGlvblZhbHVlTGlzdFZpZXdDb25maWc8RGJ4WmlwUHJldmlld0VudHJ5V2l0aFNlbGVjdGlvbj4gPSB7XG4gICAgY29tcG9uZW50Q2xhc3M6IERieFppcFByZXZpZXdFbnRyeUxpc3RWaWV3SXRlbUNvbXBvbmVudCxcbiAgICBtYXBWYWx1ZXNUb0l0ZW1WYWx1ZXM6ICh4KSA9PiBvZih4Lm1hcCgoeSkgPT4gKHsgLi4ueSwgaWNvbjogaWNvbkZvckRieFppcFByZXZpZXdFbnRyeVdpdGhTZWxlY3Rpb24oeSksIGl0ZW1WYWx1ZTogeSB9KSkpXG4gIH07XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RieC16aXAtcHJldmlldy1maWxlLWVudHJ5LWxpc3Qtdmlldy1pdGVtJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiZGJ4LWxpc3QtaXRlbS1wYWRkZWQgZGJ4LWxpc3QtdHdvLWxpbmUtaXRlbVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tbGVmdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LXN1YnRpdGxlLTJcIj57eyBuYW1lIH19PC9kaXY+XG4gICAgICAgIEBpZiAobGFzdE1vZERhdGUpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1kZXRhaWxzXCI+e3sgbGFzdE1vZERhdGUgfCBkYXRlOiAnc2hvcnQnIH19PC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRieC1zcGFjZXI+PC9kYngtc3BhY2VyPlxuICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tcmlnaHRcIj5cbiAgICAgICAgQGlmIChjYW5Eb3dubG9hZCkge1xuICAgICAgICAgIDxkYngtZG93bmxvYWQtYmxvYi1idXR0b24gW2NvbmZpZ109XCJkb3dubG9hZEJsb2JCdXR0b25Db25maWdcIj48L2RieC1kb3dubG9hZC1ibG9iLWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIGltcG9ydHM6IFtEYXRlUGlwZSwgRGJ4SWNvbkJ1dHRvbkNvbXBvbmVudCwgRGJ4U3BhY2VyRGlyZWN0aXZlLCBEYnhEb3dubG9hZEJsb2JCdXR0b25Db21wb25lbnRdLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIERieFppcFByZXZpZXdFbnRyeUxpc3RWaWV3SXRlbUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0RGJ4VmFsdWVMaXN0Vmlld0l0ZW1Db21wb25lbnQ8RGJ4WmlwUHJldmlld0VudHJ5V2l0aFNlbGVjdGlvbj4ge1xuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtVmFsdWUudmFsdWUudmFsdWUuZmlsZW5hbWUgPz8gJ2hlbGxvJztcbiAgfVxuXG4gIGdldCBsYXN0TW9kRGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtVmFsdWUudmFsdWUudmFsdWUubGFzdE1vZERhdGUgPz8gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IGlzRGlyZWN0b3J5KCkge1xuICAgIHJldHVybiB0aGlzLml0ZW1WYWx1ZS52YWx1ZS52YWx1ZS5kaXJlY3Rvcnk7XG4gIH1cblxuICBnZXQgY2FuRG93bmxvYWQoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGlyZWN0b3J5O1xuICB9XG5cbiAgZ2V0IGRvd25sb2FkQmxvYkJ1dHRvbkNvbmZpZygpOiBEYnhEb3dubG9hZEJsb2JCdXR0b25Db25maWcge1xuICAgIHJldHVybiB7XG4gICAgICBsb2FkQmxvYjogdGhpcy5pdGVtVmFsdWUudmFsdWUuZ2V0QmxvYixcbiAgICAgIGZpbGVOYW1lOiB0aGlzLml0ZW1WYWx1ZS52YWx1ZS5zbGFzaFBhdGhEZXRhaWxzLmZpbGVOYW1lLFxuICAgICAgYnV0dG9uRGlzcGxheToge1xuICAgICAgICBpY29uOiAnZG93bmxvYWQnLFxuICAgICAgICB0ZXh0OiAnRG93bmxvYWQnXG4gICAgICB9LFxuICAgICAgYnV0dG9uU3R5bGU6IHtcbiAgICAgICAgdHlwZTogJ3N0cm9rZWQnXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
|
|
2
|
+
import { DbxInjectionComponent } from '@dereekb/dbx-core';
|
|
3
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
4
|
+
import { DbxLoadingComponent } from '../../loading';
|
|
5
|
+
import { toObservable, toSignal } from '@angular/core/rxjs-interop';
|
|
6
|
+
import { combineLatest, distinctUntilChanged, from, of, shareReplay, switchMap } from 'rxjs';
|
|
7
|
+
import { beginLoading, errorResult, loadingStateContext, startWithBeginLoading, successResult, valueFromFinishedLoadingState } from '@dereekb/rxjs';
|
|
8
|
+
import { DbxZipBlobPreviewComponent } from './zip.blob.preview.component';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
/**
|
|
11
|
+
* Used to display a corresponding widget based on the input data.
|
|
12
|
+
*/
|
|
13
|
+
export class DbxZipPreviewComponent {
|
|
14
|
+
/**
|
|
15
|
+
* The URL to download the zip file from, if applicable.
|
|
16
|
+
*/
|
|
17
|
+
srcUrl = input();
|
|
18
|
+
/**
|
|
19
|
+
* The blob to use for the zip file, if applicable.
|
|
20
|
+
*/
|
|
21
|
+
blob = input();
|
|
22
|
+
/**
|
|
23
|
+
* The file name to use for the zip file.
|
|
24
|
+
*/
|
|
25
|
+
downloadFileName = input();
|
|
26
|
+
srcUrl$ = toObservable(this.srcUrl);
|
|
27
|
+
blob$ = toObservable(this.blob);
|
|
28
|
+
zipFileBlobLoadingState$ = combineLatest([this.srcUrl$, this.blob$]).pipe(switchMap(([srcUrl, blob]) => {
|
|
29
|
+
let obs;
|
|
30
|
+
if (blob) {
|
|
31
|
+
obs = of(successResult(blob));
|
|
32
|
+
}
|
|
33
|
+
else if (srcUrl) {
|
|
34
|
+
obs = from(fetch(srcUrl, { method: 'GET' }).then((x) => x
|
|
35
|
+
.blob()
|
|
36
|
+
.then((y) => successResult(y))
|
|
37
|
+
.catch((e) => errorResult(e)))).pipe(startWithBeginLoading());
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
obs = of(beginLoading());
|
|
41
|
+
}
|
|
42
|
+
return obs;
|
|
43
|
+
}));
|
|
44
|
+
zipFileBlob$ = this.zipFileBlobLoadingState$.pipe(valueFromFinishedLoadingState(), distinctUntilChanged(), shareReplay(1));
|
|
45
|
+
zipFileBlobSignal = toSignal(this.zipFileBlob$);
|
|
46
|
+
context = loadingStateContext({ obs: this.zipFileBlobLoadingState$ });
|
|
47
|
+
ngOnDestroy() {
|
|
48
|
+
this.context.destroy();
|
|
49
|
+
}
|
|
50
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
51
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: DbxZipPreviewComponent, isStandalone: true, selector: "dbx-zip-preview", inputs: { srcUrl: { classPropertyName: "srcUrl", publicName: "srcUrl", isSignal: true, isRequired: false, transformFunction: null }, blob: { classPropertyName: "blob", publicName: "blob", isSignal: true, isRequired: false, transformFunction: null }, downloadFileName: { classPropertyName: "downloadFileName", publicName: "downloadFileName", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
52
|
+
<dbx-loading [context]="context">
|
|
53
|
+
<dbx-zip-blob-preview [downloadFileName]="downloadFileName()" [blob]="zipFileBlobSignal()"></dbx-zip-blob-preview>
|
|
54
|
+
</dbx-loading>
|
|
55
|
+
`, isInline: true, dependencies: [{ kind: "component", type: DbxLoadingComponent, selector: "dbx-loading", inputs: ["padding", "show", "text", "mode", "color", "diameter", "linear", "loading", "error", "context"] }, { kind: "component", type: DbxZipBlobPreviewComponent, selector: "dbx-zip-blob-preview", inputs: ["blob", "downloadFileName"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
56
|
+
}
|
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipPreviewComponent, decorators: [{
|
|
58
|
+
type: Component,
|
|
59
|
+
args: [{
|
|
60
|
+
selector: 'dbx-zip-preview',
|
|
61
|
+
template: `
|
|
62
|
+
<dbx-loading [context]="context">
|
|
63
|
+
<dbx-zip-blob-preview [downloadFileName]="downloadFileName()" [blob]="zipFileBlobSignal()"></dbx-zip-blob-preview>
|
|
64
|
+
</dbx-loading>
|
|
65
|
+
`,
|
|
66
|
+
standalone: true,
|
|
67
|
+
imports: [DbxInjectionComponent, DbxLoadingComponent, DbxZipBlobPreviewComponent, NgTemplateOutlet],
|
|
68
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
69
|
+
}]
|
|
70
|
+
}] });
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemlwLnByZXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi9zcmMvbGliL2V4dGVuc2lvbi96aXAvemlwLnByZXZpZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFjLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFnQixtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEssT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBRTFFOztHQUVHO0FBWUgsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQzs7T0FFRztJQUNNLE1BQU0sR0FBRyxLQUFLLEVBQStCLENBQUM7SUFFdkQ7O09BRUc7SUFDTSxJQUFJLEdBQUcsS0FBSyxFQUFlLENBQUM7SUFFckM7O09BRUc7SUFDTSxnQkFBZ0IsR0FBRyxLQUFLLEVBQWlCLENBQUM7SUFFMUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsS0FBSyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFaEMsd0JBQXdCLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2hGLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7UUFDM0IsSUFBSSxHQUFtQyxDQUFDO1FBRXhDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxHQUFHLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7YUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLEdBQUcsR0FBRyxJQUFJLENBQ1IsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQzFDLENBQUM7aUJBQ0UsSUFBSSxFQUFFO2lCQUNOLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUM3QixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBTyxDQUFDLENBQUMsQ0FBQyxDQUN0QyxDQUNGLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztRQUNsQyxDQUFDO2FBQU0sQ0FBQztZQUNOLEdBQUcsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFRLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBRU8sWUFBWSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNILGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFaEQsT0FBTyxHQUFHLG1CQUFtQixDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7SUFFL0UsV0FBVztRQUNULElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekIsQ0FBQzt3R0FqRFUsc0JBQXNCOzRGQUF0QixzQkFBc0IsZ2VBVHZCOzs7O0dBSVQsNERBRWdDLG1CQUFtQixtS0FBRSwwQkFBMEI7OzRGQUdyRSxzQkFBc0I7a0JBWGxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsUUFBUSxFQUFFOzs7O0dBSVQ7b0JBQ0QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLDBCQUEwQixFQUFFLGdCQUFnQixDQUFDO29CQUNuRyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBpbnB1dCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYnhJbmplY3Rpb25Db21wb25lbnQgfSBmcm9tICdAZGVyZWVrYi9kYngtY29yZSc7XG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERieExvYWRpbmdDb21wb25lbnQgfSBmcm9tICcuLi8uLi9sb2FkaW5nJztcbmltcG9ydCB7IE1heWJlLCBXZWJzaXRlVXJsV2l0aFByZWZpeCB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmcm9tLCBPYnNlcnZhYmxlLCBvZiwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgYmVnaW5Mb2FkaW5nLCBlcnJvclJlc3VsdCwgTG9hZGluZ1N0YXRlLCBsb2FkaW5nU3RhdGVDb250ZXh0LCBzdGFydFdpdGhCZWdpbkxvYWRpbmcsIHN1Y2Nlc3NSZXN1bHQsIHZhbHVlRnJvbUZpbmlzaGVkTG9hZGluZ1N0YXRlIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBEYnhaaXBCbG9iUHJldmlld0NvbXBvbmVudCB9IGZyb20gJy4vemlwLmJsb2IucHJldmlldy5jb21wb25lbnQnO1xuXG4vKipcbiAqIFVzZWQgdG8gZGlzcGxheSBhIGNvcnJlc3BvbmRpbmcgd2lkZ2V0IGJhc2VkIG9uIHRoZSBpbnB1dCBkYXRhLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYngtemlwLXByZXZpZXcnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkYngtbG9hZGluZyBbY29udGV4dF09XCJjb250ZXh0XCI+XG4gICAgICA8ZGJ4LXppcC1ibG9iLXByZXZpZXcgW2Rvd25sb2FkRmlsZU5hbWVdPVwiZG93bmxvYWRGaWxlTmFtZSgpXCIgW2Jsb2JdPVwiemlwRmlsZUJsb2JTaWduYWwoKVwiPjwvZGJ4LXppcC1ibG9iLXByZXZpZXc+XG4gICAgPC9kYngtbG9hZGluZz5cbiAgYCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0RieEluamVjdGlvbkNvbXBvbmVudCwgRGJ4TG9hZGluZ0NvbXBvbmVudCwgRGJ4WmlwQmxvYlByZXZpZXdDb21wb25lbnQsIE5nVGVtcGxhdGVPdXRsZXRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBEYnhaaXBQcmV2aWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIFRoZSBVUkwgdG8gZG93bmxvYWQgdGhlIHppcCBmaWxlIGZyb20sIGlmIGFwcGxpY2FibGUuXG4gICAqL1xuICByZWFkb25seSBzcmNVcmwgPSBpbnB1dDxNYXliZTxXZWJzaXRlVXJsV2l0aFByZWZpeD4+KCk7XG5cbiAgLyoqXG4gICAqIFRoZSBibG9iIHRvIHVzZSBmb3IgdGhlIHppcCBmaWxlLCBpZiBhcHBsaWNhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgYmxvYiA9IGlucHV0PE1heWJlPEJsb2I+PigpO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZSBuYW1lIHRvIHVzZSBmb3IgdGhlIHppcCBmaWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgZG93bmxvYWRGaWxlTmFtZSA9IGlucHV0PE1heWJlPHN0cmluZz4+KCk7XG5cbiAgcmVhZG9ubHkgc3JjVXJsJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNyY1VybCk7XG4gIHJlYWRvbmx5IGJsb2IkID0gdG9PYnNlcnZhYmxlKHRoaXMuYmxvYik7XG5cbiAgcmVhZG9ubHkgemlwRmlsZUJsb2JMb2FkaW5nU3RhdGUkID0gY29tYmluZUxhdGVzdChbdGhpcy5zcmNVcmwkLCB0aGlzLmJsb2IkXSkucGlwZShcbiAgICBzd2l0Y2hNYXAoKFtzcmNVcmwsIGJsb2JdKSA9PiB7XG4gICAgICBsZXQgb2JzOiBPYnNlcnZhYmxlPExvYWRpbmdTdGF0ZTxCbG9iPj47XG5cbiAgICAgIGlmIChibG9iKSB7XG4gICAgICAgIG9icyA9IG9mKHN1Y2Nlc3NSZXN1bHQoYmxvYikpO1xuICAgICAgfSBlbHNlIGlmIChzcmNVcmwpIHtcbiAgICAgICAgb2JzID0gZnJvbShcbiAgICAgICAgICBmZXRjaChzcmNVcmwsIHsgbWV0aG9kOiAnR0VUJyB9KS50aGVuKCh4KSA9PlxuICAgICAgICAgICAgeFxuICAgICAgICAgICAgICAuYmxvYigpXG4gICAgICAgICAgICAgIC50aGVuKCh5KSA9PiBzdWNjZXNzUmVzdWx0KHkpKVxuICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IGVycm9yUmVzdWx0PEJsb2I+KGUpKVxuICAgICAgICAgIClcbiAgICAgICAgKS5waXBlKHN0YXJ0V2l0aEJlZ2luTG9hZGluZygpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9icyA9IG9mKGJlZ2luTG9hZGluZzxCbG9iPigpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9icztcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IHppcEZpbGVCbG9iJCA9IHRoaXMuemlwRmlsZUJsb2JMb2FkaW5nU3RhdGUkLnBpcGUodmFsdWVGcm9tRmluaXNoZWRMb2FkaW5nU3RhdGUoKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgc2hhcmVSZXBsYXkoMSkpO1xuICByZWFkb25seSB6aXBGaWxlQmxvYlNpZ25hbCA9IHRvU2lnbmFsKHRoaXMuemlwRmlsZUJsb2IkKTtcblxuICByZWFkb25seSBjb250ZXh0ID0gbG9hZGluZ1N0YXRlQ29udGV4dCh7IG9iczogdGhpcy56aXBGaWxlQmxvYkxvYWRpbmdTdGF0ZSQgfSk7XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0LmRlc3Ryb3koKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
2
|
+
import { DbxDialogContentDirective, AbstractDialogDirective } from '../../interaction/dialog';
|
|
3
|
+
import { DbxZipPreviewComponent } from './zip.preview.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class DbxZipPreviewDialogComponent extends AbstractDialogDirective {
|
|
6
|
+
get srcUrl() {
|
|
7
|
+
return this.data.srcUrl;
|
|
8
|
+
}
|
|
9
|
+
get blob() {
|
|
10
|
+
return this.data.blob;
|
|
11
|
+
}
|
|
12
|
+
get downloadFileName() {
|
|
13
|
+
return this.data.downloadFileName;
|
|
14
|
+
}
|
|
15
|
+
static openDialog(matDialog, config) {
|
|
16
|
+
const dialogRef = matDialog.open(DbxZipPreviewDialogComponent, {
|
|
17
|
+
width: '80vw',
|
|
18
|
+
height: '80vh',
|
|
19
|
+
...config,
|
|
20
|
+
data: config
|
|
21
|
+
});
|
|
22
|
+
return dialogRef;
|
|
23
|
+
}
|
|
24
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipPreviewDialogComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
25
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DbxZipPreviewDialogComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
|
|
26
|
+
<dbx-dialog-content>
|
|
27
|
+
<dbx-zip-preview [srcUrl]="srcUrl" [blob]="blob" [downloadFileName]="downloadFileName"></dbx-zip-preview>
|
|
28
|
+
</dbx-dialog-content>
|
|
29
|
+
`, isInline: true, dependencies: [{ kind: "component", type: DbxZipPreviewComponent, selector: "dbx-zip-preview", inputs: ["srcUrl", "blob", "downloadFileName"] }, { kind: "directive", type: DbxDialogContentDirective, selector: "dbx-dialog-content,[dbxDialogContent],.dbx-dialog-content", inputs: ["width"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
30
|
+
}
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxZipPreviewDialogComponent, decorators: [{
|
|
32
|
+
type: Component,
|
|
33
|
+
args: [{
|
|
34
|
+
template: `
|
|
35
|
+
<dbx-dialog-content>
|
|
36
|
+
<dbx-zip-preview [srcUrl]="srcUrl" [blob]="blob" [downloadFileName]="downloadFileName"></dbx-zip-preview>
|
|
37
|
+
</dbx-dialog-content>
|
|
38
|
+
`,
|
|
39
|
+
imports: [DbxZipPreviewComponent, DbxDialogContentDirective],
|
|
40
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
41
|
+
standalone: true
|
|
42
|
+
}]
|
|
43
|
+
}] });
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemlwLnByZXZpZXcuZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvc3JjL2xpYi9leHRlbnNpb24vemlwL3ppcC5wcmV2aWV3LmRpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFrQmpFLE1BQU0sT0FBTyw0QkFBNkIsU0FBUSx1QkFBd0Q7SUFDeEcsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ3BDLENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQW9CLEVBQUUsTUFBaUM7UUFDdkUsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRTtZQUM3RCxLQUFLLEVBQUUsTUFBTTtZQUNiLE1BQU0sRUFBRSxNQUFNO1lBQ2QsR0FBRyxNQUFNO1lBQ1QsSUFBSSxFQUFFLE1BQU07U0FDYixDQUFDLENBQUM7UUFFSCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO3dHQXRCVSw0QkFBNEI7NEZBQTVCLDRCQUE0QiwrRkFUN0I7Ozs7R0FJVCw0REFDUyxzQkFBc0IsNEdBQUUseUJBQXlCOzs0RkFJaEQsNEJBQTRCO2tCQVZ4QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRTs7OztHQUlUO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixFQUFFLHlCQUF5QixDQUFDO29CQUM1RCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYsIE1hdERpYWxvZ0NvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBXZWJzaXRlVXJsV2l0aFByZWZpeCwgTWF5YmUgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IERieERpYWxvZ0NvbnRlbnREaXJlY3RpdmUsIEFic3RyYWN0RGlhbG9nRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vaW50ZXJhY3Rpb24vZGlhbG9nJztcbmltcG9ydCB7IERieFppcFByZXZpZXdDb21wb25lbnQgfSBmcm9tICcuL3ppcC5wcmV2aWV3LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4WmlwUHJldmlld0RpYWxvZ0NvbmZpZyBleHRlbmRzIE9taXQ8TWF0RGlhbG9nQ29uZmlnLCAnZGF0YSc+IHtcbiAgcmVhZG9ubHkgc3JjVXJsPzogTWF5YmU8V2Vic2l0ZVVybFdpdGhQcmVmaXg+O1xuICByZWFkb25seSBibG9iPzogTWF5YmU8QmxvYj47XG4gIHJlYWRvbmx5IGRvd25sb2FkRmlsZU5hbWU/OiBNYXliZTxzdHJpbmc+O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGJ4LWRpYWxvZy1jb250ZW50PlxuICAgICAgPGRieC16aXAtcHJldmlldyBbc3JjVXJsXT1cInNyY1VybFwiIFtibG9iXT1cImJsb2JcIiBbZG93bmxvYWRGaWxlTmFtZV09XCJkb3dubG9hZEZpbGVOYW1lXCI+PC9kYngtemlwLXByZXZpZXc+XG4gICAgPC9kYngtZGlhbG9nLWNvbnRlbnQ+XG4gIGAsXG4gIGltcG9ydHM6IFtEYnhaaXBQcmV2aWV3Q29tcG9uZW50LCBEYnhEaWFsb2dDb250ZW50RGlyZWN0aXZlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRGJ4WmlwUHJldmlld0RpYWxvZ0NvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0RGlhbG9nRGlyZWN0aXZlPHZvaWQsIERieFppcFByZXZpZXdEaWFsb2dDb25maWc+IHtcbiAgZ2V0IHNyY1VybCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnNyY1VybDtcbiAgfVxuXG4gIGdldCBibG9iKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuYmxvYjtcbiAgfVxuXG4gIGdldCBkb3dubG9hZEZpbGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuZG93bmxvYWRGaWxlTmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBvcGVuRGlhbG9nKG1hdERpYWxvZzogTWF0RGlhbG9nLCBjb25maWc6IERieFppcFByZXZpZXdEaWFsb2dDb25maWcpOiBNYXREaWFsb2dSZWY8RGJ4WmlwUHJldmlld0RpYWxvZ0NvbXBvbmVudCwgdm9pZD4ge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IG1hdERpYWxvZy5vcGVuKERieFppcFByZXZpZXdEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnODB2dycsXG4gICAgICBoZWlnaHQ6ICc4MHZoJyxcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIGRhdGE6IGNvbmZpZ1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRpYWxvZ1JlZjtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { Component, viewChild, ElementRef, ChangeDetectionStrategy, computed, inject, SecurityContext, input, effect, signal } from '@angular/core';
|
|
2
|
+
import { toObservable } from '@angular/core/rxjs-interop';
|
|
3
|
+
import { combineLatest } from 'rxjs';
|
|
4
|
+
import { AbstractSubscriptionDirective } from '@dereekb/dbx-core';
|
|
5
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
|
6
|
+
import { browserObjectUrlRef } from '@dereekb/browser';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class DbxEmbedComponent extends AbstractSubscriptionDirective {
|
|
9
|
+
_browserObjectUrlRef = browserObjectUrlRef();
|
|
10
|
+
sanitizer = inject(DomSanitizer);
|
|
11
|
+
root = viewChild('root', { read: ElementRef });
|
|
12
|
+
sanitizeUrl = input(false);
|
|
13
|
+
srcUrl = input();
|
|
14
|
+
type = input();
|
|
15
|
+
/**
|
|
16
|
+
* The input src blob or media source to use.
|
|
17
|
+
*
|
|
18
|
+
* If set, the srcUrl will be updated with the browser object URL.
|
|
19
|
+
*/
|
|
20
|
+
srcBlob = input();
|
|
21
|
+
srcUrlFromBlob = signal(undefined);
|
|
22
|
+
typeFromBlob = signal(undefined);
|
|
23
|
+
srcBlobEffect = effect(() => {
|
|
24
|
+
const blob = this.srcBlob();
|
|
25
|
+
this.srcUrlFromBlob.set(this._browserObjectUrlRef.createBrowserUrl(blob));
|
|
26
|
+
this.typeFromBlob.set(blob?.type);
|
|
27
|
+
}, {
|
|
28
|
+
allowSignalWrites: true
|
|
29
|
+
});
|
|
30
|
+
srcUrlSignal = computed(() => {
|
|
31
|
+
const srcUrl = this.srcUrl();
|
|
32
|
+
const srcUrlFromBlob = this.srcUrlFromBlob();
|
|
33
|
+
const baseUrl = srcUrl ?? srcUrlFromBlob;
|
|
34
|
+
let url = baseUrl;
|
|
35
|
+
const sanitizeUrl = this.sanitizeUrl();
|
|
36
|
+
if (url && typeof url === 'string' && sanitizeUrl) {
|
|
37
|
+
url = this.sanitizer.bypassSecurityTrustResourceUrl(url);
|
|
38
|
+
}
|
|
39
|
+
return url;
|
|
40
|
+
});
|
|
41
|
+
typeSignal = computed(() => {
|
|
42
|
+
const type = this.type();
|
|
43
|
+
const typeFromBlob = this.typeFromBlob();
|
|
44
|
+
return type ?? typeFromBlob;
|
|
45
|
+
});
|
|
46
|
+
root$ = toObservable(this.root);
|
|
47
|
+
srcUrl$ = toObservable(this.srcUrlSignal);
|
|
48
|
+
type$ = toObservable(this.typeSignal);
|
|
49
|
+
constructor() {
|
|
50
|
+
super();
|
|
51
|
+
this.sub = combineLatest([this.srcUrl$, this.root$, this.type$]).subscribe(([srcUrl, root, type]) => {
|
|
52
|
+
const element = root?.nativeElement;
|
|
53
|
+
if (element) {
|
|
54
|
+
// remove all embeds from the element
|
|
55
|
+
element?.childNodes.forEach((x) => element.removeChild(x));
|
|
56
|
+
if (srcUrl) {
|
|
57
|
+
// NOTE: We do this because of the following chromium behavior:
|
|
58
|
+
// https://issues.chromium.org/issues/40508296
|
|
59
|
+
//
|
|
60
|
+
// Embed cannot have src change dynamically, so we create a new embed element each time the src changes.
|
|
61
|
+
//
|
|
62
|
+
const embed = document.createElement('embed');
|
|
63
|
+
let url = undefined;
|
|
64
|
+
if (srcUrl != null && typeof srcUrl !== 'string') {
|
|
65
|
+
url = this.sanitizer.sanitize(SecurityContext.URL, srcUrl);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
url = srcUrl;
|
|
69
|
+
}
|
|
70
|
+
embed.setAttribute('src', url ?? '');
|
|
71
|
+
// only set the type if it is presented
|
|
72
|
+
if (type) {
|
|
73
|
+
embed.setAttribute('type', type);
|
|
74
|
+
// if the type is an image, also add the embed-image class
|
|
75
|
+
if (type.startsWith('image/')) {
|
|
76
|
+
embed.setAttribute('class', 'embed-image');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
element.appendChild(embed);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
ngOnDestroy() {
|
|
85
|
+
super.ngOnDestroy();
|
|
86
|
+
this._browserObjectUrlRef.destroy();
|
|
87
|
+
}
|
|
88
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxEmbedComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
89
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.13", type: DbxEmbedComponent, isStandalone: true, selector: "dbx-embed", inputs: { sanitizeUrl: { classPropertyName: "sanitizeUrl", publicName: "sanitizeUrl", isSignal: true, isRequired: false, transformFunction: null }, srcUrl: { classPropertyName: "srcUrl", publicName: "srcUrl", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, srcBlob: { classPropertyName: "srcBlob", publicName: "srcBlob", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "root", first: true, predicate: ["root"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
|
|
90
|
+
<span #root></span>
|
|
91
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
92
|
+
}
|
|
93
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxEmbedComponent, decorators: [{
|
|
94
|
+
type: Component,
|
|
95
|
+
args: [{
|
|
96
|
+
selector: 'dbx-embed',
|
|
97
|
+
template: `
|
|
98
|
+
<span #root></span>
|
|
99
|
+
`,
|
|
100
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
101
|
+
standalone: true
|
|
102
|
+
}]
|
|
103
|
+
}], ctorParameters: () => [] });
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1iZWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi9zcmMvbGliL2ludGVyYWN0aW9uL2lmcmFtZS9lbWJlZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQy9KLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXJDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQW1CLE1BQU0sMkJBQTJCLENBQUM7QUFDMUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBVXZELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSw2QkFBNkI7SUFDakQsb0JBQW9CLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztJQUVyRCxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRWpDLElBQUksR0FBRyxTQUFTLENBQXNDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBRXBGLFdBQVcsR0FBRyxLQUFLLENBQWlCLEtBQUssQ0FBQyxDQUFDO0lBRTNDLE1BQU0sR0FBRyxLQUFLLEVBQW1DLENBQUM7SUFDbEQsSUFBSSxHQUFHLEtBQUssRUFBdUMsQ0FBQztJQUU3RDs7OztPQUlHO0lBQ00sT0FBTyxHQUFHLEtBQUssRUFBZSxDQUFDO0lBQy9CLGNBQWMsR0FBRyxNQUFNLENBQWdCLFNBQVMsQ0FBQyxD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QkFBTSxDQUFDO3dCQUNOLEdBQUcsR0FBRyxNQUFNLENBQUM7b0JBQ2YsQ0FBQztvQkFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7b0JBRXJDLHVDQUF1QztvQkFDdkMsSUFBSSxJQUFJLEVBQUUsQ0FBQzt3QkFDVCxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzt3QkFFakMsMERBQTBEO3dCQUMxRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQzs0QkFDOUIsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7d0JBQzdDLENBQUM7b0JBQ0gsQ0FBQztvQkFFRCxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM3QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVRLFdBQVc7UUFDbEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN0QyxDQUFDO3dHQTFHVSxpQkFBaUI7NEZBQWpCLGlCQUFpQixrcEJBS21ELFVBQVUsb0VBWC9FOztHQUVUOzs0RkFJVSxpQkFBaUI7a0JBUjdCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFFBQVEsRUFBRTs7R0FFVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCB2aWV3Q2hpbGQsIEVsZW1lbnRSZWYsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBjb21wdXRlZCwgaW5qZWN0LCBTZWN1cml0eUNvbnRleHQsIGlucHV0LCBlZmZlY3QsIHNpZ25hbCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb250ZW50VHlwZU1pbWVUeXBlLCBNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgQWJzdHJhY3RTdWJzY3JpcHRpb25EaXJlY3RpdmUgfSBmcm9tICdAZGVyZWVrYi9kYngtY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgYnJvd3Nlck9iamVjdFVybFJlZiB9IGZyb20gJ0BkZXJlZWtiL2Jyb3dzZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYngtZW1iZWQnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxzcGFuICNyb290Pjwvc3Bhbj5cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRGJ4RW1iZWRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdFN1YnNjcmlwdGlvbkRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Jyb3dzZXJPYmplY3RVcmxSZWYgPSBicm93c2VyT2JqZWN0VXJsUmVmKCk7XG5cbiAgcmVhZG9ubHkgc2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG5cbiAgcmVhZG9ubHkgcm9vdCA9IHZpZXdDaGlsZDxzdHJpbmcsIEVsZW1lbnRSZWY8SFRNTFNwYW5FbGVtZW50Pj4oJ3Jvb3QnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSk7XG5cbiAgcmVhZG9ubHkgc2FuaXRpemVVcmwgPSBpbnB1dDxNYXliZTxib29sZWFuPj4oZmFsc2UpO1xuXG4gIHJlYWRvbmx5IHNyY1VybCA9IGlucHV0PE1heWJlPHN0cmluZyB8IFNhZmVSZXNvdXJjZVVybD4+KCk7XG4gIHJlYWRvbmx5IHR5cGUgPSBpbnB1dDxNYXliZTxDb250ZW50VHlwZU1pbWVUeXBlIHwgc3RyaW5nPj4oKTtcblxuICAvKipcbiAgICogVGhlIGlucHV0IHNyYyBibG9iIG9yIG1lZGlhIHNvdXJjZSB0byB1c2UuXG4gICAqXG4gICAqIElmIHNldCwgdGhlIHNyY1VybCB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGUgYnJvd3NlciBvYmplY3QgVVJMLlxuICAgKi9cbiAgcmVhZG9ubHkgc3JjQmxvYiA9IGlucHV0PE1heWJlPEJsb2I+PigpO1xuICByZWFkb25seSBzcmNVcmxGcm9tQmxvYiA9IHNpZ25hbDxNYXliZTxzdHJpbmc+Pih1bmRlZmluZWQpO1xuICByZWFkb25seSB0eXBlRnJvbUJsb2IgPSBzaWduYWw8TWF5YmU8c3RyaW5nPj4odW5kZWZpbmVkKTtcblxuICByZWFkb25seSBzcmNCbG9iRWZmZWN0ID0gZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGJsb2IgPSB0aGlzLnNyY0Jsb2IoKTtcblxuICAgICAgdGhpcy5zcmNVcmxGcm9tQmxvYi5zZXQodGhpcy5fYnJvd3Nlck9iamVjdFVybFJlZi5jcmVhdGVCcm93c2VyVXJsKGJsb2IpKTtcbiAgICAgIHRoaXMudHlwZUZyb21CbG9iLnNldChibG9iPy50eXBlKTtcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlXG4gICAgfVxuICApO1xuXG4gIHJlYWRvbmx5IHNyY1VybFNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzcmNVcmwgPSB0aGlzLnNyY1VybCgpO1xuICAgIGNvbnN0IHNyY1VybEZyb21CbG9iID0gdGhpcy5zcmNVcmxGcm9tQmxvYigpO1xuXG4gICAgY29uc3QgYmFzZVVybCA9IHNyY1VybCA/PyBzcmNVcmxGcm9tQmxvYjtcblxuICAgIGxldCB1cmw6IE1heWJlPHN0cmluZyB8IFNhZmVSZXNvdXJjZVVybD4gPSBiYXNlVXJsO1xuICAgIGNvbnN0IHNhbml0aXplVXJsID0gdGhpcy5zYW5pdGl6ZVVybCgpO1xuXG4gICAgaWYgKHVybCAmJiB0eXBlb2YgdXJsID09PSAnc3RyaW5nJyAmJiBzYW5pdGl6ZVVybCkge1xuICAgICAgdXJsID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdHlwZVNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy50eXBlKCk7XG4gICAgY29uc3QgdHlwZUZyb21CbG9iID0gdGhpcy50eXBlRnJvbUJsb2IoKTtcbiAgICByZXR1cm4gdHlwZSA/PyB0eXBlRnJvbUJsb2I7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJvb3QkID0gdG9PYnNlcnZhYmxlKHRoaXMucm9vdCk7XG4gIHJlYWRvbmx5IHNyY1VybCQgPSB0b09ic2VydmFibGUodGhpcy5zcmNVcmxTaWduYWwpO1xuICByZWFkb25seSB0eXBlJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnR5cGVTaWduYWwpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnN1YiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuc3JjVXJsJCwgdGhpcy5yb290JCwgdGhpcy50eXBlJF0pLnN1YnNjcmliZSgoW3NyY1VybCwgcm9vdCwgdHlwZV0pID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSByb290Py5uYXRpdmVFbGVtZW50O1xuXG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAvLyByZW1vdmUgYWxsIGVtYmVkcyBmcm9tIHRoZSBlbGVtZW50XG4gICAgICAgIGVsZW1lbnQ/LmNoaWxkTm9kZXMuZm9yRWFjaCgoeCkgPT4gZWxlbWVudC5yZW1vdmVDaGlsZCh4KSk7XG5cbiAgICAgICAgaWYgKHNyY1VybCkge1xuICAgICAgICAgIC8vIE5PVEU6IFdlIGRvIHRoaXMgYmVjYXVzZSBvZiB0aGUgZm9sbG93aW5nIGNocm9taXVtIGJlaGF2aW9yOlxuICAgICAgICAgIC8vIGh0dHBzOi8vaXNzdWVzLmNocm9taXVtLm9yZy9pc3N1ZXMvNDA1MDgyOTZcbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIEVtYmVkIGNhbm5vdCBoYXZlIHNyYyBjaGFuZ2UgZHluYW1pY2FsbHksIHNvIHdlIGNyZWF0ZSBhIG5ldyBlbWJlZCBlbGVtZW50IGVhY2ggdGltZSB0aGUgc3JjIGNoYW5nZXMuXG4gICAgICAgICAgLy9cbiAgICAgICAgICBjb25zdCBlbWJlZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2VtYmVkJyk7XG5cbiAgICAgICAgICBsZXQgdXJsOiBNYXliZTxzdHJpbmc+ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgaWYgKHNyY1VybCAhPSBudWxsICYmIHR5cGVvZiBzcmNVcmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB1cmwgPSB0aGlzLnNhbml0aXplci5zYW5pdGl6ZShTZWN1cml0eUNvbnRleHQuVVJMLCBzcmNVcmwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cmwgPSBzcmNVcmw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZW1iZWQuc2V0QXR0cmlidXRlKCdzcmMnLCB1cmwgPz8gJycpO1xuXG4gICAgICAgICAgLy8gb25seSBzZXQgdGhlIHR5cGUgaWYgaXQgaXMgcHJlc2VudGVkXG4gICAgICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgICAgIGVtYmVkLnNldEF0dHJpYnV0ZSgndHlwZScsIHR5cGUpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGUgdHlwZSBpcyBhbiBpbWFnZSwgYWxzbyBhZGQgdGhlIGVtYmVkLWltYWdlIGNsYXNzXG4gICAgICAgICAgICBpZiAodHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkge1xuICAgICAgICAgICAgICBlbWJlZC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ2VtYmVkLWltYWdlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChlbWJlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy5fYnJvd3Nlck9iamVjdFVybFJlZi5kZXN0cm95KCk7XG4gIH1cbn1cbiJdfQ==
|