Skip to content

Commit cb3cc54

Browse files
Fix compact docker preview menu proxy clicks
1 parent e9fd777 commit cb3cc54

6 files changed

Lines changed: 45 additions & 8 deletions

File tree

archive/folderview.plus-2026.04.02.13.txz.sha256

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
684ea498e0e91e82c8d1fb00830c63cc6719969c897a246bdb0f757ca26f9fad folderview.plus-2026.04.04.23.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.22">
10-
<!ENTITY md5 "4d14f1c001387ba7a5bae907f4198f61">
9+
<!ENTITY version "2026.04.04.23">
10+
<!ENTITY md5 "cc93a6c240689c0f70a87ea0da80ce92">
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.23
17+
- Fix: Multi-row Docker folder previews now proxy clicks from the visible compact card content back to the lazy tooltip trigger, so container menus open again when preview rows are set above 1 or Unlimited.
18+
19+
1620
###2026.04.04.22
1721
- Fix: Docker runtime rows, folder state, and container interactions.
1822

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

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -769,7 +769,7 @@ const buildDockerPreviewItem = ({ entry = {}, settings = {}, autostart = false }
769769
case 2:
770770
itemMarkup = `
771771
<span class="outer fv-docker-preview-card fv-docker-preview-card-compact fv-docker-preview-mode-2 fv-preview-trigger${autostartClass}">
772-
<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>
772+
<span class="hand fv-preview-trigger fv-preview-tooltip-proxy"><img src="${safeIcon}" class="img folder-img" onerror='this.src="/plugins/dynamix.docker.manager/images/question.png"'${imageStyle}></span>
773773
</span>
774774
`;
775775
triggerSelector = '.fv-docker-preview-card';
@@ -778,7 +778,7 @@ const buildDockerPreviewItem = ({ entry = {}, settings = {}, autostart = false }
778778
case 4:
779779
itemMarkup = `
780780
<span class="outer fv-docker-preview-card fv-docker-preview-card-compact fv-docker-preview-mode-${previewMode} fv-preview-trigger${autostartClass}">
781-
<span class="inner fv-preview-trigger">
781+
<span class="inner fv-preview-trigger fv-preview-tooltip-proxy">
782782
<span class="appname${updateClass}"${textWidthStyle}><a class="exec${updateClass}">${safeName}</a></span>
783783
<span class="fv-preview-meta-compact">
784784
<span class="fv-preview-status-compact" title="${previewStatusTitle}">
@@ -795,8 +795,8 @@ const buildDockerPreviewItem = ({ entry = {}, settings = {}, autostart = false }
795795
default:
796796
itemMarkup = `
797797
<span class="outer fv-docker-preview-card fv-docker-preview-card-compact fv-docker-preview-mode-1 fv-preview-trigger${autostartClass}">
798-
<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>
799-
<span class="inner fv-preview-trigger">
798+
<span class="hand fv-preview-trigger fv-preview-tooltip-proxy"><img src="${safeIcon}" class="img folder-img" onerror='this.src="/plugins/dynamix.docker.manager/images/question.png"'${imageStyle}></span>
799+
<span class="inner fv-preview-trigger fv-preview-tooltip-proxy">
800800
<span class="appname${updateClass}"${textWidthStyle}><a class="exec${updateClass}">${safeName}</a></span>
801801
<span class="fv-preview-meta-compact">
802802
<span class="fv-preview-status-compact" title="${previewStatusTitle}">
@@ -981,7 +981,32 @@ const decorateDockerFolderMemberRow = ($row, folderId, containerName) => {
981981
};
982982
$(document)
983983
.off('click.fvDockerMemberMenuTrigger')
984-
.off('click.fvDockerMemberMenuAction');
984+
.off('click.fvDockerMemberMenuAction')
985+
.off('click.fvDockerPreviewTooltipProxy')
986+
.on('click.fvDockerPreviewTooltipProxy', '.fv-preview-tooltip-proxy', function(event) {
987+
const $proxy = $(event.target).closest('.fv-preview-tooltip-proxy');
988+
if (!$proxy.length) {
989+
return;
990+
}
991+
const $trigger = $proxy.closest('[id^="folder-preview-"]');
992+
if (!$trigger.length) {
993+
return;
994+
}
995+
event.preventDefault();
996+
event.stopPropagation();
997+
const ensureInitialized = $trigger.data('fvTooltipEnsureInitialized');
998+
if (typeof ensureInitialized === 'function') {
999+
ensureInitialized('click');
1000+
return;
1001+
}
1002+
if ($trigger.data('fvTooltipsterInitialized') === true) {
1003+
try {
1004+
$trigger.tooltipster('open');
1005+
} catch (_error) {
1006+
// Ignore open failures and let the next interaction retry.
1007+
}
1008+
}
1009+
});
9851010
const clampDockerRuntimeColumnWidth = (value, columnIndex = 0) => {
9861011
const parsed = Number(value);
9871012
if (!Number.isFinite(parsed)) {
@@ -1656,6 +1681,7 @@ const initializeDockerTooltipOnDemand = ($target, init, hoverOpen = true) => {
16561681
}, 0);
16571682
}
16581683
};
1684+
$target.data('fvTooltipEnsureInitialized', ensureInitialized);
16591685
$target.one('mouseenter.fvLazyTooltip click.fvLazyTooltip touchstart.fvLazyTooltip', (event) => {
16601686
ensureInitialized(event?.type || '');
16611687
});

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,9 @@ test('docker runtime applies preview row layout limits and keeps compact preview
5252
assert.match(dockerJs, /fv-docker-preview-mode-2 fv-preview-trigger/);
5353
assert.match(dockerJs, /fv-docker-preview-mode-\$\{previewMode\} fv-preview-trigger/);
5454
assert.match(dockerJs, /fv-docker-preview-mode-1 fv-preview-trigger/);
55+
assert.match(dockerJs, /fv-preview-trigger fv-preview-tooltip-proxy/);
5556
assert.match(dockerJs, /\$tooltipTrigger:\s*triggerSelector === '\.fv-docker-preview-card'\s*\?\s*\$compactItem/);
57+
assert.match(dockerJs, /\$target\.data\('fvTooltipEnsureInitialized', ensureInitialized\);/);
5658
assert.match(dockerJs, /const layoutFolderPreviewRows = \(\$preview, settings = \{\}\) =>/);
5759
assert.match(dockerJs, /const applyFolderPreviewLayout = typeof dockerRuntimeShared\.applyFolderPreviewLayout === 'function'/);
5860
assert.match(dockerJs, /const flattenPreviewWrappers = typeof dockerRuntimeShared\.flattenPreviewWrappers === 'function'/);
@@ -81,6 +83,11 @@ test('docker runtime applies preview row layout limits and keeps compact preview
8183
assert.match(dockerJs, /\.removeAttr\('data-container-name'\)/);
8284
assert.match(dockerJs, /\.off\('click\.fvDockerMemberMenuTrigger'\)/);
8385
assert.match(dockerJs, /\.off\('click\.fvDockerMemberMenuAction'\)/);
86+
assert.match(dockerJs, /\.off\('click\.fvDockerPreviewTooltipProxy'\)/);
87+
assert.match(dockerJs, /\.on\('click\.fvDockerPreviewTooltipProxy', '\.fv-preview-tooltip-proxy', function\(event\) \{/);
88+
assert.match(dockerJs, /const \$trigger = \$proxy\.closest\('\[id\^="folder-preview-"\]'\);/);
89+
assert.match(dockerJs, /const ensureInitialized = \$trigger\.data\('fvTooltipEnsureInitialized'\);/);
90+
assert.match(dockerJs, /ensureInitialized\('click'\);/);
8491
assert.doesNotMatch(dockerJs, /FolderViewDockerPreviewMemberMenu/);
8592
assert.doesNotMatch(dockerJs, /showDockerPreviewMemberMenu/);
8693
assert.match(dockerPreviewActionsScript, /event\.preventDefault\(\);\s*event\.stopPropagation\(\);\s*openWebuiInNewTab\(webuiUrl\);/s);

0 commit comments

Comments
 (0)