50 lines
1.9 KiB
JavaScript
50 lines
1.9 KiB
JavaScript
(function () {
|
|
document.addEventListener('keydown', function (e) {
|
|
if (!e.altKey || !e.shiftKey) return;
|
|
switch (e.key) {
|
|
case 'E':
|
|
e.preventDefault();
|
|
window.location.href = window.location.pathname + '?edit';
|
|
break;
|
|
case 'N':
|
|
e.preventDefault();
|
|
if (typeof newPage === 'function') newPage();
|
|
break;
|
|
case 'M':
|
|
e.preventDefault();
|
|
if (window.location.pathname !== '/' && typeof movePage === 'function') movePage();
|
|
break;
|
|
}
|
|
});
|
|
})();
|
|
|
|
// 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');
|
|
});
|
|
});
|