oedb-backend/oedb/resources/demo/templates/traffic_new.html
2025-10-02 22:53:50 +02:00

279 lines
No EOL
11 KiB
HTML

{% extends "layout.html" %}
{% block title %}Report Traffic Jam - OpenEventDatabase{% endblock %}
{% block css %}
<link rel="stylesheet" href="/static/traffic.css">
{% endblock %}
{% block header %}Report Road Issue{% endblock %}
{% block content %}
<!-- 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 }}">
<!-- Hidden Panoramax configuration (upload endpoint and token) -->
<input type="hidden" id="panoramaxUploadUrl" value="{{ panoramax_upload_url }}">
<input type="hidden" id="panoramaxToken" value="{{ panoramax_token }}">
<!-- Authentication section will be rendered by JavaScript or server-side -->
<div id="auth-section">
{% if is_authenticated %}
<div class="auth-info">
<div>
<p>Logged in as <strong>{{ osm_username }}</strong></p>
<p><a href="https://www.openstreetmap.org/user/{{ osm_username }}" >View OSM Profile</a></p>
<input type="hidden" id="osmUsername" value="{{ osm_username }}">
<input type="hidden" id="osmUserId" value="{{ osm_user_id }}">
</div>
</div>
{% else %}
<p>Authenticate with your OpenStreetMap account to include your username in the traffic report.</p>
<a href="https://www.openstreetmap.org/oauth2/authorize?client_id={{ client_id }}&redirect_uri={{ client_redirect }}&response_type=code&scope={{ client_authorizations }}" class="osm-login-btn">
<span class="osm-logo"></span>
Login with OpenStreetMap
</a>
{% endif %}
<script>
// Préserve l'affichage serveur si présent, sinon laisse traffic.js/dema_auth gérer
document.addEventListener('DOMContentLoaded', function() {
const hasServerAuth = document.getElementById('osmUsername') && document.getElementById('osmUsername').value;
if (hasServerAuth) return;
if (window.osmAuth && osmAuth.renderAuthSection) {
const clientId = document.getElementById('osmClientId').value;
const redirectUri = document.getElementById('osmRedirectUri').value;
const authSection = document.getElementById('auth-section');
authSection.innerHTML = osmAuth.renderAuthSection(clientId, redirectUri);
}
});
</script>
</div>
<h3>Select Issue Type</h3>
<!-- Tab Navigation -->
<div class="tabs">
<div class="tab-item active" data-tab="road">
<i class="fas fa-road"></i> Route
</div>
<div class="tab-item" data-tab="rail">
<i class="fas fa-train"></i> Rail
</div>
<div class="tab-item" data-tab="weather">
<i class="fas fa-cloud-sun-rain"></i> Météo
</div>
<div class="tab-item" data-tab="emergency">
<i class="fas fa-exclamation-circle"></i> Urgences
</div>
<div class="tab-item" data-tab="civic">
<i class="fas fa-bicycle"></i> Cycles
</div>
</div>
<!-- Tab Content -->
<div class="tab-content">
<!-- Road Tab -->
<div class="tab-pane active" id="road-tab">
<div class="issue-buttons">
<div class="issue-button road pothole" onclick="fillForm('pothole')">
<i class="fas fa-dot-circle"></i>
Pothole
</div>
<div class="issue-button road obstacle" onclick="fillForm('obstacle')">
<i class="fas fa-exclamation-triangle"></i>
Obstacle
</div>
<div class="issue-button road vehicle" onclick="fillForm('vehicle')">
<i class="fas fa-car"></i>
Véhicule sur le bas côté de la route
</div>
<div class="issue-button road danger" onclick="fillForm('danger')">
<i class="fas fa-skull-crossbones"></i>
Danger
</div>
<div class="issue-button road accident" onclick="fillForm('accident')">
<i class="fas fa-car-crash"></i>
Accident
</div>
<div class="issue-button road flooded-road" onclick="fillForm('flooded_road')">
<i class="fas fa-water"></i>
Route inondée
</div>
<div class="issue-button road roadwork" onclick="fillForm('roadwork')">
<i class="fas fa-hard-hat"></i>
Travaux
</div>
<div class="issue-button road traffic-jam" onclick="fillForm('traffic_jam')">
<i class="fas fa-traffic-light"></i>
Embouteillage
</div>
<div class="issue-button road traffic-jam" onclick="fillForm('traffic_mammoth')">
<i class="fas fa-traffic-light"></i>
Mammouth
</div>
</div>
</div>
<!-- Rail Tab -->
<div class="tab-pane" id="rail-tab">
<div class="issue-buttons">
<div class="issue-button rail delay" onclick="fillForm('rail_delay')">
<i class="fas fa-clock"></i>
Retard
</div>
<div class="issue-button rail cancellation" onclick="fillForm('rail_cancellation')">
<i class="fas fa-ban"></i>
Annulation
</div>
<div class="issue-button rail works" onclick="fillForm('rail_works')">
<i class="fas fa-tools"></i>
Travaux
</div>
<div class="issue-button rail incident" onclick="fillForm('rail_incident')">
<i class="fas fa-exclamation-triangle"></i>
Incident
</div>
</div>
</div>
<!-- Weather Tab -->
<div class="tab-pane" id="weather-tab">
<div class="issue-buttons">
<div class="issue-button weather storm" onclick="fillForm('weather_storm')">
<i class="fas fa-bolt"></i>
Orage
</div>
<div class="issue-button weather flood" onclick="fillForm('weather_flood')">
<i class="fas fa-water"></i>
Inondation
</div>
<div class="issue-button weather snow" onclick="fillForm('weather_snow')">
<i class="fas fa-snowflake"></i>
Neige
</div>
<div class="issue-button weather fog" onclick="fillForm('weather_fog')">
<i class="fas fa-smog"></i>
Brouillard
</div>
<div class="issue-button weather heat" onclick="fillForm('weather_heat')">
<i class="fas fa-temperature-high"></i>
Canicule
</div>
</div>
</div>
<!-- Emergency Tab -->
<div class="tab-pane" id="emergency-tab">
<div class="issue-buttons">
<div class="issue-button emergency fire" onclick="fillForm('emergency_fire')">
<i class="fas fa-fire"></i>
Incendie
</div>
<div class="issue-button emergency medical" onclick="fillForm('emergency_medical')">
<i class="fas fa-ambulance"></i>
Urgence médicale
</div>
<div class="issue-button emergency police" onclick="fillForm('emergency_police')">
<i class="fas fa-shield-alt"></i>
Intervention police
</div>
<div class="issue-button emergency evacuation" onclick="fillForm('emergency_evacuation')">
<i class="fas fa-running"></i>
Évacuation
</div>
</div>
</div>
<!-- Civic Tab -->
<div class="tab-pane" id="civic-tab">
<div class="issue-buttons">
<div class="issue-button civic bike-lane" onclick="fillForm('civic_bike_lane')">
<i class="fas fa-bicycle"></i>
Problème piste cyclable
</div>
<div class="issue-button civic sidewalk" onclick="fillForm('civic_sidewalk')">
<i class="fas fa-walking"></i>
Problème trottoir
</div>
<div class="issue-button civic lighting" onclick="fillForm('civic_lighting')">
<i class="fas fa-lightbulb"></i>
Éclairage défectueux
</div>
<div class="issue-button civic garbage" onclick="fillForm('civic_garbage')">
<i class="fas fa-trash"></i>
Déchets
</div>
</div>
</div>
</div>
<h3>Report Details</h3>
<form id="reportForm" class="report-form">
<div class="form-group">
<label for="what" class="required">Type d'événement</label>
<input type="text" id="what" name="what" required placeholder="e.g., road.hazard.pothole">
<div class="note">Catégorie de l'événement (e.g., road.hazard.pothole, road.traffic.jam)</div>
</div>
<div class="form-group">
<label for="label" class="required">Titre</label>
<input type="text" id="label" name="label" required placeholder="e.g., Nid de poule sur la D123">
</div>
<div class="form-group">
<label for="description">Description</label>
<textarea id="description" name="description" rows="3" placeholder="Description détaillée du problème"></textarea>
</div>
<div class="form-row">
<div class="form-group">
<label for="type">Type de rapport</label>
<select id="type" name="type">
<option value="unscheduled">Non planifié (incident)</option>
<option value="scheduled">Planifié (travaux)</option>
<option value="forecast">Prévision</option>
</select>
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="start" class="required">Début</label>
<input type="datetime-local" id="start" name="start" required>
</div>
<div class="form-group">
<label for="stop" class="required">Fin (estimée)</label>
<input type="datetime-local" id="stop" name="stop" required>
</div>
</div>
<!-- <div class="form-group">-->
<!-- <label for="photo">Photos</label>-->
<!-- <input type="file" id="photo" name="photo" accept="image/*" multiple>-->
<!-- <div class="note">Vous pouvez ajouter plusieurs photos (optionnel)</div>-->
<!-- <div id="photoPreview" class="photo-preview-container"></div>-->
<!-- </div>-->
<div class="form-group">
<label class="required">Localisation</label>
<div id="map"></div>
<div class="note">Cliquez sur la carte pour définir la localisation du problème ou utilisez le bouton "Obtenir ma position actuelle"</div>
</div>
<button id="report_issue_button" type="submit" disabled>Signaler le problème</button>
</form>
<div id="result"></div>
<a href="/demo/view-events" class="view-saved-events">
<i class="fas fa-map-marked-alt"></i> Voir tous les événements enregistrés sur la carte
</a>
{% endblock %}
{% block scripts %}
<script src="/static/traffic.js"></script>
{% endblock %}