${item.aircraft}
${formatDimension(item.data.pitch)} |
${formatDimension(item.data.width)} |
${item.data.recline === 180 ? 'Lie-flat' : `${item.data.recline}"`} |
${item.data.amenities.join(', ')} |
|
|
`;
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();
});