| document.addEventListener('DOMContentLoaded', function() { |
| fetch('/api/events') |
| .then(response => response.json()) |
| .then(events => { |
| const eventsGrid = document.getElementById('events-grid'); |
| events.forEach(event => { |
| const eventCard = document.createElement('div'); |
| eventCard.className = 'event-card'; |
|
|
| const timeRemaining = calculateTimeRemaining(event.submission_deadline); |
|
|
| eventCard.innerHTML = ` |
| <h2>${event.name}</h2> |
| <p><strong>Dates:</strong> ${event.dates}</p> |
| <p><strong>Location:</strong> ${event.location}</p> |
| <p><strong>Abstract Deadline:</strong> ${event.abstract_deadline}</p> |
| <p><strong>Submission Deadline:</strong> ${event.submission_deadline}</p> |
| <p class="time-remaining">${timeRemaining}</p> |
| <div class="tags"> |
| ${event.tags.map(tag => `<span class="tag">${tag}</span>`).join('')} |
| </div> |
| `; |
| eventCard.addEventListener('click', () => openModal(event, timeRemaining)); |
| eventsGrid.appendChild(eventCard); |
| }); |
| }); |
|
|
| const modal = document.getElementById('event-modal'); |
| const closeButton = document.querySelector('.close-button'); |
|
|
| closeButton.addEventListener('click', () => { |
| modal.style.display = 'none'; |
| }); |
|
|
| window.addEventListener('click', (event) => { |
| if (event.target == modal) { |
| modal.style.display = 'none'; |
| } |
| }); |
| }); |
|
|
| function calculateTimeRemaining(deadline) { |
| const deadlineDate = new Date(deadline); |
| const now = new Date(); |
| const timeDiff = deadlineDate - now; |
|
|
| if (timeDiff <= 0) { |
| return 'Deadline passed'; |
| } |
|
|
| const hours = Math.floor(timeDiff / (1000 * 60 * 60)); |
| const minutes = Math.floor((timeDiff % (1000 * 60 * 60)) / (1000 * 60)); |
| const seconds = Math.floor((timeDiff % (1000 * 60)) / 1000); |
|
|
| return `in about ${hours} hours, ${minutes} minutes, and ${seconds} seconds`; |
| } |
|
|
| function openModal(event, timeRemaining) { |
| document.getElementById('modal-event-name').innerText = event.name; |
| document.getElementById('modal-event-full-name').innerText = event.full_name; |
| document.getElementById('modal-event-dates').innerText = event.dates; |
| document.getElementById('modal-event-location').innerText = event.location; |
| document.getElementById('modal-event-abstract-deadline').innerText = event.abstract_deadline; |
| document.getElementById('modal-event-submission-deadline').innerText = event.submission_deadline; |
| document.getElementById('modal-event-time-remaining').innerText = timeRemaining; |
| document.getElementById('modal-event-tags').innerHTML = event.tags.map(tag => `<span class="tag">${tag}</span>`).join(''); |
| document.getElementById('modal-event-link').href = event.link; |
|
|
| const modal = document.getElementById('event-modal'); |
| modal.style.display = 'block'; |
| } |
|
|