Skip to content

Commit 3ff6d6f

Browse files
author
FolderView Plus Test
committed
Polish docker command view summary
1 parent c47d8c9 commit 3ff6d6f

8 files changed

Lines changed: 38 additions & 28 deletions

File tree

14 MB
Binary file not shown.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
38a66a26fac07b367ca62cb08fd5ec3c0618eb499222404f6932ebc0fda1af8e folderview.plus-2026.04.15.29.txz

docs/releases/2026.04.15.29.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
- UX: Removed the `experimental` label from the Docker command-view selector and the command-view header.
2+
- UX: Expanded the command-view overview row with more runtime summary cards, including container totals and state counts.
3+
- UX: Tightened member-tile bottom spacing so the quick-action strip sits closer to the content and the cards read more compactly.

folderview.plus.plg

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,19 @@
66
<!ENTITY launch "Settings/FolderViewPlus">
77
<!ENTITY plugdir "/usr/local/emhttp/plugins/&name;">
88
<!ENTITY pluginURL "https://raw.githubusercontent.com/&github;/dev/folderview.plus.plg">
9-
<!ENTITY version "2026.04.15.28">
10-
<!ENTITY md5 "32bf0fefa61ea490f3967b2c5863df47">
9+
<!ENTITY version "2026.04.15.29">
10+
<!ENTITY md5 "b46911ca828b275dd9a6475cf2f3b70d">
1111
]>
1212

1313
<PLUGIN name="&name;" author="&author;" version="&version;" launch="&launch;" pluginURL="&pluginURL;" icon="folder-icon.png" support="https://forums.unraid.net/topic/197631-plugin-folderview-plus/" min="7.0.0">
1414
<CHANGES>
1515

16+
###2026.04.15.29
17+
- UX: Removed the `experimental` label from the Docker command-view selector and the command-view header.
18+
- UX: Expanded the command-view overview row with more runtime summary cards, including container totals and state counts.
19+
- UX: Tightened member-tile bottom spacing so the quick-action strip sits closer to the content and the cards read more compactly.
20+
21+
1622
###2026.04.15.28
1723
- Fix: Docker command-view now forwards the original pointer coordinates through the native Docker row trigger so the Unraid container menu opens at the click point instead of the screen corner.
1824
- UX: Running command-view member tiles now use a forced green border treatment instead of inheriting the light theme border color.

