From a5284f679e7dc0b86f55ecca24a2d7a5d0bfbf11 Mon Sep 17 00:00:00 2001 From: Nose Date: Sat, 11 Jul 2026 13:35:38 -0700 Subject: [PATCH] update --- app/ui-alphabet-gematria.js | 57 ++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 20 deletions(-) diff --git a/app/ui-alphabet-gematria.js b/app/ui-alphabet-gematria.js index b2c39f9..21b7e3e 100644 --- a/app/ui-alphabet-gematria.js +++ b/app/ui-alphabet-gematria.js @@ -116,18 +116,21 @@ ].filter((layout) => layout.chars.length > 0); } - function setGematriaInputValue(nextValue) { + function setGematriaInputValue(nextValue, options = {}) { const { inputEl } = getElements(); if (!(inputEl instanceof HTMLTextAreaElement)) { return; } + const shouldFocus = options?.focus !== false; inputEl.value = String(nextValue || ""); inputEl.dispatchEvent(new Event("input", { bubbles: true })); - inputEl.focus({ preventScroll: true }); + if (shouldFocus) { + inputEl.focus({ preventScroll: true }); + } } - function insertGematriaText(insertValue) { + function insertGematriaText(insertValue, options = {}) { const { inputEl } = getElements(); if (!(inputEl instanceof HTMLTextAreaElement)) { return; @@ -138,23 +141,29 @@ return; } - const start = Number.isFinite(inputEl.selectionStart) ? inputEl.selectionStart : inputEl.value.length; - const end = Number.isFinite(inputEl.selectionEnd) ? inputEl.selectionEnd : start; + const isInputFocused = document.activeElement === inputEl; + const useSelection = options?.preserveSelection !== false && isInputFocused; + const start = useSelection && Number.isFinite(inputEl.selectionStart) ? inputEl.selectionStart : inputEl.value.length; + const end = useSelection && Number.isFinite(inputEl.selectionEnd) ? inputEl.selectionEnd : start; const nextValue = `${inputEl.value.slice(0, start)}${text}${inputEl.value.slice(end)}`; - setGematriaInputValue(nextValue); + setGematriaInputValue(nextValue, { focus: options?.focus }); const nextCaret = start + text.length; - inputEl.setSelectionRange(nextCaret, nextCaret); + if (useSelection) { + inputEl.setSelectionRange(nextCaret, nextCaret); + } } - function backspaceGematriaText() { + function backspaceGematriaText(options = {}) { const { inputEl } = getElements(); if (!(inputEl instanceof HTMLTextAreaElement)) { return; } - const start = Number.isFinite(inputEl.selectionStart) ? inputEl.selectionStart : inputEl.value.length; - const end = Number.isFinite(inputEl.selectionEnd) ? inputEl.selectionEnd : start; + const isInputFocused = document.activeElement === inputEl; + const useSelection = options?.preserveSelection !== false && isInputFocused; + const start = useSelection && Number.isFinite(inputEl.selectionStart) ? inputEl.selectionStart : inputEl.value.length; + const end = useSelection && Number.isFinite(inputEl.selectionEnd) ? inputEl.selectionEnd : start; if (start === 0 && end === 0) { return; } @@ -166,8 +175,10 @@ } const nextValue = `${inputEl.value.slice(0, nextStart)}${inputEl.value.slice(nextEnd)}`; - setGematriaInputValue(nextValue); - inputEl.setSelectionRange(nextStart, nextStart); + setGematriaInputValue(nextValue, { focus: options?.focus }); + if (useSelection) { + inputEl.setSelectionRange(nextStart, nextStart); + } } function renderKeyboardLayout() { @@ -209,34 +220,34 @@ keyboardGridEl.setAttribute("lang", state.keyboardScriptId); } - function handleKeyboardAction(action) { + function handleKeyboardAction(action, options = {}) { const normalizedAction = String(action || "").trim().toLowerCase(); if (!normalizedAction) { return; } if (normalizedAction === "backspace") { - backspaceGematriaText(); + backspaceGematriaText(options); return; } if (normalizedAction === "space") { - insertGematriaText(" "); + insertGematriaText(" ", options); return; } if (normalizedAction === "star") { - insertGematriaText("*"); + insertGematriaText("*", options); return; } if (normalizedAction === "question") { - insertGematriaText("?"); + insertGematriaText("?", options); return; } if (normalizedAction === "clear") { - setGematriaInputValue(""); + setGematriaInputValue("", { focus: options?.focus }); } } @@ -1345,7 +1356,10 @@ return; } - insertGematriaText(String(keyButton.dataset.keyboardInsert || "")); + insertGematriaText(String(keyButton.dataset.keyboardInsert || ""), { + focus: false, + preserveSelection: false + }); }); keyboardActionsEl?.addEventListener("click", (event) => { @@ -1359,7 +1373,10 @@ return; } - handleKeyboardAction(actionButton.dataset.keyboardAction); + handleKeyboardAction(actionButton.dataset.keyboardAction, { + focus: false, + preserveSelection: false + }); }); state.listenersBound = true;