| document.addEventListener('DOMContentLoaded', function() { |
| const todoInput = document.getElementById('todoInput'); |
| const addBtn = document.getElementById('addBtn'); |
| const todoList = document.getElementById('todoList'); |
| |
| |
| let todos = JSON.parse(localStorage.getItem('todos')) || []; |
| |
| |
| renderTodos(); |
| |
| |
| addBtn.addEventListener('click', addTodo); |
| todoInput.addEventListener('keypress', function(e) { |
| if (e.key === 'Enter') { |
| addTodo(); |
| } |
| }); |
| |
| function addTodo() { |
| const todoText = todoInput.value.trim(); |
| |
| if (todoText === '') { |
| alert('Please enter a task!'); |
| return; |
| } |
| |
| const newTodo = { |
| id: Date.now(), |
| text: todoText, |
| completed: false |
| }; |
| |
| todos.push(newTodo); |
| saveTodos(); |
| renderTodos(); |
| |
| |
| todoInput.value = ''; |
| todoInput.focus(); |
| } |
| |
| function deleteTodo(id) { |
| todos = todos.filter(todo => todo.id !== id); |
| saveTodos(); |
| renderTodos(); |
| } |
| |
| function toggleComplete(id) { |
| todos = todos.map(todo => { |
| if (todo.id === id) { |
| return { ...todo, completed: !todo.completed }; |
| } |
| return todo; |
| }); |
| saveTodos(); |
| renderTodos(); |
| } |
| |
| function renderTodos() { |
| todoList.innerHTML = ''; |
| |
| if (todos.length === 0) { |
| const emptyMessage = document.createElement('li'); |
| emptyMessage.className = 'empty-message'; |
| emptyMessage.textContent = 'No tasks yet. Add one above!'; |
| todoList.appendChild(emptyMessage); |
| return; |
| } |
| |
| todos.forEach(todo => { |
| const todoItem = document.createElement('li'); |
| todoItem.className = `todo-item ${todo.completed ? 'completed' : ''}`; |
| |
| const todoText = document.createElement('span'); |
| todoText.className = 'todo-text'; |
| todoText.textContent = todo.text; |
| |
| const completeBtn = document.createElement('button'); |
| completeBtn.className = 'complete-btn'; |
| completeBtn.textContent = todo.completed ? 'Undo' : 'Complete'; |
| completeBtn.addEventListener('click', () => toggleComplete(todo.id)); |
| |
| const deleteBtn = document.createElement('button'); |
| deleteBtn.className = 'delete-btn'; |
| deleteBtn.textContent = 'Delete'; |
| deleteBtn.addEventListener('click', () => deleteTodo(todo.id)); |
| |
| todoItem.appendChild(completeBtn); |
| todoItem.appendChild(todoText); |
| todoItem.appendChild(deleteBtn); |
| |
| todoList.appendChild(todoItem); |
| }); |
| } |
| |
| function saveTodos() { |
| localStorage.setItem('todos', JSON.stringify(todos)); |
| } |
| }); |