-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
112 lines (93 loc) · 3.19 KB
/
Copy pathscript.js
File metadata and controls
112 lines (93 loc) · 3.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
const taskInput = document.getElementById('taskInput');
const addTaskButton = document.getElementById('addTaskButton');
const taskList = document.getElementById('taskList');
const filterAllButton = document.getElementById('filterAll');
const filterPendingButton = document.getElementById('filterPending');
const filterCompletedButton = document.getElementById('filterCompleted');
let tasks = [];
let currentFilter = 'all';
function generateUniqueId() {
return Date.now() + Math.random();
}
function renderTasks() {
taskList.innerHTML = '';
const filteredTasks = tasks.filter(task => {
if (currentFilter === 'all') return true;
if (currentFilter === 'pending') return !task.completed;
if (currentFilter === 'completed') return task.completed;
});
filteredTasks.forEach(task => {
const li = document.createElement('li');
li.dataset.id = task.id;
if (task.completed) {
li.classList.add('completed');
}
li.innerHTML = `
<span>${task.text}</span>
<div class="task-actions">
<button class="complete-btn">${task.completed ? '↩️' : '✔️'}</button>
<button class="delete-btn">🗑️</button>
</div>
`;
const completeButton = li.querySelector('.complete-btn');
const deleteButton = li.querySelector('.delete-btn');
completeButton.addEventListener('click', () => toggleTaskCompletion(task.id));
deleteButton.addEventListener('click', () => deleteTask(task.id));
taskList.appendChild(li);
});
}
function addTask() {
const taskText = taskInput.value.trim();
if (taskText === '') {
alert('Por favor, ingresa una tarea.');
return;
}
const newTask = {
id: generateUniqueId(),
text: taskText,
completed: false
};
tasks.push(newTask);
taskInput.value = '';
renderTasks();
}
function toggleTaskCompletion(id) {
tasks = tasks.map(task =>
task.id === id ? { ...task, completed: !task.completed } : task
);
renderTasks();
}
function deleteTask(id) {
tasks = tasks.filter(task => task.id !== id);
renderTasks();
}
function setFilter(filter) {
currentFilter = filter;
updateFilterButtons();
renderTasks();
}
function updateFilterButtons() {
filterAllButton.classList.remove('active');
filterPendingButton.classList.remove('active');
filterCompletedButton.classList.remove('active');
if (currentFilter === 'all') {
filterAllButton.classList.add('active');
} else if (currentFilter === 'pending') {
filterPendingButton.classList.add('active');
} else if (currentFilter === 'completed') {
filterCompletedButton.classList.add('active');
}
}
// Event Listeners
addTaskButton.addEventListener('click', addTask);
taskInput.addEventListener('keypress', (e) => {
if (e.key === 'Enter') {
addTask();
}
});
filterAllButton.addEventListener('click', () => setFilter('all'));
filterPendingButton.addEventListener('click', () => setFilter('pending'));
filterCompletedButton.addEventListener('click', () => setFilter('completed'));
// Initial render
updateFilterButtons();
renderTasks();