Evergreen Content Creator

Evergreen Content Creator

Generate timeless ideas and outlines for your blog.

${data.callToAction}

`; }; const handleDownloadPdf = () => { const { jsPDF } = window.jspdf; if (!jsPDF) { console.error("jsPDF is not loaded."); return; } const data = getFormData(); const doc = new jsPDF({ orientation: 'portrait', unit: 'in', format: 'letter' }); const margin = 0.75; const pageWidth = doc.internal.pageSize.getWidth(); const usableWidth = pageWidth - (margin * 2); let currentY = 0; // --- PDF Header --- doc.setFillColor('#ecfdf5'); // emerald-50 doc.rect(0, 0, pageWidth, 1.2, 'F'); doc.setFont('helvetica', 'bold'); doc.setFontSize(18); doc.setTextColor('#065f46'); // emerald-800 doc.text('Evergreen Content Plan', margin, 0.6); doc.setFontSize(10); doc.setTextColor('#047857'); // emerald-700 doc.text(new Date().toLocaleDateString('en-US'), pageWidth - margin, 0.6, { align: 'right' }); doc.setFont('helvetica', 'normal'); doc.text(data.contentFormat, margin, 0.9); currentY = 1.5; // --- Function to add a data row --- const addDataRow = (label, value) => { doc.setFont('helvetica', 'bold'); doc.setFontSize(10); doc.setTextColor('#374151'); // gray-700 doc.text(`${label}:`, margin, currentY); doc.setFont('helvetica', 'normal'); const valueLines = doc.splitTextToSize(value, usableWidth - 1.2); doc.text(valueLines, margin + 1.2, currentY); currentY += (valueLines.length * 0.18) + 0.15; }; addDataRow('Core Topic', data.coreTopic); addDataRow('Target Audience', data.targetAudience); addDataRow('Call to Action', data.callToAction); currentY += 0.2; doc.setLineWidth(0.01); doc.setDrawColor('#a1a1aa'); // zinc-400 doc.line(margin, currentY, pageWidth - margin, currentY); currentY += 0.3; // --- Generated Title --- doc.setFont('helvetica', 'bold'); doc.setFontSize(14); doc.setTextColor('#1f2937'); // gray-800 const titleLines = doc.splitTextToSize(generatedContent.title, usableWidth); doc.text(titleLines, margin, currentY); currentY += (titleLines.length * 0.22) + 0.2; // --- Generated Outline --- // This is a simplified parser for the HTML to make it PDF-friendly const tempDiv = document.createElement('div'); tempDiv.innerHTML = generatedContent.outline; doc.setFont('times', 'normal'); doc.setFontSize(11); doc.setTextColor('#374151'); // gray-700 Array.from(tempDiv.children).forEach(el => { if (currentY > 10) { doc.addPage(); currentY = margin; } let text = el.innerText || el.textContent || ''; if (el.tagName === 'H3') { currentY += 0.1; doc.setFont('helvetica', 'bold'); doc.text(text, margin, currentY); doc.setFont('times', 'normal'); currentY += 0.25; } else if (el.tagName === 'P') { const pLines = doc.splitTextToSize(text, usableWidth); doc.text(pLines, margin, currentY); currentY += (pLines.length * 0.18) + 0.1; } else if (el.tagName === 'UL') { Array.from(el.children).forEach(li => { if (currentY > 10.2) { doc.addPage(); currentY = margin; } const liText = `• ${li.innerText || li.textContent || ''}`; const liLines = doc.splitTextToSize(liText, usableWidth - 0.2); doc.text(liLines, margin + 0.2, currentY); currentY += (liLines.length * 0.18) + 0.05; }); currentY += 0.1; } }); doc.save('Evergreen-Content-Plan.pdf'); }; // --- Event Listeners --- elements.tabIdeation.addEventListener('click', () => switchTab('ideation')); elements.tabOutline.addEventListener('click', () => switchTab('outline')); elements.nextBtn.addEventListener('click', () => currentTab === 'ideation' && switchTab('outline')); elements.prevBtn.addEventListener('click', () => currentTab === 'outline' && switchTab('ideation')); elements.downloadPdfBtn.addEventListener('click', handleDownloadPdf); });
Scroll to Top