phoenix-ui-components 3.0.4 → 4.0.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/README.md +66 -0
- package/dist/README.md +66 -0
- package/dist/fesm2022/phoenix-ui-components.mjs +3875 -490
- package/dist/fesm2022/phoenix-ui-components.mjs.map +1 -1
- package/dist/index.d.ts +1370 -3
- package/package.json +10 -19
- package/dist/components/embed-menu/embed-menu.component.d.ts +0 -5
- package/dist/components/embed-menu/experiment-link/experiment-link.component.d.ts +0 -9
- package/dist/components/file-explorer/file-explorer.component.d.ts +0 -35
- package/dist/components/loader/loader.component.d.ts +0 -11
- package/dist/components/nav/nav.component.d.ts +0 -8
- package/dist/components/phoenix-menu/config/config-slider/config-slider.component.d.ts +0 -18
- package/dist/components/phoenix-menu/index.d.ts +0 -3
- package/dist/components/phoenix-menu/phoenix-menu-item/phoenix-menu-item.component.d.ts +0 -14
- package/dist/components/phoenix-menu/phoenix-menu.component.d.ts +0 -7
- package/dist/components/phoenix-ui.module.d.ts +0 -71
- package/dist/components/ring-loader/ring-loader.component.d.ts +0 -5
- package/dist/components/ui-menu/animate-camera/animate-camera.component.d.ts +0 -20
- package/dist/components/ui-menu/animate-event/animate-event.component.d.ts +0 -10
- package/dist/components/ui-menu/ar-toggle/ar-toggle.component.d.ts +0 -11
- package/dist/components/ui-menu/auto-rotate/auto-rotate.component.d.ts +0 -10
- package/dist/components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component.d.ts +0 -29
- package/dist/components/ui-menu/collections-info/collections-info.component.d.ts +0 -15
- package/dist/components/ui-menu/cycle-events/cycle-events.component.d.ts +0 -21
- package/dist/components/ui-menu/dark-theme/dark-theme.component.d.ts +0 -12
- package/dist/components/ui-menu/event-data-explorer/event-data-explorer-dialog/event-data-explorer-dialog.component.d.ts +0 -28
- package/dist/components/ui-menu/event-data-explorer/event-data-explorer.component.d.ts +0 -13
- package/dist/components/ui-menu/event-selector/event-selector.component.d.ts +0 -12
- package/dist/components/ui-menu/experiment-info/experiment-info.component.d.ts +0 -14
- package/dist/components/ui-menu/geometry-browser/geometry-browser-overlay/geometry-browser-overlay.component.d.ts +0 -22
- package/dist/components/ui-menu/geometry-browser/geometry-browser.component.d.ts +0 -15
- package/dist/components/ui-menu/index.d.ts +0 -39
- package/dist/components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.d.ts +0 -26
- package/dist/components/ui-menu/info-panel/info-panel.component.d.ts +0 -33
- package/dist/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.d.ts +0 -34
- package/dist/components/ui-menu/io-options/io-options.component.d.ts +0 -11
- package/dist/components/ui-menu/main-view-toggle/main-view-toggle.component.d.ts +0 -10
- package/dist/components/ui-menu/make-picture/make-picture.component.d.ts +0 -20
- package/dist/components/ui-menu/menu-toggle/menu-toggle.component.d.ts +0 -9
- package/dist/components/ui-menu/object-clipping/object-clipping.component.d.ts +0 -15
- package/dist/components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component.d.ts +0 -15
- package/dist/components/ui-menu/object-selection/object-selection.component.d.ts +0 -17
- package/dist/components/ui-menu/overlay/overlay.component.d.ts +0 -52
- package/dist/components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component.d.ts +0 -20
- package/dist/components/ui-menu/overlay-view/overlay-view.component.d.ts +0 -15
- package/dist/components/ui-menu/performance-toggle/performance-toggle.component.d.ts +0 -10
- package/dist/components/ui-menu/share-link/share-link-dialog/share-link-dialog.component.d.ts +0 -28
- package/dist/components/ui-menu/share-link/share-link.component.d.ts +0 -9
- package/dist/components/ui-menu/ss-mode/ss-mode.component.d.ts +0 -10
- package/dist/components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component.d.ts +0 -19
- package/dist/components/ui-menu/tree-menu/tree-menu.component.d.ts +0 -10
- package/dist/components/ui-menu/ui-menu-wrapper/ui-menu-wrapper.component.d.ts +0 -6
- package/dist/components/ui-menu/ui-menu.component.d.ts +0 -10
- package/dist/components/ui-menu/view-options/cartesian-grid-config/cartesian-grid-config.component.d.ts +0 -51
- package/dist/components/ui-menu/view-options/view-options.component.d.ts +0 -33
- package/dist/components/ui-menu/vr-toggle/vr-toggle.component.d.ts +0 -11
- package/dist/components/ui-menu/zoom-controls/zoom-controls.component.d.ts +0 -39
- package/dist/esm2022/components/embed-menu/embed-menu.component.mjs +0 -22
- package/dist/esm2022/components/embed-menu/experiment-link/experiment-link.component.mjs +0 -27
- package/dist/esm2022/components/file-explorer/file-explorer.component.mjs +0 -109
- package/dist/esm2022/components/loader/loader.component.mjs +0 -71
- package/dist/esm2022/components/nav/nav.component.mjs +0 -19
- package/dist/esm2022/components/phoenix-menu/config/config-slider/config-slider.component.mjs +0 -82
- package/dist/esm2022/components/phoenix-menu/index.mjs +0 -4
- package/dist/esm2022/components/phoenix-menu/phoenix-menu-item/phoenix-menu-item.component.mjs +0 -308
- package/dist/esm2022/components/phoenix-menu/phoenix-menu.component.mjs +0 -23
- package/dist/esm2022/components/phoenix-ui.module.mjs +0 -257
- package/dist/esm2022/components/ring-loader/ring-loader.component.mjs +0 -16
- package/dist/esm2022/components/ui-menu/animate-camera/animate-camera.component.mjs +0 -120
- package/dist/esm2022/components/ui-menu/animate-event/animate-event.component.mjs +0 -33
- package/dist/esm2022/components/ui-menu/ar-toggle/ar-toggle.component.mjs +0 -83
- package/dist/esm2022/components/ui-menu/auto-rotate/auto-rotate.component.mjs +0 -29
- package/dist/esm2022/components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component.mjs +0 -274
- package/dist/esm2022/components/ui-menu/collections-info/collections-info.component.mjs +0 -47
- package/dist/esm2022/components/ui-menu/cycle-events/cycle-events.component.mjs +0 -90
- package/dist/esm2022/components/ui-menu/dark-theme/dark-theme.component.mjs +0 -32
- package/dist/esm2022/components/ui-menu/event-data-explorer/event-data-explorer-dialog/event-data-explorer-dialog.component.mjs +0 -128
- package/dist/esm2022/components/ui-menu/event-data-explorer/event-data-explorer.component.mjs +0 -35
- package/dist/esm2022/components/ui-menu/event-selector/event-selector.component.mjs +0 -54
- package/dist/esm2022/components/ui-menu/experiment-info/experiment-info.component.mjs +0 -100
- package/dist/esm2022/components/ui-menu/geometry-browser/geometry-browser-overlay/geometry-browser-overlay.component.mjs +0 -172
- package/dist/esm2022/components/ui-menu/geometry-browser/geometry-browser.component.mjs +0 -45
- package/dist/esm2022/components/ui-menu/index.mjs +0 -40
- package/dist/esm2022/components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.mjs +0 -69
- package/dist/esm2022/components/ui-menu/info-panel/info-panel.component.mjs +0 -59
- package/dist/esm2022/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.mjs +0 -304
- package/dist/esm2022/components/ui-menu/io-options/io-options.component.mjs +0 -36
- package/dist/esm2022/components/ui-menu/main-view-toggle/main-view-toggle.component.mjs +0 -32
- package/dist/esm2022/components/ui-menu/make-picture/make-picture.component.mjs +0 -109
- package/dist/esm2022/components/ui-menu/menu-toggle/menu-toggle.component.mjs +0 -40
- package/dist/esm2022/components/ui-menu/object-clipping/object-clipping.component.mjs +0 -72
- package/dist/esm2022/components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component.mjs +0 -59
- package/dist/esm2022/components/ui-menu/object-selection/object-selection.component.mjs +0 -46
- package/dist/esm2022/components/ui-menu/overlay/overlay.component.mjs +0 -197
- package/dist/esm2022/components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component.mjs +0 -83
- package/dist/esm2022/components/ui-menu/overlay-view/overlay-view.component.mjs +0 -41
- package/dist/esm2022/components/ui-menu/performance-toggle/performance-toggle.component.mjs +0 -29
- package/dist/esm2022/components/ui-menu/share-link/share-link-dialog/share-link-dialog.component.mjs +0 -165
- package/dist/esm2022/components/ui-menu/share-link/share-link.component.mjs +0 -28
- package/dist/esm2022/components/ui-menu/ss-mode/ss-mode.component.mjs +0 -46
- package/dist/esm2022/components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component.mjs +0 -94
- package/dist/esm2022/components/ui-menu/tree-menu/tree-menu.component.mjs +0 -78
- package/dist/esm2022/components/ui-menu/ui-menu-wrapper/ui-menu-wrapper.component.mjs +0 -34
- package/dist/esm2022/components/ui-menu/ui-menu.component.mjs +0 -54
- package/dist/esm2022/components/ui-menu/view-options/cartesian-grid-config/cartesian-grid-config.component.mjs +0 -247
- package/dist/esm2022/components/ui-menu/view-options/view-options.component.mjs +0 -170
- package/dist/esm2022/components/ui-menu/vr-toggle/vr-toggle.component.mjs +0 -52
- package/dist/esm2022/components/ui-menu/zoom-controls/zoom-controls.component.mjs +0 -79
- package/dist/esm2022/phoenix-ui-components.mjs +0 -5
- package/dist/esm2022/public_api.mjs +0 -11
- package/dist/esm2022/services/error-message-service.mjs +0 -30
- package/dist/esm2022/services/event-display.service.mjs +0 -23
- package/dist/esm2022/services/extras/attribute.pipe.mjs +0 -33
- package/dist/esm2022/services/extras/event-data-import.mjs +0 -21
- package/dist/esm2022/services/file-loader.service.mjs +0 -93
- package/dist/esm2022/services/global-error-handler.mjs +0 -30
- package/dist/esm2022/services/index.mjs +0 -4
- package/dist/public_api.d.ts +0 -10
- package/dist/services/error-message-service.d.ts +0 -17
- package/dist/services/event-display.service.d.ts +0 -13
- package/dist/services/extras/attribute.pipe.d.ts +0 -16
- package/dist/services/extras/event-data-import.d.ts +0 -15
- package/dist/services/file-loader.service.d.ts +0 -17
- package/dist/services/global-error-handler.d.ts +0 -20
- package/dist/services/index.d.ts +0 -3
package/dist/esm2022/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.mjs
DELETED
|
@@ -1,304 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { CMSLoader, JiveXMLLoader, readZipFile, Edm4hepJsonLoader, } from 'phoenix-event-display';
|
|
3
|
-
import { EventDataFormat, ImportOption, } from '../../../../services/extras/event-data-import';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "../../../../services/event-display.service";
|
|
6
|
-
import * as i2 from "@angular/material/dialog";
|
|
7
|
-
import * as i3 from "@angular/common";
|
|
8
|
-
import * as i4 from "@angular/material/button";
|
|
9
|
-
function IOOptionsDialogComponent_div_4_ng_container_5_Template(rf, ctx) { if (rf & 1) {
|
|
10
|
-
const _r2 = i0.ɵɵgetCurrentView();
|
|
11
|
-
i0.ɵɵelementContainerStart(0);
|
|
12
|
-
i0.ɵɵelementStart(1, "input", 29, 5);
|
|
13
|
-
i0.ɵɵlistener("change", function IOOptionsDialogComponent_div_4_ng_container_5_Template_input_change_1_listener($event) { const eventDataImportOption_r3 = i0.ɵɵrestoreView(_r2).$implicit; return i0.ɵɵresetView(eventDataImportOption_r3.handler($event.target.files)); });
|
|
14
|
-
i0.ɵɵelementEnd();
|
|
15
|
-
i0.ɵɵelementStart(3, "button", 13);
|
|
16
|
-
i0.ɵɵlistener("click", function IOOptionsDialogComponent_div_4_ng_container_5_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r2); const eventDataFileInput_r4 = i0.ɵɵreference(2); return i0.ɵɵresetView(eventDataFileInput_r4.click()); });
|
|
17
|
-
i0.ɵɵelement(4, "img", 30);
|
|
18
|
-
i0.ɵɵtext(5);
|
|
19
|
-
i0.ɵɵelementEnd();
|
|
20
|
-
i0.ɵɵelementContainerEnd();
|
|
21
|
-
} if (rf & 2) {
|
|
22
|
-
const eventDataImportOption_r3 = ctx.$implicit;
|
|
23
|
-
i0.ɵɵadvance();
|
|
24
|
-
i0.ɵɵproperty("accept", eventDataImportOption_r3.accept);
|
|
25
|
-
i0.ɵɵadvance(4);
|
|
26
|
-
i0.ɵɵtextInterpolate1(" Load ", eventDataImportOption_r3.fileType, " ");
|
|
27
|
-
} }
|
|
28
|
-
function IOOptionsDialogComponent_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
29
|
-
i0.ɵɵelementStart(0, "div")(1, "p", 10)(2, "b");
|
|
30
|
-
i0.ɵɵtext(3, "Event data");
|
|
31
|
-
i0.ɵɵelementEnd()();
|
|
32
|
-
i0.ɵɵelementStart(4, "div", 11);
|
|
33
|
-
i0.ɵɵtemplate(5, IOOptionsDialogComponent_div_4_ng_container_5_Template, 6, 2, "ng-container", 28);
|
|
34
|
-
i0.ɵɵelementEnd()();
|
|
35
|
-
} if (rf & 2) {
|
|
36
|
-
const ctx_r4 = i0.ɵɵnextContext();
|
|
37
|
-
i0.ɵɵadvance(5);
|
|
38
|
-
i0.ɵɵproperty("ngForOf", ctx_r4.eventDataOptionsWithHandler);
|
|
39
|
-
} }
|
|
40
|
-
export class IOOptionsDialogComponent {
|
|
41
|
-
eventDisplay;
|
|
42
|
-
dialogRef;
|
|
43
|
-
eventDataImportOptions = [EventDataFormat.JSON];
|
|
44
|
-
eventDataOptionsWithHandler;
|
|
45
|
-
supportedEventDataFormats = [
|
|
46
|
-
new ImportOption(EventDataFormat.JSON, '.json', this.handleJSONEventDataInput.bind(this), 'application/json'),
|
|
47
|
-
new ImportOption(EventDataFormat.EDM4HEPJSON, '.edm4hep.json', this.handleEDM4HEPJSONEventDataInput.bind(this), 'application/json'),
|
|
48
|
-
new ImportOption(EventDataFormat.JIVEXML, '.xml', this.handleJiveXMLDataInput.bind(this), 'text/xml'),
|
|
49
|
-
new ImportOption(EventDataFormat.ZIP, '.zip', this.handleZipEventDataInput.bind(this), '.zip'),
|
|
50
|
-
new ImportOption(EventDataFormat.IG, '.ig', this.handleIgEventDataInput.bind(this), '.ig'),
|
|
51
|
-
];
|
|
52
|
-
constructor(eventDisplay, dialogRef) {
|
|
53
|
-
this.eventDisplay = eventDisplay;
|
|
54
|
-
this.dialogRef = dialogRef;
|
|
55
|
-
}
|
|
56
|
-
ngOnInit() {
|
|
57
|
-
this.eventDataOptionsWithHandler = this.supportedEventDataFormats.filter((eventDataFormat) => this.eventDataImportOptions.includes(eventDataFormat.format));
|
|
58
|
-
this.eventDataImportOptions.forEach((eventDataImportOption) => {
|
|
59
|
-
if (eventDataImportOption instanceof ImportOption) {
|
|
60
|
-
const importHandler = eventDataImportOption.handler.bind(this);
|
|
61
|
-
eventDataImportOption.handler = (files) => {
|
|
62
|
-
importHandler(files);
|
|
63
|
-
this.onClose();
|
|
64
|
-
};
|
|
65
|
-
this.eventDataOptionsWithHandler.push(eventDataImportOption);
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
getSupportedEventDataFormats() {
|
|
70
|
-
return this.eventDataImportOptions
|
|
71
|
-
.map((format) => {
|
|
72
|
-
if (format instanceof ImportOption) {
|
|
73
|
-
return format.format;
|
|
74
|
-
}
|
|
75
|
-
return format;
|
|
76
|
-
})
|
|
77
|
-
.filter((format) => format !== 'ZIP')
|
|
78
|
-
.join(', ');
|
|
79
|
-
}
|
|
80
|
-
onClose() {
|
|
81
|
-
this.dialogRef.close();
|
|
82
|
-
}
|
|
83
|
-
handleJSONEventDataInput(files) {
|
|
84
|
-
const callback = (content) => {
|
|
85
|
-
const json = typeof content === 'string' ? JSON.parse(content) : content;
|
|
86
|
-
this.eventDisplay.parsePhoenixEvents(json);
|
|
87
|
-
};
|
|
88
|
-
this.handleFileInput(files[0], 'json', callback);
|
|
89
|
-
}
|
|
90
|
-
handleEDM4HEPJSONEventDataInput(files) {
|
|
91
|
-
const callback = (content) => {
|
|
92
|
-
const json = typeof content === 'string' ? JSON.parse(content) : content;
|
|
93
|
-
const edm4hepJsonLoader = new Edm4hepJsonLoader();
|
|
94
|
-
edm4hepJsonLoader.setRawEventData(json);
|
|
95
|
-
edm4hepJsonLoader.processEventData();
|
|
96
|
-
this.eventDisplay.parsePhoenixEvents(edm4hepJsonLoader.getEventData());
|
|
97
|
-
};
|
|
98
|
-
this.handleFileInput(files[0], 'json', callback);
|
|
99
|
-
}
|
|
100
|
-
handleJiveXMLDataInput(files) {
|
|
101
|
-
const callback = (content) => {
|
|
102
|
-
const jiveloader = this.getJiveXMLLoader();
|
|
103
|
-
jiveloader.process(content);
|
|
104
|
-
const eventData = jiveloader.getEventData();
|
|
105
|
-
this.eventDisplay.buildEventDataFromJSON(eventData);
|
|
106
|
-
};
|
|
107
|
-
this.handleFileInput(files[0], 'xml', callback);
|
|
108
|
-
}
|
|
109
|
-
getJiveXMLLoader() {
|
|
110
|
-
if (this.eventDisplay?.configuration?.eventDataLoader instanceof JiveXMLLoader) {
|
|
111
|
-
return this.eventDisplay.configuration.eventDataLoader;
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
return new JiveXMLLoader();
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
handleOBJInput(files) {
|
|
118
|
-
const callback = (content, name) => {
|
|
119
|
-
this.eventDisplay.parseOBJGeometry(content, name);
|
|
120
|
-
};
|
|
121
|
-
this.handleFileInput(files[0], 'obj', callback);
|
|
122
|
-
}
|
|
123
|
-
handleSceneInput(files) {
|
|
124
|
-
const callback = (content) => {
|
|
125
|
-
this.eventDisplay.parsePhoenixDisplay(content);
|
|
126
|
-
};
|
|
127
|
-
this.handleFileInput(files[0], 'phnx', callback);
|
|
128
|
-
}
|
|
129
|
-
handleGLTFInput(files) {
|
|
130
|
-
const callback = (file) => {
|
|
131
|
-
this.eventDisplay.parseGLTFGeometry(file);
|
|
132
|
-
};
|
|
133
|
-
if (this.isFileOfExtension(files[0].name, 'gltf,glb,gltf.zip,glb.zip')) {
|
|
134
|
-
callback(files[0]);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
handlePhoenixInput(files) {
|
|
138
|
-
const callback = (content) => {
|
|
139
|
-
this.eventDisplay.parsePhoenixDisplay(content);
|
|
140
|
-
};
|
|
141
|
-
this.handleFileInput(files[0], 'phnx', callback);
|
|
142
|
-
}
|
|
143
|
-
async handleROOTInput(files) {
|
|
144
|
-
const rootObjectName = prompt('Enter object name in ROOT file');
|
|
145
|
-
await this.eventDisplay.loadRootGeometry(URL.createObjectURL(files[0]), rootObjectName, files[0].name.split('.')[0]);
|
|
146
|
-
this.onClose();
|
|
147
|
-
}
|
|
148
|
-
async handleRootJSONInput(files) {
|
|
149
|
-
if (!this.isFileOfExtension(files[0].name, 'gz')) {
|
|
150
|
-
return;
|
|
151
|
-
}
|
|
152
|
-
const name = files[0].name.split('.')[0];
|
|
153
|
-
await this.eventDisplay.loadRootJSONGeometry(URL.createObjectURL(files[0]), name);
|
|
154
|
-
this.onClose();
|
|
155
|
-
}
|
|
156
|
-
handleIgEventDataInput(files) {
|
|
157
|
-
const cmsLoader = new CMSLoader();
|
|
158
|
-
cmsLoader.readIgArchive(files[0], (allEvents) => {
|
|
159
|
-
const allEventsData = cmsLoader.getAllEventsData(allEvents);
|
|
160
|
-
this.eventDisplay.parsePhoenixEvents(allEventsData);
|
|
161
|
-
this.onClose();
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
async handleZipEventDataInput(files) {
|
|
165
|
-
if (!this.isFileOfExtension(files[0].name, 'zip,json.zip')) {
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
const allEventsObject = {};
|
|
169
|
-
let filesWithData;
|
|
170
|
-
// Using a try catch block to catch any errors in Promises
|
|
171
|
-
try {
|
|
172
|
-
filesWithData = await readZipFile(files[0]);
|
|
173
|
-
}
|
|
174
|
-
catch (error) {
|
|
175
|
-
console.error('Error while reading zip', error);
|
|
176
|
-
this.eventDisplay.getInfoLogger().add('Could not read zip file', 'Error');
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
// JSON event data
|
|
180
|
-
Object.keys(filesWithData)
|
|
181
|
-
.filter((fileName) => fileName.endsWith('.json'))
|
|
182
|
-
.forEach((fileName) => {
|
|
183
|
-
Object.assign(allEventsObject, JSON.parse(filesWithData[fileName]));
|
|
184
|
-
});
|
|
185
|
-
// JiveXML event data
|
|
186
|
-
const jiveloader = this.getJiveXMLLoader();
|
|
187
|
-
Object.keys(filesWithData)
|
|
188
|
-
.filter((fileName) => {
|
|
189
|
-
return fileName.endsWith('.xml') || fileName.startsWith('JiveXML');
|
|
190
|
-
})
|
|
191
|
-
.forEach((fileName) => {
|
|
192
|
-
jiveloader.process(filesWithData[fileName]);
|
|
193
|
-
const eventData = jiveloader.getEventData();
|
|
194
|
-
Object.assign(allEventsObject, { [fileName]: eventData });
|
|
195
|
-
});
|
|
196
|
-
// For some reason the above doesn't pick up JiveXML_XXX_YYY.zip
|
|
197
|
-
this.eventDisplay.parsePhoenixEvents(allEventsObject);
|
|
198
|
-
this.onClose();
|
|
199
|
-
}
|
|
200
|
-
handleFileInput(file, extensions, callback) {
|
|
201
|
-
const reader = new FileReader();
|
|
202
|
-
if (this.isFileOfExtension(file.name, extensions)) {
|
|
203
|
-
reader.onload = () => {
|
|
204
|
-
callback(reader.result.toString(), file.name.split('.')[0]);
|
|
205
|
-
};
|
|
206
|
-
reader.readAsText(file);
|
|
207
|
-
}
|
|
208
|
-
this.onClose();
|
|
209
|
-
}
|
|
210
|
-
isFileOfExtension(fileName, extensions) {
|
|
211
|
-
if (extensions.split(',').includes(fileName.slice(fileName.indexOf('.') + 1))) {
|
|
212
|
-
return true;
|
|
213
|
-
}
|
|
214
|
-
console.error('Error: Invalid file format!');
|
|
215
|
-
this.eventDisplay.getInfoLogger().add('Invalid file format!', 'Error');
|
|
216
|
-
return false;
|
|
217
|
-
}
|
|
218
|
-
saveScene() {
|
|
219
|
-
this.eventDisplay.exportPhoenixDisplay();
|
|
220
|
-
}
|
|
221
|
-
exportOBJ() {
|
|
222
|
-
this.eventDisplay.exportToOBJ();
|
|
223
|
-
}
|
|
224
|
-
static ɵfac = function IOOptionsDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || IOOptionsDialogComponent)(i0.ɵɵdirectiveInject(i1.EventDisplayService), i0.ɵɵdirectiveInject(i2.MatDialogRef)); };
|
|
225
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: IOOptionsDialogComponent, selectors: [["app-io-options-dialog"]], inputs: { eventDataImportOptions: "eventDataImportOptions" }, decls: 47, vars: 1, consts: [["objFileInput", ""], ["gltfFileInput", ""], ["rootFileInput", ""], ["rootJSONFileInput", ""], ["loadSceneInput", ""], ["eventDataFileInput", ""], [1, "dialog"], ["mat-dialog-title", ""], ["mat-dialog-content", "", 1, "dialog-content"], [4, "ngIf"], [1, "text-center"], [1, "row", "centered"], ["type", "file", "tabindex", "-1", "accept", ".obj", "name", "image", 1, "file-input", 3, "change"], [1, "file-input-button", 3, "click"], ["src", "assets/icons/obj.svg", "alt", ""], ["type", "file", "tabindex", "-1", "accept", ".gltf,.glb,.gltf.zip,.glb.zip", "name", "image", 1, "file-input", 3, "change"], ["src", "assets/icons/gltf.svg", "alt", ""], ["type", "file", "tabindex", "-1", "accept", ".root", 1, "file-input", 3, "change"], ["src", "assets/icons/file-import.svg", "alt", ""], ["type", "file", "tabindex", "-1", "accept", ".json.gz", 1, "file-input", 3, "change"], ["id", "exportScene", 1, "file-input-button", "load-export", 3, "click"], ["src", "assets/icons/save.svg", "alt", ""], ["type", "file", "tabindex", "-1", "accept", ".phnx", "name", "image", 1, "file-input", 3, "change"], ["id", "importScene", 1, "file-input-button", "load-export", 3, "click"], ["src", "assets/icons/upload.svg", "alt", ""], ["id", "exportOBJ", 1, "file-input-button", "export-button", 3, "click"], ["mat-dialog-actions", "", "align", "end"], ["mat-flat-button", "", "color", "primary", "cdkFocusInitial", "", 3, "click"], [4, "ngFor", "ngForOf"], ["type", "file", "tabindex", "-1", 1, "file-input", 3, "change", "accept"], ["src", "assets/icons/eventData.svg", "alt", "Event data icon"]], template: function IOOptionsDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
226
|
-
const _r1 = i0.ɵɵgetCurrentView();
|
|
227
|
-
i0.ɵɵelementStart(0, "div", 6)(1, "h1", 7);
|
|
228
|
-
i0.ɵɵtext(2, "Import and export");
|
|
229
|
-
i0.ɵɵelementEnd();
|
|
230
|
-
i0.ɵɵelementStart(3, "div", 8);
|
|
231
|
-
i0.ɵɵtemplate(4, IOOptionsDialogComponent_div_4_Template, 6, 1, "div", 9);
|
|
232
|
-
i0.ɵɵelementStart(5, "p", 10)(6, "b");
|
|
233
|
-
i0.ɵɵtext(7, "Geometries");
|
|
234
|
-
i0.ɵɵelementEnd()();
|
|
235
|
-
i0.ɵɵelementStart(8, "div", 11)(9, "input", 12, 0);
|
|
236
|
-
i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_9_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleOBJInput($event.target.files)); });
|
|
237
|
-
i0.ɵɵelementEnd();
|
|
238
|
-
i0.ɵɵelementStart(11, "button", 13);
|
|
239
|
-
i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r1); const objFileInput_r6 = i0.ɵɵreference(10); return i0.ɵɵresetView(objFileInput_r6.click()); });
|
|
240
|
-
i0.ɵɵelement(12, "img", 14);
|
|
241
|
-
i0.ɵɵtext(13, " Load .obj ");
|
|
242
|
-
i0.ɵɵelementEnd();
|
|
243
|
-
i0.ɵɵelementStart(14, "input", 15, 1);
|
|
244
|
-
i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_14_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleGLTFInput($event.target.files)); });
|
|
245
|
-
i0.ɵɵelementEnd();
|
|
246
|
-
i0.ɵɵelementStart(16, "button", 13);
|
|
247
|
-
i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r1); const gltfFileInput_r7 = i0.ɵɵreference(15); return i0.ɵɵresetView(gltfFileInput_r7.click()); });
|
|
248
|
-
i0.ɵɵelement(17, "img", 16);
|
|
249
|
-
i0.ɵɵtext(18, " Load .gltf/.glb ");
|
|
250
|
-
i0.ɵɵelementEnd();
|
|
251
|
-
i0.ɵɵelementStart(19, "input", 17, 2);
|
|
252
|
-
i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_19_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleROOTInput($event.target.files)); });
|
|
253
|
-
i0.ɵɵelementEnd();
|
|
254
|
-
i0.ɵɵelementStart(21, "button", 13);
|
|
255
|
-
i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_21_listener() { i0.ɵɵrestoreView(_r1); const rootFileInput_r8 = i0.ɵɵreference(20); return i0.ɵɵresetView(rootFileInput_r8.click()); });
|
|
256
|
-
i0.ɵɵelement(22, "img", 18);
|
|
257
|
-
i0.ɵɵtext(23, " Load .root ");
|
|
258
|
-
i0.ɵɵelementEnd();
|
|
259
|
-
i0.ɵɵelementStart(24, "input", 19, 3);
|
|
260
|
-
i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_24_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleRootJSONInput($event.target.files)); });
|
|
261
|
-
i0.ɵɵelementEnd();
|
|
262
|
-
i0.ɵɵelementStart(26, "button", 13);
|
|
263
|
-
i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_26_listener() { i0.ɵɵrestoreView(_r1); const rootJSONFileInput_r9 = i0.ɵɵreference(25); return i0.ɵɵresetView(rootJSONFileInput_r9.click()); });
|
|
264
|
-
i0.ɵɵelement(27, "img", 18);
|
|
265
|
-
i0.ɵɵtext(28, " Load .json.gz ");
|
|
266
|
-
i0.ɵɵelementEnd()();
|
|
267
|
-
i0.ɵɵelementStart(29, "p", 10)(30, "b");
|
|
268
|
-
i0.ɵɵtext(31, "Scene");
|
|
269
|
-
i0.ɵɵelementEnd()();
|
|
270
|
-
i0.ɵɵelementStart(32, "div", 11)(33, "button", 20);
|
|
271
|
-
i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_33_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.saveScene()); });
|
|
272
|
-
i0.ɵɵelement(34, "img", 21);
|
|
273
|
-
i0.ɵɵtext(35, " Save scene ");
|
|
274
|
-
i0.ɵɵelementEnd();
|
|
275
|
-
i0.ɵɵelementStart(36, "input", 22, 4);
|
|
276
|
-
i0.ɵɵlistener("change", function IOOptionsDialogComponent_Template_input_change_36_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handlePhoenixInput($event.target.files)); });
|
|
277
|
-
i0.ɵɵelementEnd();
|
|
278
|
-
i0.ɵɵelementStart(38, "button", 23);
|
|
279
|
-
i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_38_listener() { i0.ɵɵrestoreView(_r1); const loadSceneInput_r10 = i0.ɵɵreference(37); return i0.ɵɵresetView(loadSceneInput_r10.click()); });
|
|
280
|
-
i0.ɵɵelement(39, "img", 24);
|
|
281
|
-
i0.ɵɵtext(40, " Load scene ");
|
|
282
|
-
i0.ɵɵelementEnd();
|
|
283
|
-
i0.ɵɵelementStart(41, "button", 25);
|
|
284
|
-
i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_41_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.exportOBJ()); });
|
|
285
|
-
i0.ɵɵelement(42, "img", 14);
|
|
286
|
-
i0.ɵɵtext(43, " Save OBJ ");
|
|
287
|
-
i0.ɵɵelementEnd()()();
|
|
288
|
-
i0.ɵɵelementStart(44, "div", 26)(45, "button", 27);
|
|
289
|
-
i0.ɵɵlistener("click", function IOOptionsDialogComponent_Template_button_click_45_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onClose()); });
|
|
290
|
-
i0.ɵɵtext(46, " Close ");
|
|
291
|
-
i0.ɵɵelementEnd()()();
|
|
292
|
-
} if (rf & 2) {
|
|
293
|
-
i0.ɵɵadvance(4);
|
|
294
|
-
i0.ɵɵproperty("ngIf", ctx.eventDataImportOptions.length > 0);
|
|
295
|
-
} }, dependencies: [i3.NgForOf, i3.NgIf, i2.MatDialogTitle, i2.MatDialogActions, i2.MatDialogContent, i4.MatButton], styles: [".row[_ngcontent-%COMP%]{justify-content:center;margin:1rem 0}.file-input[_ngcontent-%COMP%]{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.file-input-button[_ngcontent-%COMP%]{font-size:1em;font-weight:700;color:#fff;background-color:#6eaece;padding:1em .5em;border:none;border-radius:10px;width:8rem;margin:0 .4rem}.file-input-button.load-export[_ngcontent-%COMP%]{padding:.8em .2em;width:7rem}.file-input-button.load-export[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{max-height:1.2em}.file-input-button.export-button[_ngcontent-%COMP%]{background-color:#cb7133}.file-input-button.export-button[_ngcontent-%COMP%]:hover{background-color:#ad5b2d}.file-input-button[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{max-height:2em;display:block;width:100%}.file-input-button[_ngcontent-%COMP%]:hover{background-color:#118ab2}#exportScene[_ngcontent-%COMP%]{background-color:#5bd99e}#exportScene[_ngcontent-%COMP%]:hover{background-color:#05c292}#importScene[_ngcontent-%COMP%]{background-color:#ecc25e}#importScene[_ngcontent-%COMP%]:hover{background-color:#d6b44d}"] });
|
|
296
|
-
}
|
|
297
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IOOptionsDialogComponent, [{
|
|
298
|
-
type: Component,
|
|
299
|
-
args: [{ selector: 'app-io-options-dialog', template: "<div class=\"dialog\">\n <h1 mat-dialog-title>Import and export</h1>\n <div mat-dialog-content class=\"dialog-content\">\n <div *ngIf=\"eventDataImportOptions.length > 0\">\n <p class=\"text-center\"><b>Event data</b></p>\n\n <div class=\"row centered\">\n <ng-container\n *ngFor=\"let eventDataImportOption of eventDataOptionsWithHandler\"\n >\n <input\n #eventDataFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n [accept]=\"eventDataImportOption.accept\"\n (change)=\"eventDataImportOption.handler($event.target.files)\"\n />\n <button\n class=\"file-input-button\"\n (click)=\"eventDataFileInput.click()\"\n >\n <img src=\"assets/icons/eventData.svg\" alt=\"Event data icon\" />\n Load {{ eventDataImportOption.fileType }}\n </button>\n </ng-container>\n </div>\n </div>\n\n <p class=\"text-center\"><b>Geometries</b></p>\n\n <div class=\"row centered\">\n <input\n #objFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".obj\"\n name=\"image\"\n (change)=\"handleOBJInput($event.target.files)\"\n />\n <button class=\"file-input-button\" (click)=\"objFileInput.click()\">\n <img src=\"assets/icons/obj.svg\" alt=\"\" /> Load .obj\n </button>\n\n <input\n #gltfFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".gltf,.glb,.gltf.zip,.glb.zip\"\n name=\"image\"\n (change)=\"handleGLTFInput($event.target.files)\"\n />\n <button class=\"file-input-button\" (click)=\"gltfFileInput.click()\">\n <img src=\"assets/icons/gltf.svg\" alt=\"\" /> Load .gltf/.glb\n </button>\n\n <input\n #rootFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".root\"\n (change)=\"handleROOTInput($event.target.files)\"\n />\n <button class=\"file-input-button\" (click)=\"rootFileInput.click()\">\n <img src=\"assets/icons/file-import.svg\" alt=\"\" /> Load .root\n </button>\n\n <input\n #rootJSONFileInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".json.gz\"\n (change)=\"handleRootJSONInput($event.target.files)\"\n />\n <button class=\"file-input-button\" (click)=\"rootJSONFileInput.click()\">\n <img src=\"assets/icons/file-import.svg\" alt=\"\" /> Load .json.gz\n </button>\n </div>\n\n <p class=\"text-center\"><b>Scene</b></p>\n\n <div class=\"row centered\">\n <button\n class=\"file-input-button load-export\"\n id=\"exportScene\"\n (click)=\"saveScene()\"\n >\n <img src=\"assets/icons/save.svg\" alt=\"\" /> Save scene\n </button>\n\n <input\n #loadSceneInput\n type=\"file\"\n tabindex=\"-1\"\n class=\"file-input\"\n accept=\".phnx\"\n name=\"image\"\n (change)=\"handlePhoenixInput($event.target.files)\"\n />\n <button\n class=\"file-input-button load-export\"\n id=\"importScene\"\n (click)=\"loadSceneInput.click()\"\n >\n <img src=\"assets/icons/upload.svg\" alt=\"\" /> Load scene\n </button>\n\n <button\n class=\"file-input-button export-button\"\n id=\"exportOBJ\"\n (click)=\"exportOBJ()\"\n >\n <img src=\"assets/icons/obj.svg\" alt=\"\" /> Save OBJ\n </button>\n </div>\n </div>\n\n <div mat-dialog-actions align=\"end\">\n <button mat-flat-button color=\"primary\" (click)=\"onClose()\" cdkFocusInitial>\n Close\n </button>\n </div>\n</div>\n", styles: [".row{justify-content:center;margin:1rem 0}.file-input{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.file-input-button{font-size:1em;font-weight:700;color:#fff;background-color:#6eaece;padding:1em .5em;border:none;border-radius:10px;width:8rem;margin:0 .4rem}.file-input-button.load-export{padding:.8em .2em;width:7rem}.file-input-button.load-export img{max-height:1.2em}.file-input-button.export-button{background-color:#cb7133}.file-input-button.export-button:hover{background-color:#ad5b2d}.file-input-button img{max-height:2em;display:block;width:100%}.file-input-button:hover{background-color:#118ab2}#exportScene{background-color:#5bd99e}#exportScene:hover{background-color:#05c292}#importScene{background-color:#ecc25e}#importScene:hover{background-color:#d6b44d}\n"] }]
|
|
300
|
-
}], () => [{ type: i1.EventDisplayService }, { type: i2.MatDialogRef }], { eventDataImportOptions: [{
|
|
301
|
-
type: Input
|
|
302
|
-
}] }); })();
|
|
303
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(IOOptionsDialogComponent, { className: "IOOptionsDialogComponent", filePath: "components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.ts", lineNumber: 21 }); })();
|
|
304
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8tb3B0aW9ucy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbXBvbmVudHMvdWktbWVudS9pby1vcHRpb25zL2lvLW9wdGlvbnMtZGlhbG9nL2lvLW9wdGlvbnMtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb21wb25lbnRzL3VpLW1lbnUvaW8tb3B0aW9ucy9pby1vcHRpb25zLWRpYWxvZy9pby1vcHRpb25zLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQ0wsU0FBUyxFQUNULGFBQWEsRUFDYixXQUFXLEVBQ1gsaUJBQWlCLEdBQ2xCLE1BQU0sdUJBQXVCLENBQUM7QUFHL0IsT0FBTyxFQUNMLGVBQWUsRUFFZixZQUFZLEdBQ2IsTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7Ozs7SUNOL0MsNkJBRUM7SUFDQyxvQ0FPRTtJQURBLGtOQUFVLHFEQUFrRCxLQUFDO0lBTi9ELGlCQU9FO0lBQ0Ysa0NBR0M7SUFEQyxpTkFBUyw2QkFBMEIsS0FBQztJQUVwQywwQkFBOEQ7SUFDOUQsWUFDRjtJQUFBLGlCQUFTOzs7O0lBVFAsY0FBdUM7SUFBdkMsd0RBQXVDO0lBUXZDLGVBQ0Y7SUFERSx1RUFDRjs7O0lBcEJtQixBQUF2QixBQURGLDJCQUErQyxZQUN0QixRQUFHO0lBQUEsMEJBQVU7SUFBSSxBQUFKLGlCQUFJLEVBQUk7SUFFNUMsK0JBQTBCO0lBQ3hCLGtHQUVDO0lBa0JMLEFBREUsaUJBQU0sRUFDRjs7O0lBbkJrQyxlQUE4QjtJQUE5Qiw0REFBOEI7O0FEWTFFLE1BQU0sT0FBTyx3QkFBd0I7SUF3Q3pCO0lBQ0Q7SUF2Q1Qsc0JBQXNCLEdBQTRCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxD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WUFFSixBQURFLEFBREUsaUJBQVMsRUFDTCxFQUNGO1lBR0osQUFERixnQ0FBb0Msa0JBQzBDO1lBQXBDLDRJQUFTLGFBQVMsS0FBQztZQUN6RCx3QkFDRjtZQUVKLEFBREUsQUFERSxpQkFBUyxFQUNMLEVBQ0Y7O1lBM0hJLGVBQXVDO1lBQXZDLDREQUF1Qzs7O2lGRGlCcEMsd0JBQXdCO2NBTHBDLFNBQVM7MkJBQ0UsdUJBQXVCOytFQU1qQyxzQkFBc0I7a0JBRHJCLEtBQUs7O2tGQURLLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgT25Jbml0LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDTVNMb2FkZXIsXG4gIEppdmVYTUxMb2FkZXIsXG4gIHJlYWRaaXBGaWxlLFxuICBFZG00aGVwSnNvbkxvYWRlcixcbn0gZnJvbSAncGhvZW5peC1ldmVudC1kaXNwbGF5JztcbmltcG9ydCB7IEV2ZW50RGlzcGxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9ldmVudC1kaXNwbGF5LnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7XG4gIEV2ZW50RGF0YUZvcm1hdCxcbiAgdHlwZSBFdmVudERhdGFJbXBvcnRPcHRpb24sXG4gIEltcG9ydE9wdGlvbixcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvZXh0cmFzL2V2ZW50LWRhdGEtaW1wb3J0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWlvLW9wdGlvbnMtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lvLW9wdGlvbnMtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW8tb3B0aW9ucy1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgSU9PcHRpb25zRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgZXZlbnREYXRhSW1wb3J0T3B0aW9uczogRXZlbnREYXRhSW1wb3J0T3B0aW9uW10gPSBbRXZlbnREYXRhRm9ybWF0LkpTT05dO1xuXG4gIGV2ZW50RGF0YU9wdGlvbnNXaXRoSGFuZGxlcjogSW1wb3J0T3B0aW9uW107XG5cbiAgcHJpdmF0ZSBzdXBwb3J0ZWRFdmVudERhdGFGb3JtYXRzID0gW1xuICAgIG5ldyBJbXBvcnRPcHRpb24oXG4gICAgICBFdmVudERhdGFGb3JtYXQuSlNPTixcbiAgICAgICcuanNvbicsXG4gICAgICB0aGlzLmhhbmRsZUpTT05FdmVudERhdGFJbnB1dC5iaW5kKHRoaXMpLFxuICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICksXG4gICAgbmV3IEltcG9ydE9wdGlvbihcbiAgICAgIEV2ZW50RGF0YUZvcm1hdC5FRE00SEVQSlNPTixcbiAgICAgICcuZWRtNGhlcC5qc29uJyxcbiAgICAgIHRoaXMuaGFuZGxlRURNNEhFUEpTT05FdmVudERhdGFJbnB1dC5iaW5kKHRoaXMpLFxuICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICksXG4gICAgbmV3IEltcG9ydE9wdGlvbihcbiAgICAgIEV2ZW50RGF0YUZvcm1hdC5KSVZFWE1MLFxuICAgICAgJy54bWwnLFxuICAgICAgdGhpcy5oYW5kbGVKaXZlWE1MRGF0YUlucHV0LmJpbmQodGhpcyksXG4gICAgICAndGV4dC94bWwnLFxuICAgICksXG4gICAgbmV3IEltcG9ydE9wdGlvbihcbiAgICAgIEV2ZW50RGF0YUZvcm1hdC5aSVAsXG4gICAgICAnLnppcCcsXG4gICAgICB0aGlzLmhhbmRsZVppcEV2ZW50RGF0YUlucHV0LmJpbmQodGhpcyksXG4gICAgICAnLnppcCcsXG4gICAgKSxcbiAgICBuZXcgSW1wb3J0T3B0aW9uKFxuICAgICAgRXZlbnREYXRhRm9ybWF0LklHLFxuICAgICAgJy5pZycsXG4gICAgICB0aGlzLmhhbmRsZUlnRXZlbnREYXRhSW5wdXQuYmluZCh0aGlzKSxcbiAgICAgICcuaWcnLFxuICAgICksXG4gIF07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBldmVudERpc3BsYXk6IEV2ZW50RGlzcGxheVNlcnZpY2UsXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPElPT3B0aW9uc0RpYWxvZ0NvbXBvbmVudD4sXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmV2ZW50RGF0YU9wdGlvbnNXaXRoSGFuZGxlciA9IHRoaXMuc3VwcG9ydGVkRXZlbnREYXRhRm9ybWF0cy5maWx0ZXIoXG4gICAgICAoZXZlbnREYXRhRm9ybWF0KSA9PlxuICAgICAgICB0aGlzLmV2ZW50RGF0YUltcG9ydE9wdGlvbnMuaW5jbHVkZXMoXG4gICAgICAgICAgZXZlbnREYXRhRm9ybWF0LmZvcm1hdCBhcyBFdmVudERhdGFGb3JtYXQsXG4gICAgICAgICksXG4gICAgKTtcblxuICAgIHRoaXMuZXZlbnREYXRhSW1wb3J0T3B0aW9ucy5mb3JFYWNoKChldmVudERhdGFJbXBvcnRPcHRpb24pID0+IHtcbiAgICAgIGlmIChldmVudERhdGFJbXBvcnRPcHRpb24gaW5zdGFuY2VvZiBJbXBvcnRPcHRpb24pIHtcbiAgICAgICAgY29uc3QgaW1wb3J0SGFuZGxlciA9IGV2ZW50RGF0YUltcG9ydE9wdGlvbi5oYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgIGV2ZW50RGF0YUltcG9ydE9wdGlvbi5oYW5kbGVyID0gKGZpbGVzOiBGaWxlTGlzdCkgPT4ge1xuICAgICAgICAgIGltcG9ydEhhbmRsZXIoZmlsZXMpO1xuICAgICAgICAgIHRoaXMub25DbG9zZSgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZXZlbnREYXRhT3B0aW9uc1dpdGhIYW5kbGVyLnB1c2goZXZlbnREYXRhSW1wb3J0T3B0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldFN1cHBvcnRlZEV2ZW50RGF0YUZvcm1hdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnREYXRhSW1wb3J0T3B0aW9uc1xuICAgICAgLm1hcCgoZm9ybWF0KSA9PiB7XG4gICAgICAgIGlmIChmb3JtYXQgaW5zdGFuY2VvZiBJbXBvcnRPcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0LmZvcm1hdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoZm9ybWF0KSA9PiBmb3JtYXQgIT09ICdaSVAnKVxuICAgICAgLmpvaW4oJywgJyk7XG4gIH1cblxuICBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICBoYW5kbGVKU09ORXZlbnREYXRhSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55KSA9PiB7XG4gICAgICBjb25zdCBqc29uID0gdHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShjb250ZW50KSA6IGNvbnRlbnQ7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5wYXJzZVBob2VuaXhFdmVudHMoanNvbik7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ2pzb24nLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVFRE00SEVQSlNPTkV2ZW50RGF0YUlucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKGNvbnRlbnQ6IGFueSkgPT4ge1xuICAgICAgY29uc3QganNvbiA9IHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoY29udGVudCkgOiBjb250ZW50O1xuICAgICAgY29uc3QgZWRtNGhlcEpzb25Mb2FkZXIgPSBuZXcgRWRtNGhlcEpzb25Mb2FkZXIoKTtcbiAgICAgIGVkbTRoZXBKc29uTG9hZGVyLnNldFJhd0V2ZW50RGF0YShqc29uKTtcbiAgICAgIGVkbTRoZXBKc29uTG9hZGVyLnByb2Nlc3NFdmVudERhdGEoKTtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlUGhvZW5peEV2ZW50cyhlZG00aGVwSnNvbkxvYWRlci5nZXRFdmVudERhdGEoKSk7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ2pzb24nLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVKaXZlWE1MRGF0YUlucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKGNvbnRlbnQ6IGFueSkgPT4ge1xuICAgICAgY29uc3Qgaml2ZWxvYWRlciA9IHRoaXMuZ2V0Sml2ZVhNTExvYWRlcigpO1xuICAgICAgaml2ZWxvYWRlci5wcm9jZXNzKGNvbnRlbnQpO1xuICAgICAgY29uc3QgZXZlbnREYXRhID0gaml2ZWxvYWRlci5nZXRFdmVudERhdGEoKTtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LmJ1aWxkRXZlbnREYXRhRnJvbUpTT04oZXZlbnREYXRhKTtcbiAgICB9O1xuICAgIHRoaXMuaGFuZGxlRmlsZUlucHV0KGZpbGVzWzBdLCAneG1sJywgY2FsbGJhY2spO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRKaXZlWE1MTG9hZGVyKCk6IEppdmVYTUxMb2FkZXIge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5Py5jb25maWd1cmF0aW9uPy5ldmVudERhdGFMb2FkZXIgaW5zdGFuY2VvZiBKaXZlWE1MTG9hZGVyXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVudERpc3BsYXkuY29uZmlndXJhdGlvbi5ldmVudERhdGFMb2FkZXIgYXMgSml2ZVhNTExvYWRlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBKaXZlWE1MTG9hZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlT0JKSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55LCBuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlT0JKR2VvbWV0cnkoY29udGVudCwgbmFtZSk7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ29iaicsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGhhbmRsZVNjZW5lSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55KSA9PiB7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5wYXJzZVBob2VuaXhEaXNwbGF5KGNvbnRlbnQpO1xuICAgIH07XG4gICAgdGhpcy5oYW5kbGVGaWxlSW5wdXQoZmlsZXNbMF0sICdwaG54JywgY2FsbGJhY2spO1xuICB9XG5cbiAgaGFuZGxlR0xURklucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKGZpbGU6IEZpbGUpID0+IHtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlR0xURkdlb21ldHJ5KGZpbGUpO1xuICAgIH07XG4gICAgaWYgKHRoaXMuaXNGaWxlT2ZFeHRlbnNpb24oZmlsZXNbMF0ubmFtZSwgJ2dsdGYsZ2xiLGdsdGYuemlwLGdsYi56aXAnKSkge1xuICAgICAgY2FsbGJhY2soZmlsZXNbMF0pO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVBob2VuaXhJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IChjb250ZW50OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlUGhvZW5peERpc3BsYXkoY29udGVudCk7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ3BobngnLCBjYWxsYmFjayk7XG4gIH1cblxuICBhc3luYyBoYW5kbGVST09USW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3Qgcm9vdE9iamVjdE5hbWUgPSBwcm9tcHQoJ0VudGVyIG9iamVjdCBuYW1lIGluIFJPT1QgZmlsZScpO1xuXG4gICAgYXdhaXQgdGhpcy5ldmVudERpc3BsYXkubG9hZFJvb3RHZW9tZXRyeShcbiAgICAgIFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZXNbMF0pLFxuICAgICAgcm9vdE9iamVjdE5hbWUsXG4gICAgICBmaWxlc1swXS5uYW1lLnNwbGl0KCcuJylbMF0sXG4gICAgKTtcblxuICAgIHRoaXMub25DbG9zZSgpO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlUm9vdEpTT05JbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBpZiAoIXRoaXMuaXNGaWxlT2ZFeHRlbnNpb24oZmlsZXNbMF0ubmFtZSwgJ2d6JykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lID0gZmlsZXNbMF0ubmFtZS5zcGxpdCgnLicpWzBdO1xuICAgIGF3YWl0IHRoaXMuZXZlbnREaXNwbGF5LmxvYWRSb290SlNPTkdlb21ldHJ5KFxuICAgICAgVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlc1swXSksXG4gICAgICBuYW1lLFxuICAgICk7XG5cbiAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgfVxuXG4gIGhhbmRsZUlnRXZlbnREYXRhSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY21zTG9hZGVyID0gbmV3IENNU0xvYWRlcigpO1xuICAgIGNtc0xvYWRlci5yZWFkSWdBcmNoaXZlKGZpbGVzWzBdLCAoYWxsRXZlbnRzOiBhbnlbXSkgPT4ge1xuICAgICAgY29uc3QgYWxsRXZlbnRzRGF0YSA9IGNtc0xvYWRlci5nZXRBbGxFdmVudHNEYXRhKGFsbEV2ZW50cyk7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5wYXJzZVBob2VuaXhFdmVudHMoYWxsRXZlbnRzRGF0YSk7XG4gICAgICB0aGlzLm9uQ2xvc2UoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVppcEV2ZW50RGF0YUlucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGlmICghdGhpcy5pc0ZpbGVPZkV4dGVuc2lvbihmaWxlc1swXS5uYW1lLCAnemlwLGpzb24uemlwJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxFdmVudHNPYmplY3QgPSB7fTtcbiAgICBsZXQgZmlsZXNXaXRoRGF0YTogeyBbZmlsZU5hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gICAgLy8gVXNpbmcgYSB0cnkgY2F0Y2ggYmxvY2sgdG8gY2F0Y2ggYW55IGVycm9ycyBpbiBQcm9taXNlc1xuICAgIHRyeSB7XG4gICAgICBmaWxlc1dpdGhEYXRhID0gYXdhaXQgcmVhZFppcEZpbGUoZmlsZXNbMF0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSByZWFkaW5nIHppcCcsIGVycm9yKTtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LmdldEluZm9Mb2dnZXIoKS5hZGQoJ0NvdWxkIG5vdCByZWFkIHppcCBmaWxlJywgJ0Vycm9yJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSlNPTiBldmVudCBkYXRhXG4gICAgT2JqZWN0LmtleXMoZmlsZXNXaXRoRGF0YSlcbiAgICAgIC5maWx0ZXIoKGZpbGVOYW1lKSA9PiBmaWxlTmFtZS5lbmRzV2l0aCgnLmpzb24nKSlcbiAgICAgIC5mb3JFYWNoKChmaWxlTmFtZSkgPT4ge1xuICAgICAgICBPYmplY3QuYXNzaWduKGFsbEV2ZW50c09iamVjdCwgSlNPTi5wYXJzZShmaWxlc1dpdGhEYXRhW2ZpbGVOYW1lXSkpO1xuICAgICAgfSk7XG5cbiAgICAvLyBKaXZlWE1MIGV2ZW50IGRhdGFcbiAgICBjb25zdCBqaXZlbG9hZGVyID0gdGhpcy5nZXRKaXZlWE1MTG9hZGVyKCk7XG5cbiAgICBPYmplY3Qua2V5cyhmaWxlc1dpdGhEYXRhKVxuICAgICAgLmZpbHRlcigoZmlsZU5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpbGVOYW1lLmVuZHNXaXRoKCcueG1sJykgfHwgZmlsZU5hbWUuc3RhcnRzV2l0aCgnSml2ZVhNTCcpO1xuICAgICAgfSlcbiAgICAgIC5mb3JFYWNoKChmaWxlTmFtZSkgPT4ge1xuICAgICAgICBqaXZlbG9hZGVyLnByb2Nlc3MoZmlsZXNXaXRoRGF0YVtmaWxlTmFtZV0pO1xuICAgICAgICBjb25zdCBldmVudERhdGEgPSBqaXZlbG9hZGVyLmdldEV2ZW50RGF0YSgpO1xuICAgICAgICBPYmplY3QuYXNzaWduKGFsbEV2ZW50c09iamVjdCwgeyBbZmlsZU5hbWVdOiBldmVudERhdGEgfSk7XG4gICAgICB9KTtcbiAgICAvLyBGb3Igc29tZSByZWFzb24gdGhlIGFib3ZlIGRvZXNuJ3QgcGljayB1cCBKaXZlWE1MX1hYWF9ZWVkuemlwXG5cbiAgICB0aGlzLmV2ZW50RGlzcGxheS5wYXJzZVBob2VuaXhFdmVudHMoYWxsRXZlbnRzT2JqZWN0KTtcblxuICAgIHRoaXMub25DbG9zZSgpO1xuICB9XG5cbiAgaGFuZGxlRmlsZUlucHV0KFxuICAgIGZpbGU6IEZpbGUsXG4gICAgZXh0ZW5zaW9uczogc3RyaW5nLFxuICAgIGNhbGxiYWNrOiAocmVzdWx0OiBzdHJpbmcsIGZpbGVOYW1lPzogc3RyaW5nKSA9PiB2b2lkLFxuICApIHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgaWYgKHRoaXMuaXNGaWxlT2ZFeHRlbnNpb24oZmlsZS5uYW1lLCBleHRlbnNpb25zKSkge1xuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgY2FsbGJhY2socmVhZGVyLnJlc3VsdC50b1N0cmluZygpLCBmaWxlLm5hbWUuc3BsaXQoJy4nKVswXSk7XG4gICAgICB9O1xuICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7XG4gICAgfVxuICAgIHRoaXMub25DbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ZpbGVPZkV4dGVuc2lvbihmaWxlTmFtZTogc3RyaW5nLCBleHRlbnNpb25zOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICBleHRlbnNpb25zLnNwbGl0KCcsJykuaW5jbHVkZXMoZmlsZU5hbWUuc2xpY2UoZmlsZU5hbWUuaW5kZXhPZignLicpICsgMSkpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKCdFcnJvcjogSW52YWxpZCBmaWxlIGZvcm1hdCEnKTtcbiAgICB0aGlzLmV2ZW50RGlzcGxheS5nZXRJbmZvTG9nZ2VyKCkuYWRkKCdJbnZhbGlkIGZpbGUgZm9ybWF0IScsICdFcnJvcicpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc2F2ZVNjZW5lKCkge1xuICAgIHRoaXMuZXZlbnREaXNwbGF5LmV4cG9ydFBob2VuaXhEaXNwbGF5KCk7XG4gIH1cblxuICBleHBvcnRPQkooKSB7XG4gICAgdGhpcy5ldmVudERpc3BsYXkuZXhwb3J0VG9PQkooKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRpYWxvZ1wiPlxuICA8aDEgbWF0LWRpYWxvZy10aXRsZT5JbXBvcnQgYW5kIGV4cG9ydDwvaDE+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50IGNsYXNzPVwiZGlhbG9nLWNvbnRlbnRcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiZXZlbnREYXRhSW1wb3J0T3B0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtY2VudGVyXCI+PGI+RXZlbnQgZGF0YTwvYj48L3A+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY2VudGVyZWRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBldmVudERhdGFJbXBvcnRPcHRpb24gb2YgZXZlbnREYXRhT3B0aW9uc1dpdGhIYW5kbGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI2V2ZW50RGF0YUZpbGVJbnB1dFxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICBjbGFzcz1cImZpbGUtaW5wdXRcIlxuICAgICAgICAgICAgW2FjY2VwdF09XCJldmVudERhdGFJbXBvcnRPcHRpb24uYWNjZXB0XCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiZXZlbnREYXRhSW1wb3J0T3B0aW9uLmhhbmRsZXIoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXZlbnREYXRhRmlsZUlucHV0LmNsaWNrKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2V2ZW50RGF0YS5zdmdcIiBhbHQ9XCJFdmVudCBkYXRhIGljb25cIiAvPlxuICAgICAgICAgICAgTG9hZCB7eyBldmVudERhdGFJbXBvcnRPcHRpb24uZmlsZVR5cGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxwIGNsYXNzPVwidGV4dC1jZW50ZXJcIj48Yj5HZW9tZXRyaWVzPC9iPjwvcD5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3cgY2VudGVyZWRcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjb2JqRmlsZUlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgIGFjY2VwdD1cIi5vYmpcIlxuICAgICAgICBuYW1lPVwiaW1hZ2VcIlxuICAgICAgICAoY2hhbmdlKT1cImhhbmRsZU9CSklucHV0KCRldmVudC50YXJnZXQuZmlsZXMpXCJcbiAgICAgIC8+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZmlsZS1pbnB1dC1idXR0b25cIiAoY2xpY2spPVwib2JqRmlsZUlucHV0LmNsaWNrKClcIj5cbiAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvb2JqLnN2Z1wiIGFsdD1cIlwiIC8+IExvYWQgLm9ialxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjZ2x0ZkZpbGVJbnB1dFxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICBjbGFzcz1cImZpbGUtaW5wdXRcIlxuICAgICAgICBhY2NlcHQ9XCIuZ2x0ZiwuZ2xiLC5nbHRmLnppcCwuZ2xiLnppcFwiXG4gICAgICAgIG5hbWU9XCJpbWFnZVwiXG4gICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlR0xURklucHV0KCRldmVudC50YXJnZXQuZmlsZXMpXCJcbiAgICAgIC8+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZmlsZS1pbnB1dC1idXR0b25cIiAoY2xpY2spPVwiZ2x0ZkZpbGVJbnB1dC5jbGljaygpXCI+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2dsdGYuc3ZnXCIgYWx0PVwiXCIgLz4gTG9hZCAuZ2x0Zi8uZ2xiXG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGlucHV0XG4gICAgICAgICNyb290RmlsZUlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgIGFjY2VwdD1cIi5yb290XCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVST09USW5wdXQoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvblwiIChjbGljayk9XCJyb290RmlsZUlucHV0LmNsaWNrKClcIj5cbiAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvZmlsZS1pbXBvcnQuc3ZnXCIgYWx0PVwiXCIgLz4gTG9hZCAucm9vdFxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjcm9vdEpTT05GaWxlSW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0XCJcbiAgICAgICAgYWNjZXB0PVwiLmpzb24uZ3pcIlxuICAgICAgICAoY2hhbmdlKT1cImhhbmRsZVJvb3RKU09OSW5wdXQoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvblwiIChjbGljayk9XCJyb290SlNPTkZpbGVJbnB1dC5jbGljaygpXCI+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2ZpbGUtaW1wb3J0LnN2Z1wiIGFsdD1cIlwiIC8+IExvYWQgLmpzb24uZ3pcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPjxiPlNjZW5lPC9iPjwvcD5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3cgY2VudGVyZWRcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvbiBsb2FkLWV4cG9ydFwiXG4gICAgICAgIGlkPVwiZXhwb3J0U2NlbmVcIlxuICAgICAgICAoY2xpY2spPVwic2F2ZVNjZW5lKClcIlxuICAgICAgPlxuICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9zYXZlLnN2Z1wiIGFsdD1cIlwiIC8+IFNhdmUgc2NlbmVcbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8aW5wdXRcbiAgICAgICAgI2xvYWRTY2VuZUlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGNsYXNzPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgIGFjY2VwdD1cIi5waG54XCJcbiAgICAgICAgbmFtZT1cImltYWdlXCJcbiAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVQaG9lbml4SW5wdXQoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJmaWxlLWlucHV0LWJ1dHRvbiBsb2FkLWV4cG9ydFwiXG4gICAgICAgIGlkPVwiaW1wb3J0U2NlbmVcIlxuICAgICAgICAoY2xpY2spPVwibG9hZFNjZW5lSW5wdXQuY2xpY2soKVwiXG4gICAgICA+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL3VwbG9hZC5zdmdcIiBhbHQ9XCJcIiAvPiBMb2FkIHNjZW5lXG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImZpbGUtaW5wdXQtYnV0dG9uIGV4cG9ydC1idXR0b25cIlxuICAgICAgICBpZD1cImV4cG9ydE9CSlwiXG4gICAgICAgIChjbGljayk9XCJleHBvcnRPQkooKVwiXG4gICAgICA+XG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL29iai5zdmdcIiBhbHQ9XCJcIiAvPiBTYXZlIE9CSlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGFsaWduPVwiZW5kXCI+XG4gICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9uQ2xvc2UoKVwiIGNka0ZvY3VzSW5pdGlhbD5cbiAgICAgIENsb3NlXG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { EventDataFormat, } from '../../../services/extras/event-data-import';
|
|
3
|
-
import { IOOptionsDialogComponent } from './io-options-dialog/io-options-dialog.component';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/material/dialog";
|
|
6
|
-
import * as i2 from "../menu-toggle/menu-toggle.component";
|
|
7
|
-
export class IoOptionsComponent {
|
|
8
|
-
dialog;
|
|
9
|
-
eventDataImportOptions = Object.values(EventDataFormat);
|
|
10
|
-
constructor(dialog) {
|
|
11
|
-
this.dialog = dialog;
|
|
12
|
-
}
|
|
13
|
-
openIODialog() {
|
|
14
|
-
const dialogRef = this.dialog.open(IOOptionsDialogComponent, {
|
|
15
|
-
panelClass: 'dialog',
|
|
16
|
-
});
|
|
17
|
-
dialogRef.componentInstance.eventDataImportOptions =
|
|
18
|
-
this.eventDataImportOptions;
|
|
19
|
-
}
|
|
20
|
-
static ɵfac = function IoOptionsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || IoOptionsComponent)(i0.ɵɵdirectiveInject(i1.MatDialog)); };
|
|
21
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: IoOptionsComponent, selectors: [["app-io-options"]], inputs: { eventDataImportOptions: "eventDataImportOptions" }, decls: 1, vars: 1, consts: [["tooltip", "Import and export options", "icon", "import", 3, "click", "active"]], template: function IoOptionsComponent_Template(rf, ctx) { if (rf & 1) {
|
|
22
|
-
i0.ɵɵelementStart(0, "app-menu-toggle", 0);
|
|
23
|
-
i0.ɵɵlistener("click", function IoOptionsComponent_Template_app_menu_toggle_click_0_listener() { return ctx.openIODialog(); });
|
|
24
|
-
i0.ɵɵelementEnd();
|
|
25
|
-
} if (rf & 2) {
|
|
26
|
-
i0.ɵɵproperty("active", false);
|
|
27
|
-
} }, dependencies: [i2.MenuToggleComponent] });
|
|
28
|
-
}
|
|
29
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IoOptionsComponent, [{
|
|
30
|
-
type: Component,
|
|
31
|
-
args: [{ selector: 'app-io-options', template: "<app-menu-toggle\n tooltip=\"Import and export options\"\n icon=\"import\"\n [active]=\"false\"\n (click)=\"openIODialog()\"\n>\n</app-menu-toggle>\n" }]
|
|
32
|
-
}], () => [{ type: i1.MatDialog }], { eventDataImportOptions: [{
|
|
33
|
-
type: Input
|
|
34
|
-
}] }); })();
|
|
35
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(IoOptionsComponent, { className: "IoOptionsComponent", filePath: "components/ui-menu/io-options/io-options.component.ts", lineNumber: 14 }); })();
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8tb3B0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvY29tcG9uZW50cy91aS1tZW51L2lvLW9wdGlvbnMvaW8tb3B0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvY29tcG9uZW50cy91aS1tZW51L2lvLW9wdGlvbnMvaW8tb3B0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQ0wsZUFBZSxHQUVoQixNQUFNLDRDQUE0QyxDQUFDO0FBQ3BELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDOzs7O0FBTzNGLE1BQU0sT0FBTyxrQkFBa0I7SUFLVDtJQUhwQixzQkFBc0IsR0FDcEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUVqQyxZQUFvQixNQUFpQjtRQUFqQixXQUFNLEdBQU4sTUFBTSxDQUFXO0lBQUcsQ0FBQztJQUV6QyxZQUFZO1FBQ1YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUU7WUFDM0QsVUFBVSxFQUFFLFFBQVE7U0FDckIsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLGlCQUFpQixDQUFDLHNCQUFzQjtZQUNoRCxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDaEMsQ0FBQzs0R0FiVSxrQkFBa0I7NkRBQWxCLGtCQUFrQjtZQ2IvQiwwQ0FLQztZQURDLHdHQUFTLGtCQUFjLElBQUM7WUFFMUIsaUJBQWtCOztZQUhoQiw4QkFBZ0I7OztpRkRVTCxrQkFBa0I7Y0FMOUIsU0FBUzsyQkFDRSxnQkFBZ0I7MENBTTFCLHNCQUFzQjtrQkFEckIsS0FBSzs7a0ZBREssa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7XG4gIEV2ZW50RGF0YUZvcm1hdCxcbiAgdHlwZSBFdmVudERhdGFJbXBvcnRPcHRpb24sXG59IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2V4dHJhcy9ldmVudC1kYXRhLWltcG9ydCc7XG5pbXBvcnQgeyBJT09wdGlvbnNEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2lvLW9wdGlvbnMtZGlhbG9nL2lvLW9wdGlvbnMtZGlhbG9nLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1pby1vcHRpb25zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lvLW9wdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pby1vcHRpb25zLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIElvT3B0aW9uc0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIGV2ZW50RGF0YUltcG9ydE9wdGlvbnM6IEV2ZW50RGF0YUltcG9ydE9wdGlvbltdID1cbiAgICBPYmplY3QudmFsdWVzKEV2ZW50RGF0YUZvcm1hdCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZykge31cblxuICBvcGVuSU9EaWFsb2coKSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihJT09wdGlvbnNEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHBhbmVsQ2xhc3M6ICdkaWFsb2cnLFxuICAgIH0pO1xuICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5ldmVudERhdGFJbXBvcnRPcHRpb25zID1cbiAgICAgIHRoaXMuZXZlbnREYXRhSW1wb3J0T3B0aW9ucztcbiAgfVxufVxuIiwiPGFwcC1tZW51LXRvZ2dsZVxuICB0b29sdGlwPVwiSW1wb3J0IGFuZCBleHBvcnQgb3B0aW9uc1wiXG4gIGljb249XCJpbXBvcnRcIlxuICBbYWN0aXZlXT1cImZhbHNlXCJcbiAgKGNsaWNrKT1cIm9wZW5JT0RpYWxvZygpXCJcbj5cbjwvYXBwLW1lbnUtdG9nZ2xlPlxuIl19
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "../../../services/event-display.service";
|
|
4
|
-
import * as i2 from "@angular/material/tooltip";
|
|
5
|
-
import * as i3 from "../menu-toggle/menu-toggle.component";
|
|
6
|
-
export class MainViewToggleComponent {
|
|
7
|
-
eventDisplay;
|
|
8
|
-
orthographicView = false;
|
|
9
|
-
constructor(eventDisplay) {
|
|
10
|
-
this.eventDisplay = eventDisplay;
|
|
11
|
-
}
|
|
12
|
-
switchMainView() {
|
|
13
|
-
this.orthographicView = !this.orthographicView;
|
|
14
|
-
this.eventDisplay
|
|
15
|
-
.getUIManager()
|
|
16
|
-
.toggleOrthographicView(this.orthographicView);
|
|
17
|
-
}
|
|
18
|
-
static ɵfac = function MainViewToggleComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MainViewToggleComponent)(i0.ɵɵdirectiveInject(i1.EventDisplayService)); };
|
|
19
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MainViewToggleComponent, selectors: [["app-main-view-toggle"]], decls: 1, vars: 2, consts: [[3, "click", "icon", "matTooltip"]], template: function MainViewToggleComponent_Template(rf, ctx) { if (rf & 1) {
|
|
20
|
-
i0.ɵɵelementStart(0, "app-menu-toggle", 0);
|
|
21
|
-
i0.ɵɵlistener("click", function MainViewToggleComponent_Template_app_menu_toggle_click_0_listener() { return ctx.switchMainView(); });
|
|
22
|
-
i0.ɵɵelementEnd();
|
|
23
|
-
} if (rf & 2) {
|
|
24
|
-
i0.ɵɵproperty("icon", ctx.orthographicView ? "perspective" : "orthographic")("matTooltip", "Switch to " + (ctx.orthographicView ? "perspective" : "orthographic") + " view");
|
|
25
|
-
} }, dependencies: [i2.MatTooltip, i3.MenuToggleComponent] });
|
|
26
|
-
}
|
|
27
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MainViewToggleComponent, [{
|
|
28
|
-
type: Component,
|
|
29
|
-
args: [{ selector: 'app-main-view-toggle', template: "<app-menu-toggle\n [icon]=\"orthographicView ? 'perspective' : 'orthographic'\"\n [matTooltip]=\"\n 'Switch to ' + (orthographicView ? 'perspective' : 'orthographic') + ' view'\n \"\n (click)=\"switchMainView()\"\n>\n</app-menu-toggle>\n" }]
|
|
30
|
-
}], () => [{ type: i1.EventDisplayService }], null); })();
|
|
31
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MainViewToggleComponent, { className: "MainViewToggleComponent", filePath: "components/ui-menu/main-view-toggle/main-view-toggle.component.ts", lineNumber: 9 }); })();
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi12aWV3LXRvZ2dsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvY29tcG9uZW50cy91aS1tZW51L21haW4tdmlldy10b2dnbGUvbWFpbi12aWV3LXRvZ2dsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvY29tcG9uZW50cy91aS1tZW51L21haW4tdmlldy10b2dnbGUvbWFpbi12aWV3LXRvZ2dsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQVExQyxNQUFNLE9BQU8sdUJBQXVCO0lBR2Q7SUFGcEIsZ0JBQWdCLEdBQVksS0FBSyxDQUFDO0lBRWxDLFlBQW9CLFlBQWlDO1FBQWpDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtJQUFHLENBQUM7SUFFekQsY0FBYztRQUNaLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvQyxJQUFJLENBQUMsWUFBWTthQUNkLFlBQVksRUFBRTthQUNkLHNCQUFzQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ25ELENBQUM7aUhBVlUsdUJBQXVCOzZEQUF2Qix1QkFBdUI7WUNScEMsMENBTUM7WUFEQyw2R0FBUyxvQkFBZ0IsSUFBQztZQUU1QixpQkFBa0I7O1lBTGhCLEFBREEsNEVBQTBELGdHQUd6RDs7O2lGRElVLHVCQUF1QjtjQUxuQyxTQUFTOzJCQUNFLHNCQUFzQjs7a0ZBSXJCLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXZlbnREaXNwbGF5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2V2ZW50LWRpc3BsYXkuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1tYWluLXZpZXctdG9nZ2xlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21haW4tdmlldy10b2dnbGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYWluLXZpZXctdG9nZ2xlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE1haW5WaWV3VG9nZ2xlQ29tcG9uZW50IHtcbiAgb3J0aG9ncmFwaGljVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXZlbnREaXNwbGF5OiBFdmVudERpc3BsYXlTZXJ2aWNlKSB7fVxuXG4gIHN3aXRjaE1haW5WaWV3KCkge1xuICAgIHRoaXMub3J0aG9ncmFwaGljVmlldyA9ICF0aGlzLm9ydGhvZ3JhcGhpY1ZpZXc7XG4gICAgdGhpcy5ldmVudERpc3BsYXlcbiAgICAgIC5nZXRVSU1hbmFnZXIoKVxuICAgICAgLnRvZ2dsZU9ydGhvZ3JhcGhpY1ZpZXcodGhpcy5vcnRob2dyYXBoaWNWaWV3KTtcbiAgfVxufVxuIiwiPGFwcC1tZW51LXRvZ2dsZVxuICBbaWNvbl09XCJvcnRob2dyYXBoaWNWaWV3ID8gJ3BlcnNwZWN0aXZlJyA6ICdvcnRob2dyYXBoaWMnXCJcbiAgW21hdFRvb2x0aXBdPVwiXG4gICAgJ1N3aXRjaCB0byAnICsgKG9ydGhvZ3JhcGhpY1ZpZXcgPyAncGVyc3BlY3RpdmUnIDogJ29ydGhvZ3JhcGhpYycpICsgJyB2aWV3J1xuICBcIlxuICAoY2xpY2spPVwic3dpdGNoTWFpblZpZXcoKVwiXG4+XG48L2FwcC1tZW51LXRvZ2dsZT5cbiJdfQ==
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { Component, ViewEncapsulation, } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "../../../services/event-display.service";
|
|
4
|
-
import * as i2 from "@angular/common";
|
|
5
|
-
import * as i3 from "@angular/forms";
|
|
6
|
-
import * as i4 from "@angular/material/menu";
|
|
7
|
-
import * as i5 from "@angular/material/radio";
|
|
8
|
-
import * as i6 from "../menu-toggle/menu-toggle.component";
|
|
9
|
-
function MakePictureComponent_mat_radio_button_14_Template(rf, ctx) { if (rf & 1) {
|
|
10
|
-
i0.ɵɵelementStart(0, "mat-radio-button", 12);
|
|
11
|
-
i0.ɵɵtext(1);
|
|
12
|
-
i0.ɵɵelementEnd();
|
|
13
|
-
} if (rf & 2) {
|
|
14
|
-
const fitting_r4 = ctx.$implicit;
|
|
15
|
-
i0.ɵɵproperty("value", fitting_r4);
|
|
16
|
-
i0.ɵɵadvance();
|
|
17
|
-
i0.ɵɵtextInterpolate1("", fitting_r4, " ");
|
|
18
|
-
} }
|
|
19
|
-
export class MakePictureComponent {
|
|
20
|
-
eventDisplay;
|
|
21
|
-
fittings = ['Crop', 'Stretch'];
|
|
22
|
-
fitting = 'Crop';
|
|
23
|
-
width = 3840;
|
|
24
|
-
height = 2160;
|
|
25
|
-
disabled = false;
|
|
26
|
-
constructor(eventDisplay) {
|
|
27
|
-
this.eventDisplay = eventDisplay;
|
|
28
|
-
}
|
|
29
|
-
ngOnInit() { }
|
|
30
|
-
checkSize() {
|
|
31
|
-
return this.eventDisplay
|
|
32
|
-
.getThreeManager()
|
|
33
|
-
.checkScreenShotCanvasSize(this.width, this.height, this.fitting);
|
|
34
|
-
}
|
|
35
|
-
setWidth(value) {
|
|
36
|
-
this.width = value;
|
|
37
|
-
this.disabled = !this.checkSize();
|
|
38
|
-
}
|
|
39
|
-
setHeight(value) {
|
|
40
|
-
this.height = value;
|
|
41
|
-
this.disabled = !this.checkSize();
|
|
42
|
-
}
|
|
43
|
-
buttonText() {
|
|
44
|
-
return this.disabled ? 'Size too large' : 'Create picture';
|
|
45
|
-
}
|
|
46
|
-
makePicture() {
|
|
47
|
-
this.eventDisplay
|
|
48
|
-
.getThreeManager()
|
|
49
|
-
.makeScreenShot(this.width, this.height, this.fitting);
|
|
50
|
-
}
|
|
51
|
-
static ɵfac = function MakePictureComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MakePictureComponent)(i0.ɵɵdirectiveInject(i1.EventDisplayService)); };
|
|
52
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MakePictureComponent, selectors: [["app-make-picture"]], decls: 20, vars: 11, consts: [["menu", ""], ["width", ""], ["height", ""], [1, "mat-menu"], ["mat-menu-item", "", 1, "size-input", 3, "click"], ["mapInput", "", "type", "number", 3, "change", "click", "value"], ["mat-menu-item", "", 3, "click"], [1, "fitting-radios", 3, "ngModelChange", "ngModel"], [3, "value", 4, "ngFor", "ngForOf"], ["mat-menu-item", "", 1, "make-picture", 3, "click", "disabled"], ["tooltip", "Creates a picture from the current view: directly saves a png of arbitrary size from the current view", "icon", "png", 3, "matMenuTriggerFor"], ["hidden", "", "id", "screenshotCanvas"], [3, "value"]], template: function MakePictureComponent_Template(rf, ctx) { if (rf & 1) {
|
|
53
|
-
const _r1 = i0.ɵɵgetCurrentView();
|
|
54
|
-
i0.ɵɵelementStart(0, "mat-menu", 3, 0)(2, "button", 4);
|
|
55
|
-
i0.ɵɵlistener("click", function MakePictureComponent_Template_button_click_2_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
56
|
-
i0.ɵɵelementStart(3, "label");
|
|
57
|
-
i0.ɵɵtext(4, "width");
|
|
58
|
-
i0.ɵɵelementEnd();
|
|
59
|
-
i0.ɵɵelementStart(5, "input", 5, 1);
|
|
60
|
-
i0.ɵɵlistener("change", function MakePictureComponent_Template_input_change_5_listener() { i0.ɵɵrestoreView(_r1); const width_r2 = i0.ɵɵreference(6); return i0.ɵɵresetView(ctx.setWidth(width_r2.value)); })("click", function MakePictureComponent_Template_input_click_5_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
61
|
-
i0.ɵɵelementEnd()();
|
|
62
|
-
i0.ɵɵelementStart(7, "button", 4);
|
|
63
|
-
i0.ɵɵlistener("click", function MakePictureComponent_Template_button_click_7_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
64
|
-
i0.ɵɵelementStart(8, "label");
|
|
65
|
-
i0.ɵɵtext(9, "height");
|
|
66
|
-
i0.ɵɵelementEnd();
|
|
67
|
-
i0.ɵɵelementStart(10, "input", 5, 2);
|
|
68
|
-
i0.ɵɵlistener("change", function MakePictureComponent_Template_input_change_10_listener() { i0.ɵɵrestoreView(_r1); const height_r3 = i0.ɵɵreference(11); return i0.ɵɵresetView(ctx.setHeight(height_r3.value)); })("click", function MakePictureComponent_Template_input_click_10_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
69
|
-
i0.ɵɵelementEnd()();
|
|
70
|
-
i0.ɵɵelementStart(12, "button", 6);
|
|
71
|
-
i0.ɵɵlistener("click", function MakePictureComponent_Template_button_click_12_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
72
|
-
i0.ɵɵelementStart(13, "mat-radio-group", 7);
|
|
73
|
-
i0.ɵɵtwoWayListener("ngModelChange", function MakePictureComponent_Template_mat_radio_group_ngModelChange_13_listener($event) { i0.ɵɵrestoreView(_r1); i0.ɵɵtwoWayBindingSet(ctx.fitting, $event) || (ctx.fitting = $event); return i0.ɵɵresetView($event); });
|
|
74
|
-
i0.ɵɵtemplate(14, MakePictureComponent_mat_radio_button_14_Template, 2, 2, "mat-radio-button", 8);
|
|
75
|
-
i0.ɵɵelementEnd()();
|
|
76
|
-
i0.ɵɵelementStart(15, "button", 9);
|
|
77
|
-
i0.ɵɵlistener("click", function MakePictureComponent_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.makePicture()); });
|
|
78
|
-
i0.ɵɵtext(16);
|
|
79
|
-
i0.ɵɵelementEnd()();
|
|
80
|
-
i0.ɵɵelement(17, "app-menu-toggle", 10);
|
|
81
|
-
i0.ɵɵelementStart(18, "div");
|
|
82
|
-
i0.ɵɵelement(19, "canvas", 11);
|
|
83
|
-
i0.ɵɵelementEnd();
|
|
84
|
-
} if (rf & 2) {
|
|
85
|
-
const menu_r5 = i0.ɵɵreference(1);
|
|
86
|
-
i0.ɵɵadvance(5);
|
|
87
|
-
i0.ɵɵclassProp("badSize", ctx.disabled);
|
|
88
|
-
i0.ɵɵproperty("value", 3840);
|
|
89
|
-
i0.ɵɵadvance(5);
|
|
90
|
-
i0.ɵɵclassProp("badSize", ctx.disabled);
|
|
91
|
-
i0.ɵɵproperty("value", 2610);
|
|
92
|
-
i0.ɵɵadvance(3);
|
|
93
|
-
i0.ɵɵtwoWayProperty("ngModel", ctx.fitting);
|
|
94
|
-
i0.ɵɵadvance();
|
|
95
|
-
i0.ɵɵproperty("ngForOf", ctx.fittings);
|
|
96
|
-
i0.ɵɵadvance();
|
|
97
|
-
i0.ɵɵproperty("disabled", ctx.disabled);
|
|
98
|
-
i0.ɵɵadvance();
|
|
99
|
-
i0.ɵɵtextInterpolate1(" ", ctx.buttonText(), " ");
|
|
100
|
-
i0.ɵɵadvance();
|
|
101
|
-
i0.ɵɵproperty("matMenuTriggerFor", menu_r5);
|
|
102
|
-
} }, dependencies: [i2.NgForOf, i3.NgControlStatus, i3.NgModel, i4.MatMenu, i4.MatMenuItem, i4.MatMenuTrigger, i5.MatRadioGroup, i5.MatRadioButton, i6.MenuToggleComponent], styles: [".size-input{background:transparent;color:var(--phoenix-text-color);text-align:center}.size-input label{width:60px}.size-input input{background:transparent;color:var(--phoenix-text-color);width:80px}.badSize{border-color:red}.make-picture{text-align:center;display:block}.make-picture span{padding:5px 25px;border:2px solid var(--phoenix-text-color);border-radius:8px}\n"], encapsulation: 2 });
|
|
103
|
-
}
|
|
104
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MakePictureComponent, [{
|
|
105
|
-
type: Component,
|
|
106
|
-
args: [{ selector: 'app-make-picture', encapsulation: ViewEncapsulation.None, template: "<mat-menu class=\"mat-menu\" #menu>\n <button mat-menu-item (click)=\"$event.stopPropagation()\" class=\"size-input\">\n <label>width</label>\n <input\n #width\n mapInput\n type=\"number\"\n [value]=\"3840\"\n (change)=\"setWidth(width.value)\"\n (click)=\"$event.stopPropagation()\"\n [class.badSize]=\"disabled\"\n />\n </button>\n <button mat-menu-item (click)=\"$event.stopPropagation()\" class=\"size-input\">\n <label>height</label>\n <input\n #height\n mapInput\n type=\"number\"\n [value]=\"2610\"\n (change)=\"setHeight(height.value)\"\n (click)=\"$event.stopPropagation()\"\n [class.badSize]=\"disabled\"\n />\n </button>\n <button mat-menu-item (click)=\"$event.stopPropagation()\">\n <mat-radio-group [(ngModel)]=\"fitting\" class=\"fitting-radios\">\n <mat-radio-button *ngFor=\"let fitting of fittings\" [value]=\"fitting\"\n >{{ fitting }}\n </mat-radio-button>\n </mat-radio-group>\n </button>\n <button\n mat-menu-item\n [disabled]=\"disabled\"\n class=\"make-picture\"\n (click)=\"makePicture()\"\n >\n {{ buttonText() }}\n </button>\n</mat-menu>\n<app-menu-toggle\n [matMenuTriggerFor]=\"menu\"\n tooltip=\"Creates a picture from the current view: directly saves a png of arbitrary size from the current view\"\n icon=\"png\"\n>\n</app-menu-toggle>\n<div>\n <canvas hidden id=\"screenshotCanvas\"></canvas>\n</div>\n", styles: [".size-input{background:transparent;color:var(--phoenix-text-color);text-align:center}.size-input label{width:60px}.size-input input{background:transparent;color:var(--phoenix-text-color);width:80px}.badSize{border-color:red}.make-picture{text-align:center;display:block}.make-picture span{padding:5px 25px;border:2px solid var(--phoenix-text-color);border-radius:8px}\n"] }]
|
|
107
|
-
}], () => [{ type: i1.EventDisplayService }], null); })();
|
|
108
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MakePictureComponent, { className: "MakePictureComponent", filePath: "components/ui-menu/make-picture/make-picture.component.ts", lineNumber: 15 }); })();
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZS1waWN0dXJlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9jb21wb25lbnRzL3VpLW1lbnUvbWFrZS1waWN0dXJlL21ha2UtcGljdHVyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvY29tcG9uZW50cy91aS1tZW51L21ha2UtcGljdHVyZS9tYWtlLXBpY3R1cmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFHVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7OztJQ3NCakIsNENBQ0c7SUFBQSxZQUNIO0lBQUEsaUJBQW1COzs7SUFGZ0Msa0NBQWlCO0lBQ2pFLGNBQ0g7SUFERywwQ0FDSDs7QURmTixNQUFNLE9BQU8sb0JBQW9CO0lBTVg7SUFMcEIsUUFBUSxHQUFhLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3pDLE9BQU8sR0FBVyxNQUFNLENBQUM7SUFDekIsS0FBSyxHQUFXLElBQUksQ0FBQztJQUNyQixNQUFNLEdBQVcsSUFBSSxDQUFDO0lBQ3RCLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsWUFBb0IsWUFBaUM7UUFBakMsaUJBQVksR0FBWixZQUFZLENBQXFCO0lBQUcsQ0FBQztJQUN6RCxRQUFRLEtBQUksQ0FBQztJQUNMLFNBQVM7UUFDZixPQUFPLElBQUksQ0FBQyxZQUFZO2FBQ3JCLGVBQWUsRUFBRTthQUNqQix5QkFBeUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxRQUFRLENBQUMsS0FBSztRQUNaLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUNELFNBQVMsQ0FBQyxLQUFLO1FBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO0lBQzdELENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVk7YUFDZCxlQUFlLEVBQUU7YUFDakIsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0QsQ0FBQzs4R0E1QlUsb0JBQW9COzZEQUFwQixvQkFBb0I7O1lDYi9CLEFBREYsc0NBQWlDLGdCQUM2QztZQUF0RCw2SUFBUyx3QkFBd0IsS0FBQztZQUN0RCw2QkFBTztZQUFBLHFCQUFLO1lBQUEsaUJBQVE7WUFDcEIsbUNBUUU7WUFGQSxBQURBLDRLQUFVLDRCQUFxQixLQUFDLCtIQUN2Qix3QkFBd0IsS0FBQztZQUd0QyxBQVRFLGlCQVFFLEVBQ0s7WUFDVCxpQ0FBNEU7WUFBdEQsNklBQVMsd0JBQXdCLEtBQUM7WUFDdEQsNkJBQU87WUFBQSxzQkFBTTtZQUFBLGlCQUFRO1lBQ3JCLG9DQVFFO1lBRkEsQUFEQSwrS0FBVSw4QkFBdUIsS0FBQyxnSUFDekIsd0JBQXdCLEtBQUM7WUFHdEMsQUFURSxpQkFRRSxFQUNLO1lBQ1Qsa0NBQXlEO1lBQW5DLDhJQUFTLHdCQUF3QixLQUFDO1lBQ3RELDJDQUE4RDtZQUE3Qyw4UEFBcUI7WUFDcEMsaUdBQ0c7WUFHUCxBQURFLGlCQUFrQixFQUNYO1lBQ1Qsa0NBS0M7WUFEQyx3SUFBUyxpQkFBYSxLQUFDO1lBRXZCLGFBQ0Y7WUFDRixBQURFLGlCQUFTLEVBQ0E7WUFDWCx1Q0FLa0I7WUFDbEIsNEJBQUs7WUFDSCw4QkFBOEM7WUFDaEQsaUJBQU07OztZQXZDQSxlQUEwQjtZQUExQix1Q0FBMEI7WUFIMUIsNEJBQWM7WUFlZCxlQUEwQjtZQUExQix1Q0FBMEI7WUFIMUIsNEJBQWM7WUFPQyxlQUFxQjtZQUFyQiwyQ0FBcUI7WUFDRSxjQUFXO1lBQVgsc0NBQVc7WUFPbkQsY0FBcUI7WUFBckIsdUNBQXFCO1lBSXJCLGNBQ0Y7WUFERSxpREFDRjtZQUdBLGNBQTBCO1lBQTFCLDJDQUEwQjs7O2lGRDVCZixvQkFBb0I7Y0FOaEMsU0FBUzsyQkFDRSxrQkFBa0IsaUJBR2IsaUJBQWlCLENBQUMsSUFBSTs7a0ZBRTFCLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIHR5cGUgT25Jbml0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFdmVudERpc3BsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZXZlbnQtZGlzcGxheS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW1ha2UtcGljdHVyZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYWtlLXBpY3R1cmUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYWtlLXBpY3R1cmUuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgTWFrZVBpY3R1cmVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBmaXR0aW5nczogc3RyaW5nW10gPSBbJ0Nyb3AnLCAnU3RyZXRjaCddO1xuICBmaXR0aW5nOiBzdHJpbmcgPSAnQ3JvcCc7XG4gIHdpZHRoOiBudW1iZXIgPSAzODQwO1xuICBoZWlnaHQ6IG51bWJlciA9IDIxNjA7XG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXZlbnREaXNwbGF5OiBFdmVudERpc3BsYXlTZXJ2aWNlKSB7fVxuICBuZ09uSW5pdCgpIHt9XG4gIHByaXZhdGUgY2hlY2tTaXplKCkge1xuICAgIHJldHVybiB0aGlzLmV2ZW50RGlzcGxheVxuICAgICAgLmdldFRocmVlTWFuYWdlcigpXG4gICAgICAuY2hlY2tTY3JlZW5TaG90Q2FudmFzU2l6ZSh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5maXR0aW5nKTtcbiAgfVxuICBzZXRXaWR0aCh2YWx1ZSkge1xuICAgIHRoaXMud2lkdGggPSB2YWx1ZTtcbiAgICB0aGlzLmRpc2FibGVkID0gIXRoaXMuY2hlY2tTaXplKCk7XG4gIH1cbiAgc2V0SGVpZ2h0KHZhbHVlKSB7XG4gICAgdGhpcy5oZWlnaHQgPSB2YWx1ZTtcbiAgICB0aGlzLmRpc2FibGVkID0gIXRoaXMuY2hlY2tTaXplKCk7XG4gIH1cbiAgYnV0dG9uVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCA/ICdTaXplIHRvbyBsYXJnZScgOiAnQ3JlYXRlIHBpY3R1cmUnO1xuICB9XG4gIG1ha2VQaWN0dXJlKCkge1xuICAgIHRoaXMuZXZlbnREaXNwbGF5XG4gICAgICAuZ2V0VGhyZWVNYW5hZ2VyKClcbiAgICAgIC5tYWtlU2NyZWVuU2hvdCh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5maXR0aW5nKTtcbiAgfVxufVxuIiwiPG1hdC1tZW51IGNsYXNzPVwibWF0LW1lbnVcIiAjbWVudT5cbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBjbGFzcz1cInNpemUtaW5wdXRcIj5cbiAgICA8bGFiZWw+d2lkdGg8L2xhYmVsPlxuICAgIDxpbnB1dFxuICAgICAgI3dpZHRoXG4gICAgICBtYXBJbnB1dFxuICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICBbdmFsdWVdPVwiMzg0MFwiXG4gICAgICAoY2hhbmdlKT1cInNldFdpZHRoKHdpZHRoLnZhbHVlKVwiXG4gICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgIFtjbGFzcy5iYWRTaXplXT1cImRpc2FibGVkXCJcbiAgICAvPlxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBjbGFzcz1cInNpemUtaW5wdXRcIj5cbiAgICA8bGFiZWw+aGVpZ2h0PC9sYWJlbD5cbiAgICA8aW5wdXRcbiAgICAgICNoZWlnaHRcbiAgICAgIG1hcElucHV0XG4gICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgIFt2YWx1ZV09XCIyNjEwXCJcbiAgICAgIChjaGFuZ2UpPVwic2V0SGVpZ2h0KGhlaWdodC52YWx1ZSlcIlxuICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICBbY2xhc3MuYmFkU2l6ZV09XCJkaXNhYmxlZFwiXG4gICAgLz5cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgPG1hdC1yYWRpby1ncm91cCBbKG5nTW9kZWwpXT1cImZpdHRpbmdcIiBjbGFzcz1cImZpdHRpbmctcmFkaW9zXCI+XG4gICAgICA8bWF0LXJhZGlvLWJ1dHRvbiAqbmdGb3I9XCJsZXQgZml0dGluZyBvZiBmaXR0aW5nc1wiIFt2YWx1ZV09XCJmaXR0aW5nXCJcbiAgICAgICAgPnt7IGZpdHRpbmcgfX1cbiAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICA8L21hdC1yYWRpby1ncm91cD5cbiAgPC9idXR0b24+XG4gIDxidXR0b25cbiAgICBtYXQtbWVudS1pdGVtXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBjbGFzcz1cIm1ha2UtcGljdHVyZVwiXG4gICAgKGNsaWNrKT1cIm1ha2VQaWN0dXJlKClcIlxuICA+XG4gICAge3sgYnV0dG9uVGV4dCgpIH19XG4gIDwvYnV0dG9uPlxuPC9tYXQtbWVudT5cbjxhcHAtbWVudS10b2dnbGVcbiAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxuICB0b29sdGlwPVwiQ3JlYXRlcyBhIHBpY3R1cmUgZnJvbSB0aGUgY3VycmVudCB2aWV3OiBkaXJlY3RseSBzYXZlcyBhIHBuZyBvZiBhcmJpdHJhcnkgc2l6ZSBmcm9tIHRoZSBjdXJyZW50IHZpZXdcIlxuICBpY29uPVwicG5nXCJcbj5cbjwvYXBwLW1lbnUtdG9nZ2xlPlxuPGRpdj5cbiAgPGNhbnZhcyBoaWRkZW4gaWQ9XCJzY3JlZW5zaG90Q2FudmFzXCI+PC9jYW52YXM+XG48L2Rpdj5cbiJdfQ==
|