Fasting Duration Trend
${chartImageHtml}
Detailed Log
${logHistoryContainer.innerHTML}
`;
document.body.appendChild(pdfWrapper);
try {
const canvas = await html2canvas(pdfWrapper, { scale: 2, useCORS: true, logging: false });
const imgData = canvas.toDataURL('image/png');
const pdf = new jsPDF({ orientation: 'portrait', unit: 'px', format: 'a4' });
const pdfWidth = pdf.internal.pageSize.getWidth();
const pdfHeight = pdf.internal.pageSize.getHeight();
const imgWidth = canvas.width;
const imgHeight = canvas.height;
const ratio = imgWidth / imgHeight;
let finalImgWidth = pdfWidth;
let finalImgHeight = pdfWidth / ratio;
if (finalImgHeight > pdfHeight) {
finalImgHeight = pdfHeight;
finalImgWidth = pdfHeight * ratio;
}
pdf.addImage(imgData, 'PNG', 0, 0, finalImgWidth, finalImgHeight);
pdf.save('Fasting-Report.pdf');
} catch (error) {
console.error("PDF Generation Error:", error);
} finally {
document.body.removeChild(pdfWrapper);
downloadPdfBtn.textContent = 'Download PDF Report';
downloadPdfBtn.disabled = false;
}
}
// --- Event Listeners ---
startStopBtn.addEventListener('click', () => {
state.isRunning ? stopTimer() : startTimer();
});
resetBtn.addEventListener('click', resetTimer);
logFastBtn.addEventListener('click', logFast);
downloadPdfBtn.addEventListener('click', generatePDF);
// --- Initial Call ---
loadData();
showTab(0);
});
