From f76e45d71fe25dfc6d220fddcbd8ab1e7fb2509c Mon Sep 17 00:00:00 2001 From: PawiX25 Date: Thu, 19 Dec 2024 22:44:53 +0100 Subject: [PATCH] Refactor program loading to separate completed events and update deadline handling --- script.js | 48 +++++++++++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/script.js b/script.js index 425bb52..20e7bf8 100644 --- a/script.js +++ b/script.js @@ -12,15 +12,28 @@ async function loadPrograms() { const response = await fetch('data.yml').then(res => res.text()); const rawPrograms = jsyaml.load(response); + const completed = []; programs = Object.fromEntries( Object.entries(rawPrograms).map(([category, programsList]) => [ category, - programsList.map(program => ({ - ...program, - status: isEventEnded(program.deadline) ? 'completed' : program.status - })) + programsList.filter(program => { + if (program.status === 'completed' || isEventEnded(program.deadline)) { + completed.push({ ...program, status: 'completed' }); + return false; + } + return true; + }) ]) ); + + delete programs['Completed']; + if (completed.length > 0) { + programs['Completed'] = completed; + } + + programs = Object.fromEntries( + Object.entries(programs).filter(([_, programsList]) => programsList.length > 0) + ); renderPrograms(); } catch (error) { @@ -383,28 +396,29 @@ function initializeTheme() { function updateDeadlines() { const deadlineElements = document.querySelectorAll('.program-deadline'); + let needsReload = false; + deadlineElements.forEach(element => { const card = element.closest('.program-card'); - const programName = card.querySelector('h3').textContent; - const program = Object.values(programs) - .flat() - .find(p => p.name === programName); - - if (program?.deadline) { - if (isEventEnded(program.deadline) && program.status !== 'completed') { - program.status = 'completed'; - const statusElement = card.querySelector('.program-status'); - statusElement.className = 'program-status status-completed'; - statusElement.textContent = 'completed'; + const programData = JSON.parse(decodeURIComponent(card.dataset.program)); + + if (programData?.deadline) { + if (isEventEnded(programData.deadline) && programData.status !== 'completed') { + needsReload = true; + return; } - const deadlineText = formatDeadline(program.deadline, program.opens); - const deadlineClass = getDeadlineClass(program.deadline); + const deadlineText = formatDeadline(programData.deadline, programData.opens); + const deadlineClass = getDeadlineClass(programData.deadline); element.textContent = deadlineText; element.className = `program-deadline ${deadlineClass}`; } }); + + if (needsReload) { + window.location.reload(); + } } document.addEventListener('DOMContentLoaded', () => {