Skip to content

Commit 57ba781

Browse files
committed
Unify file/folder import with chooser; stack notifications by type
- File menu: single "Open file" (caves+models) + "Open folder" (recursive); inputs renamed to openFileInput/openFolderInput, modelInput removed - Import chooser lists caves/models with type icons + recursive file counts; empty .th skipped; caves added alphabetically; duplicates skipped with warning - Notifications: one panel per type, shown together instead of overwriting - Polygon importer: tolerate missing declination (default 0) - Tests: popups + geotiff detectKind unit tests; e2e input rename; vitest three/addons alias. HU manual updated.
1 parent c22a80f commit 57ba781

38 files changed

Lines changed: 1441 additions & 576 deletions

css/main.css

Lines changed: 48 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -110,51 +110,60 @@ body {
110110
overflow: auto;
111111
}
112112

113+
/* Container: stacks one notification item per message type, centered at the top. */
113114
.cautionpanel {
114115
position: fixed;
115116
z-index: 1100;
116117
display: none;
118+
flex-direction: column;
119+
gap: 10px;
120+
align-items: center;
117121
left: 50%;
118122
top: 20px;
119123
transform: translateX(-50%);
124+
color: white;
125+
text-align: left;
126+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
127+
pointer-events: none; /* clicks pass through the gaps between items */
128+
}
129+
130+
/* One notification box per type (error / warning / info / success). */
131+
.cautionpanel-item {
132+
pointer-events: auto;
120133
min-width: 300px;
121134
max-width: 600px;
122-
color: white;
123-
padding: 0;
124135
border: none;
125136
border-radius: 12px;
126137
font-size: 14px;
127-
text-align: left;
128138
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
129139
backdrop-filter: blur(10px);
130-
animation: slideInDown 0.3s ease-out;
131140
overflow: hidden;
132-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
141+
animation: slideInDown 0.3s ease-out;
133142
}
134143

135144
@keyframes slideInDown {
136145
from {
137146
opacity: 0;
138-
transform: translateX(-50%) translateY(-20px);
147+
transform: translateY(-20px);
139148
}
140149
to {
141150
opacity: 1;
142-
transform: translateX(-50%) translateY(0);
151+
transform: translateY(0);
143152
}
144153
}
145154

146155
@keyframes slideOutUp {
147156
from {
148157
opacity: 1;
149-
transform: translateX(-50%) translateY(0);
158+
transform: translateY(0);
150159
}
151160
to {
152161
opacity: 0;
153-
transform: translateX(-50%) translateY(-20px);
162+
transform: translateY(-20px);
154163
}
155164
}
156165

