diff --git a/streetup/interventions/static/interventions/mobile/gps_navigation.js b/streetup/interventions/static/interventions/mobile/gps_navigation.js index c8e3f5c..57aef49 100644 --- a/streetup/interventions/static/interventions/mobile/gps_navigation.js +++ b/streetup/interventions/static/interventions/mobile/gps_navigation.js @@ -7,6 +7,13 @@ let activeGpsLat = null; let activeGpsLon = null; + const PROVIDER_NAMES = { + 'google': 'Google Maps', + 'waze': 'Waze', + 'apple': 'Apple Maps', + 'geo': 'App système par défaut' + }; + /** * Ouvre le modal de sélection GPS ou lance le GPS préféré s'il est enregistré. * @param {number|string} lat Latitude @@ -53,9 +60,17 @@ } } + const savedPrefInfo = document.getElementById('gpsSavedPrefInfo'); + const savedPrefName = document.getElementById('gpsSavedPrefName'); const rememberCheckbox = document.getElementById('gpsRememberChoice'); - if (rememberCheckbox) { - rememberCheckbox.checked = !!preferredProvider; + + if (preferredProvider) { + if (savedPrefInfo) savedPrefInfo.classList.remove('d-none'); + if (savedPrefName) savedPrefName.textContent = PROVIDER_NAMES[preferredProvider] || preferredProvider; + if (rememberCheckbox) rememberCheckbox.checked = true; + } else { + if (savedPrefInfo) savedPrefInfo.classList.add('d-none'); + if (rememberCheckbox) rememberCheckbox.checked = false; } const bsModal = bootstrap.Modal.getOrCreateInstance(modalEl); @@ -118,8 +133,60 @@ */ function resetGpsPreference() { localStorage.removeItem('streetup_preferred_gps'); + + const rememberCheckbox = document.getElementById('gpsRememberChoice'); + if (rememberCheckbox) rememberCheckbox.checked = false; + + const savedPrefInfo = document.getElementById('gpsSavedPrefInfo'); + if (savedPrefInfo) savedPrefInfo.classList.add('d-none'); } + /** + * Gestionnaire d'appui long (Long Press) sur les boutons GPS + */ + document.addEventListener('DOMContentLoaded', function() { + let longPressTimer = null; + + document.addEventListener('touchstart', function(e) { + const target = e.target.closest('[onclick*="openGpsNavigation"]'); + if (!target) return; + + longPressTimer = setTimeout(function() { + // Déclencher le modal forcé lors de l'appui long + const onclickAttr = target.getAttribute('onclick'); + const matches = onclickAttr ? onclickAttr.match(/openGpsNavigation\s*\(\s*['"]([^'"]+)['"]\s*,\s*['"]([^'"]+)['"]\s*(?:,\s*['"]([^'"]*)['"])?/) : null; + if (matches) { + const lat = matches[1]; + const lon = matches[2]; + const label = matches[3] || ''; + openGpsNavigation(lat, lon, label, true, e); + } + }, 500); + }, { passive: false }); + + document.addEventListener('touchend', function() { + if (longPressTimer) clearTimeout(longPressTimer); + }); + document.addEventListener('touchmove', function() { + if (longPressTimer) clearTimeout(longPressTimer); + }); + + // Permettre également le clic droit (contextmenu) pour forcer le modal sur desktop/simulateur + document.addEventListener('contextmenu', function(e) { + const target = e.target.closest('[onclick*="openGpsNavigation"]'); + if (target) { + const onclickAttr = target.getAttribute('onclick'); + const matches = onclickAttr ? onclickAttr.match(/openGpsNavigation\s*\(\s*['"]([^'"]+)['"]\s*,\s*['"]([^'"]+)['"]\s*(?:,\s*['"]([^'"]*)['"])?/) : null; + if (matches) { + const lat = matches[1]; + const lon = matches[2]; + const label = matches[3] || ''; + openGpsNavigation(lat, lon, label, true, e); + } + } + }); + }); + // Exposer les fonctions globalement window.openGpsNavigation = openGpsNavigation; window.launchGpsProvider = launchGpsProvider; diff --git a/streetup/interventions/templates/interventions/includes/_gps_navigation_modal.html b/streetup/interventions/templates/interventions/includes/_gps_navigation_modal.html index e4c08ab..b245815 100644 --- a/streetup/interventions/templates/interventions/includes/_gps_navigation_modal.html +++ b/streetup/interventions/templates/interventions/includes/_gps_navigation_modal.html @@ -12,6 +12,18 @@
{% translate "Choisissez votre application de navigation :" %}
diff --git a/streetup/interventions/templates/interventions/intervention_detail_mobile.html b/streetup/interventions/templates/interventions/intervention_detail_mobile.html index 7903c0d..4675c08 100644 --- a/streetup/interventions/templates/interventions/intervention_detail_mobile.html +++ b/streetup/interventions/templates/interventions/intervention_detail_mobile.html @@ -471,7 +471,7 @@{{ intervention.planned_begin_time|date:"d/m/Y H:i"|default:"/" }}
-- - {{ intervention.get_maintain_type_display }} - - {% if intervention.lat and intervention.lon %} - - {% endif %} +
+ {{ intervention.get_maintain_type_display }}
{% include "interventions/includes/_operation_comment_modal.html" %}