Hashtag Performance Dashboard

Add Hashtag Data

Manage Data

Hashtag Platform Posts Reach Engagement Rate Action

Date: ${new Date().toLocaleDateString('en-US')}

${hashtagData.map(item => ` `).join('')}
Hashtag Platform Posts Reach Likes Comments Shares Engagement Rate
${item.name} ${item.platform} ${formatNumber(item.posts)} ${formatNumber(item.reach)} ${formatNumber(item.likes)} ${formatNumber(item.comments)} ${formatNumber(item.shares)} ${calculateEngagementRate(item)}%
`; pdfOutput.innerHTML = tableHTML; pdfOutput.style.display = 'block'; // Make it visible for capture try { const canvas = await html2canvas(pdfOutput, { scale: 2 }); const imgData = canvas.toDataURL('image/png'); const pdf = new jsPDF({ orientation: 'landscape', unit: 'pt', format: [canvas.width, canvas.height] }); pdf.addImage(imgData, 'PNG', 0, 0, canvas.width, canvas.height); pdf.save('hashtag-performance-summary.pdf'); } catch (error) { console.error("Error generating PDF:", error); alert("An error occurred while creating the PDF."); } finally { pdfOutput.style.display = 'none'; pdfOutput.innerHTML = ''; } }; // --- TAB NAVIGATION LOGIC --- // window.hpt_changeTab = (event, tabName) => { tabContents.forEach(content => content.classList.remove('active')); tabs.forEach(tab => tab.classList.remove('active')); const activeTabContent = document.getElementById(tabName); if(activeTabContent) activeTabContent.classList.add('active'); if(event.currentTarget) event.currentTarget.classList.add('active'); updateNavButtons(); }; const updateNavButtons = () => { const activeTabIndex = Array.from(tabs).findIndex(tab => tab.classList.contains('active')); if (prevBtn) prevBtn.disabled = activeTabIndex === 0; if (nextBtn) nextBtn.disabled = activeTabIndex === tabs.length - 1; }; window.hpt_navigateTabs = (direction) => { const activeTabIndex = Array.from(tabs).findIndex(tab => tab.classList.contains('active')); let newIndex = activeTabIndex; if (direction === 'next' && activeTabIndex < tabs.length - 1) { newIndex++; } else if (direction === 'prev' && activeTabIndex > 0) { newIndex--; } if (tabs[newIndex]) tabs[newIndex].click(); }; // --- EVENT LISTENERS INITIALIZATION --- // if (addForm) addForm.addEventListener('submit', handleAddData); if (dataTableBody) dataTableBody.addEventListener('click', handleDeleteData); if (pdfDownloadBtn) pdfDownloadBtn.addEventListener('click', generatePDF); // --- INITIAL RENDER --- // renderAll(); });
Scroll to Top