diff --git a/index.html b/index.html index 3c9dcacf..142316d9 100644 --- a/index.html +++ b/index.html @@ -7853,7 +7853,7 @@ - + diff --git a/modules/ui/hotkeys.js b/modules/ui/hotkeys.js index 9c9a4a7f..6cba97a0 100644 --- a/modules/ui/hotkeys.js +++ b/modules/ui/hotkeys.js @@ -4,6 +4,8 @@ document.addEventListener("keydown", handleKeydown); document.addEventListener("keyup", handleKeyup); function handleKeydown(event) { + if (!allowHotkeys()) return; // in some cases (e.g. in a textarea) hotkeys are not allowed + const {code, ctrlKey, altKey} = event; if (altKey && !ctrlKey) event.preventDefault(); // disallow alt key combinations if (ctrlKey && ["KeyS", "KeyC"].includes(code)) event.preventDefault(); // disallow CTRL + S and CTRL + C @@ -12,11 +14,8 @@ function handleKeydown(event) { function handleKeyup(event) { if (!modules.editors) return; // if editors are not loaded, do nothing + if (!allowHotkeys()) return; // in some cases (e.g. in a textarea) hotkeys are not allowed - const {tagName, contentEditable} = document.activeElement; - if (["INPUT", "SELECT", "TEXTAREA"].includes(tagName)) return; // don't trigger if user inputs text - if (tagName === "DIV" && contentEditable === "true") return; // don't trigger if user inputs a text - if (document.getSelection().toString()) return; // don't trigger if user selects text event.stopPropagation(); const {code, key, ctrlKey, metaKey, shiftKey, altKey} = event; @@ -109,17 +108,30 @@ function handleKeyup(event) { else if (ctrl) toggleMode(); } +function allowHotkeys() { + const {tagName, contentEditable} = document.activeElement; + if (["INPUT", "SELECT", "TEXTAREA"].includes(tagName)) return false; + if (tagName === "DIV" && contentEditable === "true") return false; + if (document.getSelection().toString()) return false; + return true; +} + function pressNumpadSign(key) { const change = key === "+" ? 1 : -1; let brush = null; if (document.getElementById("brushRadius")?.offsetParent) brush = document.getElementById("brushRadius"); - else if (document.getElementById("biomesManuallyBrush")?.offsetParent) brush = document.getElementById("biomesManuallyBrush"); - else if (document.getElementById("statesManuallyBrush")?.offsetParent) brush = document.getElementById("statesManuallyBrush"); - else if (document.getElementById("provincesManuallyBrush")?.offsetParent) brush = document.getElementById("provincesManuallyBrush"); - else if (document.getElementById("culturesManuallyBrush")?.offsetParent) brush = document.getElementById("culturesManuallyBrush"); + else if (document.getElementById("biomesManuallyBrush")?.offsetParent) + brush = document.getElementById("biomesManuallyBrush"); + else if (document.getElementById("statesManuallyBrush")?.offsetParent) + brush = document.getElementById("statesManuallyBrush"); + else if (document.getElementById("provincesManuallyBrush")?.offsetParent) + brush = document.getElementById("provincesManuallyBrush"); + else if (document.getElementById("culturesManuallyBrush")?.offsetParent) + brush = document.getElementById("culturesManuallyBrush"); else if (document.getElementById("zonesBrush")?.offsetParent) brush = document.getElementById("zonesBrush"); - else if (document.getElementById("religionsManuallyBrush")?.offsetParent) brush = document.getElementById("religionsManuallyBrush"); + else if (document.getElementById("religionsManuallyBrush")?.offsetParent) + brush = document.getElementById("religionsManuallyBrush"); if (brush) { const value = minmax(+brush.value + change, +brush.min, +brush.max); @@ -133,18 +145,26 @@ function pressNumpadSign(key) { function toggleMode() { if (zonesRemove?.offsetParent) { - zonesRemove.classList.contains("pressed") ? zonesRemove.classList.remove("pressed") : zonesRemove.classList.add("pressed"); + zonesRemove.classList.contains("pressed") + ? zonesRemove.classList.remove("pressed") + : zonesRemove.classList.add("pressed"); } } function removeElementOnKey() { - const fastDelete = Array.from(document.querySelectorAll("[role='dialog'] .fastDelete")).find(dialog => dialog.style.display !== "none"); + const fastDelete = Array.from(document.querySelectorAll("[role='dialog'] .fastDelete")).find( + dialog => dialog.style.display !== "none" + ); if (fastDelete) fastDelete.click(); - const visibleDialogs = Array.from(document.querySelectorAll("[role='dialog']")).filter(dialog => dialog.style.display !== "none"); + const visibleDialogs = Array.from(document.querySelectorAll("[role='dialog']")).filter( + dialog => dialog.style.display !== "none" + ); if (!visibleDialogs.length) return; - visibleDialogs.forEach(dialog => dialog.querySelectorAll("button").forEach(button => button.textContent === "Remove" && button.click())); + visibleDialogs.forEach(dialog => + dialog.querySelectorAll("button").forEach(button => button.textContent === "Remove" && button.click()) + ); } function closeAllDialogs() {