-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtodo.js
155 lines (121 loc) · 4.7 KB
/
todo.js
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
const menuButton = document.querySelector('.main-menu-button');
const hiddenButtons = document.querySelectorAll('.hidden-button');
const addButton = document.querySelector('#add-button');
const popup = document.querySelector('.popup-bg');
const closePopup = document.querySelector('.close-button');
const titleInput = document.querySelector('.input-title');
const descriptionInput = document.querySelector('.input-description');
const dateInput = document.querySelector('.input-date');
const timeInput = document.querySelector('.input-time');
const prioritySelect = document.querySelector('.input-priority');
const taskTemplate = document.querySelector('#task-template');
const addItemButton = document.querySelector('.add-item-button');
const taskList = document.querySelector('.task-list');
let tasks = JSON.parse(localStorage.getItem("tasks")) || [];
console.log(tasks);
tasks.forEach(task => {
task.element = addTask(task.task);
task.countdown = task.element.querySelector('.task-countdown');
taskList.appendChild(task.element);
updateCountdown(task);
});
class Task {
constructor(title, description,due_date_time,priority) {
this.title = title;
this.description = description;
this.due_date_time = due_date_time;
this.priority = priority;
}
}
addItemButton.addEventListener('click', () => {
const title = titleInput.value;
const description = descriptionInput.value;
const dueDate = dateInput.value || Intl.DateTimeFormat('en-CA', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
}).format(new Date());
const dueTime = timeInput.value || "23:59"; // use midnight if empty
const dueDateTime = new Date(`${dueDate}T${dueTime}`).getTime();
const priority = prioritySelect.value;
titleInput.value = '';
descriptionInput.value = '';
dateInput.value = '';
timeInput.value = '';
prioritySelect.value = '';
const task = new Task(title, description, dueDateTime, priority);
popup.style.display = 'none';
const taskElement = addTask(task);
const taskCountdown = taskElement.querySelector('.task-countdown');
taskList.appendChild(taskElement);
tasks.push({ task: task, element:taskElement, countdown:taskCountdown });
localStorage.setItem("tasks", JSON.stringify(tasks));
console.log(tasks);
});
function addTask(task) {
console.log("addTask");
// Now you can use the task instance
const taskElement = taskTemplate.content.cloneNode(true);
const taskTitle = taskElement.querySelector('.task-title');
const taskHeader = taskElement.querySelector('.task-header');
const taskDescription = taskElement.querySelector('.task-description');
taskTitle.textContent = task.title;
taskDescription.textContent= task.description;
taskElement.querySelector('.task').addEventListener('click', () => {
taskDescription.classList.toggle('expanded');
taskTitle.classList.toggle('expanded');
taskHeader.classList.toggle('expanded');
});
taskElement.querySelector('.task-complete-button').addEventListener('click', (event) => {
const taskElement = event.target.closest('.task'); // Get the parent task element
const taskIndex = tasks.indexOf(tasks.find(task => task.element === taskElement));
tasks.splice(taskIndex, 1); // Remove the task from the tasks array
taskElement.parentNode.removeChild(taskElement); // Remove the HTML element
localStorage.setItem("tasks", JSON.stringify(tasks));
console.log(tasks);
});
return taskElement;
}
// Update the countdowns every second
setInterval(() => {
tasks.forEach((i) => {
updateCountdown(i);
});
}, 1000);
function updateCountdown(task) {
const dueDateTime = task.task.due_date_time;
const countdownElement = task.countdown;
const now = new Date();
const diff = dueDateTime - now;
const days = Math.floor(diff / (1000 * 60 * 60 * 24));
const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
const seconds = Math.floor((diff % (1000 * 60)) / 1000);
let countdownText = "";
if (days != 0) {
countdownText += `${days}D `;
}
if (hours != 0) {
countdownText += `${hours}H `;
}
if (minutes != 0) {
countdownText += `${minutes}M `;
}
if (seconds != 0) {
countdownText += `${seconds}S`;
}
countdownElement.textContent = countdownText.trim();
// ... calculate and update the countdown text ...
}
menuButton.addEventListener('click', () => {
hiddenButtons.forEach(button => {
button.classList.toggle('hidden-button');
button.classList.toggle('visible-button');
});
});
addButton.addEventListener('click', () => {
popup.style.display = 'flex';
});
closePopup.addEventListener('click', () => {
popup.style.display = 'none';
});