diff --git a/dist/urbm-2026.07.13.r002-x86_64-1.txz.sha256 b/dist/urbm-2026.07.13.r002-x86_64-1.txz.sha256 deleted file mode 100644 index 5713c78..0000000 --- a/dist/urbm-2026.07.13.r002-x86_64-1.txz.sha256 +++ /dev/null @@ -1 +0,0 @@ -237c35b49afd25a77903a6c858b20fad1747dbe0131d35c7934f0ee7f94be1a3 urbm-2026.07.13.r002-x86_64-1.txz diff --git a/dist/urbm-2026.07.13.r002-x86_64-1.txz b/dist/urbm-2026.07.13.r003-x86_64-1.txz similarity index 56% rename from dist/urbm-2026.07.13.r002-x86_64-1.txz rename to dist/urbm-2026.07.13.r003-x86_64-1.txz index 3ee0423..ae49ef1 100644 Binary files a/dist/urbm-2026.07.13.r002-x86_64-1.txz and b/dist/urbm-2026.07.13.r003-x86_64-1.txz differ diff --git a/dist/urbm-2026.07.13.r003-x86_64-1.txz.sha256 b/dist/urbm-2026.07.13.r003-x86_64-1.txz.sha256 new file mode 100644 index 0000000..f5c5fc5 --- /dev/null +++ b/dist/urbm-2026.07.13.r003-x86_64-1.txz.sha256 @@ -0,0 +1 @@ +d486804b98406ddef9d29076a8e96ed71b73fb3921911a94b899f225ca5dd97d urbm-2026.07.13.r003-x86_64-1.txz diff --git a/dist/urbm.plg b/dist/urbm.plg index 3dc379b..883a31c 100644 --- a/dist/urbm.plg +++ b/dist/urbm.plg @@ -2,13 +2,17 @@ - + - + ]> +### 2026.07.13.r003 +- Keep repository and job action menus above following table rows and cards. +- Automatically open long action menus upward when the available viewport space below is insufficient. + ### 2026.07.13.r002 - Redesign the dashboard around actionable health, active work, recent failures, and the latest successful backup. - Add searchable responsive job and repository lists with compact secondary-action menus. diff --git a/plugin/urbm.plg b/plugin/urbm.plg index d2efd4d..8164a96 100644 --- a/plugin/urbm.plg +++ b/plugin/urbm.plg @@ -2,13 +2,17 @@ - + ]> +### 2026.07.13.r003 +- Keep repository and job action menus above following table rows and cards. +- Automatically open long action menus upward when the available viewport space below is insufficient. + ### 2026.07.13.r002 - Redesign the dashboard around actionable health, active work, recent failures, and the latest successful backup. - Add searchable responsive job and repository lists with compact secondary-action menus. diff --git a/webgui/URBM.page b/webgui/URBM.page index c507bb0..8c1a508 100644 --- a/webgui/URBM.page +++ b/webgui/URBM.page @@ -8,7 +8,7 @@ Tag="URBM Unraid Restic Backup Manager backup snapshots restore" --- diff --git a/webgui/assets/urbm.css b/webgui/assets/urbm.css index 1d3cc21..a70a210 100644 --- a/webgui/assets/urbm.css +++ b/webgui/assets/urbm.css @@ -197,9 +197,12 @@ #urbm-app .bu-button.danger { color: var(--bu-bad) !important; } #urbm-app .bu-button:disabled { cursor: wait; opacity: .55; } .bu-action-menu { position: relative; } +.bu-action-menu[open] { z-index: 80; } +.bu-table tr.bu-menu-open, .bu-table tr.bu-menu-open > td { overflow: visible; position: relative; z-index: 70; } #urbm-app .bu-action-menu > summary { align-items: center; display: inline-flex; gap: 8px; list-style: none; } .bu-action-menu > summary::-webkit-details-marker { display: none; } -.bu-action-menu-popover { background: var(--bu-panel); border: 1px solid var(--bu-border-strong); border-radius: 8px; box-shadow: 0 12px 32px rgba(0,0,0,.22); display: grid; min-width: 220px; padding: 6px; position: absolute; right: 0; top: calc(100% + 6px); z-index: 30; } +.bu-action-menu-popover { background: var(--bu-panel); border: 1px solid var(--bu-border-strong); border-radius: 8px; box-shadow: 0 12px 32px rgba(0,0,0,.22); display: grid; max-height: min(430px, calc(100vh - 24px)); min-width: 220px; overflow-y: auto; padding: 6px; position: absolute; right: 0; top: calc(100% + 6px); z-index: 90; } +.bu-action-menu.open-up .bu-action-menu-popover { bottom: calc(100% + 6px); top: auto; } #urbm-app .bu-action-menu-popover .bu-button { background: transparent !important; border-color: transparent !important; justify-content: flex-start; text-align: left; width: 100%; } #urbm-app .bu-action-menu-popover .bu-button:hover { background: var(--bu-panel-alt) !important; border-color: transparent !important; } #urbm-app .bu-action-menu-popover .bu-button.danger { border-top: 1px solid var(--bu-border) !important; border-radius: 0 !important; margin-top: 4px !important; } diff --git a/webgui/assets/urbm.js b/webgui/assets/urbm.js index 3991df1..f90af37 100644 --- a/webgui/assets/urbm.js +++ b/webgui/assets/urbm.js @@ -977,6 +977,25 @@ document.addEventListener('click', e=>{ document.querySelectorAll('.bu-action-menu[open]').forEach(menu=>{ if(!menu.contains(e.target)) menu.removeAttribute('open'); }); }); + content.addEventListener('toggle', e=>{ + const menu=e.target.closest?.('.bu-action-menu'); + if(!menu) return; + const row=menu.closest('tr'); + row?.classList.toggle('bu-menu-open',menu.open); + menu.classList.remove('open-up'); + if(!menu.open) return; + content.querySelectorAll('.bu-action-menu[open]').forEach(other=>{ if(other!==menu) other.removeAttribute('open'); }); + requestAnimationFrame(()=>{ + const summary=menu.querySelector('summary'); + const popover=menu.querySelector('.bu-action-menu-popover'); + if(!summary||!popover) return; + const rect=summary.getBoundingClientRect(); + const needed=Math.min(popover.scrollHeight,430); + const below=window.innerHeight-rect.bottom-12; + const above=rect.top-12; + menu.classList.toggle('open-up',belowbelow); + }); + },true); content.addEventListener('change', e => { if (e.target.name === 'type' && e.target.closest('#bu-repo-form')) { renderRepositorySpecific(e.target.value);