Space Exploration Timeline
Loading timeline events...
No events match your filters.
'; return; } eventsToDisplay.forEach(event => { const eventItem = document.createElement('div'); eventItem.classList.add('set-event-item'); let categoriesText = Array.isArray(event.category) ? event.category.join(', ') : event.category; eventItem.innerHTML = `${event.title}
Date: ${event.date} (Year: ${event.year})
${event.description}
${categoriesText ? `Categories: ${categoriesText}
` : ''}
${event.agency ? `Agency/Country: ${event.agency}
` : ''}
`;
displayArea.appendChild(eventItem);
});
},
downloadTimelinePDF() {
const { jsPDF } = window.jspdf;
const doc = new jsPDF();
const category = document.getElementById('set-category-filter').value;
const agencyVal = document.getElementById('set-agency-filter').value;
const yearStart = document.getElementById('set-year-start-filter').value;
const yearEnd = document.getElementById('set-year-end-filter').value;
let filteredEvents = this.events.filter(event => {
const eventYear = event.year;
const categoryMatch = !category || (Array.isArray(event.category) ? event.category.includes(category) : event.category === category);
const agencyMatch = !agencyVal || event.agency === agencyVal;
const yearStartMatch = !yearStart || eventYear >= parseInt(yearStart);
const yearEndMatch = !yearEnd || eventYear <= parseInt(yearEnd);
return categoryMatch && agencyMatch && yearStartMatch && yearEndMatch;
});
const primaryColor = getComputedStyle(document.documentElement).getPropertyValue('--set-primary-color').trim();
const textColor = getComputedStyle(document.documentElement).getPropertyValue('--set-text-color').trim(); // Assuming PDF is on white, use a dark text. For this theme, a dark version of secondary.
const pdfTextColor = "#101010"; // Dark text for white PDF background
const accentColor = getComputedStyle(document.documentElement).getPropertyValue('--set-accent-color').trim();
doc.setFontSize(20);
doc.setTextColor(primaryColor);
doc.text("Space Exploration Timeline", 14, 22);
doc.setFontSize(10);
doc.setTextColor(pdfTextColor);
let filterText = "Filters: ";
if (category) filterText += `Category: ${category}; `;
if (agencyVal) filterText += `Agency: ${agencyVal}; `;
if (yearStart) filterText += `From Year: ${yearStart}; `;
if (yearEnd) filterText += `To Year: ${yearEnd}; `;
if (filterText === "Filters: ") filterText += "None";
doc.text(filterText, 14, 30);
let yPos = 40;
const pageHeight = doc.internal.pageSize.height;
const margin = 14;
if (filteredEvents.length === 0) {
doc.text("No events match the current filters.", margin, yPos);
} else {
filteredEvents.forEach((event, index) => {
if (yPos > pageHeight - 40) { // Check for page break
doc.addPage();
yPos = 20;
}
doc.setFontSize(12);
doc.setTextColor(accentColor); // Title color
const titleLines = doc.splitTextToSize(`Event: ${event.title}`, doc.internal.pageSize.width - margin * 2);
doc.text(titleLines, margin, yPos);
yPos += (titleLines.length * 5) + 2;
doc.setFontSize(10);
doc.setTextColor(pdfTextColor);
const dateText = `Date: ${event.date} (Year: ${event.year})`;
doc.text(dateText, margin, yPos);
yPos += 6;
const descLines = doc.splitTextToSize(event.description, doc.internal.pageSize.width - margin * 2);
doc.text(descLines, margin, yPos);
yPos += (descLines.length * 5) + 2;
if (event.category) {
const catText = `Categories: ${(Array.isArray(event.category) ? event.category.join(', ') : event.category)}`;
const catLines = doc.splitTextToSize(catText, doc.internal.pageSize.width - margin * 2);
doc.text(catLines, margin, yPos);
yPos += (catLines.length * 5);
}
if (event.agency) {
const agencyText = `Agency/Country: ${event.agency}`;
doc.text(agencyText, margin, yPos);
yPos += 5;
}
yPos += 5; // Space between events
if (index < filteredEvents.length -1) {
doc.setDrawColor(getComputedStyle(document.documentElement).getPropertyValue('--set-border-color').trim());
doc.line(margin, yPos, doc.internal.pageSize.width - margin, yPos); // Separator line
yPos += 5;
}
});
}
// Add generated date footer
const finalPageNum = doc.internal.getNumberOfPages();
for (let i = 1; i <= finalPageNum; i++) {
doc.setPage(i);
doc.setFontSize(8);
doc.setTextColor(100); // Gray
doc.text(`Page ${i} of ${finalPageNum}`, doc.internal.pageSize.width - margin - 10, doc.internal.pageSize.height - 10);
doc.text(`Report generated: ${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()}`, margin, doc.internal.pageSize.height - 10);
}
doc.save('Space_Exploration_Timeline.pdf');
}
};
document.addEventListener('DOMContentLoaded', () => {
spaceTimeline.init();
});
