Skip to content

Commit fc27faf

Browse files
author
FolderView Plus Test
committed
Merge branch 'dev'
2 parents 6340e1b + 5b6b47f commit fc27faf

6 files changed

Lines changed: 20 additions & 10 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+
f1b159719ad1e325813e77812bfeaf2dc5dc1e43878f4f94a500b56f9cb4331a folderview.plus-2026.04.16.03.txz

folderview.plus.plg

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,21 @@
55
<!ENTITY github "alexphillips-dev/FolderView-Plus">
66
<!ENTITY launch "Settings/FolderViewPlus">
77
<!ENTITY plugdir "/usr/local/emhttp/plugins/&name;">
8-
<!ENTITY pluginURL "https://raw.githubusercontent.com/&github;/main/folderview.plus.plg">
9-
<!ENTITY version "2026.04.16.02">
10-
<!ENTITY md5 "bd81f9c6610f4c0855c1b3a775cebf1b">
8+
<!ENTITY pluginURL "https://raw.githubusercontent.com/&github;/dev/folderview.plus.plg">
9+
<!ENTITY version "2026.04.16.03">
10+
<!ENTITY md5 "04930b9b7e5ebee2bf3c4f6057009781">
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.16.03
17+
- Fix: VM runtime rows, folder state, and VM actions.
18+
- UX: Dashboard layouts, quick rails, and folder card interactions.
19+
- UX: Settings workspace layout, section flows, and table behavior.
20+
- Quality: Release automation, CI smoke coverage, and packaging guards.
21+
22+
1623
###2026.04.16.02
1724
- Fix: Docker support-bundle snapshots, trace storage caps, and rendered-state diagnostics.
1825
- Fix: Docker runtime rows, folder state, and container interactions.
@@ -5440,7 +5447,7 @@
54405447
</CHANGES>
54415448

54425449
<FILE Name="/boot/config/plugins/&name;/&name;-&version;.txz" Run="upgradepkg --install-new">
5443-
<URL>https://raw.githubusercontent.com/&github;/main/archive/&name;-&version;.txz</URL>
5450+
<URL>https://raw.githubusercontent.com/&github;/dev/archive/&name;-&version;.txz</URL>
54445451
<MD5>&md5;</MD5>
54455452
</FILE>
54465453

folderview.plus.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<Containers>
33
<Plugin>True</Plugin>
4-
<PluginURL>https://raw.githubusercontent.com/alexphillips-dev/FolderView-Plus/main/folderview.plus.plg</PluginURL>
4+
<PluginURL>https://raw.githubusercontent.com/alexphillips-dev/FolderView-Plus/dev/folderview.plus.plg</PluginURL>
55
<PluginAuthor>alexphillips-dev</PluginAuthor>
66
<Beta>False</Beta>
77
<Category>Tools:System</Category>
@@ -14,6 +14,6 @@ FolderView Plus organizes Docker, VM, and Dashboard views into folders in Unraid
1414
<MinVer>7.0.0</MinVer>
1515
<ExtraSearchTerms>folder view docker vm dashboard organization groups sorting import export backup recovery rules templates diagnostics</ExtraSearchTerms>
1616
<Support>https://forums.unraid.net/topic/197631-plugin-folderview-plus/</Support>
17-
<Icon>https://raw.githubusercontent.com/alexphillips-dev/FolderView-Plus/main/src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/images/folder-icon.png</Icon>
17+
<Icon>https://raw.githubusercontent.com/alexphillips-dev/FolderView-Plus/dev/src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/images/folder-icon.png</Icon>
1818
<Project>https://github.com/alexphillips-dev/FolderView-Plus</Project>
1919
</Containers>

