Best Travel Gadgets Checklist

Best Travel Gadgets Checklist

Plan Your Trip

Recommended Gadgets

My Gadget Inventory

Add New Gadget

GadgetCategoryAction

Final Packing List

No gadgets checked off. Go to the checklist to select items.

'; return; } gadgetData.categories.forEach(category => { const packedInCategory = gadgetData.inventory.filter(item => item.category === category && gadgetData.packedItems.has(item.id) ); if (packedInCategory.length > 0) { const categoryDiv = document.createElement('div'); categoryDiv.className = 'checklist-category'; let itemsHTML = `

${category}

`; packedInCategory.forEach(item => { itemsHTML += `
`; }); categoryDiv.innerHTML = itemsHTML; finalListContainer.appendChild(categoryDiv); } }); } function renderAll() { populateControls(); generateChecklist(); renderInventoryTable(); } // --- TAB & NAVIGATION --- window.openTab = function(evt, tabName) { if (tabName === 'final') renderFinalList(); const tabContents = document.getElementsByClassName("tab-content"); Array.from(tabContents).forEach(tab => tab.style.display = "none"); const tabButtons = document.getElementsByClassName("tab-btn"); Array.from(tabButtons).forEach(btn => btn.classList.remove("active")); document.getElementById(tabName).style.display = "block"; if (evt) { evt.currentTarget.classList.add("active"); } else { const btnToActivate = Array.from(tabButtons).find(btn => btn.getAttribute('onclick').includes(`'${tabName}'`)); if (btnToActivate) btnToActivate.classList.add("active"); } updateNavButtons(); } window.navigateTabs = function(direction) { const tabs = Array.from(document.querySelectorAll('.tab-btn')); const activeTabIndex = tabs.findIndex(tab => tab.classList.contains('active')); let newIndex = (direction === 'next') ? (activeTabIndex + 1) % tabs.length : (activeTabIndex - 1 + tabs.length) % tabs.length; tabs[newIndex].click(); } function updateNavButtons() { const tabs = Array.from(document.querySelectorAll('.tab-btn')); const activeTabIndex = tabs.findIndex(tab => tab.classList.contains('active')); document.getElementById('prev-btn').style.visibility = activeTabIndex === 0 ? 'hidden' : 'visible'; document.getElementById('next-btn').style.visibility = activeTabIndex === tabs.length - 1 ? 'hidden' : 'visible'; } // --- PDF DOWNLOAD --- if(downloadPdfBtn) { downloadPdfBtn.addEventListener('click', function() { const { jsPDF } = window.jspdf; const contentToDownload = document.getElementById('final-list-to-download'); if (!contentToDownload || gadgetData.packedItems.size === 0) { console.warn("Please select items to pack before downloading."); return; } const originalButtonText = downloadPdfBtn.innerHTML; downloadPdfBtn.innerHTML = 'Generating...'; downloadPdfBtn.disabled = true; html2canvas(contentToDownload, { scale: 2, useCORS: true }).then(canvas => { const imgData = canvas.toDataURL('image/png'); const pdf = new jsPDF({ orientation: 'p', unit: 'mm', format: 'a4' }); const pdfWidth = pdf.internal.pageSize.getWidth(); const imgProps = pdf.getImageProperties(imgData); const imgHeight = (imgProps.height * pdfWidth) / imgProps.width; pdf.addImage(imgData, 'PNG', 10, 10, pdfWidth - 20, imgHeight > 0 ? imgHeight - 20 : 0); pdf.save('Travel-Gadget-Checklist.pdf'); }).catch(err => { console.error("Error generating PDF:", err); }).finally(() => { downloadPdfBtn.innerHTML = originalButtonText; downloadPdfBtn.disabled = false; }); }); } // --- INITIALIZATION --- function initializeTool() { renderAll(); updateNavButtons(); } initializeTool(); });
Scroll to Top