Long-Haul Flight Seat Comfort Comparison Tool

Long-Haul Flight Seat Comfort Comparison Tool

Compare seat specifications across airlines and aircraft to find your most comfortable flight.

Build Your Comparison

${item.aircraft}

${formatDimension(item.data.pitch)} ${formatDimension(item.data.width)} ${item.data.recline === 180 ? 'Lie-flat' : `${item.data.recline}"`} ${item.data.amenities.join(', ')}
${score}/100
`; comparisonTableBody.innerHTML += row; }); } function addComparison() { if (comparisonList.length >= 5) { showCustomMessage('Limit Reached', 'You can compare a maximum of 5 options.', 'warning'); return; } const airline = airlineSelect.value; const aircraft = aircraftSelect.value; const cabinClass = classSelect.value; const data = seatData[airline][aircraft][cabinClass]; comparisonList.push({ airline, aircraft, cabinClass, data }); renderComparisonTable(); } function downloadPdf() { if (comparisonList.length === 0) { showCustomMessage('Error', 'Nothing to download. Please add items to compare.', 'error'); return; } loadingOverlay.style.display = 'flex'; try { const { jsPDF } = window.jspdf; // Corrected initialization const doc = new jsPDF(); doc.setFontSize(20); doc.setFont('helvetica', 'bold'); doc.text("Flight Seat Comfort Comparison", 105, 20, null, null, 'center'); const tableColumn = ["Flight Option", "Seat Pitch", "Seat Width", "Recline", "Amenities"]; const tableRows = []; comparisonList.forEach(item => { const ticketData = [ `${item.airline}\n${item.aircraft}\n${item.cabinClass}`, formatDimension(item.data.pitch), formatDimension(item.data.width), item.data.recline === 180 ? 'Lie-flat' : `${item.data.recline}"`, item.data.amenities.join(', ') ]; tableRows.push(ticketData); }); doc.autoTable(tableColumn, tableRows, { startY: 30 }); doc.save('seat-comfort-comparison.pdf'); } catch (error) { console.error("PDF Error:", error); showCustomMessage('PDF Error', 'Could not generate the PDF.', 'error'); } finally { loadingOverlay.style.display = 'none'; } } function showCustomMessage(title, body, type) { const box = document.getElementById('message-box'); const titleEl = document.getElementById('message-title'); const bodyEl = document.getElementById('message-body'); const iconContainer = document.getElementById('message-icon-container'); if(!box || !titleEl || !bodyEl || !iconContainer) return; titleEl.textContent = title; bodyEl.textContent = body; let iconSvg = ''; switch (type) { case 'success': iconSvg = ``; break; case 'error': iconSvg = ``; break; case 'warning': iconSvg = ``; break; } iconContainer.innerHTML = iconSvg; box.classList.add('show'); setTimeout(() => { box.classList.remove('show'); }, 4000); } // Event Listeners airlineSelect.addEventListener('change', populateAircrafts); aircraftSelect.addEventListener('change', populateClasses); addComparisonBtn.addEventListener('click', addComparison); clearBtn.addEventListener('click', () => { comparisonList = []; renderComparisonTable(); }); pdfDownloadBtn.addEventListener('click', downloadPdf); comparisonTableBody.addEventListener('click', (e) => { if (e.target.closest('.remove-btn')) { const index = e.target.closest('.remove-btn').dataset.index; comparisonList.splice(index, 1); renderComparisonTable(); } }); // Initial Population populateAirlines(); renderComparisonTable(); });
Scroll to Top