fix #477: make nav menus persistent toggles

This commit is contained in:
devmrko
2026-06-26 07:42:57 +09:00
parent ef47893324
commit 453dac6e5d
3 changed files with 51 additions and 8 deletions

View File

@@ -59,6 +59,48 @@ function syncPolicyTemplate(select) {
});
}
function closeMenuGroup(group) {
if (!group) {
return;
}
group.classList.remove('open');
group.querySelector('.rw-menu-trigger')?.setAttribute('aria-expanded', 'false');
}
function closeAllMenuGroups(exceptGroup = null) {
document.querySelectorAll('.rw-menu-group.open').forEach((group) => {
if (group !== exceptGroup) {
closeMenuGroup(group);
}
});
}
function initPersistentMenus() {
document.querySelectorAll('.rw-menu-trigger').forEach((button) => {
button.addEventListener('click', (event) => {
event.stopPropagation();
const group = button.closest('.rw-menu-group');
if (!group) {
return;
}
const nextOpen = !group.classList.contains('open');
closeAllMenuGroups(group);
group.classList.toggle('open', nextOpen);
button.setAttribute('aria-expanded', String(nextOpen));
});
});
document.addEventListener('click', (event) => {
if (!event.target.closest('.rw-menu')) {
closeAllMenuGroups();
}
});
document.addEventListener('keydown', (event) => {
if (event.key === 'Escape') {
closeAllMenuGroups();
}
});
}
function escapeHtml(value) {
return value
.replaceAll('&', '&')
@@ -428,6 +470,7 @@ function initPermissionWizard() {
}
document.addEventListener('DOMContentLoaded', () => {
initPersistentMenus();
renderMarkdownViews();
const master = document.getElementById('userRoleMaster');
if (master) {