Spaces:
Running
Running
add a countdown to the event
Browse files- index.html +21 -4
- style.css +4 -0
index.html
CHANGED
|
@@ -282,9 +282,23 @@ calendar.appendChild(dayElement);
|
|
| 282 |
}
|
| 283 |
updateEventsList();
|
| 284 |
}
|
| 285 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 286 |
function updateEventsList() {
|
| 287 |
-
|
| 288 |
const upcomingEvents = events
|
| 289 |
.filter(event => new Date(event.date) >= new Date())
|
| 290 |
.sort((a, b) => new Date(a.date) - new Date(b.date));
|
|
@@ -308,8 +322,11 @@ updateEventsList();
|
|
| 308 |
<span class="w-3 h-3 rounded-full mr-2 bg-${event.color}-500"></span>
|
| 309 |
${event.title}
|
| 310 |
</h4>
|
| 311 |
-
<p class="text-sm text-gray-600">${eventDate.toLocaleDateString()} ${event.time ? 'at ' + event.time : ''}</p>
|
| 312 |
-
|
|
|
|
|
|
|
|
|
|
| 313 |
</div>
|
| 314 |
<button class="text-red-500 hover:text-red-700 delete-event" data-id="${event.id}">
|
| 315 |
<i data-feather="trash-2" class="w-4 h-4"></i>
|
|
|
|
| 282 |
}
|
| 283 |
updateEventsList();
|
| 284 |
}
|
| 285 |
+
function getDaysRemaining(eventDate) {
|
| 286 |
+
const today = new Date();
|
| 287 |
+
today.setHours(0, 0, 0, 0);
|
| 288 |
+
const timeDiff = eventDate - today;
|
| 289 |
+
return Math.ceil(timeDiff / (1000 * 60 * 60 * 24));
|
| 290 |
+
}
|
| 291 |
+
|
| 292 |
+
function getDaysRemainingText(eventDate) {
|
| 293 |
+
const days = getDaysRemaining(eventDate);
|
| 294 |
+
if (days < 0) return 'Event passed';
|
| 295 |
+
if (days === 0) return 'Today!';
|
| 296 |
+
if (days === 1) return 'Tomorrow';
|
| 297 |
+
return `${days} days remaining`;
|
| 298 |
+
}
|
| 299 |
+
|
| 300 |
function updateEventsList() {
|
| 301 |
+
const eventsContainer = document.getElementById('events-container');
|
| 302 |
const upcomingEvents = events
|
| 303 |
.filter(event => new Date(event.date) >= new Date())
|
| 304 |
.sort((a, b) => new Date(a.date) - new Date(b.date));
|
|
|
|
| 322 |
<span class="w-3 h-3 rounded-full mr-2 bg-${event.color}-500"></span>
|
| 323 |
${event.title}
|
| 324 |
</h4>
|
| 325 |
+
<p class="text-sm text-gray-600">${eventDate.toLocaleDateString()} ${event.time ? 'at ' + event.time : ''}</p>
|
| 326 |
+
<p class="text-xs mt-1 ${getDaysRemaining(eventDate) <= 3 ? 'text-red-500' : 'text-indigo-500'}">
|
| 327 |
+
${getDaysRemainingText(eventDate)}
|
| 328 |
+
</p>
|
| 329 |
+
${event.description ? `<p class="text-sm text-gray-500 mt-1">${event.description}</p>` : ''}
|
| 330 |
</div>
|
| 331 |
<button class="text-red-500 hover:text-red-700 delete-event" data-id="${event.id}">
|
| 332 |
<i data-feather="trash-2" class="w-4 h-4"></i>
|
style.css
CHANGED
|
@@ -33,6 +33,10 @@ p {
|
|
| 33 |
background-color: rgba(243, 244, 246, 0.5);
|
| 34 |
}
|
| 35 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
input[type="radio"]:checked + span {
|
| 37 |
box-shadow: 0 0 0 2px white, 0 0 0 4px currentColor;
|
| 38 |
}
|
|
|
|
| 33 |
background-color: rgba(243, 244, 246, 0.5);
|
| 34 |
}
|
| 35 |
|
| 36 |
+
.text-xs {
|
| 37 |
+
font-size: 0.75rem;
|
| 38 |
+
line-height: 1rem;
|
| 39 |
+
}
|
| 40 |
input[type="radio"]:checked + span {
|
| 41 |
box-shadow: 0 0 0 2px white, 0 0 0 4px currentColor;
|
| 42 |
}
|