Refactor calendar widget changes
This commit is contained in:
@@ -17,3 +17,33 @@
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
||||
// Wire a dropdown: clicking the trigger toggles its sibling .dropdown-menu;
|
||||
// clicking outside or pressing Escape closes all wired menus. Safe to call
|
||||
// multiple times on the same trigger (no-op on re-registration).
|
||||
function wireDropdown(trigger) {
|
||||
if (!trigger || trigger.dataset.wired) return;
|
||||
var menu = trigger.parentElement && trigger.parentElement.querySelector('.dropdown-menu');
|
||||
if (!menu) return;
|
||||
trigger.dataset.wired = '1';
|
||||
trigger.addEventListener('click', function (e) {
|
||||
e.stopPropagation();
|
||||
document.querySelectorAll('.dropdown-menu.is-open').forEach(function (m) {
|
||||
if (m !== menu) m.classList.remove('is-open');
|
||||
});
|
||||
menu.classList.toggle('is-open');
|
||||
});
|
||||
menu.addEventListener('click', function () { menu.classList.remove('is-open'); });
|
||||
}
|
||||
|
||||
document.addEventListener('click', function (e) {
|
||||
document.querySelectorAll('.dropdown-menu.is-open').forEach(function (menu) {
|
||||
if (!menu.parentElement.contains(e.target)) menu.classList.remove('is-open');
|
||||
});
|
||||
});
|
||||
document.addEventListener('keydown', function (e) {
|
||||
if (e.key !== 'Escape') return;
|
||||
document.querySelectorAll('.dropdown-menu.is-open').forEach(function (menu) {
|
||||
menu.classList.remove('is-open');
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user