-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
138 lines (114 loc) · 4.4 KB
/
script.js
File metadata and controls
138 lines (114 loc) · 4.4 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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
document.addEventListener('DOMContentLoaded', function() {
// DOM Elements
const taskInput = document.getElementById('taskInput');
const prioritySelect = document.getElementById('prioritySelect');
const addTaskBtn = document.getElementById('addTaskBtn');
const taskList = document.getElementById('taskList');
const taskCount = document.getElementById('taskCount');
const filterBtns = document.querySelectorAll('.filter-btn');
// Task array to store all tasks
let tasks = JSON.parse(localStorage.getItem('tasks')) || [];
let currentFilter = 'all';
// Initialize the app
init();
// Event Listeners
addTaskBtn.addEventListener('click', addTask);
taskInput.addEventListener('keypress', function(e) {
if (e.key === 'Enter') {
addTask();
}
});
filterBtns.forEach(btn => {
btn.addEventListener('click', function() {
filterBtns.forEach(b => b.classList.remove('active'));
this.classList.add('active');
currentFilter = this.dataset.filter;
renderTasks();
});
});
// Functions
function init() {
renderTasks();
updateTaskCount();
}
function addTask() {
const taskText = taskInput.value.trim();
if (taskText === '') return;
const newTask = {
id: Date.now(),
text: taskText,
priority: prioritySelect.value,
completed: false,
createdAt: new Date()
};
tasks.push(newTask);
saveTasks();
renderTasks();
updateTaskCount();
taskInput.value = '';
taskInput.focus();
}
function deleteTask(id) {
tasks = tasks.filter(task => task.id !== id);
saveTasks();
renderTasks();
updateTaskCount();
}
function toggleTaskStatus(id) {
tasks = tasks.map(task => {
if (task.id === id) {
return { ...task, completed: !task.completed };
}
return task;
});
saveTasks();
renderTasks();
updateTaskCount();
}
function renderTasks() {
// Clear the task list
taskList.innerHTML = '';
// Filter tasks based on current filter
let filteredTasks = tasks;
if (currentFilter === 'active') {
filteredTasks = tasks.filter(task => !task.completed);
} else if (currentFilter === 'completed') {
filteredTasks = tasks.filter(task => task.completed);
}
// Sort tasks by priority (high > medium > low)
filteredTasks.sort((a, b) => {
const priorityOrder = { high: 0, medium: 1, low: 2 };
return priorityOrder[a.priority] - priorityOrder[b.priority];
});
// Render each task
filteredTasks.forEach(task => {
const taskItem = document.createElement('div');
taskItem.classList.add('task-item', `${task.priority}-priority`);
if (task.completed) {
taskItem.classList.add('completed');
}
taskItem.innerHTML = `
<input type="checkbox" class="task-checkbox" ${task.completed ? 'checked' : ''}>
<span class="task-text">${task.text}</span>
<span class="task-priority">${capitalizeFirstLetter(task.priority)}</span>
<button class="task-delete"><i class="fas fa-trash"></i></button>
`;
// Add event listeners to the task item
const checkbox = taskItem.querySelector('.task-checkbox');
checkbox.addEventListener('change', () => toggleTaskStatus(task.id));
const deleteBtn = taskItem.querySelector('.task-delete');
deleteBtn.addEventListener('click', () => deleteTask(task.id));
taskList.appendChild(taskItem);
});
}
function updateTaskCount() {
const activeTasks = tasks.filter(task => !task.completed).length;
taskCount.textContent = `${activeTasks} task${activeTasks !== 1 ? 's' : ''} remaining`;
}
function saveTasks() {
localStorage.setItem('tasks', JSON.stringify(tasks));
}
function capitalizeFirstLetter(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
});