Skip to content

Commit e9fd777

Browse files
Fix multi-row docker preview menu triggers
1 parent dc5b156 commit e9fd777

6 files changed

Lines changed: 28 additions & 10 deletions

File tree

14.3 MB
Binary file not shown.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
a78eeb31d3a7bcc0cbda7817d925e0020d9275d79bd2f41c54350b685ea1b22a folderview.plus-2026.04.04.22.txz

folderview.plus.plg

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,17 @@
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.04.21">
10-
<!ENTITY md5 "14af06511e1f680176f4e85f52bafcf7">
9+
<!ENTITY version "2026.04.04.22">
10+
<!ENTITY md5 "4d14f1c001387ba7a5bae907f4198f61">
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.04.22
17+
- Fix: Docker runtime rows, folder state, and container interactions.
18+
19+
1620
###2026.04.04.21
1721
- UX: Diagnostics Suggested fixes and Share with support panels now keep their empty-state copy top-aligned in the workbench layout.
1822

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

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -768,16 +768,16 @@ const buildDockerPreviewItem = ({ entry = {}, settings = {}, autostart = false }
768768
switch (previewMode) {
769769
case 2:
770770
itemMarkup = `
771-
<span class="outer fv-docker-preview-card fv-docker-preview-card-compact fv-docker-preview-mode-2${autostartClass}">
771+
<span class="outer fv-docker-preview-card fv-docker-preview-card-compact fv-docker-preview-mode-2 fv-preview-trigger${autostartClass}">
772772
<span class="hand fv-preview-trigger"><img src="${safeIcon}" class="img folder-img" onerror='this.src="/plugins/dynamix.docker.manager/images/question.png"'${imageStyle}></span>
773773
</span>
774774
`;
775-
triggerSelector = '.hand';
775+
triggerSelector = '.fv-docker-preview-card';
776776
break;
777777
case 3:
778778
case 4:
779779
itemMarkup = `
780-
<span class="outer fv-docker-preview-card fv-docker-preview-card-compact fv-docker-preview-mode-${previewMode}${autostartClass}">
780+
<span class="outer fv-docker-preview-card fv-docker-preview-card-compact fv-docker-preview-mode-${previewMode} fv-preview-trigger${autostartClass}">
781781
<span class="inner fv-preview-trigger">
782782
<span class="appname${updateClass}"${textWidthStyle}><a class="exec${updateClass}">${safeName}</a></span>
783783
<span class="fv-preview-meta-compact">
@@ -789,12 +789,12 @@ const buildDockerPreviewItem = ({ entry = {}, settings = {}, autostart = false }
789789
</span>
790790
</span>
791791
`;
792-
triggerSelector = '.appname, .fv-preview-status-compact';
792+
triggerSelector = '.fv-docker-preview-card';
793793
break;
794794
case 1:
795795
default:
796796
itemMarkup = `
797-
<span class="outer fv-docker-preview-card fv-docker-preview-card-compact fv-docker-preview-mode-1${autostartClass}">
797+
<span class="outer fv-docker-preview-card fv-docker-preview-card-compact fv-docker-preview-mode-1 fv-preview-trigger${autostartClass}">
798798
<span class="hand fv-preview-trigger"><img src="${safeIcon}" class="img folder-img" onerror='this.src="/plugins/dynamix.docker.manager/images/question.png"'${imageStyle}></span>
799799
<span class="inner fv-preview-trigger">
800800
<span class="appname${updateClass}"${textWidthStyle}><a class="exec${updateClass}">${safeName}</a></span>
@@ -807,13 +807,15 @@ const buildDockerPreviewItem = ({ entry = {}, settings = {}, autostart = false }
807807
</span>
808808
</span>
809809
`;
810-
triggerSelector = '.hand, .appname, .fv-preview-status-compact';
810+
triggerSelector = '.fv-docker-preview-card';
811811
break;
812812
}
813813
const $compactItem = $(itemMarkup);
814814
return {
815815
$item: $compactItem,
816-
$tooltipTrigger: $compactItem.find(triggerSelector).first()
816+
$tooltipTrigger: triggerSelector === '.fv-docker-preview-card'
817+
? $compactItem
818+
: $compactItem.find(triggerSelector).first()
817819
};
818820
}
819821

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
.append('<i class="fa fa-globe" aria-hidden="true"></i>')
4343
.on('click', (event) => {
4444
event.preventDefault();
45+
event.stopPropagation();
4546
openWebuiInNewTab(webuiUrl);
4647
})
4748
);
@@ -51,6 +52,7 @@
5152
.append('<i class="fa fa-terminal" aria-hidden="true"></i>')
5253
.on('click', (event) => {
5354
event.preventDefault();
55+
event.stopPropagation();
5456
openTerminal('docker', containerName, shellValue);
5557
})
5658
);
@@ -60,6 +62,7 @@
6062
.append('<i class="fa fa-bars" aria-hidden="true"></i>')
6163
.on('click', (event) => {
6264
event.preventDefault();
65+
event.stopPropagation();
6366
openTerminal('docker', containerName, '.log');
6467
})
6568
);

