Patent Search Tool

Patent Search Tool

Search, analyze, and report on patents from the USPTO database.

${patent.abstract}

`; 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 = ' \ \ \ \ \ \ '; if (savedPatentIds.size === 0) { reportTableContainer.innerHTML = '

No saved patents to report.

'; return; } patentDatabase.filter(p => savedPatentIds.has(p.id)).forEach(patent => { tableHTML += ``; }); tableHTML += '
Patent IDTitleInventorGrant Date
${patent.id}${patent.title}${patent.inventor}${patent.grantDate}
'; 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(); });
Scroll to Top