Field Research Plan Generator

Field Research Plan Generator

Research Location(s): ${planData.locations || "None specified."}

Research Team:

    ${listToHtml(planData.team)}

6. Project Timeline

${textToHtml(planData.timeline)} `; } // --- Event Handlers --- function handleNext() { if (currentTab < 2) { // 2 is the last config tab (index 2) currentTab++; showTab(currentTab); } } function handlePrev() { if (currentTab > 0) { currentTab--; showTab(currentTab); } } function handleGenerate() { saveAllData(); renderPlan(); ui.planTabBtn.disabled = false; // Enable the plan tab currentTab = 3; showTab(currentTab); } function handleTabClick(e) { const clickedTab = e.target.closest('.frpg-tab-link'); if (!clickedTab || clickedTab.disabled) return; const tabIndex = parseInt(clickedTab.dataset.tab); if (tabIndex !== currentTab) { showTab(tabIndex); } } async function handleDownloadPDF() { ui.pdfDownloadBtn.textContent = "Generating..."; ui.pdfDownloadBtn.disabled = true; try { const { jsPDF } = window.jspdf; container.classList.add("frpg-pdf-export-mode"); const canvas = await html2canvas(ui.generatedPlan, { scale: 2 }); container.classList.remove("frpg-pdf-export-mode"); const imgData = canvas.toDataURL("image/png"); const pdf = new jsPDF({ orientation: "p", unit: "mm", format: "a4" }); const pdfWidth = pdf.internal.pageSize.getWidth(); const margin = 15; const contentWidth = pdfWidth - margin * 2; const imgHeight = (canvas.height * contentWidth) / canvas.width; pdf.addImage(imgData, "PNG", margin, margin, contentWidth, imgHeight); pdf.save(`${(planData.title || "Field_Research_Plan").replace(/ /g, "_")}.pdf`); } catch (error) { console.error("PDF Generation Error:", error); alert("An error occurred while creating the PDF."); } finally { ui.pdfDownloadBtn.textContent = "Download Plan (PDF)"; ui.pdfDownloadBtn.disabled = false; } } // --- Initial Setup & Event Listeners --- ui.prevBtn.addEventListener('click', handlePrev); ui.nextBtn.addEventListener('click', handleNext); ui.generateBtn.addEventListener('click', handleGenerate); ui.loadSampleBtn.addEventListener('click', loadSampleData); ui.editPlanBtn.addEventListener('click', () => showTab(0)); ui.pdfDownloadBtn.addEventListener('click', handleDownloadPDF); container.querySelector('.frpg-tabs').addEventListener('click', handleTabClick); // Initial setup showTab(0); });
Scroll to Top