Skip to content

Commit 466220d

Browse files
author
FolderView Plus Test
committed
Merge dev into main for 2026.04.08.01 release
2 parents 415e00a + 5450901 commit 466220d

6 files changed

Lines changed: 498 additions & 9 deletions

File tree

docs/releases/2026.04.08.01.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
### Docker Update UI Fixes
2+
- Fixed Docker folder member rows so runtime resync now updates both hidden and expanded members from live per-container state.
3+
- Fixed the Docker advanced-view action leak so folder member rows no longer show `force update` unless Docker advanced view is enabled.
4+
- Kept `apply update` available only for containers whose runtime state actually reports an update-ready image.
5+
6+
### Support Bundle Diagnostics
7+
- Expanded the support bundle runtime snapshot with per-folder render settings, per-folder render expectations, and per-entity render expectations for Docker troubleshooting.
8+
- Added Docker and VM runtime provenance fields such as manager source, update source, and runtime snapshot availability so support exports can separate bad runtime state from bad rendering.
9+
- Extended the support bundle contract coverage to validate the new runtime diagnostics fields.

src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/scripts/docker.runtime.preview-actions.js

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,14 @@
139139
}
140140
};
141141

142+
const isDockerAdvancedModeEnabled = () => {
143+
try {
144+
return typeof jq?.cookie === 'function' && jq.cookie('docker_listview_mode') == 'advanced';
145+
} catch (_error) {
146+
return false;
147+
}
148+
};
149+
142150
const escapeInlineJsSingleQuotedValue = (value) => String(value ?? '')
143151
.replace(/\\/g, '\\\\')
144152
.replace(/'/g, "\\'");
@@ -155,7 +163,10 @@
155163
if (entry?.update === true) {
156164
return `<span class="orange-text folder-update-text" style="white-space:nowrap;"><i class="fa fa-flash fa-fw"></i>${escapeHtml(i18nLabel('update-ready', 'update-ready'))}</span><br><a class="exec" onclick="hideAllTips(); updateContainer('${safeContainerName}');"><span style="white-space:nowrap;"><i class="fa fa-cloud-download fa-fw"></i>${escapeHtml(i18nLabel('apply-update', 'apply-update'))}</span></a>`;
157165
}
158-
return `<span class="green-text folder-update-text"><i class="fa fa-check fa-fw"></i>${escapeHtml(i18nLabel('up-to-date', 'up-to-date'))}</span><br><a class="exec" onclick="hideAllTips(); updateContainer('${safeContainerName}');"><span style="white-space:nowrap;"><i class="fa fa-cloud-download fa-fw"></i>${escapeHtml(i18nLabel('force-update', 'force-update'))}</span></a>`;
166+
const forceUpdateHtml = isDockerAdvancedModeEnabled()
167+
? `<br><a class="exec" onclick="hideAllTips(); updateContainer('${safeContainerName}');"><span style="white-space:nowrap;"><i class="fa fa-cloud-download fa-fw"></i>${escapeHtml(i18nLabel('force-update', 'force-update'))}</span></a>`
168+
: '';
169+
return `<span class="green-text folder-update-text"><i class="fa fa-check fa-fw"></i>${escapeHtml(i18nLabel('up-to-date', 'up-to-date'))}</span>${forceUpdateHtml}`;
159170
};
160171

161172
const getDockerPreviewStatusMeta = (entry = {}) => {
@@ -234,13 +245,13 @@
234245
}
235246
};
236247

237-
const findDockerFolderStorageRow = (id, containerName) => {
248+
const findDockerFolderMemberRow = (id, containerName) => {
238249
const folderId = String(id || '').trim();
239250
const safeContainerName = String(containerName || '').trim();
240251
if (!folderId || !safeContainerName) {
241252
return jq();
242253
}
243-
const $rows = jq(`tr.folder-id-${folderId} div.folder-storage > tr`);
254+
const $rows = jq(`tr.folder-id-${folderId} div.folder-storage > tr, tr.folder-${folderId}-element`);
244255
return $rows.filter((_, row) => {
245256
const rowId = String(row?.id || '').trim();
246257
if (rowId === `ct-${safeContainerName}`) {
@@ -297,7 +308,7 @@
297308
if (!containerName) {
298309
return;
299310
}
300-
const $row = findDockerFolderStorageRow(id, containerName);
311+
const $row = findDockerFolderMemberRow(id, containerName);
301312
syncDockerStorageRowStatus($row, entry);
302313
syncDockerStorageRowUpdateColumn($row, entry);
303314
});

0 commit comments

Comments
 (0)