commit 3bd3c169abaeb7b74955a03ee3181cb2191953cf
parent d432c692e4ce57f6b43e69cada8ac35bce550ebd
Author: Hunter
Date: Tue, 30 Jul 2024 15:59:56 -0400
require keyup before backspace after deleting task
Diffstat:
| M | todo.html | | | 47 | ++++++++++++++++++++++++++++++----------------- |
1 file changed, 30 insertions(+), 17 deletions(-)
diff --git a/todo.html b/todo.html
@@ -49,6 +49,7 @@
const appContainer = document.getElementById('app-container');
let currentTask = { id: 'root', text: 'todo', state: 0, subtasks: [{ id: Date.now(), text: '', state: 0, subtasks: [] }], selectedSubtaskId: null };
let taskPath = [currentTask];
+ let globalBackspaceBlock = false;
function createTaskElement(task, isParent = false) {
const taskContainer = document.createElement('div');
@@ -68,26 +69,38 @@
taskInput.type = 'text';
taskInput.value = task.text;
- let canDelete = true;
+ const backspaceHandler = (function() {
+ let canDelete = true;
- taskInput.addEventListener('keydown', (e) => {
- if (e.key === 'Backspace') {
- if (taskInput.value === '' && canDelete && task !== taskPath[0]) {
- e.preventDefault();
- deleteTask(task);
- } else if (taskInput.value !== '') {
- canDelete = false;
+ return {
+ keydown: function(e) {
+ if (e.key === 'Backspace') {
+ if (globalBackspaceBlock) {
+ e.preventDefault();
+ return;
+ }
+ if (taskInput.value === '' && canDelete && task !== taskPath[0]) {
+ e.preventDefault();
+ globalBackspaceBlock = true;
+ deleteTask(task);
+ } else if (taskInput.value !== '') {
+ canDelete = false;
+ }
+ } else {
+ handleKeyDown(e, task);
+ }
+ },
+ keyup: function(e) {
+ if (e.key === 'Backspace') {
+ canDelete = (taskInput.value === '');
+ globalBackspaceBlock = false;
+ }
}
- } else {
- handleKeyDown(e, task);
- }
- });
+ };
+ })();
- taskInput.addEventListener('keyup', (e) => {
- if (e.key === 'Backspace') {
- canDelete = (taskInput.value === '');
- }
- });
+ taskInput.addEventListener('keydown', backspaceHandler.keydown);
+ taskInput.addEventListener('keyup', backspaceHandler.keyup);
taskInput.addEventListener('input', () => {
task.text = taskInput.value;