require keyup before backspace after deleting task

Hunter
Tuesday, July 30th, 2024 at 3:59 PM

todo.html+30-17

todo.html
 49  			const appContainer = document.getElementById('app-container');
 50  			let currentTask = { id: 'root', text: 'todo', state: 0, subtasks: [{ id: Date.now(), text: '', state: 0, subtasks: [] }], selectedSubtaskId: null };
 51  			let taskPath = [currentTask];
 52 +			let globalBackspaceBlock = false;
 53  
 54  			function createTaskElement(task, isParent = false) {
 55  				const taskContainer = document.createElement('div');

 69  				taskInput.type = 'text';
 70  				taskInput.value = task.text;
 71  
    -				let canDelete = true;
 72 +				const backspaceHandler = (function() {
 73 +					let canDelete = true;
 74  
    -				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;
 75 +					return {
 76 +						keydown: function(e) {
 77 +							if (e.key === 'Backspace') {
 78 +								if (globalBackspaceBlock) {
 79 +									e.preventDefault();
 80 +									return;
 81 +								}
 82 +								if (taskInput.value === '' && canDelete && task !== taskPath[0]) {
 83 +									e.preventDefault();
 84 +									globalBackspaceBlock = true;
 85 +									deleteTask(task);
 86 +								} else if (taskInput.value !== '') {
 87 +									canDelete = false;
 88 +								}
 89 +							} else {
 90 +								handleKeyDown(e, task);
 91 +							}
 92 +						},
 93 +						keyup: function(e) {
 94 +							if (e.key === 'Backspace') {
 95 +								canDelete = (taskInput.value === '');
 96 +								globalBackspaceBlock = false;
 97 +							}
 98  						}
    -					} else {
    -						handleKeyDown(e, task);
    -					}
    -				});
 99 +					};
100 +				})();
101  
    -				taskInput.addEventListener('keyup', (e) => {
    -					if (e.key === 'Backspace') {
    -						canDelete = (taskInput.value === '');
    -					}
    -				});
102 +				taskInput.addEventListener('keydown', backspaceHandler.keydown);
103 +				taskInput.addEventListener('keyup', backspaceHandler.keyup);
104  
105  				taskInput.addEventListener('input', () => {
106  					task.text = taskInput.value;