feat (ui): voeg Volumes tabblad toe aan webui
Nieuw tabblad na Images met: - Tabel: Naam, Driver, Mountpoint (afgekapt + tooltip), Aangemaakt (relatieve tijd), Labels (pills), Containers (pills via Mounts koppeling) - Toolbar: Ververs, + Volume, Prune (met bevestigingsdialoog) - Verwijder knop per rij (uitgeschakeld als volume in gebruik) - Create Volume modal: naam (verplicht) + labels (key=value per regel) - Lege staat via renderStateBox volumes.js: _volEsc() voor XSS-safe rendering, encodeURIComponent voor onclick-handlers, parallel fetch volumes + containers-dashboard voor container-koppeling via Mounts[].Name. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -57,6 +57,9 @@
|
||||
<div class="tab" id="tab-images" onclick="setTab('images')" title="Images">
|
||||
<span class="navIcon">📦</span><span class="navLabel">Images</span><span class="navCount" id="countNavImages">-</span>
|
||||
</div>
|
||||
<div class="tab" id="tab-volumes" onclick="setTab('volumes')" title="Volumes">
|
||||
<span class="navIcon">🗄️</span><span class="navLabel">Volumes</span><span class="navCount" id="countNavVolumes">-</span>
|
||||
</div>
|
||||
<div class="tab" id="tab-files" onclick="setTab('files')" title="Files">
|
||||
<span class="navIcon">📁</span><span class="navLabel">Files</span><span class="navCount" id="countNavFiles">-</span>
|
||||
</div>
|
||||
@@ -305,6 +308,35 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="view-volumes" class="grid" style="display:none">
|
||||
<div class="card" style="grid-column: 1 / -1;">
|
||||
<div class="cardHeader">
|
||||
<div class="cardTitle">Volumes</div>
|
||||
<div class="flex">
|
||||
<button class="btn" onclick="loadVolumes()">Ververs</button>
|
||||
<button class="btn ok" onclick="openCreateVolumeModal()">+ Volume</button>
|
||||
<button class="btn bad" onclick="pruneVolumes()">Prune</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cardBody">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Naam</th>
|
||||
<th>Driver</th>
|
||||
<th>Mountpoint</th>
|
||||
<th>Aangemaakt</th>
|
||||
<th>Labels</th>
|
||||
<th>Containers</th>
|
||||
<th style="width:90px;">Acties</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="volumes-tbody"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="view-files" class="grid" style="display:none">
|
||||
<div class="card" style="grid-column: 1 / -1;">
|
||||
<div class="cardHeader">
|
||||
@@ -395,6 +427,30 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Create Volume Modal -->
|
||||
<div class="modalBack" id="createVolumeModalBack" style="display:none;" onclick="closeCreateVolumeModal(event)">
|
||||
<div class="modal" onclick="event.stopPropagation()" style="width:460px;">
|
||||
<div class="modalHeader">
|
||||
<div class="modalTitle">Volume aanmaken</div>
|
||||
<button class="btn small ghost" onclick="hideCreateVolumeModal()">Sluiten</button>
|
||||
</div>
|
||||
<div class="modalBody">
|
||||
<div style="margin-bottom:12px;">
|
||||
<label class="label">Naam <span style="color:var(--bad)">*</span></label>
|
||||
<input id="createVolumeName" class="input" type="text" placeholder="mijn-volume" style="width:100%;" />
|
||||
</div>
|
||||
<div style="margin-bottom:16px;">
|
||||
<label class="label">Labels <span class="muted">(optioneel, één key=value per regel)</span></label>
|
||||
<textarea id="createVolumeLabels" class="textarea mono" rows="3" placeholder="app=myapp env=production" style="width:100%;"></textarea>
|
||||
</div>
|
||||
<div class="flex">
|
||||
<button class="btn ok" onclick="createVolume()">Aanmaken</button>
|
||||
<button class="btn ghost" onclick="hideCreateVolumeModal()">Annuleren</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Build Modal -->
|
||||
<div class="modalBack" id="buildModalBack" style="display:none;" onclick="closeBuildModal(event)">
|
||||
<div class="modal" onclick="event.stopPropagation()" style="width:700px;">
|
||||
@@ -590,6 +646,9 @@
|
||||
if (tab === "images") {
|
||||
loadImages();
|
||||
}
|
||||
if (tab === "volumes") {
|
||||
loadVolumes();
|
||||
}
|
||||
// Start/stop live stats alleen in Containers tab (polling via /containers-dashboard)
|
||||
if (tab === 'containers') startContainersDashboardStatsPoll();
|
||||
else stopContainersDashboardStatsPoll();
|
||||
@@ -772,5 +831,6 @@
|
||||
<script src="assets/js/d3.min.js"></script>
|
||||
<script src="assets/js/tabs/networks.js"></script>
|
||||
<script src="assets/js/tabs/images.js"></script>
|
||||
<script src="assets/js/tabs/volumes.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user