src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/scripts/dashboard.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ const sanitizeImageSrc = typeof utils.sanitizeImageSrc === 'function'
220220
}
221221
return escapeHtml(raw);
222222
});
223+
const DEFAULT_FOLDER_ICON_PATH = '/plugins/folderview.plus/images/folder-icon.png';
223224
const WEBUI_OPEN_REL = 'noopener';
224225
const getSafeWebUiUrl = (value) => {
225226
const raw = String(value || '').trim();
@@ -1465,7 +1466,7 @@ const createFolderDocker = (folder, id, position, order, containersInfo, folders
14651466
}
14661467

14671468
// the HTML template for the folder
1468-
const safeFolderIcon = sanitizeImageSrc(folder.icon);
1469+
const safeFolderIcon = sanitizeImageSrc(folder.icon, DEFAULT_FOLDER_ICON_PATH);
14691470
const safeFolderName = escapeHtml(folder.name);
14701471
const overflowMode = normalizeDashboardOverflowMode(folder?.settings?.dashboard_overflow);
14711472
const fld = `<div class="folder-showcase-outer-${id} folder-showcase-outer" data-fv-folder-id="${id}" data-fv-dashboard-overflow="${overflowMode}"><span class="outer solid apps stopped folder-docker" onclick='expandFolderDocker("${id}")'><span id="folder-id-${id}" class="hand docker folder-hand-docker"><img src="${safeFolderIcon}" class="img folder-img-docker" onerror="this.src='/plugins/dynamix.docker.manager/images/question.png';"></span><span class="inner folder-inner-docker"><span class="folder-appname-docker">${safeFolderName}</span><br><i class="fa fa-square stopped folder-load-status-docker"></i><span class="state folder-state-docker">${$.i18n('stopped')}</span></span><button type="button" class="fv-dashboard-expand-toggle-btn" onclick='event.stopPropagation(); expandFolderDocker("${id}"); return false;' aria-label="Toggle folder members"><i class="fa fa-chevron-down" aria-hidden="true"></i></button><div class="folder-storage"></div></span><div class="folder-showcase-${id} folder-showcase"></div></div>`;
@@ -1766,7 +1767,7 @@ const createFolderVM = (folder, id, position, order, vmInfo, foldersDone, matchC
17661767
const safeFolderIcon = sanitizeImageSrc(folder.icon);
17671768
const safeFolderName = escapeHtml(folder.name);
17681769
const overflowMode = normalizeDashboardOverflowMode(folder?.settings?.dashboard_overflow);
1769-
const fld = `<div class="folder-showcase-outer-${id} folder-showcase-outer" data-fv-folder-id="${id}" data-fv-dashboard-overflow="${overflowMode}"><span class="outer solid vms stopped folder-vm" onclick='expandFolderVM("${id}")'><span id="folder-id-${id}" class="hand vm folder-hand-vm"><img src="${safeFolderIcon}" class="img folder-img-vm" onerror='this.src="/plugins/dynamix.docker.manager/images/question.png"'></span><span class="inner folder-inner-vm"><span class="folder-appname-vm">${safeFolderName}</span><br><i class="fa fa-square stopped folder-load-status-vm"></i><span class="state folder-state-vm">${$.i18n('stopped')}</span></span><button type="button" class="fv-dashboard-expand-toggle-btn" onclick='event.stopPropagation(); expandFolderVM("${id}"); return false;' aria-label="Toggle folder members"><i class="fa fa-chevron-down" aria-hidden="true"></i></button><div class="folder-storage" style="display:none"></div></span><div class="folder-showcase-${id} folder-showcase"></div></div>`;
1770+
const fld = `<div class="folder-showcase-outer-${id} folder-showcase-outer" data-fv-folder-id="${id}" data-fv-dashboard-overflow="${overflowMode}"><span class="outer solid vms stopped folder-vm" onclick='expandFolderVM("${id}")'><span id="folder-id-${id}" class="hand vm folder-hand-vm"><img src="${safeFolderIcon}" class="img folder-img-vm" onerror='this.src="${DEFAULT_FOLDER_ICON_PATH}"'></span><span class="inner folder-inner-vm"><span class="folder-appname-vm">${safeFolderName}</span><br><i class="fa fa-square stopped folder-load-status-vm"></i><span class="state folder-state-vm">${$.i18n('stopped')}</span></span><button type="button" class="fv-dashboard-expand-toggle-btn" onclick='event.stopPropagation(); expandFolderVM("${id}"); return false;' aria-label="Toggle folder members"><i class="fa fa-chevron-down" aria-hidden="true"></i></button><div class="folder-storage" style="display:none"></div></span><div class="folder-showcase-${id} folder-showcase"></div></div>`;
17701771

17711772
// insertion at position of the folder
17721773
if (appendToSelector) {

src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/scripts/vm.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const applyVmThemeResolverTokens = (reason = 'vm-runtime:initial', options = {})
77
? themeResolver.applyResolvedThemeTokens(reason, options)
88
: null
99
);
10+
const DEFAULT_FOLDER_ICON_PATH = '/plugins/folderview.plus/images/folder-icon.png';
1011
const localDefaultFolderStatusColors = runtimeShared.DEFAULT_FOLDER_STATUS_COLORS || {
1112
started: '#ffffff',
1213
paused: '#b8860b',
@@ -1443,15 +1444,15 @@ const createFolder = (folder, id, position, order, vmInfo, foldersDone, matchCac
14431444
const totalCols = document.querySelector("#kvm_table > thead > tr").childElementCount;
14441445
const colspan = totalCols - 2; // minus name + autostart columns
14451446
const hoverClass = folder.settings.preview_hover && !FV_VM_TOUCH_MODE ? 'hover' : '';
1446-
const safeFolderIcon = sanitizeImageSrc(folder.icon);
1447+
const safeFolderIcon = sanitizeImageSrc(folder.icon, DEFAULT_FOLDER_ICON_PATH);
14471448
const safeFolderName = escapeHtml(folder.name);
14481449
const pinned = isVmFolderPinned(id);
14491450
const locked = isVmFolderLocked(id);
14501451
const focused = vmFocusedFolderId === id;
14511452
const lockedClass = locked ? 'fv-folder-locked' : '';
14521453
const pinnedClass = pinned ? 'fv-folder-pinned' : '';
14531454
const focusedClass = focused ? 'fv-folder-focused' : '';
1454-
const fld = `<tr parent-id="${id}" class="sortable folder-id-${id} ${hoverClass} ${lockedClass} ${pinnedClass} ${focusedClass} folder"><td class="vm-name folder-name"><div class="folder-name-sub"><i class="fa fa-arrows-v mover orange-text"></i><span class="outer folder-outer"><span id="${id}" onclick='addVMFolderContext("${id}")' class="hand folder-hand"><img src="${safeFolderIcon}" class="img folder-img" onerror='this.src="/plugins/dynamix.docker.manager/images/question.png"'></span><span class="inner folder-inner"><a class="folder-appname" href="#" onclick='editFolder("${id}")'>${safeFolderName}</a><a class="folder-appname-id">folder-${id}</a><br><i id="load-folder-${id}" class="fa fa-square stopped folder-load-status"></i><span class="state folder-state fv-folder-state-stopped"> ${$.i18n('stopped')}</span></span></span><button class="dropDown-${id} folder-dropdown" onclick='dropDownButton("${id}")'><i class="fa fa-chevron-down" aria-hidden="true"></i></button></div></td><td colspan="${colspan}" class="folder-preview-cell"><div class="folder-storage"></div><div class="folder-preview"></div></td><td class="folder-autostart"><input class="autostart" type="checkbox" id="folder-${id}-auto" style="display:none"></td></tr><tr child-id="${id}" id="name-${id}" style="display:none"><td colspan="${totalCols}" style="margin:0;padding:0"></td></tr>`;
1455+
const fld = `<tr parent-id="${id}" class="sortable folder-id-${id} ${hoverClass} ${lockedClass} ${pinnedClass} ${focusedClass} folder"><td class="vm-name folder-name"><div class="folder-name-sub"><i class="fa fa-arrows-v mover orange-text"></i><span class="outer folder-outer"><span id="${id}" onclick='addVMFolderContext("${id}")' class="hand folder-hand"><img src="${safeFolderIcon}" class="img folder-img" onerror='this.src="${DEFAULT_FOLDER_ICON_PATH}"'></span><span class="inner folder-inner"><a class="folder-appname" href="#" onclick='editFolder("${id}")'>${safeFolderName}</a><a class="folder-appname-id">folder-${id}</a><br><i id="load-folder-${id}" class="fa fa-square stopped folder-load-status"></i><span class="state folder-state fv-folder-state-stopped"> ${$.i18n('stopped')}</span></span></span><button class="dropDown-${id} folder-dropdown" onclick='dropDownButton("${id}")'><i class="fa fa-chevron-down" aria-hidden="true"></i></button></div></td><td colspan="${colspan}" class="folder-preview-cell"><div class="folder-storage"></div><div class="folder-preview"></div></td><td class="folder-autostart"><input class="autostart" type="checkbox" id="folder-${id}-auto" style="display:none"></td></tr><tr child-id="${id}" id="name-${id}" style="display:none"><td colspan="${totalCols}" style="margin:0;padding:0"></td></tr>`;
14551456

14561457
// insertion at position of the folder
14571458
if (position === 0) {

0 commit comments

Comments
 (0)