157 lines
		
	
	
		
			No EOL
		
	
	
		
			3.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			No EOL
		
	
	
		
			3.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| {% extends "layout.html" %}
 | |
| 
 | |
| {% block title %}View Saved Events - OpenEventDatabase{% endblock %}
 | |
| 
 | |
| {% block css %}
 | |
| <style>
 | |
|     #map { 
 | |
|         position: absolute; 
 | |
|         top: 0; 
 | |
|         bottom: 0; 
 | |
|         width: 100%; 
 | |
|     }
 | |
|     
 | |
|     .map-overlay {
 | |
|         position: absolute;
 | |
|         top: 0;
 | |
|         right: 0;
 | |
|         background: rgba(255, 255, 255, 0.9);
 | |
|         margin: 20px;
 | |
|         padding: 15px;
 | |
|         width: 300px;
 | |
|         border-radius: 5px;
 | |
|         max-height: 90vh;
 | |
|         overflow-y: auto;
 | |
|     }
 | |
|     
 | |
|     .event-list {
 | |
|         margin-top: 15px;
 | |
|         max-height: 60vh;
 | |
|         overflow-y: auto;
 | |
|     }
 | |
|     
 | |
|     .event-item {
 | |
|         background: white;
 | |
|         border: 1px solid #ddd;
 | |
|         border-radius: 4px;
 | |
|         margin-bottom: 10px;
 | |
|         padding: 10px;
 | |
|     }
 | |
|     
 | |
|     .event-header {
 | |
|         display: flex;
 | |
|         justify-content: space-between;
 | |
|         align-items: center;
 | |
|     }
 | |
|     
 | |
|     .event-header h3 {
 | |
|         margin: 0;
 | |
|         font-size: 16px;
 | |
|     }
 | |
|     
 | |
|     .event-actions {
 | |
|         display: flex;
 | |
|         gap: 5px;
 | |
|     }
 | |
|     
 | |
|     .event-details {
 | |
|         font-size: 14px;
 | |
|     }
 | |
|     
 | |
|     .event-details p {
 | |
|         margin: 5px 0;
 | |
|     }
 | |
|     
 | |
|     .controls {
 | |
|         display: flex;
 | |
|         gap: 10px;
 | |
|         margin-top: 15px;
 | |
|     }
 | |
|     
 | |
|     .no-events {
 | |
|         padding: 10px;
 | |
|         background: #f8f8f8;
 | |
|         border-radius: 4px;
 | |
|         text-align: center;
 | |
|         color: #666;
 | |
|     }
 | |
|     
 | |
|     .zoom-btn, .delete-btn {
 | |
|         background: none;
 | |
|         border: none;
 | |
|         cursor: pointer;
 | |
|         padding: 5px;
 | |
|     }
 | |
|     
 | |
|     .zoom-btn {
 | |
|         color: #0078ff;
 | |
|     }
 | |
|     
 | |
|     .delete-btn {
 | |
|         color: #dc3545;
 | |
|     }
 | |
|     
 | |
|     .danger {
 | |
|         background-color: #dc3545;
 | |
|     }
 | |
|     
 | |
|     .danger:hover {
 | |
|         background-color: #c82333;
 | |
|     }
 | |
| </style>
 | |
| {% endblock %}
 | |
| 
 | |
| {% block header %}Your Saved Events{% endblock %}
 | |
| 
 | |
| {% block content %}
 | |
| <div id="map"></div>
 | |
| 
 | |
| <!-- Hidden OAuth2 configuration for the JavaScript module -->
 | |
| <input type="hidden" id="osmClientId" value="{{ client_id }}">
 | |
| <input type="hidden" id="osmClientSecret" value="{{ client_secret }}">
 | |
| <input type="hidden" id="osmRedirectUri" value="{{ client_redirect }}">
 | |
| 
 | |
| <div class="map-overlay">
 | |
|     <!-- Authentication section -->
 | |
|     <div id="auth-section" class="auth-section">
 | |
|         <h3>OpenStreetMap Authentication</h3>
 | |
|         <p>Authenticate with your OpenStreetMap account to include your username in reports.</p>
 | |
|         <a href="https://www.openstreetmap.org/oauth2/authorize?client_id={{ client_id }}&redirect_uri={{ client_redirect }}&response_type=code&scope=read_prefs" class="osm-login-btn">
 | |
|             <span class="osm-logo"></span>
 | |
|             Login with OpenStreetMap
 | |
|         </a>
 | |
|         <script>
 | |
|             // Replace server-side auth section with JavaScript-rendered version if available
 | |
|             document.addEventListener('DOMContentLoaded', function() {
 | |
|                 if (window.osmAuth) {
 | |
|                     const clientId = document.getElementById('osmClientId').value;
 | |
|                     const redirectUri = document.getElementById('osmRedirectUri').value;
 | |
|                     const authSection = document.getElementById('auth-section');
 | |
|                     
 | |
|                     // Only replace if osmAuth is loaded and has renderAuthSection method
 | |
|                     if (osmAuth.renderAuthSection) {
 | |
|                         authSection.innerHTML = osmAuth.renderAuthSection(clientId, redirectUri);
 | |
|                     }
 | |
|                 }
 | |
|             });
 | |
|         </script>
 | |
|     </div>
 | |
|     
 | |
|     <div id="event-count"></div>
 | |
|     
 | |
|     <div id="event-list" class="event-list"></div>
 | |
|     
 | |
|     <div class="controls">
 | |
|         <button id="refresh-btn">
 | |
|             <i class="fas fa-sync-alt"></i> Refresh
 | |
|         </button>
 | |
|         <button id="clear-btn" class="danger">
 | |
|             <i class="fas fa-trash-alt"></i> Clear All
 | |
|         </button>
 | |
|     </div>
 | |
| </div>
 | |
| {% endblock %}
 | |
| 
 | |
| {% block scripts %}
 | |
| <script src="/static/view_events.js"></script>
 | |
| {% endblock %} | 
