Online Deadline Countdown Timer

Deadline Countdown Timer

Keep track of all your upcoming deadlines in one place.

Add a New Deadline

00

Minutes

00

Seconds

`; countdownGrid.appendChild(card); startCountdown(deadline); }); }; // --- EVENT LISTENERS --- addDeadlineBtn.addEventListener('click', () => { const title = deadlineTitleInput.value.trim(); const datetime = deadlineDatetimeInput.value; if (!title || !datetime) { showMessage('Please provide both a title and a date/time.'); return; } if (new Date(datetime) < new Date()) { showMessage('The deadline cannot be in the past.'); return; } const newDeadline = { id: Date.now(), title, datetime }; appData.deadlines.push(newDeadline); saveData(); renderAllDeadlines(); deadlineTitleInput.value = ''; deadlineDatetimeInput.value = ''; showMessage('Deadline added successfully!', false); }); countdownGrid.addEventListener('click', (e) => { if (e.target.classList.contains('delete-deadline-btn')) { const deadlineId = parseInt(e.target.dataset.deadlineId, 10); if (confirm('Are you sure you want to delete this deadline?')) { appData.deadlines = appData.deadlines.filter(d => d.id !== deadlineId); saveData(); renderAllDeadlines(); } } }); // --- PDF DOWNLOAD --- downloadPdfBtn.addEventListener('click', () => { if (appData.deadlines.length === 0) { showMessage('There are no deadlines to export.'); return; } showMessage('Preparing PDF...', false); const { jsPDF } = window.jspdf; const element = document.getElementById('pdf-export-area'); html2canvas(element, { scale: 2, useCORS: true }).then(canvas => { const imgData = canvas.toDataURL('image/png'); const pdf = new jsPDF({ orientation: 'portrait', unit: 'in', format: 'letter' }); const pdfWidth = pdf.internal.pageSize.getWidth() - 1; const pdfHeight = (canvas.height * pdfWidth) / canvas.width; pdf.text('Active Deadlines', 0.5, 0.5); pdf.addImage(imgData, 'PNG', 0.5, 0.8, pdfWidth, pdfHeight); pdf.save('Deadline_Countdown_Summary.pdf'); showMessage('PDF downloaded successfully!', false); }).catch(err => { console.error("PDF Generation Error:", err); showMessage("An error occurred during PDF generation."); }); }); // --- INITIALIZATION --- const initializeApp = () => { loadData(); renderAllDeadlines(); }; initializeApp(); });
Scroll to Top