`;
savedPatentsContainer.appendChild(card);
});
};
const renderReportPreview = () => {
document.getElementById('pdf-summary').textContent = `This report contains ${savedPatentIds.size} saved patent(s). Generated on ${new Date().toLocaleDateString()}.`;
let tableHTML = '
\
\
| Patent ID | \
Title | \
Inventor | \
Grant Date | \
';
if (savedPatentIds.size === 0) {
reportTableContainer.innerHTML = 'No saved patents to report.
';
return;
}
patentDatabase.filter(p => savedPatentIds.has(p.id)).forEach(patent => {
tableHTML += `| ${patent.id} | ${patent.title} | ${patent.inventor} | ${patent.grantDate} |
`;
});
tableHTML += '
';
reportTableContainer.innerHTML = tableHTML;
};
// === Tab Navigation Logic ===
const updateTabs = () => {
tabContents.forEach((content, index) => {
content.classList.toggle('hidden', index !== currentTab);
tabButtons[index].classList.toggle('active', index === currentTab);
});
prevBtn.disabled = currentTab === 0;
nextBtn.disabled = currentTab === tabButtons.length - 1;
if (currentTab === 1) renderSavedPatents();
if (currentTab === 2) renderReportPreview();
};
tabButtons.forEach((btn, index) => btn.addEventListener('click', () => { currentTab = index; updateTabs(); }));
prevBtn.addEventListener('click', () => { if (currentTab > 0) { currentTab--; updateTabs(); } });
nextBtn.addEventListener('click', () => { if (currentTab < tabButtons.length - 1) { currentTab++; updateTabs(); } });
// === Event Handlers ===
[searchInput, startDateFilter, endDateFilter].forEach(el => el.addEventListener('input', renderSearchResults));
searchResultsContainer.addEventListener('click', (e) => {
if (e.target.classList.contains('save-btn')) {
const id = e.target.dataset.id;
savedPatentIds.add(id);
e.target.textContent = 'Saved';
e.target.disabled = true;
e.target.classList.replace('bg-green-600', 'bg-gray-500');
e.target.classList.remove('hover:bg-green-700');
}
});
savedPatentsContainer.addEventListener('click', (e) => {
if (e.target.classList.contains('remove-btn')) {
const id = e.target.dataset.id;
savedPatentIds.delete(id);
renderSavedPatents();
renderSearchResults(); // Re-render search to update button states
}
});
// === PDF Download Logic ===
downloadPdfBtn.addEventListener('click', () => {
const { jsPDF } = window.jspdf;
const pdfContent = document.getElementById('pdfContent');
html2canvas(pdfContent, { scale: 2 }).then(canvas => {
const imgData = canvas.toDataURL('image/png');
const pdf = new jsPDF({ orientation: 'landscape', unit: 'pt', format: 'a4' });
const pdfWidth = pdf.internal.pageSize.getWidth();
const pdfHeight = pdf.internal.pageSize.getHeight();
const canvasAspectRatio = canvas.width / canvas.height;
const margin = 40;
let imgFinalWidth = pdfWidth - margin;
let imgFinalHeight = imgFinalWidth / canvasAspectRatio;
if (imgFinalHeight > pdfHeight - margin) {
imgFinalHeight = pdfHeight - margin;
imgFinalWidth = imgFinalHeight * canvasAspectRatio;
}
const x = (pdfWidth - imgFinalWidth) / 2;
const y = margin / 2;
pdf.addImage(imgData, 'PNG', x, y, imgFinalWidth, imgFinalHeight);
pdf.save('Patent_Search_Report.pdf');
});
});
// Initial setup calls
renderSearchResults();
updateTabs();
});