phoenix-ui-components 2.3.0 → 2.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/_theming.scss +5 -1
- package/dist/README.md +1 -1
- package/dist/components/embed-menu/embed-menu.component.d.ts +3 -0
- package/dist/components/embed-menu/experiment-link/experiment-link.component.d.ts +3 -0
- package/dist/components/loader/loader.component.d.ts +3 -0
- package/dist/components/nav/nav.component.d.ts +3 -0
- package/dist/components/phoenix-menu/config/config-slider/config-slider.component.d.ts +3 -0
- package/dist/components/phoenix-menu/pheonix-menu-item/phoenix-menu-item.component.d.ts +3 -0
- package/dist/components/phoenix-menu/phoenix-menu.component.d.ts +3 -0
- package/dist/components/phoenix-ui.module.d.ts +56 -0
- package/dist/components/ui-menu/animate-camera/animate-camera.component.d.ts +3 -0
- package/dist/components/ui-menu/animate-event/animate-event.component.d.ts +3 -0
- package/dist/components/ui-menu/ar-toggle/ar-toggle.component.d.ts +3 -0
- package/dist/components/ui-menu/auto-rotate/auto-rotate.component.d.ts +3 -0
- package/dist/components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component.d.ts +6 -0
- package/dist/components/ui-menu/collections-info/collections-info.component.d.ts +3 -0
- package/dist/components/ui-menu/dark-theme/dark-theme.component.d.ts +3 -0
- package/dist/components/ui-menu/event-selector/event-selector.component.d.ts +3 -0
- package/dist/components/ui-menu/experiment-info/experiment-info.component.d.ts +3 -0
- package/dist/components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.d.ts +5 -0
- package/dist/components/ui-menu/info-panel/info-panel.component.d.ts +3 -0
- package/dist/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.d.ts +3 -0
- package/dist/components/ui-menu/io-options/io-options.component.d.ts +3 -0
- package/dist/components/ui-menu/main-view-toggle/main-view-toggle.component.d.ts +3 -0
- package/dist/components/ui-menu/menu-toggle/menu-toggle.component.d.ts +3 -0
- package/dist/components/ui-menu/object-clipping/object-clipping.component.d.ts +3 -0
- package/dist/components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component.d.ts +3 -0
- package/dist/components/ui-menu/object-selection/object-selection.component.d.ts +3 -0
- package/dist/components/ui-menu/overlay/overlay.component.d.ts +3 -0
- package/dist/components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component.d.ts +3 -0
- package/dist/components/ui-menu/overlay-view/overlay-view.component.d.ts +3 -0
- package/dist/components/ui-menu/performance-toggle/performance-toggle.component.d.ts +3 -0
- package/dist/components/ui-menu/share-link/share-link-dialog/share-link-dialog.component.d.ts +10 -2
- package/dist/components/ui-menu/share-link/share-link.component.d.ts +3 -0
- package/dist/components/ui-menu/ss-mode/ss-mode.component.d.ts +3 -0
- package/dist/components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component.d.ts +3 -0
- package/dist/components/ui-menu/tree-menu/tree-menu.component.d.ts +3 -0
- package/dist/components/ui-menu/ui-menu.component.d.ts +3 -0
- package/dist/components/ui-menu/view-options/view-options.component.d.ts +3 -0
- package/dist/components/ui-menu/vr-toggle/vr-toggle.component.d.ts +3 -0
- package/dist/components/ui-menu/zoom-controls/zoom-controls.component.d.ts +3 -0
- package/dist/esm2020/components/embed-menu/embed-menu.component.mjs +17 -0
- package/dist/esm2020/components/embed-menu/experiment-link/experiment-link.component.mjs +18 -0
- package/dist/esm2020/components/loader/loader.component.mjs +19 -0
- package/dist/esm2020/components/nav/nav.component.mjs +14 -0
- package/dist/esm2020/components/phoenix-menu/config/config-slider/config-slider.component.mjs +38 -0
- package/dist/{esm2015/components/phoenix-menu/index.js → esm2020/components/phoenix-menu/index.mjs} +1 -1
- package/dist/esm2020/components/phoenix-menu/pheonix-menu-item/phoenix-menu-item.component.mjs +32 -0
- package/dist/esm2020/components/phoenix-menu/phoenix-menu.component.mjs +14 -0
- package/dist/esm2020/components/phoenix-ui.module.mjs +201 -0
- package/dist/esm2020/components/ui-menu/animate-camera/animate-camera.component.mjs +76 -0
- package/dist/esm2020/components/ui-menu/animate-event/animate-event.component.mjs +25 -0
- package/dist/esm2020/components/ui-menu/ar-toggle/ar-toggle.component.mjs +47 -0
- package/dist/esm2020/components/ui-menu/auto-rotate/auto-rotate.component.mjs +21 -0
- package/dist/esm2020/components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component.mjs +81 -0
- package/dist/esm2020/components/ui-menu/collections-info/collections-info.component.mjs +32 -0
- package/dist/esm2020/components/ui-menu/dark-theme/dark-theme.component.mjs +24 -0
- package/dist/esm2020/components/ui-menu/event-selector/event-selector.component.mjs +24 -0
- package/dist/esm2020/components/ui-menu/experiment-info/experiment-info.component.mjs +26 -0
- package/dist/{esm2015/components/ui-menu/index.js → esm2020/components/ui-menu/index.mjs} +1 -1
- package/dist/esm2020/components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.mjs +37 -0
- package/dist/esm2020/components/ui-menu/info-panel/info-panel.component.mjs +49 -0
- package/dist/esm2020/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.mjs +196 -0
- package/dist/esm2020/components/ui-menu/io-options/io-options.component.mjs +28 -0
- package/dist/esm2020/components/ui-menu/main-view-toggle/main-view-toggle.component.mjs +24 -0
- package/dist/esm2020/components/ui-menu/menu-toggle/menu-toggle.component.mjs +24 -0
- package/dist/esm2020/components/ui-menu/object-clipping/object-clipping.component.mjs +31 -0
- package/dist/esm2020/components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component.mjs +24 -0
- package/dist/esm2020/components/ui-menu/object-selection/object-selection.component.mjs +36 -0
- package/dist/esm2020/components/ui-menu/overlay/overlay.component.mjs +99 -0
- package/dist/esm2020/components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component.mjs +53 -0
- package/dist/esm2020/components/ui-menu/overlay-view/overlay-view.component.mjs +32 -0
- package/dist/esm2020/components/ui-menu/performance-toggle/performance-toggle.component.mjs +21 -0
- package/dist/esm2020/components/ui-menu/share-link/share-link-dialog/share-link-dialog.component.mjs +73 -0
- package/dist/esm2020/components/ui-menu/share-link/share-link.component.mjs +20 -0
- package/dist/esm2020/components/ui-menu/ss-mode/ss-mode.component.mjs +41 -0
- package/dist/esm2020/components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component.mjs +33 -0
- package/dist/esm2020/components/ui-menu/tree-menu/tree-menu.component.mjs +71 -0
- package/dist/esm2020/components/ui-menu/ui-menu.component.mjs +43 -0
- package/dist/esm2020/components/ui-menu/view-options/view-options.component.mjs +34 -0
- package/dist/esm2020/components/ui-menu/vr-toggle/vr-toggle.component.mjs +44 -0
- package/dist/esm2020/components/ui-menu/zoom-controls/zoom-controls.component.mjs +61 -0
- package/dist/esm2020/phoenix-ui-components.mjs +5 -0
- package/dist/esm2020/public_api.mjs +9 -0
- package/dist/esm2020/services/event-display.service.mjs +23 -0
- package/dist/esm2020/services/extras/attribute.pipe.mjs +33 -0
- package/dist/{esm2015/services/extras/event-data-import.js → esm2020/services/extras/event-data-import.mjs} +1 -1
- package/dist/esm2020/services/index.mjs +4 -0
- package/dist/fesm2015/phoenix-ui-components.mjs +1644 -0
- package/dist/fesm2015/phoenix-ui-components.mjs.map +1 -0
- package/dist/fesm2020/phoenix-ui-components.mjs +1644 -0
- package/dist/fesm2020/phoenix-ui-components.mjs.map +1 -0
- package/dist/phoenix-ui-components.d.ts +2 -6
- package/dist/{index.d.ts → public_api.d.ts} +2 -0
- package/dist/services/event-display.service.d.ts +3 -0
- package/dist/services/extras/attribute.pipe.d.ts +3 -0
- package/dist/services/index.d.ts +1 -0
- package/package.json +13 -13
- package/dist/bundles/phoenix-ui-components.umd.js +0 -2147
- package/dist/bundles/phoenix-ui-components.umd.js.map +0 -1
- package/dist/esm2015/components/embed-menu/embed-menu.component.js +0 -11
- package/dist/esm2015/components/embed-menu/experiment-link/experiment-link.component.js +0 -17
- package/dist/esm2015/components/loader/loader.component.js +0 -18
- package/dist/esm2015/components/nav/nav.component.js +0 -14
- package/dist/esm2015/components/phoenix-menu/config/config-slider/config-slider.component.js +0 -32
- package/dist/esm2015/components/phoenix-menu/pheonix-menu-item/phoenix-menu-item.component.js +0 -29
- package/dist/esm2015/components/phoenix-menu/phoenix-menu.component.js +0 -14
- package/dist/esm2015/components/phoenix-ui.module.js +0 -94
- package/dist/esm2015/components/ui-menu/animate-camera/animate-camera.component.js +0 -77
- package/dist/esm2015/components/ui-menu/animate-event/animate-event.component.js +0 -27
- package/dist/esm2015/components/ui-menu/ar-toggle/ar-toggle.component.js +0 -46
- package/dist/esm2015/components/ui-menu/auto-rotate/auto-rotate.component.js +0 -23
- package/dist/esm2015/components/ui-menu/collections-info/collections-info-overlay/collections-info-overlay.component.js +0 -72
- package/dist/esm2015/components/ui-menu/collections-info/collections-info.component.js +0 -34
- package/dist/esm2015/components/ui-menu/dark-theme/dark-theme.component.js +0 -26
- package/dist/esm2015/components/ui-menu/event-selector/event-selector.component.js +0 -25
- package/dist/esm2015/components/ui-menu/experiment-info/experiment-info.component.js +0 -27
- package/dist/esm2015/components/ui-menu/info-panel/info-panel-overlay/info-panel-overlay.component.js +0 -36
- package/dist/esm2015/components/ui-menu/info-panel/info-panel.component.js +0 -51
- package/dist/esm2015/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.js +0 -202
- package/dist/esm2015/components/ui-menu/io-options/io-options.component.js +0 -31
- package/dist/esm2015/components/ui-menu/main-view-toggle/main-view-toggle.component.js +0 -25
- package/dist/esm2015/components/ui-menu/menu-toggle/menu-toggle.component.js +0 -20
- package/dist/esm2015/components/ui-menu/object-clipping/object-clipping.component.js +0 -30
- package/dist/esm2015/components/ui-menu/object-selection/object-selection-overlay/object-selection-overlay.component.js +0 -25
- package/dist/esm2015/components/ui-menu/object-selection/object-selection.component.js +0 -39
- package/dist/esm2015/components/ui-menu/overlay/overlay.component.js +0 -90
- package/dist/esm2015/components/ui-menu/overlay-view/overlay-view-window/overlay-view-window.component.js +0 -52
- package/dist/esm2015/components/ui-menu/overlay-view/overlay-view.component.js +0 -34
- package/dist/esm2015/components/ui-menu/performance-toggle/performance-toggle.component.js +0 -23
- package/dist/esm2015/components/ui-menu/share-link/share-link-dialog/share-link-dialog.component.js +0 -64
- package/dist/esm2015/components/ui-menu/share-link/share-link.component.js +0 -22
- package/dist/esm2015/components/ui-menu/ss-mode/ss-mode.component.js +0 -43
- package/dist/esm2015/components/ui-menu/tree-menu/tree-menu-item/tree-menu-item.component.js +0 -32
- package/dist/esm2015/components/ui-menu/tree-menu/tree-menu.component.js +0 -71
- package/dist/esm2015/components/ui-menu/ui-menu.component.js +0 -22
- package/dist/esm2015/components/ui-menu/view-options/view-options.component.js +0 -33
- package/dist/esm2015/components/ui-menu/vr-toggle/vr-toggle.component.js +0 -45
- package/dist/esm2015/components/ui-menu/zoom-controls/zoom-controls.component.js +0 -63
- package/dist/esm2015/index.js +0 -7
- package/dist/esm2015/phoenix-ui-components.js +0 -10
- package/dist/esm2015/services/event-display.service.js +0 -22
- package/dist/esm2015/services/extras/attribute.pipe.js +0 -29
- package/dist/esm2015/services/index.js +0 -3
- package/dist/fesm2015/phoenix-ui-components.js +0 -1619
- package/dist/fesm2015/phoenix-ui-components.js.map +0 -1
- package/dist/phoenix-ui-components.metadata.json +0 -1
package/dist/esm2015/components/ui-menu/io-options/io-options-dialog/io-options-dialog.component.js
DELETED
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { Component, Input } from '@angular/core';
|
|
3
|
-
import { CMSLoader, JiveXMLLoader, ScriptLoader } from 'phoenix-event-display';
|
|
4
|
-
import JSZip from 'jszip';
|
|
5
|
-
import { EventDisplayService } from '../../../../services/event-display.service';
|
|
6
|
-
import { MatDialogRef } from '@angular/material/dialog';
|
|
7
|
-
import { EventDataFormat, ImportOption, } from '../../../../services/extras/event-data-import';
|
|
8
|
-
export class IOOptionsDialogComponent {
|
|
9
|
-
constructor(eventDisplay, dialogRef) {
|
|
10
|
-
this.eventDisplay = eventDisplay;
|
|
11
|
-
this.dialogRef = dialogRef;
|
|
12
|
-
this.eventDataImportOptions = [EventDataFormat.JSON];
|
|
13
|
-
this.supportedEventDataFormats = [
|
|
14
|
-
new ImportOption(EventDataFormat.JSON, '.json', this.handleJSONEventDataInput.bind(this), 'application/json'),
|
|
15
|
-
new ImportOption(EventDataFormat.JIVEXML, '.xml', this.handleJiveXMLDataInput.bind(this), 'text/xml'),
|
|
16
|
-
new ImportOption(EventDataFormat.ZIP, '.zip', this.handleZipEventDataInput.bind(this), '.zip'),
|
|
17
|
-
new ImportOption(EventDataFormat.IG, '.ig', this.handleIgEventDataInput.bind(this), '.ig'),
|
|
18
|
-
];
|
|
19
|
-
}
|
|
20
|
-
ngOnInit() {
|
|
21
|
-
this.eventDataOptionsWithHandler = this.supportedEventDataFormats.filter((eventDataFormat) => this.eventDataImportOptions.includes(eventDataFormat.format));
|
|
22
|
-
this.eventDataImportOptions.forEach((eventDataImportOption) => {
|
|
23
|
-
if (eventDataImportOption instanceof ImportOption) {
|
|
24
|
-
const importHandler = eventDataImportOption.handler.bind(this);
|
|
25
|
-
eventDataImportOption.handler = (files) => {
|
|
26
|
-
importHandler(files);
|
|
27
|
-
this.onClose();
|
|
28
|
-
};
|
|
29
|
-
this.eventDataOptionsWithHandler.push(eventDataImportOption);
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
getSupportedEventDataFormats() {
|
|
34
|
-
return this.eventDataImportOptions
|
|
35
|
-
.map((format) => {
|
|
36
|
-
if (format instanceof ImportOption) {
|
|
37
|
-
return format.format;
|
|
38
|
-
}
|
|
39
|
-
return format;
|
|
40
|
-
})
|
|
41
|
-
.filter((format) => format !== 'ZIP')
|
|
42
|
-
.join(', ');
|
|
43
|
-
}
|
|
44
|
-
onClose() {
|
|
45
|
-
this.dialogRef.close();
|
|
46
|
-
}
|
|
47
|
-
handleJSONEventDataInput(files) {
|
|
48
|
-
const callback = (content) => {
|
|
49
|
-
const json = typeof content === 'string' ? JSON.parse(content) : content;
|
|
50
|
-
this.eventDisplay.parsePhoenixEvents(json);
|
|
51
|
-
};
|
|
52
|
-
this.handleFileInput(files[0], 'json', callback);
|
|
53
|
-
}
|
|
54
|
-
handleJiveXMLDataInput(files) {
|
|
55
|
-
const callback = (content) => {
|
|
56
|
-
const jiveloader = new JiveXMLLoader();
|
|
57
|
-
jiveloader.process(content);
|
|
58
|
-
const eventData = jiveloader.getEventData();
|
|
59
|
-
this.eventDisplay.buildEventDataFromJSON(eventData);
|
|
60
|
-
};
|
|
61
|
-
this.handleFileInput(files[0], 'xml', callback);
|
|
62
|
-
}
|
|
63
|
-
handleOBJInput(files) {
|
|
64
|
-
const callback = (content, name) => {
|
|
65
|
-
this.eventDisplay.parseOBJGeometry(content, name);
|
|
66
|
-
};
|
|
67
|
-
this.handleFileInput(files[0], 'obj', callback);
|
|
68
|
-
}
|
|
69
|
-
handleSceneInput(files) {
|
|
70
|
-
const callback = (content) => {
|
|
71
|
-
this.eventDisplay.parsePhoenixDisplay(content);
|
|
72
|
-
};
|
|
73
|
-
this.handleFileInput(files[0], 'phnx', callback);
|
|
74
|
-
}
|
|
75
|
-
handleGLTFInput(files) {
|
|
76
|
-
const callback = (content, name) => {
|
|
77
|
-
this.eventDisplay.parseGLTFGeometry(content, name);
|
|
78
|
-
};
|
|
79
|
-
this.handleFileInput(files[0], 'gltf', callback);
|
|
80
|
-
}
|
|
81
|
-
handlePhoenixInput(files) {
|
|
82
|
-
const callback = (content) => {
|
|
83
|
-
this.eventDisplay.parsePhoenixDisplay(content);
|
|
84
|
-
};
|
|
85
|
-
this.handleFileInput(files[0], 'phnx', callback);
|
|
86
|
-
}
|
|
87
|
-
handleROOTInput(files) {
|
|
88
|
-
ScriptLoader.loadJSRootScripts().then((JSROOT) => {
|
|
89
|
-
const objectName = prompt('Enter object name in ROOT file');
|
|
90
|
-
JSROOT.openFile(files[0]).then((file) => {
|
|
91
|
-
file.readObject(objectName).then((obj) => {
|
|
92
|
-
this.eventDisplay.loadJSONGeometry(JSROOT.GEO.build(obj, { dflt_colors: true }).toJSON(), files[0].name.split('.')[0]);
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
this.onClose();
|
|
97
|
-
}
|
|
98
|
-
handleRootJSONInput(files) {
|
|
99
|
-
ScriptLoader.loadJSRootScripts().then((JSROOT) => {
|
|
100
|
-
const callback = (content, name) => {
|
|
101
|
-
this.eventDisplay.loadJSONGeometry(JSROOT.GEO.build(JSROOT.parse(content), {
|
|
102
|
-
dflt_colors: true,
|
|
103
|
-
}).toJSON(), name);
|
|
104
|
-
};
|
|
105
|
-
this.handleFileInput(files[0], 'gz', callback);
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
handleIgEventDataInput(files) {
|
|
109
|
-
const cmsLoader = new CMSLoader();
|
|
110
|
-
cmsLoader.readIgArchive(files[0], (allEvents) => {
|
|
111
|
-
const allEventsData = cmsLoader.getAllEventsData(allEvents);
|
|
112
|
-
this.eventDisplay.parsePhoenixEvents(allEventsData);
|
|
113
|
-
this.onClose();
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
handleZipEventDataInput(files) {
|
|
117
|
-
if (this.isFileOfExtension(files[0], 'zip')) {
|
|
118
|
-
this.handleZipInput(files[0], (allFilesWithData) => {
|
|
119
|
-
const allEventsObject = {};
|
|
120
|
-
// JSON event data
|
|
121
|
-
Object.keys(allFilesWithData)
|
|
122
|
-
.filter((fileName) => fileName.endsWith('.json'))
|
|
123
|
-
.forEach((fileName) => {
|
|
124
|
-
Object.assign(allEventsObject, JSON.parse(allFilesWithData[fileName]));
|
|
125
|
-
});
|
|
126
|
-
// JiveXML event data
|
|
127
|
-
const jiveloader = new JiveXMLLoader();
|
|
128
|
-
Object.keys(allFilesWithData)
|
|
129
|
-
.filter((fileName) => fileName.endsWith('.xml'))
|
|
130
|
-
.forEach((fileName) => {
|
|
131
|
-
jiveloader.process(allFilesWithData[fileName]);
|
|
132
|
-
const eventData = jiveloader.getEventData();
|
|
133
|
-
Object.assign(allEventsObject, { [fileName]: eventData });
|
|
134
|
-
});
|
|
135
|
-
this.eventDisplay.parsePhoenixEvents(allEventsObject);
|
|
136
|
-
this.onClose();
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
console.error('Error: Invalid file format!');
|
|
141
|
-
this.eventDisplay.getInfoLogger().add('Invalid file format!', 'Error');
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
handleZipInput(file, callback) {
|
|
145
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
146
|
-
const allFilesWithData = {};
|
|
147
|
-
// Using a try catch block to catch any errors in Promises
|
|
148
|
-
try {
|
|
149
|
-
const zipArchive = new JSZip();
|
|
150
|
-
yield zipArchive.loadAsync(file);
|
|
151
|
-
const allFiles = Object.keys(zipArchive.files);
|
|
152
|
-
for (const singleFile of allFiles) {
|
|
153
|
-
const fileData = yield zipArchive.file(singleFile).async('string');
|
|
154
|
-
allFilesWithData[singleFile] = fileData;
|
|
155
|
-
}
|
|
156
|
-
callback(allFilesWithData);
|
|
157
|
-
}
|
|
158
|
-
catch (error) {
|
|
159
|
-
console.error('Error while reading zip', error);
|
|
160
|
-
this.eventDisplay.getInfoLogger().add('Could not read zip file', 'Error');
|
|
161
|
-
}
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
handleFileInput(file, extension, callback) {
|
|
165
|
-
const reader = new FileReader();
|
|
166
|
-
if (this.isFileOfExtension(file, extension)) {
|
|
167
|
-
reader.onload = () => {
|
|
168
|
-
callback(reader.result.toString(), file.name.split('.')[0]);
|
|
169
|
-
};
|
|
170
|
-
reader.readAsText(file);
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
console.error('Error: Invalid file format!');
|
|
174
|
-
this.eventDisplay.getInfoLogger().add('Invalid file format!', 'Error');
|
|
175
|
-
}
|
|
176
|
-
this.onClose();
|
|
177
|
-
}
|
|
178
|
-
isFileOfExtension(file, extension) {
|
|
179
|
-
return file.name.split('.').pop() === extension;
|
|
180
|
-
}
|
|
181
|
-
saveScene() {
|
|
182
|
-
this.eventDisplay.exportPhoenixDisplay();
|
|
183
|
-
}
|
|
184
|
-
exportOBJ() {
|
|
185
|
-
this.eventDisplay.exportToOBJ();
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
IOOptionsDialogComponent.decorators = [
|
|
189
|
-
{ type: Component, args: [{
|
|
190
|
-
selector: 'app-io-options-dialog',
|
|
191
|
-
template: "<div class=\"dialog\">\n <h1 mat-dialog-title>Import and export options</h1>\n <div mat-dialog-content class=\"dialog-content\">\n <div *ngIf=\"eventDataImportOptions.length > 0\">\n <h5>Import</h5>\n\n <h6 class=\"text-center\">Event data</h6>\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\n <p class=\"text-center\">\n Supported formats: {{ getSupportedEventDataFormats() }}\n </p>\n </div>\n\n <h6 class=\"text-center\">Geometries</h6>\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\"\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\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\">Supported formats: OBJ, GLTF, ROOT, ROOT JSON</p>\n\n <h5>Import / export scene</h5>\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 <div mat-dialog-actions>\n <button mat-button (click)=\"onClose()\" cdkFocusInitial>Close</button>\n </div>\n</div>\n",
|
|
192
|
-
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"]
|
|
193
|
-
},] }
|
|
194
|
-
];
|
|
195
|
-
IOOptionsDialogComponent.ctorParameters = () => [
|
|
196
|
-
{ type: EventDisplayService },
|
|
197
|
-
{ type: MatDialogRef }
|
|
198
|
-
];
|
|
199
|
-
IOOptionsDialogComponent.propDecorators = {
|
|
200
|
-
eventDataImportOptions: [{ type: Input }]
|
|
201
|
-
};
|
|
202
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8tb3B0aW9ucy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdWktbWVudS9pby1vcHRpb25zL2lvLW9wdGlvbnMtZGlhbG9nL2lvLW9wdGlvbnMtZGlhbG9nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFVLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0UsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQ0wsZUFBZSxFQUVmLFlBQVksR0FDYixNQUFNLCtDQUErQyxDQUFDO0FBT3ZELE1BQU0sT0FBTyx3QkFBd0I7SUFpQ25DLFlBQ1UsWUFBaUMsRUFDbEMsU0FBaUQ7UUFEaEQsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2xDLGNBQVMsR0FBVCxTQUFTLENBQXdDO1FBakMxRCwyQkFBc0IsR0FBNEIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFJakUsOEJBQXlCLEdBQUc7WUFDbEMsSUFBSSxZQUFZLENBQ2QsZUFBZSxDQUFDLElBQUksRUFDcEIsT0FBTyxFQUNQLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQ3hDLGtCQUFrQixDQUNuQjtZQUNELElBQUksWUFBWSxDQUNkLGVBQWUsQ0FBQyxPQUFPLEVBQ3ZCLE1BQU0sRUFDTixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUN0QyxVQUFVLENBQ1g7WUFDRCxJQUFJ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QUMsQ0FBQztTQUN4RTtRQUNELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8saUJBQWlCLENBQUMsSUFBVSxFQUFFLFNBQWlCO1FBQ3JELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssU0FBUyxDQUFDO0lBQ2xELENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDOzs7WUF4UEYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSx1QkFBdUI7Z0JBQ2pDLGc4SEFBaUQ7O2FBRWxEOzs7WUFaUSxtQkFBbUI7WUFDbkIsWUFBWTs7O3FDQWFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT25Jbml0LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDTVNMb2FkZXIsIEppdmVYTUxMb2FkZXIsIFNjcmlwdExvYWRlciB9IGZyb20gJ3Bob2VuaXgtZXZlbnQtZGlzcGxheSc7XG5pbXBvcnQgSlNaaXAgZnJvbSAnanN6aXAnO1xuaW1wb3J0IHsgRXZlbnREaXNwbGF5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2V2ZW50LWRpc3BsYXkuc2VydmljZSc7XG5pbXBvcnQgeyBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtcbiAgRXZlbnREYXRhRm9ybWF0LFxuICBFdmVudERhdGFJbXBvcnRPcHRpb24sXG4gIEltcG9ydE9wdGlvbixcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvZXh0cmFzL2V2ZW50LWRhdGEtaW1wb3J0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWlvLW9wdGlvbnMtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lvLW9wdGlvbnMtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW8tb3B0aW9ucy1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgSU9PcHRpb25zRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgZXZlbnREYXRhSW1wb3J0T3B0aW9uczogRXZlbnREYXRhSW1wb3J0T3B0aW9uW10gPSBbRXZlbnREYXRhRm9ybWF0LkpTT05dO1xuXG4gIGV2ZW50RGF0YU9wdGlvbnNXaXRoSGFuZGxlcjogSW1wb3J0T3B0aW9uW107XG5cbiAgcHJpdmF0ZSBzdXBwb3J0ZWRFdmVudERhdGFGb3JtYXRzID0gW1xuICAgIG5ldyBJbXBvcnRPcHRpb24oXG4gICAgICBFdmVudERhdGFGb3JtYXQuSlNPTixcbiAgICAgICcuanNvbicsXG4gICAgICB0aGlzLmhhbmRsZUpTT05FdmVudERhdGFJbnB1dC5iaW5kKHRoaXMpLFxuICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgKSxcbiAgICBuZXcgSW1wb3J0T3B0aW9uKFxuICAgICAgRXZlbnREYXRhRm9ybWF0LkpJVkVYTUwsXG4gICAgICAnLnhtbCcsXG4gICAgICB0aGlzLmhhbmRsZUppdmVYTUxEYXRhSW5wdXQuYmluZCh0aGlzKSxcbiAgICAgICd0ZXh0L3htbCdcbiAgICApLFxuICAgIG5ldyBJbXBvcnRPcHRpb24oXG4gICAgICBFdmVudERhdGFGb3JtYXQuWklQLFxuICAgICAgJy56aXAnLFxuICAgICAgdGhpcy5oYW5kbGVaaXBFdmVudERhdGFJbnB1dC5iaW5kKHRoaXMpLFxuICAgICAgJy56aXAnXG4gICAgKSxcbiAgICBuZXcgSW1wb3J0T3B0aW9uKFxuICAgICAgRXZlbnREYXRhRm9ybWF0LklHLFxuICAgICAgJy5pZycsXG4gICAgICB0aGlzLmhhbmRsZUlnRXZlbnREYXRhSW5wdXQuYmluZCh0aGlzKSxcbiAgICAgICcuaWcnXG4gICAgKSxcbiAgXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGV2ZW50RGlzcGxheTogRXZlbnREaXNwbGF5U2VydmljZSxcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8SU9PcHRpb25zRGlhbG9nQ29tcG9uZW50PlxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5ldmVudERhdGFPcHRpb25zV2l0aEhhbmRsZXIgPSB0aGlzLnN1cHBvcnRlZEV2ZW50RGF0YUZvcm1hdHMuZmlsdGVyKFxuICAgICAgKGV2ZW50RGF0YUZvcm1hdCkgPT5cbiAgICAgICAgdGhpcy5ldmVudERhdGFJbXBvcnRPcHRpb25zLmluY2x1ZGVzKFxuICAgICAgICAgIGV2ZW50RGF0YUZvcm1hdC5mb3JtYXQgYXMgRXZlbnREYXRhRm9ybWF0XG4gICAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5ldmVudERhdGFJbXBvcnRPcHRpb25zLmZvckVhY2goKGV2ZW50RGF0YUltcG9ydE9wdGlvbikgPT4ge1xuICAgICAgaWYgKGV2ZW50RGF0YUltcG9ydE9wdGlvbiBpbnN0YW5jZW9mIEltcG9ydE9wdGlvbikge1xuICAgICAgICBjb25zdCBpbXBvcnRIYW5kbGVyID0gZXZlbnREYXRhSW1wb3J0T3B0aW9uLmhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgZXZlbnREYXRhSW1wb3J0T3B0aW9uLmhhbmRsZXIgPSAoZmlsZXM6IEZpbGVMaXN0KSA9PiB7XG4gICAgICAgICAgaW1wb3J0SGFuZGxlcihmaWxlcyk7XG4gICAgICAgICAgdGhpcy5vbkNsb3NlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZXZlbnREYXRhT3B0aW9uc1dpdGhIYW5kbGVyLnB1c2goZXZlbnREYXRhSW1wb3J0T3B0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldFN1cHBvcnRlZEV2ZW50RGF0YUZvcm1hdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnREYXRhSW1wb3J0T3B0aW9uc1xuICAgICAgLm1hcCgoZm9ybWF0KSA9PiB7XG4gICAgICAgIGlmIChmb3JtYXQgaW5zdGFuY2VvZiBJbXBvcnRPcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0LmZvcm1hdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoZm9ybWF0KSA9PiBmb3JtYXQgIT09ICdaSVAnKVxuICAgICAgLmpvaW4oJywgJyk7XG4gIH1cblxuICBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICBoYW5kbGVKU09ORXZlbnREYXRhSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55KSA9PiB7XG4gICAgICBjb25zdCBqc29uID0gdHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShjb250ZW50KSA6IGNvbnRlbnQ7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5wYXJzZVBob2VuaXhFdmVudHMoanNvbik7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ2pzb24nLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVKaXZlWE1MRGF0YUlucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKGNvbnRlbnQ6IGFueSkgPT4ge1xuICAgICAgY29uc3Qgaml2ZWxvYWRlciA9IG5ldyBKaXZlWE1MTG9hZGVyKCk7XG4gICAgICBqaXZlbG9hZGVyLnByb2Nlc3MoY29udGVudCk7XG4gICAgICBjb25zdCBldmVudERhdGEgPSBqaXZlbG9hZGVyLmdldEV2ZW50RGF0YSgpO1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkuYnVpbGRFdmVudERhdGFGcm9tSlNPTihldmVudERhdGEpO1xuICAgIH07XG4gICAgdGhpcy5oYW5kbGVGaWxlSW5wdXQoZmlsZXNbMF0sICd4bWwnLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVPQkpJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IChjb250ZW50OiBhbnksIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkucGFyc2VPQkpHZW9tZXRyeShjb250ZW50LCBuYW1lKTtcbiAgICB9O1xuICAgIHRoaXMuaGFuZGxlRmlsZUlucHV0KGZpbGVzWzBdLCAnb2JqJywgY2FsbGJhY2spO1xuICB9XG5cbiAgaGFuZGxlU2NlbmVJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IChjb250ZW50OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlUGhvZW5peERpc3BsYXkoY29udGVudCk7XG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZUZpbGVJbnB1dChmaWxlc1swXSwgJ3BobngnLCBjYWxsYmFjayk7XG4gIH1cblxuICBoYW5kbGVHTFRGSW5wdXQoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55LCBuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlR0xURkdlb21ldHJ5KGNvbnRlbnQsIG5hbWUpO1xuICAgIH07XG4gICAgdGhpcy5oYW5kbGVGaWxlSW5wdXQoZmlsZXNbMF0sICdnbHRmJywgY2FsbGJhY2spO1xuICB9XG5cbiAgaGFuZGxlUGhvZW5peElucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKGNvbnRlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkucGFyc2VQaG9lbml4RGlzcGxheShjb250ZW50KTtcbiAgICB9O1xuICAgIHRoaXMuaGFuZGxlRmlsZUlucHV0KGZpbGVzWzBdLCAncGhueCcsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGhhbmRsZVJPT1RJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBTY3JpcHRMb2FkZXIubG9hZEpTUm9vdFNjcmlwdHMoKS50aGVuKChKU1JPT1Q6IGFueSkgPT4ge1xuICAgICAgY29uc3Qgb2JqZWN0TmFtZSA9IHByb21wdCgnRW50ZXIgb2JqZWN0IG5hbWUgaW4gUk9PVCBmaWxlJyk7XG4gICAgICBKU1JPT1Qub3BlbkZpbGUoZmlsZXNbMF0pLnRoZW4oKGZpbGU6IGFueSkgPT4ge1xuICAgICAgICBmaWxlLnJlYWRPYmplY3Qob2JqZWN0TmFtZSkudGhlbigob2JqOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmV2ZW50RGlzcGxheS5sb2FkSlNPTkdlb21ldHJ5KFxuICAgICAgICAgICAgSlNST09ULkdFTy5idWlsZChvYmosIHsgZGZsdF9jb2xvcnM6IHRydWUgfSkudG9KU09OKCksXG4gICAgICAgICAgICBmaWxlc1swXS5uYW1lLnNwbGl0KCcuJylbMF1cbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMub25DbG9zZSgpO1xuICB9XG5cbiAgaGFuZGxlUm9vdEpTT05JbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBTY3JpcHRMb2FkZXIubG9hZEpTUm9vdFNjcmlwdHMoKS50aGVuKChKU1JPT1Q6IGFueSkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSAoY29udGVudDogYW55LCBuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5ldmVudERpc3BsYXkubG9hZEpTT05HZW9tZXRyeShcbiAgICAgICAgICBKU1JPT1QuR0VPLmJ1aWxkKEpTUk9PVC5wYXJzZShjb250ZW50KSwge1xuICAgICAgICAgICAgZGZsdF9jb2xvcnM6IHRydWUsXG4gICAgICAgICAgfSkudG9KU09OKCksXG4gICAgICAgICAgbmFtZVxuICAgICAgICApO1xuICAgICAgfTtcbiAgICAgIHRoaXMuaGFuZGxlRmlsZUlucHV0KGZpbGVzWzBdLCAnZ3onLCBjYWxsYmFjayk7XG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVJZ0V2ZW50RGF0YUlucHV0KGZpbGVzOiBGaWxlTGlzdCkge1xuICAgIGNvbnN0IGNtc0xvYWRlciA9IG5ldyBDTVNMb2FkZXIoKTtcbiAgICBjbXNMb2FkZXIucmVhZElnQXJjaGl2ZShmaWxlc1swXSwgKGFsbEV2ZW50czogYW55W10pID0+IHtcbiAgICAgIGNvbnN0IGFsbEV2ZW50c0RhdGEgPSBjbXNMb2FkZXIuZ2V0QWxsRXZlbnRzRGF0YShhbGxFdmVudHMpO1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkucGFyc2VQaG9lbml4RXZlbnRzKGFsbEV2ZW50c0RhdGEpO1xuICAgICAgdGhpcy5vbkNsb3NlKCk7XG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVaaXBFdmVudERhdGFJbnB1dChmaWxlczogRmlsZUxpc3QpIHtcbiAgICBpZiAodGhpcy5pc0ZpbGVPZkV4dGVuc2lvbihmaWxlc1swXSwgJ3ppcCcpKSB7XG4gICAgICB0aGlzLmhhbmRsZVppcElucHV0KGZpbGVzWzBdLCAoYWxsRmlsZXNXaXRoRGF0YSkgPT4ge1xuICAgICAgICBjb25zdCBhbGxFdmVudHNPYmplY3QgPSB7fTtcblxuICAgICAgICAvLyBKU09OIGV2ZW50IGRhdGFcbiAgICAgICAgT2JqZWN0LmtleXMoYWxsRmlsZXNXaXRoRGF0YSlcbiAgICAgICAgICAuZmlsdGVyKChmaWxlTmFtZSkgPT4gZmlsZU5hbWUuZW5kc1dpdGgoJy5qc29uJykpXG4gICAgICAgICAgLmZvckVhY2goKGZpbGVOYW1lKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICBhbGxFdmVudHNPYmplY3QsXG4gICAgICAgICAgICAgIEpTT04ucGFyc2UoYWxsRmlsZXNXaXRoRGF0YVtmaWxlTmFtZV0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEppdmVYTUwgZXZlbnQgZGF0YVxuICAgICAgICBjb25zdCBqaXZlbG9hZGVyID0gbmV3IEppdmVYTUxMb2FkZXIoKTtcbiAgICAgICAgT2JqZWN0LmtleXMoYWxsRmlsZXNXaXRoRGF0YSlcbiAgICAgICAgICAuZmlsdGVyKChmaWxlTmFtZSkgPT4gZmlsZU5hbWUuZW5kc1dpdGgoJy54bWwnKSlcbiAgICAgICAgICAuZm9yRWFjaCgoZmlsZU5hbWUpID0+IHtcbiAgICAgICAgICAgIGppdmVsb2FkZXIucHJvY2VzcyhhbGxGaWxlc1dpdGhEYXRhW2ZpbGVOYW1lXSk7XG4gICAgICAgICAgICBjb25zdCBldmVudERhdGEgPSBqaXZlbG9hZGVyLmdldEV2ZW50RGF0YSgpO1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhbGxFdmVudHNPYmplY3QsIHsgW2ZpbGVOYW1lXTogZXZlbnREYXRhIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZXZlbnREaXNwbGF5LnBhcnNlUGhvZW5peEV2ZW50cyhhbGxFdmVudHNPYmplY3QpO1xuXG4gICAgICAgIHRoaXMub25DbG9zZSgpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOiBJbnZhbGlkIGZpbGUgZm9ybWF0IScpO1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkuZ2V0SW5mb0xvZ2dlcigpLmFkZCgnSW52YWxpZCBmaWxlIGZvcm1hdCEnLCAnRXJyb3InKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBoYW5kbGVaaXBJbnB1dChcbiAgICBmaWxlOiBGaWxlLFxuICAgIGNhbGxiYWNrOiAoYWxsRmlsZXNXaXRoRGF0YTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkgPT4gdm9pZFxuICApIHtcbiAgICBjb25zdCBhbGxGaWxlc1dpdGhEYXRhOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgLy8gVXNpbmcgYSB0cnkgY2F0Y2ggYmxvY2sgdG8gY2F0Y2ggYW55IGVycm9ycyBpbiBQcm9taXNlc1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB6aXBBcmNoaXZlID0gbmV3IEpTWmlwKCk7XG4gICAgICBhd2FpdCB6aXBBcmNoaXZlLmxvYWRBc3luYyhmaWxlKTtcbiAgICAgIGNvbnN0IGFsbEZpbGVzID0gT2JqZWN0LmtleXMoemlwQXJjaGl2ZS5maWxlcyk7XG4gICAgICBmb3IgKGNvbnN0IHNpbmdsZUZpbGUgb2YgYWxsRmlsZXMpIHtcbiAgICAgICAgY29uc3QgZmlsZURhdGEgPSBhd2FpdCB6aXBBcmNoaXZlLmZpbGUoc2luZ2xlRmlsZSkuYXN5bmMoJ3N0cmluZycpO1xuICAgICAgICBhbGxGaWxlc1dpdGhEYXRhW3NpbmdsZUZpbGVdID0gZmlsZURhdGE7XG4gICAgICB9XG4gICAgICBjYWxsYmFjayhhbGxGaWxlc1dpdGhEYXRhKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgcmVhZGluZyB6aXAnLCBlcnJvcik7XG4gICAgICB0aGlzLmV2ZW50RGlzcGxheS5nZXRJbmZvTG9nZ2VyKCkuYWRkKCdDb3VsZCBub3QgcmVhZCB6aXAgZmlsZScsICdFcnJvcicpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUZpbGVJbnB1dChcbiAgICBmaWxlOiBGaWxlLFxuICAgIGV4dGVuc2lvbjogc3RyaW5nLFxuICAgIGNhbGxiYWNrOiAocmVzdWx0OiBzdHJpbmcsIGZpbGVOYW1lPzogc3RyaW5nKSA9PiB2b2lkXG4gICkge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgaWYgKHRoaXMuaXNGaWxlT2ZFeHRlbnNpb24oZmlsZSwgZXh0ZW5zaW9uKSkge1xuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgY2FsbGJhY2socmVhZGVyLnJlc3VsdC50b1N0cmluZygpLCBmaWxlLm5hbWUuc3BsaXQoJy4nKVswXSk7XG4gICAgICB9O1xuICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOiBJbnZhbGlkIGZpbGUgZm9ybWF0IScpO1xuICAgICAgdGhpcy5ldmVudERpc3BsYXkuZ2V0SW5mb0xvZ2dlcigpLmFkZCgnSW52YWxpZCBmaWxlIGZvcm1hdCEnLCAnRXJyb3InKTtcbiAgICB9XG4gICAgdGhpcy5vbkNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGlzRmlsZU9mRXh0ZW5zaW9uKGZpbGU6IEZpbGUsIGV4dGVuc2lvbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGZpbGUubmFtZS5zcGxpdCgnLicpLnBvcCgpID09PSBleHRlbnNpb247XG4gIH1cblxuICBzYXZlU2NlbmUoKSB7XG4gICAgdGhpcy5ldmVudERpc3BsYXkuZXhwb3J0UGhvZW5peERpc3BsYXkoKTtcbiAgfVxuXG4gIGV4cG9ydE9CSigpIHtcbiAgICB0aGlzLmV2ZW50RGlzcGxheS5leHBvcnRUb09CSigpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { MatDialog } from '@angular/material/dialog';
|
|
3
|
-
import { EventDataFormat, } from '../../../services/extras/event-data-import';
|
|
4
|
-
import { IOOptionsDialogComponent } from './io-options-dialog/io-options-dialog.component';
|
|
5
|
-
export class IoOptionsComponent {
|
|
6
|
-
constructor(dialog) {
|
|
7
|
-
this.dialog = dialog;
|
|
8
|
-
this.eventDataImportOptions = Object.values(EventDataFormat);
|
|
9
|
-
}
|
|
10
|
-
openIODialog() {
|
|
11
|
-
const dialogRef = this.dialog.open(IOOptionsDialogComponent, {
|
|
12
|
-
panelClass: 'dialog',
|
|
13
|
-
});
|
|
14
|
-
dialogRef.componentInstance.eventDataImportOptions =
|
|
15
|
-
this.eventDataImportOptions;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
IoOptionsComponent.decorators = [
|
|
19
|
-
{ type: Component, args: [{
|
|
20
|
-
selector: 'app-io-options',
|
|
21
|
-
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",
|
|
22
|
-
styles: [""]
|
|
23
|
-
},] }
|
|
24
|
-
];
|
|
25
|
-
IoOptionsComponent.ctorParameters = () => [
|
|
26
|
-
{ type: MatDialog }
|
|
27
|
-
];
|
|
28
|
-
IoOptionsComponent.propDecorators = {
|
|
29
|
-
eventDataImportOptions: [{ type: Input }]
|
|
30
|
-
};
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8tb3B0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS1tZW51L2lvLW9wdGlvbnMvaW8tb3B0aW9ucy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFDTCxlQUFlLEdBRWhCLE1BQU0sNENBQTRDLENBQUM7QUFDcEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFPM0YsTUFBTSxPQUFPLGtCQUFrQjtJQUs3QixZQUFvQixNQUFpQjtRQUFqQixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBSHJDLDJCQUFzQixHQUNwQixNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRU8sQ0FBQztJQUV6QyxZQUFZO1FBQ1YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUU7WUFDM0QsVUFBVSxFQUFFLFFBQVE7U0FDckIsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLGlCQUFpQixDQUFDLHNCQUFzQjtZQUNoRCxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDaEMsQ0FBQzs7O1lBbEJGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQixxS0FBMEM7O2FBRTNDOzs7WUFYUSxTQUFTOzs7cUNBYWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge1xuICBFdmVudERhdGFGb3JtYXQsXG4gIEV2ZW50RGF0YUltcG9ydE9wdGlvbixcbn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZXh0cmFzL2V2ZW50LWRhdGEtaW1wb3J0JztcbmltcG9ydCB7IElPT3B0aW9uc0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vaW8tb3B0aW9ucy1kaWFsb2cvaW8tb3B0aW9ucy1kaWFsb2cuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWlvLW9wdGlvbnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW8tb3B0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lvLW9wdGlvbnMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgSW9PcHRpb25zQ29tcG9uZW50IHtcbiAgQElucHV0KClcbiAgZXZlbnREYXRhSW1wb3J0T3B0aW9uczogRXZlbnREYXRhSW1wb3J0T3B0aW9uW10gPVxuICAgIE9iamVjdC52YWx1ZXMoRXZlbnREYXRhRm9ybWF0KTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nKSB7fVxuXG4gIG9wZW5JT0RpYWxvZygpIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKElPT3B0aW9uc0RpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgcGFuZWxDbGFzczogJ2RpYWxvZycsXG4gICAgfSk7XG4gICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmV2ZW50RGF0YUltcG9ydE9wdGlvbnMgPVxuICAgICAgdGhpcy5ldmVudERhdGFJbXBvcnRPcHRpb25zO1xuICB9XG59XG4iXX0=
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
2
|
-
import { EventDisplayService } from '../../../services/event-display.service';
|
|
3
|
-
export class MainViewToggleComponent {
|
|
4
|
-
constructor(eventDisplay) {
|
|
5
|
-
this.eventDisplay = eventDisplay;
|
|
6
|
-
this.orthographicView = false;
|
|
7
|
-
}
|
|
8
|
-
switchMainView() {
|
|
9
|
-
this.orthographicView = !this.orthographicView;
|
|
10
|
-
this.eventDisplay
|
|
11
|
-
.getUIManager()
|
|
12
|
-
.toggleOrthographicView(this.orthographicView);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
MainViewToggleComponent.decorators = [
|
|
16
|
-
{ type: Component, args: [{
|
|
17
|
-
selector: 'app-main-view-toggle',
|
|
18
|
-
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",
|
|
19
|
-
styles: [""]
|
|
20
|
-
},] }
|
|
21
|
-
];
|
|
22
|
-
MainViewToggleComponent.ctorParameters = () => [
|
|
23
|
-
{ type: EventDisplayService }
|
|
24
|
-
];
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi12aWV3LXRvZ2dsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS1tZW51L21haW4tdmlldy10b2dnbGUvbWFpbi12aWV3LXRvZ2dsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQU85RSxNQUFNLE9BQU8sdUJBQXVCO0lBR2xDLFlBQW9CLFlBQWlDO1FBQWpDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUZyRCxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7SUFFc0IsQ0FBQztJQUV6RCxjQUFjO1FBQ1osSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQy9DLElBQUksQ0FBQyxZQUFZO2FBQ2QsWUFBWSxFQUFFO2FBQ2Qsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbkQsQ0FBQzs7O1lBZkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxzQkFBc0I7Z0JBQ2hDLGdRQUFnRDs7YUFFakQ7OztZQU5RLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXZlbnREaXNwbGF5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2V2ZW50LWRpc3BsYXkuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1tYWluLXZpZXctdG9nZ2xlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21haW4tdmlldy10b2dnbGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYWluLXZpZXctdG9nZ2xlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE1haW5WaWV3VG9nZ2xlQ29tcG9uZW50IHtcbiAgb3J0aG9ncmFwaGljVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXZlbnREaXNwbGF5OiBFdmVudERpc3BsYXlTZXJ2aWNlKSB7fVxuXG4gIHN3aXRjaE1haW5WaWV3KCkge1xuICAgIHRoaXMub3J0aG9ncmFwaGljVmlldyA9ICF0aGlzLm9ydGhvZ3JhcGhpY1ZpZXc7XG4gICAgdGhpcy5ldmVudERpc3BsYXlcbiAgICAgIC5nZXRVSU1hbmFnZXIoKVxuICAgICAgLnRvZ2dsZU9ydGhvZ3JhcGhpY1ZpZXcodGhpcy5vcnRob2dyYXBoaWNWaWV3KTtcbiAgfVxufVxuIl19
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
export class MenuToggleComponent {
|
|
3
|
-
constructor() {
|
|
4
|
-
this.disabled = false;
|
|
5
|
-
}
|
|
6
|
-
}
|
|
7
|
-
MenuToggleComponent.decorators = [
|
|
8
|
-
{ type: Component, args: [{
|
|
9
|
-
selector: 'app-menu-toggle',
|
|
10
|
-
template: "<button\n class=\"menu-toggle\"\n [ngClass]=\"{ disabled: disabled }\"\n [matTooltip]=\"tooltip\"\n matTooltipPosition=\"above\"\n matTooltipTouchGestures=\"off\"\n>\n <svg class=\"menu-toggle-icon\" [ngClass]=\"{ 'active-icon': active }\">\n <use attr.href=\"assets/icons/{{ icon }}.svg#{{ icon }}\"></use>\n </svg>\n</button>\n",
|
|
11
|
-
styles: [":host{display:flex;margin:0 .6rem}:host .menu-toggle{display:flex;background:unset;border:none;height:2.5rem;width:2.5rem;min-height:2.5rem;min-width:2.5rem;padding:.65rem;cursor:pointer;align-self:center;transition:all .4s}:host .menu-toggle-icon{width:100%;height:100%}:host .menu-toggle-icon.active-icon{--phoenix-options-icon-path: #00bcd4}:host .menu-toggle:hover{background-color:var(--phoenix-options-icon-bg);border-radius:40%;transition:all .4s}:host .menu-toggle.disabled{cursor:not-allowed;opacity:.4}\n"]
|
|
12
|
-
},] }
|
|
13
|
-
];
|
|
14
|
-
MenuToggleComponent.propDecorators = {
|
|
15
|
-
icon: [{ type: Input }],
|
|
16
|
-
active: [{ type: Input }],
|
|
17
|
-
tooltip: [{ type: Input }],
|
|
18
|
-
disabled: [{ type: Input }]
|
|
19
|
-
};
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS10b2dnbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdWktbWVudS9tZW51LXRvZ2dsZS9tZW51LXRvZ2dsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFPakQsTUFBTSxPQUFPLG1CQUFtQjtJQUxoQztRQVNXLGFBQVEsR0FBWSxLQUFLLENBQUM7SUFDckMsQ0FBQzs7O1lBVkEsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxpQkFBaUI7Z0JBQzNCLCtWQUEyQzs7YUFFNUM7OzttQkFFRSxLQUFLO3FCQUNMLEtBQUs7c0JBQ0wsS0FBSzt1QkFDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbWVudS10b2dnbGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVudS10b2dnbGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tZW51LXRvZ2dsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBNZW51VG9nZ2xlQ29tcG9uZW50IHtcbiAgQElucHV0KCkgaWNvbjogc3RyaW5nO1xuICBASW5wdXQoKSBhY3RpdmU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHRvb2x0aXA6IHN0cmluZztcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbn1cbiJdfQ==
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
2
|
-
import { EventDisplayService } from '../../../services/event-display.service';
|
|
3
|
-
export class ObjectClippingComponent {
|
|
4
|
-
constructor(eventDisplay) {
|
|
5
|
-
this.eventDisplay = eventDisplay;
|
|
6
|
-
const stateManager = this.eventDisplay.getStateManager();
|
|
7
|
-
stateManager.clippingEnabled.onUpdate((clippingValue) => (this.clippingEnabled = clippingValue));
|
|
8
|
-
stateManager.clippingAngle.onUpdate((value) => (this.clippingAngle = value));
|
|
9
|
-
}
|
|
10
|
-
changeClippingAngle(change) {
|
|
11
|
-
const angle = change.value;
|
|
12
|
-
this.eventDisplay.getUIManager().rotateClipping(angle);
|
|
13
|
-
}
|
|
14
|
-
toggleClipping(change) {
|
|
15
|
-
const value = change.checked;
|
|
16
|
-
this.eventDisplay.getUIManager().setClipping(value);
|
|
17
|
-
this.clippingEnabled = value;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
ObjectClippingComponent.decorators = [
|
|
21
|
-
{ type: Component, args: [{
|
|
22
|
-
selector: 'app-object-clipping',
|
|
23
|
-
template: "<mat-menu class=\"mat-menu\" #menu>\n <button\n mat-menu-item\n (click)=\"\n $event.stopPropagation();\n clippingCheckbox._inputElement.nativeElement.click()\n \"\n >\n <mat-checkbox\n #clippingCheckbox\n [checked]=\"clippingEnabled\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleClipping($event)\"\n >Clipping\n </mat-checkbox>\n </button>\n <button class=\"slider-btn\" mat-menu-item (focus)=\"clippingSlider.focus()\">\n <mat-slider\n #clippingSlider\n min=\"0\"\n max=\"180\"\n step=\"1\"\n thumbLabel\n [value]=\"clippingAngle\"\n (click)=\"$event.stopPropagation()\"\n (input)=\"changeClippingAngle($event)\"\n >\n </mat-slider>\n </button>\n</mat-menu>\n\n<app-menu-toggle\n [matMenuTriggerFor]=\"menu\"\n tooltip=\"Geometry clipping\"\n icon=\"clipping\"\n [active]=\"clippingEnabled\"\n>\n</app-menu-toggle>\n",
|
|
24
|
-
styles: [".slider-btn{overflow:visible}mat-slider{margin-left:.75rem;margin-right:.75rem}\n"]
|
|
25
|
-
},] }
|
|
26
|
-
];
|
|
27
|
-
ObjectClippingComponent.ctorParameters = () => [
|
|
28
|
-
{ type: EventDisplayService }
|
|
29
|
-
];
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWNsaXBwaW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3VpLW1lbnUvb2JqZWN0LWNsaXBwaW5nL29iamVjdC1jbGlwcGluZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQU85RSxNQUFNLE9BQU8sdUJBQXVCO0lBSWxDLFlBQW9CLFlBQWlDO1FBQWpDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNuRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pELFlBQVksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUNuQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLGFBQWEsQ0FBQyxDQUMxRCxDQUFDO1FBQ0YsWUFBWSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQ2pDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQ3hDLENBQUM7SUFDSixDQUFDO0lBRUQsbUJBQW1CLENBQUMsTUFBdUI7UUFDekMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQXlCO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQzs7O1lBNUJGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUscUJBQXFCO2dCQUMvQix1N0JBQStDOzthQUVoRDs7O1lBTlEsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRTbGlkZXJDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZXInO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBFdmVudERpc3BsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZXZlbnQtZGlzcGxheS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW9iamVjdC1jbGlwcGluZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9vYmplY3QtY2xpcHBpbmcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vYmplY3QtY2xpcHBpbmcuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgT2JqZWN0Q2xpcHBpbmdDb21wb25lbnQge1xuICBjbGlwcGluZ0VuYWJsZWQ6IGJvb2xlYW47XG4gIGNsaXBwaW5nQW5nbGU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGV2ZW50RGlzcGxheTogRXZlbnREaXNwbGF5U2VydmljZSkge1xuICAgIGNvbnN0IHN0YXRlTWFuYWdlciA9IHRoaXMuZXZlbnREaXNwbGF5LmdldFN0YXRlTWFuYWdlcigpO1xuICAgIHN0YXRlTWFuYWdlci5jbGlwcGluZ0VuYWJsZWQub25VcGRhdGUoXG4gICAgICAoY2xpcHBpbmdWYWx1ZSkgPT4gKHRoaXMuY2xpcHBpbmdFbmFibGVkID0gY2xpcHBpbmdWYWx1ZSlcbiAgICApO1xuICAgIHN0YXRlTWFuYWdlci5jbGlwcGluZ0FuZ2xlLm9uVXBkYXRlKFxuICAgICAgKHZhbHVlKSA9PiAodGhpcy5jbGlwcGluZ0FuZ2xlID0gdmFsdWUpXG4gICAgKTtcbiAgfVxuXG4gIGNoYW5nZUNsaXBwaW5nQW5nbGUoY2hhbmdlOiBNYXRTbGlkZXJDaGFuZ2UpIHtcbiAgICBjb25zdCBhbmdsZSA9IGNoYW5nZS52YWx1ZTtcbiAgICB0aGlzLmV2ZW50RGlzcGxheS5nZXRVSU1hbmFnZXIoKS5yb3RhdGVDbGlwcGluZyhhbmdsZSk7XG4gIH1cblxuICB0b2dnbGVDbGlwcGluZyhjaGFuZ2U6IE1hdENoZWNrYm94Q2hhbmdlKSB7XG4gICAgY29uc3QgdmFsdWUgPSBjaGFuZ2UuY2hlY2tlZDtcbiAgICB0aGlzLmV2ZW50RGlzcGxheS5nZXRVSU1hbmFnZXIoKS5zZXRDbGlwcGluZyh2YWx1ZSk7XG4gICAgdGhpcy5jbGlwcGluZ0VuYWJsZWQgPSB2YWx1ZTtcbiAgfVxufVxuIl19
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { EventDisplayService } from '../../../../services/event-display.service';
|
|
3
|
-
export class ObjectSelectionOverlayComponent {
|
|
4
|
-
constructor(eventDisplay) {
|
|
5
|
-
this.eventDisplay = eventDisplay;
|
|
6
|
-
this.selectedObject = { name: 'Object', attributes: [] };
|
|
7
|
-
}
|
|
8
|
-
ngOnInit() {
|
|
9
|
-
this.eventDisplay.allowSelection(this.selectedObject);
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
ObjectSelectionOverlayComponent.decorators = [
|
|
13
|
-
{ type: Component, args: [{
|
|
14
|
-
selector: 'app-object-selection-overlay',
|
|
15
|
-
template: "<app-overlay\n icon=\"cursor\"\n [overlayTitle]=\"selectedObject.name\"\n [active]=\"!hiddenSelectedInfo\"\n>\n <div\n id=\"selectedObjectPanelBody\"\n class=\"m-1\"\n *ngIf=\"selectedObject.attributes.length > 0\"\n >\n <div\n *ngFor=\"let attribute of selectedObject.attributes\"\n class=\"attributeField\"\n >\n <strong>{{ attribute.attributeName }}</strong>\n : {{ attribute.attributeValue | attributePipe }}\n </div>\n </div>\n</app-overlay>\n",
|
|
16
|
-
styles: ["#selectedObjectPanelBody{padding:0 .8em;overflow:auto;max-width:300px;max-height:16rem;min-width:7rem}\n"]
|
|
17
|
-
},] }
|
|
18
|
-
];
|
|
19
|
-
ObjectSelectionOverlayComponent.ctorParameters = () => [
|
|
20
|
-
{ type: EventDisplayService }
|
|
21
|
-
];
|
|
22
|
-
ObjectSelectionOverlayComponent.propDecorators = {
|
|
23
|
-
hiddenSelectedInfo: [{ type: Input }]
|
|
24
|
-
};
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LXNlbGVjdGlvbi1vdmVybGF5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3VpLW1lbnUvb2JqZWN0LXNlbGVjdGlvbi9vYmplY3Qtc2VsZWN0aW9uLW92ZXJsYXkvb2JqZWN0LXNlbGVjdGlvbi1vdmVybGF5LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQU9qRixNQUFNLE9BQU8sK0JBQStCO0lBSzFDLFlBQW9CLFlBQWlDO1FBQWpDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUZyRCxtQkFBYyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFFSSxDQUFDO0lBRXpELFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDeEQsQ0FBQzs7O1lBZEYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSw4QkFBOEI7Z0JBQ3hDLHdmQUF3RDs7YUFFekQ7OztZQU5RLG1CQUFtQjs7O2lDQVN6QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFdmVudERpc3BsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvZXZlbnQtZGlzcGxheS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW9iamVjdC1zZWxlY3Rpb24tb3ZlcmxheScsXG4gIHRlbXBsYXRlVXJsOiAnLi9vYmplY3Qtc2VsZWN0aW9uLW92ZXJsYXkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vYmplY3Qtc2VsZWN0aW9uLW92ZXJsYXkuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgT2JqZWN0U2VsZWN0aW9uT3ZlcmxheUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vIEF0dHJpYnV0ZXMgZm9yIGRpc3BsYXlpbmcgdGhlIGluZm9ybWF0aW9uIG9mIHNlbGVjdGVkIG9iamVjdHNcbiAgQElucHV0KCkgaGlkZGVuU2VsZWN0ZWRJbmZvOiBib29sZWFuO1xuICBzZWxlY3RlZE9iamVjdCA9IHsgbmFtZTogJ09iamVjdCcsIGF0dHJpYnV0ZXM6IFtdIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBldmVudERpc3BsYXk6IEV2ZW50RGlzcGxheVNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5ldmVudERpc3BsYXkuYWxsb3dTZWxlY3Rpb24odGhpcy5zZWxlY3RlZE9iamVjdCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
2
|
-
import { Overlay } from '@angular/cdk/overlay';
|
|
3
|
-
import { ComponentPortal } from '@angular/cdk/portal';
|
|
4
|
-
import { ObjectSelectionOverlayComponent } from './object-selection-overlay/object-selection-overlay.component';
|
|
5
|
-
import { EventDisplayService } from '../../../services/event-display.service';
|
|
6
|
-
export class ObjectSelectionComponent {
|
|
7
|
-
constructor(overlay, eventDisplay) {
|
|
8
|
-
this.overlay = overlay;
|
|
9
|
-
this.eventDisplay = eventDisplay;
|
|
10
|
-
// Attributes for displaying the information of selected objects
|
|
11
|
-
this.hiddenSelectedInfo = true;
|
|
12
|
-
}
|
|
13
|
-
ngOnInit() {
|
|
14
|
-
const overlayRef = this.overlay.create();
|
|
15
|
-
const overlayPortal = new ComponentPortal(ObjectSelectionOverlayComponent);
|
|
16
|
-
this.overlayWindow = overlayRef.attach(overlayPortal);
|
|
17
|
-
this.overlayWindow.instance.hiddenSelectedInfo = this.hiddenSelectedInfo;
|
|
18
|
-
}
|
|
19
|
-
ngOnDestroy() {
|
|
20
|
-
this.overlayWindow.destroy();
|
|
21
|
-
}
|
|
22
|
-
toggleOverlay() {
|
|
23
|
-
this.hiddenSelectedInfo = !this.hiddenSelectedInfo;
|
|
24
|
-
this.overlayWindow.instance.hiddenSelectedInfo = this.hiddenSelectedInfo;
|
|
25
|
-
this.eventDisplay.enableSelecting(!this.hiddenSelectedInfo);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
ObjectSelectionComponent.decorators = [
|
|
29
|
-
{ type: Component, args: [{
|
|
30
|
-
selector: 'app-object-selection',
|
|
31
|
-
template: "<app-menu-toggle\n tooltip=\"Object selection\"\n icon=\"cursor\"\n [active]=\"!hiddenSelectedInfo\"\n (click)=\"toggleOverlay()\"\n>\n</app-menu-toggle>\n",
|
|
32
|
-
styles: [""]
|
|
33
|
-
},] }
|
|
34
|
-
];
|
|
35
|
-
ObjectSelectionComponent.ctorParameters = () => [
|
|
36
|
-
{ type: Overlay },
|
|
37
|
-
{ type: EventDisplayService }
|
|
38
|
-
];
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LXNlbGVjdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS1tZW51L29iamVjdC1zZWxlY3Rpb24vb2JqZWN0LXNlbGVjdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBbUMsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUNoSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQU85RSxNQUFNLE9BQU8sd0JBQXdCO0lBS25DLFlBQ1UsT0FBZ0IsRUFDaEIsWUFBaUM7UUFEakMsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFOM0MsZ0VBQWdFO1FBQ2hFLHVCQUFrQixHQUFHLElBQUksQ0FBQztJQU12QixDQUFDO0lBRUosUUFBUTtRQUNOLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDekMsTUFBTSxhQUFhLEdBQUcsSUFBSSxlQUFlLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQzNFLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUNuRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDekUsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUM5RCxDQUFDOzs7WUE5QkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxzQkFBc0I7Z0JBQ2hDLDJLQUFnRDs7YUFFakQ7OztZQVRRLE9BQU87WUFHUCxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgQ29tcG9uZW50UmVmLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IE9iamVjdFNlbGVjdGlvbk92ZXJsYXlDb21wb25lbnQgfSBmcm9tICcuL29iamVjdC1zZWxlY3Rpb24tb3ZlcmxheS9vYmplY3Qtc2VsZWN0aW9uLW92ZXJsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IEV2ZW50RGlzcGxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ldmVudC1kaXNwbGF5LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtb2JqZWN0LXNlbGVjdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9vYmplY3Qtc2VsZWN0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vb2JqZWN0LXNlbGVjdGlvbi5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBPYmplY3RTZWxlY3Rpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8vIEF0dHJpYnV0ZXMgZm9yIGRpc3BsYXlpbmcgdGhlIGluZm9ybWF0aW9uIG9mIHNlbGVjdGVkIG9iamVjdHNcbiAgaGlkZGVuU2VsZWN0ZWRJbmZvID0gdHJ1ZTtcbiAgb3ZlcmxheVdpbmRvdzogQ29tcG9uZW50UmVmPE9iamVjdFNlbGVjdGlvbk92ZXJsYXlDb21wb25lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIGV2ZW50RGlzcGxheTogRXZlbnREaXNwbGF5U2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoKTtcbiAgICBjb25zdCBvdmVybGF5UG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChPYmplY3RTZWxlY3Rpb25PdmVybGF5Q29tcG9uZW50KTtcbiAgICB0aGlzLm92ZXJsYXlXaW5kb3cgPSBvdmVybGF5UmVmLmF0dGFjaChvdmVybGF5UG9ydGFsKTtcbiAgICB0aGlzLm92ZXJsYXlXaW5kb3cuaW5zdGFuY2UuaGlkZGVuU2VsZWN0ZWRJbmZvID0gdGhpcy5oaWRkZW5TZWxlY3RlZEluZm87XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm92ZXJsYXlXaW5kb3cuZGVzdHJveSgpO1xuICB9XG5cbiAgdG9nZ2xlT3ZlcmxheSgpIHtcbiAgICB0aGlzLmhpZGRlblNlbGVjdGVkSW5mbyA9ICF0aGlzLmhpZGRlblNlbGVjdGVkSW5mbztcbiAgICB0aGlzLm92ZXJsYXlXaW5kb3cuaW5zdGFuY2UuaGlkZGVuU2VsZWN0ZWRJbmZvID0gdGhpcy5oaWRkZW5TZWxlY3RlZEluZm87XG4gICAgdGhpcy5ldmVudERpc3BsYXkuZW5hYmxlU2VsZWN0aW5nKCF0aGlzLmhpZGRlblNlbGVjdGVkSW5mbyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { Component, Input, ViewChild, ViewEncapsulation, } from '@angular/core';
|
|
2
|
-
import { ResizeSensor } from 'css-element-queries';
|
|
3
|
-
/**
|
|
4
|
-
* Component for overlay panel.
|
|
5
|
-
*/
|
|
6
|
-
export class OverlayComponent {
|
|
7
|
-
constructor() {
|
|
8
|
-
/** If the overlay is open or not. */
|
|
9
|
-
this.active = false;
|
|
10
|
-
/** If the overlay is resizable. */
|
|
11
|
-
this.resizable = false;
|
|
12
|
-
/** If the overlay body is transparent or not. */
|
|
13
|
-
this.transparentBody = false;
|
|
14
|
-
/** If the overlay body is visible or not. */
|
|
15
|
-
this.showBody = true;
|
|
16
|
-
/** Minimum resizable width. */
|
|
17
|
-
this.MIN_RES_WIDTH = 300;
|
|
18
|
-
/** Minimum resizable height */
|
|
19
|
-
this.MIN_RES_HEIGHT = 100;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Move the resizable handle to the bottom right after the component is created.
|
|
23
|
-
*/
|
|
24
|
-
ngAfterViewInit() {
|
|
25
|
-
if (this.resizable) {
|
|
26
|
-
const resizeHandleElement = this.resizeHandleCorner.nativeElement;
|
|
27
|
-
resizeHandleElement.style.bottom = '0';
|
|
28
|
-
resizeHandleElement.style.right = '0';
|
|
29
|
-
new ResizeSensor(this.overlayCard.nativeElement, () => {
|
|
30
|
-
this.resetHandlePosition();
|
|
31
|
-
});
|
|
32
|
-
window.addEventListener('resize', () => {
|
|
33
|
-
this.resetHandlePosition();
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Resize the overlay card when the resize handle is dragged.
|
|
39
|
-
*/
|
|
40
|
-
onResize() {
|
|
41
|
-
const resizeHandleElement = this.resizeHandleCorner.nativeElement;
|
|
42
|
-
const overlayCardElement = this.overlayCard.nativeElement;
|
|
43
|
-
const dragRect = resizeHandleElement.getBoundingClientRect();
|
|
44
|
-
const overlayRect = overlayCardElement.getBoundingClientRect();
|
|
45
|
-
const width = dragRect.left - overlayRect.left + dragRect.width;
|
|
46
|
-
const height = dragRect.top - overlayRect.top + dragRect.height;
|
|
47
|
-
this.setHandleTransform(overlayRect, dragRect);
|
|
48
|
-
if (width > this.MIN_RES_WIDTH && height > this.MIN_RES_HEIGHT) {
|
|
49
|
-
overlayCardElement.style.width = width + 'px';
|
|
50
|
-
overlayCardElement.style.height = height + 'px';
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Reset resize handle position.
|
|
55
|
-
*/
|
|
56
|
-
resetHandlePosition() {
|
|
57
|
-
const resizeHandleElement = this.resizeHandleCorner.nativeElement;
|
|
58
|
-
this.setHandleTransform(this.overlayCard.nativeElement.getBoundingClientRect(), resizeHandleElement.getBoundingClientRect());
|
|
59
|
-
resizeHandleElement.style.bottom = null;
|
|
60
|
-
resizeHandleElement.style.right = null;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Set the position of the resize handle using transform3d.
|
|
64
|
-
* @param overlayRect Bounding client rectangle of the overlay card.
|
|
65
|
-
* @param dragRect Bounding client rectangle of the resize handle.
|
|
66
|
-
*/
|
|
67
|
-
setHandleTransform(overlayRect, dragRect) {
|
|
68
|
-
const translateX = overlayRect.width - dragRect.width;
|
|
69
|
-
const translateY = overlayRect.height - dragRect.height;
|
|
70
|
-
this.resizeHandleCorner.nativeElement.style.transform = `translate3d(${translateX}px, ${translateY}px, 0)`;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
OverlayComponent.decorators = [
|
|
74
|
-
{ type: Component, args: [{
|
|
75
|
-
selector: 'app-overlay',
|
|
76
|
-
template: "<div\n #overlayCard\n class=\"overlay-card card\"\n [hidden]=\"!active\"\n cdkDrag\n cdkDragBoundary=\"body\"\n>\n <div\n class=\"card-header d-flex justify-content-between\"\n [ngClass]=\"{ 'with-body': showBody }\"\n cdkDragHandle\n *ngIf=\"overlayTitle\"\n >\n <div class=\"align-self-center card-icon\" *ngIf=\"icon\">\n <svg>\n <use attr.href=\"assets/icons/{{ icon }}.svg#{{ icon }}\"></use>\n </svg>\n </div>\n <h5 class=\"align-self-center m-0 px-2\">{{ overlayTitle }}</h5>\n <button\n class=\"align-self-center card-icon btn-blank expandCollapse\"\n matTooltip=\"Expand / Collapse\"\n matTooltipPosition=\"right\"\n [ngClass]=\"{ expand: showBody }\"\n (click)=\"showBody = !showBody\"\n >\n <svg>\n <use href=\"assets/icons/expand.svg#expand\"></use>\n </svg>\n </button>\n </div>\n <div\n class=\"overlay-card-content\"\n *ngIf=\"showBody\"\n [ngClass]=\"{ 'transparent-bg': transparentBody }\"\n >\n <ng-content></ng-content>\n </div>\n <!-- Making the overlay resizable -->\n <span\n #resizeHandleCorner\n class=\"resize-handle corner\"\n *ngIf=\"resizable\"\n [hidden]=\"!showBody\"\n cdkDrag\n (cdkDragMoved)=\"onResize()\"\n ></span>\n</div>\n",
|
|
77
|
-
encapsulation: ViewEncapsulation.None,
|
|
78
|
-
styles: [".overlay-card.card{color:var(--phoenix-text-color);background:none;max-width:100vw;font-size:12px;min-width:300px;height:100%;max-height:70vh;box-shadow:none;border:none;position:relative;z-index:200}.overlay-card.card .card-header{width:12rem;background:var(--phoenix-background-color-secondary);box-shadow:var(--phoenix-box-shadow);padding:.4rem .8rem;border-radius:10px;border:none;cursor:move;text-align:center;transition:all .2s}.overlay-card.card .card-header.with-body{border-bottom-left-radius:0;border-bottom-right-radius:0}.overlay-card.card .card-header .card-icon{display:flex;height:.7rem;width:.7rem}.overlay-card.card .card-header h5{font-size:.9rem}.overlay-card.card .card-header .expandCollapse{cursor:pointer;transition:all .2s}.overlay-card.card .card-header .expandCollapse.expand{transform:scaleY(-1)}.overlay-card.card .card-header .expandCollapse svg{width:100%;height:100%}.overlay-card.card .overlay-card-content{background:var(--phoenix-background-color-secondary);box-shadow:var(--phoenix-box-shadow);border-radius:0 10px 10px;overflow:auto;height:100%}.overlay-card.card .overlay-card-content.transparent-bg{background:none}.overlay-card.card .list-group{color:var(--phoenix-text-color-secondary);background:var(--phoenix-background-color-secondary);max-height:40vh;overflow:auto}.overlay-card.card .list-group .list-group-item{background-color:var(--phoenix-background-color-secondary);border-color:var(--phoenix-border)}.overlay-card.card .resize-handle{width:1rem;height:1rem;cursor:nwse-resize;position:absolute}.overlay-card.card .resize-handle.corner{border-right:.2rem solid var(--phoenix-text-color);border-bottom:.2rem solid var(--phoenix-text-color)}\n"]
|
|
79
|
-
},] }
|
|
80
|
-
];
|
|
81
|
-
OverlayComponent.propDecorators = {
|
|
82
|
-
overlayTitle: [{ type: Input }],
|
|
83
|
-
active: [{ type: Input }],
|
|
84
|
-
icon: [{ type: Input }],
|
|
85
|
-
resizable: [{ type: Input }],
|
|
86
|
-
transparentBody: [{ type: Input }],
|
|
87
|
-
overlayCard: [{ type: ViewChild, args: ['overlayCard',] }],
|
|
88
|
-
resizeHandleCorner: [{ type: ViewChild, args: ['resizeHandleCorner',] }]
|
|
89
|
-
};
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS1tZW51L292ZXJsYXkvb3ZlcmxheS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUVULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkQ7O0dBRUc7QUFPSCxNQUFNLE9BQU8sZ0JBQWdCO0lBTjdCO1FBU0UscUNBQXFDO1FBQzVCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFHakMsbUNBQW1DO1FBQzFCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDcEMsaURBQWlEO1FBQ3hDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQzFDLDZDQUE2QztRQUM3QyxhQUFRLEdBQVksSUFBSSxDQUFDO1FBVXpCLCtCQUErQjtRQUN2QixrQkFBYSxHQUFXLEdBQUcsQ0FBQztRQUNwQywrQkFBK0I7UUFDdkIsbUJBQWMsR0FBVyxHQUFHLENBQUM7SUFtRXZDLENBQUM7SUFqRUM7O09BRUc7SUFDSCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQztZQUNsRSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUN2QyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztZQUV0QyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7Z0JBQ3BELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ04sTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDO1FBQ2xFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFFMUQsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3RCxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRS9ELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBRWhFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFL0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUM5RCxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDOUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQ2pEO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CO1FBQ2pCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQztRQUVsRSxJQUFJLENBQUMsa0JBQWtCLENBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLEVBQ3RELG1CQUFtQixDQUFDLHFCQUFxQixFQUFFLENBQzVDLENBQUM7UUFFRixtQkFBbUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUN4QyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGtCQUFrQixDQUFDLFdBQWdCLEVBQUUsUUFBYTtRQUN4RCxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDdEQsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ3hELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxlQUFlLFVBQVUsT0FBTyxVQUFVLFFBQVEsQ0FBQztJQUM3RyxDQUFDOzs7WUFqR0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxhQUFhO2dCQUN2Qix5eENBQXVDO2dCQUV2QyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTs7YUFDdEM7OzsyQkFHRSxLQUFLO3FCQUVMLEtBQUs7bUJBRUwsS0FBSzt3QkFFTCxLQUFLOzhCQUVMLEtBQUs7MEJBU0wsU0FBUyxTQUFDLGFBQWE7aUNBRXZCLFNBQVMsU0FBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBWaWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVzaXplU2Vuc29yIH0gZnJvbSAnY3NzLWVsZW1lbnQtcXVlcmllcyc7XG5cbi8qKlxuICogQ29tcG9uZW50IGZvciBvdmVybGF5IHBhbmVsLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtb3ZlcmxheScsXG4gIHRlbXBsYXRlVXJsOiAnLi9vdmVybGF5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vb3ZlcmxheS5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBPdmVybGF5Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8qKiBUaXRsZSBvZiB0aGUgb3ZlcmxheS4gKi9cbiAgQElucHV0KCkgb3ZlcmxheVRpdGxlOiBzdHJpbmc7XG4gIC8qKiBJZiB0aGUgb3ZlcmxheSBpcyBvcGVuIG9yIG5vdC4gKi9cbiAgQElucHV0KCkgYWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBJY29uIG9mIHRoZSBvdmVybGF5IGhlYWRlci4gKi9cbiAgQElucHV0KCkgaWNvbjogc3RyaW5nO1xuICAvKiogSWYgdGhlIG92ZXJsYXkgaXMgcmVzaXphYmxlLiAqL1xuICBASW5wdXQoKSByZXNpemFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIElmIHRoZSBvdmVybGF5IGJvZHkgaXMgdHJhbnNwYXJlbnQgb3Igbm90LiAqL1xuICBASW5wdXQoKSB0cmFuc3BhcmVudEJvZHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIElmIHRoZSBvdmVybGF5IGJvZHkgaXMgdmlzaWJsZSBvciBub3QuICovXG4gIHNob3dCb2R5OiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqIEJlbG93IGNvZGUgaXMgc3BlY2lmaWMgdG8gdGhlIG92ZXJsYXkgcmVzaXplIGZlYXR1cmUuIChMT09LIElOVE8gQ1NTIFJFU0laRSkgKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gIC8qKiBDb21wbGV0ZSBvdmVybGF5IGNhcmQgY29udGFpbmluZyBib3RoIGhlYWRlciBhbmQgYm9keS4gKi9cbiAgQFZpZXdDaGlsZCgnb3ZlcmxheUNhcmQnKSBvdmVybGF5Q2FyZDogRWxlbWVudFJlZjtcbiAgLyoqIEhhbmRsZSBmb3IgcmVzaXppbmcgdGhlIG92ZXJsYXkuICovXG4gIEBWaWV3Q2hpbGQoJ3Jlc2l6ZUhhbmRsZUNvcm5lcicpIHJlc2l6ZUhhbmRsZUNvcm5lcjogRWxlbWVudFJlZjtcbiAgLyoqIE1pbmltdW0gcmVzaXphYmxlIHdpZHRoLiAqL1xuICBwcml2YXRlIE1JTl9SRVNfV0lEVEg6IG51bWJlciA9IDMwMDtcbiAgLyoqIE1pbmltdW0gcmVzaXphYmxlIGhlaWdodCAqL1xuICBwcml2YXRlIE1JTl9SRVNfSEVJR0hUOiBudW1iZXIgPSAxMDA7XG5cbiAgLyoqXG4gICAqIE1vdmUgdGhlIHJlc2l6YWJsZSBoYW5kbGUgdG8gdGhlIGJvdHRvbSByaWdodCBhZnRlciB0aGUgY29tcG9uZW50IGlzIGNyZWF0ZWQuXG4gICAqL1xuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMucmVzaXphYmxlKSB7XG4gICAgICBjb25zdCByZXNpemVIYW5kbGVFbGVtZW50ID0gdGhpcy5yZXNpemVIYW5kbGVDb3JuZXIubmF0aXZlRWxlbWVudDtcbiAgICAgIHJlc2l6ZUhhbmRsZUVsZW1lbnQuc3R5bGUuYm90dG9tID0gJzAnO1xuICAgICAgcmVzaXplSGFuZGxlRWxlbWVudC5zdHlsZS5yaWdodCA9ICcwJztcblxuICAgICAgbmV3IFJlc2l6ZVNlbnNvcih0aGlzLm92ZXJsYXlDYXJkLm5hdGl2ZUVsZW1lbnQsICgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNldEhhbmRsZVBvc2l0aW9uKCk7XG4gICAgICB9KTtcblxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNldEhhbmRsZVBvc2l0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzaXplIHRoZSBvdmVybGF5IGNhcmQgd2hlbiB0aGUgcmVzaXplIGhhbmRsZSBpcyBkcmFnZ2VkLlxuICAgKi9cbiAgb25SZXNpemUoKSB7XG4gICAgY29uc3QgcmVzaXplSGFuZGxlRWxlbWVudCA9IHRoaXMucmVzaXplSGFuZGxlQ29ybmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3Qgb3ZlcmxheUNhcmRFbGVtZW50ID0gdGhpcy5vdmVybGF5Q2FyZC5uYXRpdmVFbGVtZW50O1xuXG4gICAgY29uc3QgZHJhZ1JlY3QgPSByZXNpemVIYW5kbGVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IG92ZXJsYXlSZWN0ID0gb3ZlcmxheUNhcmRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgY29uc3Qgd2lkdGggPSBkcmFnUmVjdC5sZWZ0IC0gb3ZlcmxheVJlY3QubGVmdCArIGRyYWdSZWN0LndpZHRoO1xuICAgIGNvbnN0IGhlaWdodCA9IGRyYWdSZWN0LnRvcCAtIG92ZXJsYXlSZWN0LnRvcCArIGRyYWdSZWN0LmhlaWdodDtcblxuICAgIHRoaXMuc2V0SGFuZGxlVHJhbnNmb3JtKG92ZXJsYXlSZWN0LCBkcmFnUmVjdCk7XG5cbiAgICBpZiAod2lkdGggPiB0aGlzLk1JTl9SRVNfV0lEVEggJiYgaGVpZ2h0ID4gdGhpcy5NSU5fUkVTX0hFSUdIVCkge1xuICAgICAgb3ZlcmxheUNhcmRFbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuICAgICAgb3ZlcmxheUNhcmRFbGVtZW50LnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHJlc2l6ZSBoYW5kbGUgcG9zaXRpb24uXG4gICAqL1xuICByZXNldEhhbmRsZVBvc2l0aW9uKCkge1xuICAgIGNvbnN0IHJlc2l6ZUhhbmRsZUVsZW1lbnQgPSB0aGlzLnJlc2l6ZUhhbmRsZUNvcm5lci5uYXRpdmVFbGVtZW50O1xuXG4gICAgdGhpcy5zZXRIYW5kbGVUcmFuc2Zvcm0oXG4gICAgICB0aGlzLm92ZXJsYXlDYXJkLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICByZXNpemVIYW5kbGVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgKTtcblxuICAgIHJlc2l6ZUhhbmRsZUVsZW1lbnQuc3R5bGUuYm90dG9tID0gbnVsbDtcbiAgICByZXNpemVIYW5kbGVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSByZXNpemUgaGFuZGxlIHVzaW5nIHRyYW5zZm9ybTNkLlxuICAgKiBAcGFyYW0gb3ZlcmxheVJlY3QgQm91bmRpbmcgY2xpZW50IHJlY3RhbmdsZSBvZiB0aGUgb3ZlcmxheSBjYXJkLlxuICAgKiBAcGFyYW0gZHJhZ1JlY3QgQm91bmRpbmcgY2xpZW50IHJlY3RhbmdsZSBvZiB0aGUgcmVzaXplIGhhbmRsZS5cbiAgICovXG4gIHByaXZhdGUgc2V0SGFuZGxlVHJhbnNmb3JtKG92ZXJsYXlSZWN0OiBhbnksIGRyYWdSZWN0OiBhbnkpIHtcbiAgICBjb25zdCB0cmFuc2xhdGVYID0gb3ZlcmxheVJlY3Qud2lkdGggLSBkcmFnUmVjdC53aWR0aDtcbiAgICBjb25zdCB0cmFuc2xhdGVZID0gb3ZlcmxheVJlY3QuaGVpZ2h0IC0gZHJhZ1JlY3QuaGVpZ2h0O1xuICAgIHRoaXMucmVzaXplSGFuZGxlQ29ybmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKCR7dHJhbnNsYXRlWH1weCwgJHt0cmFuc2xhdGVZfXB4LCAwKWA7XG4gIH1cbn1cbiJdfQ==
|