diff --git a/app.js b/app.js index b249413..00b50e6 100644 --- a/app.js +++ b/app.js @@ -35,6 +35,8 @@ form.addEventListener("submit", saveRoute); cancelEditButton.addEventListener("click", resetForm); clearAllButton?.addEventListener("click", removeAllRoutes); routesList.addEventListener("click", handleRouteAction); +document.addEventListener("click", closeMenusOnOutsideClick); +document.addEventListener("keydown", closeMenusOnEscape); if (sessionStorage.getItem(AUTH_SESSION_KEY) === "yes") { unlockApp(); @@ -168,6 +170,24 @@ function renderRoutes() { } } +function closeMenusOnOutsideClick(event) { + if (event.target.closest(".route-menu")) { + return; + } + + closeRouteMenus(); +} + +function closeMenusOnEscape(event) { + if (event.key === "Escape") { + closeRouteMenus(); + } +} + +function closeRouteMenus() { + document.querySelectorAll(".route-menu[open]").forEach((menu) => menu.removeAttribute("open")); +} + function handleRouteAction(event) { const button = event.target.closest("button"); if (!button) {