157-
.cautionpanel.hiding {
166+
.cautionpanel-item.hiding {
158167
animation: slideOutUp 0.3s ease-in;
159168
}
160169

@@ -743,6 +752,35 @@ body {
743752
line-height: 1.6;
744753
}
745754

755+
/* Master-file chooser: wide enough to show full (often long, nested) file paths
756+
on one line, with a scrollable candidate list when there are many masters. */
757+
.dialog-container.root-file-dialog {
758+
width: min(95vw, 700px);
759+
}
760+
761+
.root-file-dialog .settings-group-content {
762+
max-height: 55vh;
763+
overflow-y: auto;
764+
}
765+
766+
.root-file-dialog .settings-checkbox-label > small {
767+
margin-left: 8px;
768+
}
769+
770+
.root-file-dialog .root-file-path {
771+
opacity: 0.7;
772+
word-break: break-all;
773+
}
774+
775+
/* Type icon (cave / model / dtm / orthophoto) shown before each candidate's name,
776+
matching the glyphs used in the explorer / models tree. */
777+
.root-file-dialog .root-file-type {
778+
display: inline-block;
779+
margin-right: 6px;
780+
font-size: 15px;
781+
vertical-align: middle;
782+
}
783+
746784
/* Responsive adjustments for about dialog */
747785
@media (max-width: 768px) {
748786
.about-container {

index.html

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,19 @@
4343

4444
<body>
4545
<div class="file-upload">
46-
<input type="file" id="caveInput" accept=".cave,.json,.th,.svx,.3d" multiple style="display: none" />
47-
<!-- recursive directory import for multi-folder Therion/Survex projects -->
48-
<input type="file" id="caveDirInput" webkitdirectory directory multiple style="display: none" />
46+
<!-- Open file: any mix of cave + model + asset files -->
47+
<input
48+
type="file"
49+
id="openFileInput"
50+
accept=".cave,.json,.th,.svx,.3d,.ply,.obj,.mtl,.jpg,.jpeg,.png,.exr,.las,.laz,.lox,.asc,.hgt,.xyz,.tif,.tiff"
51+
multiple
52+
style="display: none"
53+
/>
54+
<!-- Open folder: recursive directory import of all caves + models -->
55+
<input type="file" id="openFolderInput" webkitdirectory directory multiple style="display: none" />
4956
<input type="file" id="surveyInput" accept=".csv" multiple style="display: none" />
5057
<!-- used in explorer tree to add a survey to a survey-->
5158
<input type="file" id="surveyInputPartial" accept=".csv" multiple style="display: none" />
52-
<input type="file" id="modelInput" accept=".ply,.obj,.mtl,.jpg,.jpeg,.png,.exr,.las,.laz,.lox,.asc,.hgt,.xyz,.tif,.tiff" multiple style="display: none" />
5359
<input type="file" id="configInput" accept=".json" style="display: none" />
5460
<input type="file" id="projectInput" accept=".json,.gz" multiple style="display: none" />
5561
<input type="file" id="textureInput" accept=".mtl,.jpg,.jpeg,.png,.exr" multiple style="display: none" />

manual/hu/01-bevezetes.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,7 @@ <h3>1. Új projekt létrehozása</h3>
394394
<div class="step">
395395
<h3>2. Barlang importálása</h3>
396396
<p
397-
>Kattintson a "Fájl" menüre, majd "Barlang(ok) megnyitása" opcióra. Válassza ki a megfelelő formátumú fájlt a
397+
>Kattintson a "Fájl" menüre, majd "Fájl megnyitása" opcióra. Válassza ki a megfelelő formátumú fájlt a
398398
felnyíló tallózó ablakban a barlang adatainak importálásához.</p
399399
>
400400
</div>

manual/hu/04-adatok-importalasa.html

Lines changed: 53 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,20 @@ <h2>Importálás menete</h2>
5858
<div class="step row">
5959
<div class="column-2">
6060
<h3>1. lépés: Importálás indítása</h3>
61-
<p>Kattintson a "Fájl" menüre, majd válassza ki a megfelelő importálási opciót:</p>
61+
<p>Kattintson a "Fájl" menüre, majd válassza ki a megfelelő opciót:</p>
6262
<ul>
63-
<li><strong>"Barlang(ok) megnyitása":</strong> JSON, .cave, Therion (.th), Survex (.svx) és Survex (.3d) fájlokhoz</li>
6463
<li
65-
><strong>"Barlangmappa megnyitása":</strong> egy teljes mappa rekurzív importálása. Hasznos több mappára
66-
tagolt Therion/Survex projekteknél (pl. egy rendszer, amelynek az <code>input</code>/<code>*include</code>
67-
hivatkozásai különböző almappákban lévő fájlokra mutatnak).</li
64+
><strong>"Fájl megnyitása":</strong> tetszőleges barlang- és modellfájlok megnyitása egy lépésben — JSON,
65+
.cave, Therion (.th), Survex (.svx, .3d), valamint a 3D modellek (PLY, OBJ, LAS, LAZ és a domborzati
66+
ASC, HGT, XYZ, GeoTIFF). Több fájl egyszerre is kijelölhető; mindegyik azonnal importálódik.</li
67+
>
68+
<li
69+
><strong>"Mappa megnyitása":</strong> egy teljes mappa rekurzív importálása (az al-mappákkal együtt). A
70+
mappában talált összes barlang és modell egy <strong>kiválasztó panelen</strong> jelenik meg, ahol
71+
eldönthető, melyeket szeretnénk importálni. Hasznos több mappára tagolt Therion/Survex projekteknél (pl.
72+
egy rendszer, amelynek az <code>input</code>/<code>*include</code> hivatkozásai különböző almappákban lévő
73+
fájlokra mutatnak).</li
6874
>
69-
<li><strong>"Model megnyitása":</strong> PLY, OBJ, LAS és LAZ fájlokhoz</li>
7075
</ul>
7176
</div>
7277

@@ -75,8 +80,8 @@ <h3>1. lépés: Importálás indítása</h3>
7580

7681
<div class="step row">
7782
<div class="column-2">
78-
<h3>2. lépés: Fájl kiválasztása</h3>
79-
<p>A fájl kiválasztó ablakban navigáljon a kívánt fájlhoz és kattintson a "Megnyitás" gombra.</p>
83+
<h3>2. lépés: Fájl vagy mappa kiválasztása</h3>
84+
<p>A megnyíló ablakban navigáljon a kívánt fájl(ok)hoz vagy mappához és erősítse meg a választást.</p>
8085
</div>
8186
<div class="image-placeholder column-2 black" style="flex: 70%">
8287
<img width="500" src="images/4-fajl-panel.png" />
@@ -85,7 +90,29 @@ <h3>2. lépés: Fájl kiválasztása</h3>
8590

8691
<div class="step row">
8792
<div class="column-2">
88-
<h3>3. lépés (opcionális): Koordináta rendszer kiválasztása</h3>
93+
<h3>3. lépés (mappa megnyitásakor): Importálandó elemek kiválasztása</h3>
94+
<p
95+
>Ha a mappában egynél több importálható elem található, megjelenik az <strong>importálandó elemek</strong>
96+
panel. Minden elem egy soron látható: a neve, alatta a fájl elérési útja, és — ha más fájlokat is behúz
97+
(<code>input</code>/<code>*include</code>) — a hivatkozott fájlok száma. Kezdetben minden elem be van jelölve;
98+
a feleslegesekről egyszerűen vegye le a pipát, majd kattintson a <strong>"Kijelöltek importálása"</strong>
99+
gombra.</p
100+
>
101+
<ul>
102+
<li
103+
>Egy átfogó törzsfájl (pl. egy egész rendszer) és annak egy különálló rész-barlangja egyszerre is
104+
szerepelhet a listában. Ha mindkettőt bejelölve hagyja, az ismétlődő barlangokat a program csak egyszer
105+
importálja (a nagyobb törzsfájl változatát megtartva), és erről figyelmeztetést ad.</li
106+
>
107+
<li>Az üres (0 bájtos) <code>.th</code> fájlok nem jelennek meg a listában.</li>
108+
</ul>
109+
</div>
110+
<div class="image-placeholder column-2 black" style="flex: 70%"></div>
111+
</div>
112+
113+
<div class="step row">
114+
<div class="column-2">
115+
<h3>4. lépés (opcionális): Koordináta rendszer kiválasztása</h3>
89116
<p>A projekt által használt koordináta rendszer kiválasztása.</p>
90117
</div>
91118
<div class="image-placeholder column-2 black" style="flex: 70%">
@@ -95,10 +122,11 @@ <h3>3. lépés (opcionális): Koordináta rendszer kiválasztása</h3>
95122

96123
<div class="step row">
97124
<div class="column-2">
98-
<h3>4. lépés: Importálás feldolgozása</h3>
125+
<h3>5. lépés: Importálás feldolgozása</h3>
99126
<p
100-
>Az alkalmazás automatikusan feldolgozza a fájlt és betölti a barlangot. Ha nem volt semmi probléma az
101-
importálás során, a barlang megjelenik a felfedező panelben és a 3D nézetablakban. Gratulálunk! 🎉🎊✨</p
127+
>Az alkalmazás automatikusan feldolgozza a fájl(oka)t és betölti a barlangokat. A barlangok
128+
<strong>ábécé sorrendben</strong> kerülnek a felfedező fába. Ha nem volt semmi probléma az importálás során,
129+
a barlang megjelenik a felfedező panelben és a 3D nézetablakban. Gratulálunk! 🎉🎊✨</p
102130
>
103131
</div>
104132
<div class="image-placeholder column-2 black small-padding" style="flex: 70%">
@@ -159,7 +187,7 @@ <h5>Előnyök:</h5>
159187

160188
<div class="step">
161189
<h3>JSON importálása</h3>
162-
<p>1. Kattintson a "Fájl" → "Barlang(ok) megnyitása" menüre</p>
190+
<p>1. Kattintson a "Fájl" → "Fájl megnyitása" menüre</p>
163191
<p>2. Válassza ki a .json fájlt</p>
164192
<p>3. Az alkalmazás automatikusan betölti a teljes barlang adatokat</p>
165193
</div>
@@ -188,7 +216,7 @@ <h5>Előnyök:</h5>
188216

189217
<div class="step">
190218
<h3>Polygon fájl importálása</h3>
191-
<p>1. Kattintson a "Fájl" → "Barlang(ok) megnyitása" menüre</p>
219+
<p>1. Kattintson a "Fájl" → "Fájl megnyitása" menüre</p>
192220
<p>2. Válassza ki a .cave fájlt</p>
193221
<p>3. Koordináta rendszer kiválasztása</p>
194222
<p>4. Az alkalmazás megnyitja a Polygon fájlt</p>
@@ -381,7 +409,7 @@ <h5>Amit nem importál (első fázis):</h5>
381409

382410
<div class="step">
383411
<h3>Egyetlen Therion fájl importálása</h3>
384-
<p>1. Kattintson a <strong>Fájl &rarr; Barlang(ok) megnyitása</strong> menüre</p>
412+
<p>1. Kattintson a <strong>Fájl &rarr; Fájl megnyitása</strong> menüre</p>
385413
<p>2. Válassza ki a <code>.th</code> fájlt</p>
386414
<p>3. Ha a fájl tartalmaz koordináta rendszert (<code>cs</code>) és rögzített pontot (<code>fix</code>),
387415
a georeferencia automatikusan betöltődik; ellenkező esetben a koordináta rendszer kiválasztó párbeszédablak jelenik meg</p>
@@ -397,7 +425,7 @@ <h3>Többfájlos Therion projekt importálása</h3>
397425

398426
<div class="step">
399427
<h3>Több fájlból álló projekt importálása</h3>
400-
<p>1. Kattintson a <strong>Fájl &rarr; Barlang(ok) megnyitása</strong> menüre</p>
428+
<p>1. Kattintson a <strong>Fájl &rarr; Fájl megnyitása</strong> menüre</p>
401429
<p>2. <strong>Válassza ki az összes <code>.th</code> fájlt egyszerre</strong> a projektmappából
402430
(Ctrl+A vagy Shift+kattintás a fájl kiválasztóban)</p>
403431
<p>3. A Speleo Studio automatikusan felismeri a gyökérfájlt és feloldja az <code>input</code> hivatkozásokat</p>
@@ -410,6 +438,11 @@ <h3>Több fájlból álló projekt importálása</h3>
410438
figyelmeztetést jelenít meg, de a rendelkezésre álló adatokat betölti. A <code>.th2</code> (rajz) és
411439
<code>.thm</code> (morph) fájlokra vonatkozó hivatkozásokat a program nem jelzi hiányzóként.</p
412440
>
441+
<p
442+
>Több almappára tagolt projektnél kényelmesebb a <strong>Fájl &rarr; Mappa megnyitása</strong> használata: az
443+
egész mappát rekurzívan beolvassa, és ha több törzsfájlt talál (ami ugyanazokat a barlangokat többszörösen is
444+
leírhatja), egy <strong>kiválasztó panelen</strong> lehet eldönteni, melyik(eke)t importáljuk.</p
445+
>
413446
</div>
414447

415448
<h3>Koordináta rendszerek Therionban</h3>
@@ -519,7 +552,7 @@ <h5>Amit nem importál:</h5>
519552

520553
<div class="step">
521554
<h3>Egyetlen Survex fájl importálása</h3>
522-
<p>1. Kattintson a <strong>Fájl &rarr; Barlang(ok) megnyitása</strong> menüre</p>
555+
<p>1. Kattintson a <strong>Fájl &rarr; Fájl megnyitása</strong> menüre</p>
523556
<p>2. Válassza ki a <code>.svx</code> fájlt</p>
524557
<p>3. Ha a fájl tartalmaz koordináta rendszert (<code>*cs</code>) és rögzített pontot (<code>*fix</code>),
525558
a georeferencia automatikusan betöltődik; ellenkező esetben a koordináta rendszer kiválasztó párbeszédablak jelenik meg</p>
@@ -535,7 +568,7 @@ <h3>Többfájlos Survex projekt importálása</h3>
535568

536569
<div class="step">
537570
<h3>Több fájlból álló projekt importálása</h3>
538-
<p>1. Kattintson a <strong>Fájl &rarr; Barlang(ok) megnyitása</strong> menüre</p>
571+
<p>1. Kattintson a <strong>Fájl &rarr; Fájl megnyitása</strong> menüre</p>
539572
<p>2. <strong>Válassza ki az összes <code>.svx</code> fájlt egyszerre</strong> a projektmappából
540573
(Ctrl+A vagy Shift+kattintás a fájl kiválasztóban)</p>
541574
<p>3. A Speleo Studio automatikusan felismeri a gyökérfájlt és feloldja az <code>*include</code> hivatkozásokat</p>
@@ -638,7 +671,7 @@ <h5>Amit nem importál:</h5>
638671

639672
<div class="step">
640673
<h3>Egyetlen .3d fájl importálása</h3>
641-
<p>1. Kattintson a <strong>Fájl &rarr; Barlang(ok) megnyitása</strong> menüre</p>
674+
<p>1. Kattintson a <strong>Fájl &rarr; Fájl megnyitása</strong> menüre</p>
642675
<p>2. Válassza ki a <code>.3d</code> fájlt</p>
643676
<p>3. Ha a fájl tartalmaz felismert koordináta rendszert, a barlang automatikusan georeferenciát kap;
644677
ismeretlen koordináta rendszer esetén a barlang georeferencia nélkül, csak megjelenítésre töltődik be</p>
@@ -681,7 +714,7 @@ <h4>Támogatott 3D formátumok</h4>
681714

682715
<div class="step">
683716
<h3>3D modell importálása</h3>
684-
<p>1. Kattintson a <strong>Fájl &rarr; Modell megnyitása</strong> menüre</p>
717+
<p>1. Kattintson a <strong>Fájl &rarr; Fájl megnyitása</strong> menüre</p>
685718
<p>2. Válassza ki a modell fájlt (.ply, .obj, .las vagy .laz). OBJ fájlokhoz az MTL és textúra fájlokat is kiválaszthatja egyszerre.</p>
686719
<p>3. Opcionálisan adja meg a WGS84 koordinátákat a megjelenő ablakban</p>
687720
<p>4. Az alkalmazás betölti a 3D modellt (textúrákkal együtt, ha kiválasztotta)</p>

manual/hu/09-3d-modellek.html

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,13 @@ <h2>3D modell importálása</h2>
9393

9494
<div class="step">
9595
<h3>1. lépés: Modell megnyitása</h3>
96-
<p>Kattintson a <strong>Fájl &rarr; Modell megnyitása</strong> menüpontra.</p>
96+
<p>Kattintson a <strong>Fájl &rarr; Fájl megnyitása</strong> menüpontra.</p>
97+
<p
98+
>A <strong>Fájl megnyitása</strong> ugyanaz a menüpont, amellyel a barlangokat is importáljuk: modelleket és
99+
barlangokat akár együtt, egyszerre is kijelölhet. Egy egész mappa (modelleket is tartalmazó) tartalmát a
100+
<strong>Fájl &rarr; Mappa megnyitása</strong> ponttal tölthet be — ekkor egy kiválasztó panelen jelölheti ki,
101+
mit szeretne importálni.</p
102+
>
97103
</div>
98104

99105
<div class="step">

src/i18n/translations/en.json

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@
55
"file": {
66
"name": "File",
77
"new": "New cave",
8-
"open": "Open cave(s)",
9-
"openFolder": "Open cave folder…",
8+
"open": "Open file…",
9+
"openFolder": "Open folder…",
1010
"export": "Export cave(s)",
11-
"openModel": "Open model",
1211
"print": "Print",
1312
"printPDF": "Generate PDF"
1413
},
@@ -668,6 +667,19 @@
668667
"description": "Central European encoding"
669668
}
670669
},
670+
"rootFileSelection": {
671+
"title": "Items to import",
672+
"message": "Several caves and models were found. Select which one(s) to import.",
673+
"files": "{count} files",
674+
"types": {
675+
"cave": "cave",
676+
"model": "model",
677+
"dtm": "dtm",
678+
"orthophoto": "orthophoto"
679+
},
680+
"importSelected": "Import selected",
681+
"cancelled": "Master file selection cancelled"
682+
},
671683
"wgs84": {
672684
"title": "WGS84 Coordinates",
673685
"latitude": "Latitude",
@@ -1052,6 +1064,7 @@
10521064
"surveyNameUndefined": "Survey name is undefined, please set a name in the file",
10531065
"surveyAlreadyExists": "Survey {name} already exists in cave {cave}",
10541066
"caveAlreadyImported": "Cave {name} has already been imported",
1067+
"duplicateCavesSkipped": "Skipped {count} duplicate cave(s) already provided by another selected master: {names}",
10551068
"caveIdAlreadyExists": "A cave with the id \"{id}\" already exists, please change the id of the cave to be imported",
10561069
"projectUrlParameterMissing": "Probably the project URL parameter is missing",
10571070
"failedToDownloadFile": "Failed to download file {name}: {error}",

0 commit comments

Comments
 (0)