src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/FolderViewPlus.page

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ if (!empty($fvplusRuntimeConflicts)) {
215215
<select id="docker-page-view-mode" onchange="changeRuntimePref('docker', 'pageViewMode', this.value)">
216216
<option value="folderview">FolderView</option>
217217
<option value="host">No FolderView (host list only)</option>
218-
<option value="command">Command view (experimental)</option>
218+
<option value="command">Command view</option>
219219
</select>
220220
</label>
221221
<label class="setting-toggle"><input id="docker-live-refresh-enabled" type="checkbox" onchange="changeRuntimePref('docker', 'liveRefreshEnabled', this.checked)"> Live auto-refresh</label>

src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/scripts/docker.runtime.command-view.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -492,16 +492,22 @@
492492
return false;
493493
}
494494
const cards = buildFolderCards(snapshot);
495+
const runtimeEntries = Object.values(snapshot.runtimeInfoByName || {});
495496
const activeFolders = cards.filter((card) => card.running > 0).length;
496497
const cardsWithUpdates = cards.filter((card) => card.updates > 0).length;
497498
const pinnedFolders = cards.filter((card) => card.pinned).length;
499+
const lockedFolders = cards.filter((card) => card.locked).length;
500+
const containerCount = runtimeEntries.length;
501+
const runningContainers = runtimeEntries.filter((entry) => resolveContainerState(entry) === 'running').length;
502+
const pausedContainers = runtimeEntries.filter((entry) => resolveContainerState(entry) === 'paused').length;
503+
const stoppedContainers = runtimeEntries.filter((entry) => resolveContainerState(entry) === 'stopped').length;
504+
const updatedContainers = runtimeEntries.filter((entry) => containerHasUpdate(entry)).length;
498505
root.innerHTML = `
499506
<div class="fv-docker-command-shell">
500507
<div class="fv-docker-command-header">
501508
<div class="fv-docker-command-header-copy">
502-
<div class="fv-docker-command-kicker">Experimental</div>
503509
<h2>Docker Command View</h2>
504-
<p>Isolated test surface for folder actions. The existing FolderView and host-list modes stay untouched behind the page-view selector.</p>
510+
<p>Folder-first Docker controls with the standard host-list and classic FolderView modes still available from the page-view selector.</p>
505511
</div>
506512
<div class="fv-docker-command-toolbar">
507513
<button type="button" class="fv-docker-command-button is-primary" data-fv-command-action="refresh">Refresh</button>
@@ -511,8 +517,14 @@
511517
<div class="fv-docker-command-overview">
512518
<div class="fv-docker-command-overview-card"><span class="fv-docker-command-overview-value">${cards.length}</span><span class="fv-docker-command-overview-label">folders</span></div>
513519
<div class="fv-docker-command-overview-card"><span class="fv-docker-command-overview-value">${activeFolders}</span><span class="fv-docker-command-overview-label">active folders</span></div>
520+
<div class="fv-docker-command-overview-card"><span class="fv-docker-command-overview-value">${containerCount}</span><span class="fv-docker-command-overview-label">containers</span></div>
521+
<div class="fv-docker-command-overview-card"><span class="fv-docker-command-overview-value">${runningContainers}</span><span class="fv-docker-command-overview-label">running</span></div>
522+
<div class="fv-docker-command-overview-card"><span class="fv-docker-command-overview-value">${pausedContainers}</span><span class="fv-docker-command-overview-label">paused</span></div>
523+
<div class="fv-docker-command-overview-card"><span class="fv-docker-command-overview-value">${stoppedContainers}</span><span class="fv-docker-command-overview-label">stopped</span></div>
514524
<div class="fv-docker-command-overview-card"><span class="fv-docker-command-overview-value">${cardsWithUpdates}</span><span class="fv-docker-command-overview-label">with updates</span></div>
525+
<div class="fv-docker-command-overview-card"><span class="fv-docker-command-overview-value">${updatedContainers}</span><span class="fv-docker-command-overview-label">update ready</span></div>
515526
<div class="fv-docker-command-overview-card"><span class="fv-docker-command-overview-value">${pinnedFolders}</span><span class="fv-docker-command-overview-label">pinned</span></div>
527+
<div class="fv-docker-command-overview-card"><span class="fv-docker-command-overview-value">${lockedFolders}</span><span class="fv-docker-command-overview-label">locked</span></div>
516528
</div>
517529
<div class="fv-docker-command-stack">
518530
${cards.length ? cards.map((card) => {

src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/styles/docker.command-view.css

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -55,25 +55,12 @@ body[data-fvplus-docker-command-view-mounted="true"] table#docker_containers {
5555
justify-content: space-between;
5656
gap: 1rem;
5757
align-items: flex-start;
58-
margin-bottom: 1rem;
59-
}
60-
61-
.fv-docker-command-kicker {
62-
display: inline-flex;
63-
align-items: center;
64-
padding: 0.18rem 0.5rem;
65-
border-radius: 999px;
66-
border: 1px solid var(--fv-docker-command-border);
67-
color: var(--fv-docker-command-accent);
68-
background: var(--fv-docker-command-accent-soft);
69-
text-transform: uppercase;
70-
letter-spacing: 0.08em;
71-
font-size: 0.72rem;
58+
margin-bottom: 0.85rem;
7259
}
7360

7461
.fv-docker-command-header-copy h2,
7562
.fv-docker-command-empty h3 {
76-
margin: 0.25rem 0 0;
63+
margin: 0;
7764
color: var(--fv-docker-command-text-primary);
7865
}
7966

@@ -132,9 +119,9 @@ body[data-fvplus-docker-command-view-mounted="true"] table#docker_containers {
132119

133120
.fv-docker-command-overview {
134121
display: grid;
135-
grid-template-columns: repeat(4, minmax(0, 1fr));
122+
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
136123
gap: 0.75rem;
137-
margin-bottom: 1rem;
124+
margin-bottom: 0.85rem;
138125
}
139126

140127
.fv-docker-command-overview-card {
@@ -264,7 +251,7 @@ body[data-fvplus-docker-command-view-mounted="true"] table#docker_containers {
264251
width: 220px;
265252
max-width: 220px;
266253
min-width: 220px;
267-
min-height: 48px;
254+
min-height: 44px;
268255
display: flex;
269256
flex-direction: column;
270257
border: 1px solid var(--fv-docker-command-border-faint);
@@ -292,11 +279,11 @@ body[data-fvplus-docker-command-view-mounted="true"] table#docker_containers {
292279

293280
.fv-docker-command-member-surface {
294281
width: 100%;
295-
min-height: 48px;
282+
min-height: 44px;
296283
display: flex;
297284
align-items: center;
298285
gap: 0.58rem;
299-
padding: 0.42rem 0.55rem;
286+
padding: 0.4rem 0.55rem 0.28rem;
300287
background: transparent;
301288
color: inherit;
302289
text-align: left;
@@ -391,8 +378,9 @@ body[data-fvplus-docker-command-view-mounted="true"] table#docker_containers {
391378
align-items: center;
392379
gap: 5px;
393380
margin-left: auto;
394-
padding: 0 0.55rem 0.45rem;
381+
padding: 0 0.55rem 0.2rem;
395382
align-self: flex-end;
383+
min-height: 16px;
396384
}
397385

398386
.fv-docker-command-member-actions .folder-element-custom-btn {
@@ -425,7 +413,7 @@ body[data-fvplus-docker-command-view-mounted="true"] table#docker_containers {
425413

426414
@media (max-width: 1100px) {
427415
.fv-docker-command-overview {
428-
grid-template-columns: repeat(2, minmax(0, 1fr));
416+
grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
429417
}
430418
}
431419

tests/settings-bindings.test.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ test('settings page exposes theme fallback controls and runtime self-heal action
122122
assert.match(page, /id="docker-page-view-mode"/);
123123
assert.doesNotMatch(page, /id="vm-page-view-mode"/);
124124
assert.match(page, /Docker page view/);
125-
assert.match(page, /<option value="command">Command view \(experimental\)<\/option>/);
125+
assert.match(page, /<option value="command">Command view<\/option>/);
126126
const dockerSortRowStart = page.indexOf('<div class="sort-row">');
127127
const dockerSortRowEnd = page.indexOf('<input id="docker-folder-filter"');
128128
assert.ok(dockerSortRowStart >= 0 && dockerSortRowEnd > dockerSortRowStart, 'docker sort row slice should be present');

0 commit comments

Comments
 (0)