Description
${update.description}
`;
}
async function generatePdf() {
const startDate = new Date(document.getElementById('startDate').value);
const endDate = new Date(document.getElementById('endDate').value);
const filteredData = updateData.filter(u => new Date(u.date) >= startDate && new Date(u.date) <= endDate);
document.getElementById('pdf-date-range').textContent = `${startDate.toLocaleDateString()} to ${endDate.toLocaleDateString()}`;
document.getElementById('pdf-kpis').innerHTML = document.getElementById('kpi-cards').innerHTML;
let detailsHtml = filteredData.map(u => `
${u.name} (${u.date})
Type: ${u.type} | Volatility: ${u.volatility}
${u.description}
`).join('');
document.getElementById('pdf-details-container').innerHTML = detailsHtml;
const reportEl = document.getElementById('pdf-report');
reportEl.classList.remove('hidden');
const canvas = await html2canvas(reportEl, { scale: 2 });
reportEl.classList.add('hidden');
const imgData = canvas.toDataURL('image/png');
const { jsPDF } = window.jspdf;
const pdf = new jsPDF({ orientation: 'p', unit: 'in', format: 'letter' });
const pdfWidth = pdf.internal.pageSize.getWidth();
const pdfHeight = (canvas.height * pdfWidth) / canvas.width;
pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight);
pdf.save('Algorithm-Update-Report.pdf');
}
function initialize() {
const today = new Date('2025-09-30');
const ninetyDaysAgo = new Date(new Date().setDate(today.getDate() - 90));
document.getElementById('endDate').value = today.toISOString().split('T')[0];
document.getElementById('startDate').value = ninetyDaysAgo.toISOString().split('T')[0];
document.getElementById('startDate').addEventListener('change', updateDashboard);
document.getElementById('endDate').addEventListener('change', updateDashboard);
document.getElementById('timeline-container').addEventListener('click', e => {
const item = e.target.closest('.timeline-item');
if(item) {
selectedUpdateId = parseInt(item.dataset.id);
document.querySelectorAll('.timeline-item').forEach(el => el.classList.remove('active'));
item.classList.add('active');
renderDetails(selectedUpdateId);
}
});
document.getElementById('downloadPdfBtn').addEventListener('click', generatePdf);
updateDashboard();
}
initialize();
});