commit 73db3520231afc78cab639bfeb0fc0e9b6022422
parent d6a953f0c0466284b80289ef47aff3b714db99f0
Author: Hunter
Date:   Sat,  7 Mar 2026 18:19:45 -0500

maintain text cursor position  when toggling a task's checked state

Diffstat:
Mindex.html | 13+++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/index.html b/index.html @@ -687,6 +687,10 @@ } function toggleTaskState(task) { + // Save cursor position before re-rendering + const taskInput = document.querySelector(`.task-container[data-id="${task.id}"] input[type="text"]`) + const cursorPos = taskInput ? taskInput.selectionStart : null + if (task.state === 1) { if (task.subtasks.length === 0 || !task.subtasks.every(t => t.state === 1)) { task.state = 0; @@ -698,7 +702,7 @@ } renderCurrentView(); - selectAndFocusTask(task); + selectAndFocusTask(task, cursorPos); scheduleSave(); } else { // disallow unchecking and play a 'shake' animation @@ -714,7 +718,7 @@ } renderCurrentView(); - selectAndFocusTask(task); + selectAndFocusTask(task, cursorPos); scheduleSave(); } } @@ -1071,11 +1075,12 @@ scheduleSave(); } - function selectAndFocusTask(task) { + function selectAndFocusTask(task, cursorPos) { const taskInput = document.querySelector(`.task-container[data-id="${task.id}"] input[type="text"]`); if (taskInput) { taskInput.focus(); - taskInput.setSelectionRange(taskInput.value.length, taskInput.value.length); + const pos = cursorPos != null ? cursorPos : taskInput.value.length + taskInput.setSelectionRange(pos, pos); setActiveTask(taskInput, task); } }