tests/docker-preview-overflow-feature.test.mjs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ const folderJs = read('src/folderview.plus/usr/local/emhttp/plugins/folderview.p
1111
const folderContractJs = read('src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/scripts/folderviewplus.folder-contract.js');
1212
const folderEditorSharedJs = read('src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/scripts/folder.editor.shared.js');
1313
const dockerJs = read('src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/scripts/docker.js');
14+
const dockerPreviewActionsScript = read('src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/scripts/docker.runtime.preview-actions.js');
1415
const sharedRuntimeJs = read('src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/scripts/docker.runtime.shared.js');
1516
const dockerRuntimeHierarchyJs = read('src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/scripts/docker.runtime.hierarchy.js');
1617
const dockerCss = read('src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/styles/docker.css');
@@ -33,7 +34,7 @@ test('folder editor exposes preview row limit control and persists the setting',
3334
assert.match(folderJs, /previewRows:\s*normalizedPreviewRows,/);
3435
});
3536

36-
test('docker runtime applies preview row layout limits and keeps preview member clicks passive', () => {
37+
test('docker runtime applies preview row layout limits and keeps compact preview cards clickable', () => {
3738
assert.match(sharedRuntimeJs, /const getPreviewRowLimitValue = \(settings = \{\}\) =>/);
3839
assert.match(sharedRuntimeJs, /settings\?\.preview_rows\s*\?\?\s*settings\?\.previewRows/);
3940
assert.match(sharedRuntimeJs, /const normalizeFolderPreviewRowLimit = \(settings = \{\}\) =>/);
@@ -48,6 +49,10 @@ test('docker runtime applies preview row layout limits and keeps preview member
4849
assert.match(dockerJs, /const appendPreviewWebuiPlaceholder = \(\$target\) =>/);
4950
assert.match(dockerJs, /fv-preview-webui-placeholder/);
5051
assert.match(dockerJs, /const buildDockerPreviewItem = \(\{ entry = \{\}, settings = \{\}, autostart = false \}\) =>/);
52+
assert.match(dockerJs, /fv-docker-preview-mode-2 fv-preview-trigger/);
53+
assert.match(dockerJs, /fv-docker-preview-mode-\$\{previewMode\} fv-preview-trigger/);
54+
assert.match(dockerJs, /fv-docker-preview-mode-1 fv-preview-trigger/);
55+
assert.match(dockerJs, /\$tooltipTrigger:\s*triggerSelector === '\.fv-docker-preview-card'\s*\?\s*\$compactItem/);
5156
assert.match(dockerJs, /const layoutFolderPreviewRows = \(\$preview, settings = \{\}\) =>/);
5257
assert.match(dockerJs, /const applyFolderPreviewLayout = typeof dockerRuntimeShared\.applyFolderPreviewLayout === 'function'/);
5358
assert.match(dockerJs, /const flattenPreviewWrappers = typeof dockerRuntimeShared\.flattenPreviewWrappers === 'function'/);
@@ -78,6 +83,9 @@ test('docker runtime applies preview row layout limits and keeps preview member
7883
assert.match(dockerJs, /\.off\('click\.fvDockerMemberMenuAction'\)/);
7984
assert.doesNotMatch(dockerJs, /FolderViewDockerPreviewMemberMenu/);
8085
assert.doesNotMatch(dockerJs, /showDockerPreviewMemberMenu/);
86+
assert.match(dockerPreviewActionsScript, /event\.preventDefault\(\);\s*event\.stopPropagation\(\);\s*openWebuiInNewTab\(webuiUrl\);/s);
87+
assert.match(dockerPreviewActionsScript, /event\.preventDefault\(\);\s*event\.stopPropagation\(\);\s*openTerminal\('docker',\s*containerName,\s*shellValue\);/s);
88+
assert.match(dockerPreviewActionsScript, /event\.preventDefault\(\);\s*event\.stopPropagation\(\);\s*openTerminal\('docker',\s*containerName,\s*'\.log'\);/s);
8189
});
8290

8391
test('docker styles support multi-row previews without the removed member action sheet styling', () => {

0 commit comments

Comments
 (0)