Release 2026.09.27.r003: close action menus before opening edit forms
This commit is contained in:
+20
-12
@@ -431,6 +431,7 @@
|
||||
|
||||
function render() {
|
||||
const views = {dashboard:renderDashboard, jobs:renderJobs, repositories:renderRepositories, snapshots:renderSnapshots, restore:renderRestore, activity:renderActivity, logs:renderLogs, settings:renderSettings};
|
||||
document.querySelectorAll('.bu-action-menu[open]').forEach(closeActionMenu);
|
||||
menuPortal?.replaceChildren();
|
||||
content.innerHTML = views[state.view]();
|
||||
enhanceTooltips(content);
|
||||
@@ -994,13 +995,26 @@
|
||||
}
|
||||
|
||||
document.querySelector('.bu-tabs').addEventListener('click', e => { const button=e.target.closest('[data-view]'); if(!button)return; state.view=button.dataset.view; document.querySelectorAll('.bu-tabs button').forEach(x=>x.classList.toggle('active',x===button)); render(); if(state.view==='logs'&&!state.logs&&!state.logsLoading)loadLogs(); });
|
||||
function closeActionMenu(menu) {
|
||||
if(!menu) return;
|
||||
menu.removeAttribute('open');
|
||||
menu.closest('tr')?.classList.remove('bu-menu-open');
|
||||
const popover=menu._popover;
|
||||
if(popover) {
|
||||
popover.removeAttribute('style');
|
||||
popover.classList.remove('portaled');
|
||||
delete popover._ownerMenu;
|
||||
menu.appendChild(popover);
|
||||
delete menu._popover;
|
||||
}
|
||||
}
|
||||
function handleActionClick(e) {
|
||||
const target=e.target.closest('[data-action]');
|
||||
if(!target) return;
|
||||
e.preventDefault();
|
||||
const popover=target.closest('.bu-action-menu-popover');
|
||||
const menu=target.closest('.bu-action-menu')||popover?._ownerMenu;
|
||||
menu?.removeAttribute('open');
|
||||
closeActionMenu(menu);
|
||||
handle(target.dataset.action,target);
|
||||
}
|
||||
content.addEventListener('click', handleActionClick);
|
||||
@@ -1015,7 +1029,7 @@
|
||||
document.addEventListener('click', e=>{
|
||||
document.querySelectorAll('.bu-action-menu[open]').forEach(menu=>{
|
||||
const popover=menu._popover;
|
||||
if(!menu.contains(e.target)&&!popover?.contains(e.target)) menu.removeAttribute('open');
|
||||
if(!menu.contains(e.target)&&!popover?.contains(e.target)) closeActionMenu(menu);
|
||||
});
|
||||
});
|
||||
content.addEventListener('toggle', e=>{
|
||||
@@ -1024,18 +1038,12 @@
|
||||
const row=menu.closest('tr');
|
||||
row?.classList.toggle('bu-menu-open',menu.open);
|
||||
if(!menu.open) {
|
||||
const popover=menu._popover;
|
||||
if(popover) {
|
||||
popover.removeAttribute('style');
|
||||
popover.classList.remove('portaled');
|
||||
delete popover._ownerMenu;
|
||||
menu.appendChild(popover);
|
||||
delete menu._popover;
|
||||
}
|
||||
closeActionMenu(menu);
|
||||
return;
|
||||
}
|
||||
content.querySelectorAll('.bu-action-menu[open]').forEach(other=>{ if(other!==menu) other.removeAttribute('open'); });
|
||||
content.querySelectorAll('.bu-action-menu[open]').forEach(other=>{ if(other!==menu) closeActionMenu(other); });
|
||||
requestAnimationFrame(()=>{
|
||||
if(!menu.open||!menu.isConnected) return;
|
||||
const summary=menu.querySelector('summary');
|
||||
const popover=menu.querySelector('.bu-action-menu-popover');
|
||||
if(!summary||!popover||!menuPortal) return;
|
||||
@@ -1056,7 +1064,7 @@
|
||||
Object.assign(popover.style,{left:`${left}px`,right:'auto',top:`${top}px`,bottom:'auto',width:`${width}px`,maxHeight:`${height}px`});
|
||||
});
|
||||
},true);
|
||||
window.addEventListener('resize',()=>document.querySelectorAll('.bu-action-menu[open]').forEach(menu=>menu.removeAttribute('open')));
|
||||
window.addEventListener('resize',()=>document.querySelectorAll('.bu-action-menu[open]').forEach(closeActionMenu));
|
||||
content.addEventListener('change', e => {
|
||||
if(e.target.id==='bu-dashboard-job') {
|
||||
state.dashboardJobId=e.target.value;
|
||||
|
||||
Reference in New Issue
Block a user