// view_events.js - JavaScript for the view saved events page // Global variables let map; let markers = []; // Initialize the map when the page loads document.addEventListener('DOMContentLoaded', function() { initMap(); // Set up refresh button const refreshBtn = document.getElementById('refresh-btn'); if (refreshBtn) { refreshBtn.addEventListener('click', loadEvents); } // Set up clear button const clearBtn = document.getElementById('clear-btn'); if (clearBtn) { clearBtn.addEventListener('click', clearEvents); } }); // Initialize the map function initMap() { // Create the map map = new maplibregl.Map({ container: 'map', style: 'https://tiles.openfreemap.org/styles/liberty', center: [2.2137, 46.2276], // Default center (center of metropolitan France) zoom: 5 }); // Add navigation controls map.addControl(new maplibregl.NavigationControl()); // Add attribution control with OpenStreetMap attribution map.addControl(new maplibregl.AttributionControl({ customAttribution: '© OpenStreetMap contributors' })); // Load events when the map is loaded map.on('load', function() { loadEvents(); }); } // Function to load events from localStorage function loadEvents() { // Clear existing markers markers.forEach(marker => marker.remove()); markers = []; // Get events from localStorage const savedEvents = JSON.parse(localStorage.getItem('oedb_events') || '[]'); // Update event count document.getElementById('event-count').textContent = `${savedEvents.length} event${savedEvents.length !== 1 ? 's' : ''} found`; // Clear event list const eventList = document.getElementById('event-list'); eventList.innerHTML = ''; // If no events, show message if (savedEvents.length === 0) { eventList.innerHTML = '
No saved events found. Use the demo map to save events.
'; return; } // Create bounds object to fit map to all markers const bounds = new maplibregl.LngLatBounds(); // Add markers and list items for each event savedEvents.forEach((event, index) => { // Skip events without geometry if (!event.geometry || !event.geometry.coordinates) return; // Get coordinates const coordinates = event.geometry.coordinates; // Add marker to map const marker = new maplibregl.Marker() .setLngLat(coordinates) .addTo(map); // Add popup with event info const popup = new maplibregl.Popup({ offset: 25 }) .setHTML(`

${event.label || 'Unnamed Event'}

Type: ${event.what || 'Unknown'}

Start: ${formatDate(event.start)}

End: ${formatDate(event.stop)}

${event.description ? `

Description: ${event.description}

` : ''} `); marker.setPopup(popup); markers.push(marker); // Extend bounds to include this marker bounds.extend(coordinates); // Add to event list const eventItem = document.createElement('div'); eventItem.className = 'event-item'; eventItem.innerHTML = `

${event.label || 'Unnamed Event'}

Type: ${event.what || 'Unknown'}

When: ${formatDate(event.start)} to ${formatDate(event.stop)}

${event.description ? `

Description: ${event.description}

` : ''}
`; eventList.appendChild(eventItem); }); // Fit map to bounds if we have any markers if (!bounds.isEmpty()) { map.fitBounds(bounds, { padding: 50 }); } } // Format date for display function formatDate(dateString) { if (!dateString) return 'Unknown'; const date = new Date(dateString); return date.toLocaleString(); } // Zoom to a specific event function zoomToEvent(lng, lat) { map.flyTo({ center: [lng, lat], zoom: 14 }); } // Delete an event function deleteEvent(index) { // Get events from localStorage const savedEvents = JSON.parse(localStorage.getItem('oedb_events') || '[]'); // Remove the event at the specified index savedEvents.splice(index, 1); // Save the updated events back to localStorage localStorage.setItem('oedb_events', JSON.stringify(savedEvents)); // Reload the events loadEvents(); } // Clear all events function clearEvents() { if (confirm('Are you sure you want to delete all saved events?')) { // Clear events from localStorage localStorage.removeItem('oedb_events'); // Reload the events loadEvents(); } }