templates/Structure/mapjs.html.twig line 1

Open in your IDE?
  1. <script type="text/javascript">
  2. $(document).ready(function() {
  3. // 1. Centrage sur la France
  4. var mymap = L.map('mapid', {
  5. center: [46.2276, 2.2137],
  6. zoom: 6,
  7. minZoom: 4,
  8. maxZoom: 17
  9. });
  10. L.tileLayer('//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
  11. attribution: '&copy; OpenStreetMap contributors'
  12. }).addTo(mymap);
  13. var icons = {
  14. 'CSO': L.icon({ iconUrl: '{{ asset("build/markers/marker-icon-info.svg") }}', shadowUrl: '{{ asset("build/markers/marker-shadow.png") }}', iconSize: [41, 51], iconAnchor: [20, 51], popupAnchor: [0, -51] }),
  15. 'EVS': L.icon({ iconUrl: '{{ asset("build/markers/marker-icon-success.svg") }}', shadowUrl: '{{ asset("build/markers/marker-shadow.png") }}', iconSize: [41, 51], iconAnchor: [20, 51], popupAnchor: [0, -51] }),
  16. 'FDD': L.icon({ iconUrl: '{{ asset("build/markers/marker-icon-warning.svg") }}', shadowUrl: '{{ asset("build/markers/marker-shadow.png") }}', iconSize: [41, 51], iconAnchor: [20, 51], popupAnchor: [0, -51] }),
  17. 'CAF': L.icon({ iconUrl: '{{ asset("build/markers/marker-icon-danger.svg") }}', shadowUrl: '{{ asset("build/markers/marker-shadow.png") }}', iconSize: [41, 51], iconAnchor: [20, 51], popupAnchor: [0, -51] })
  18. };
  19. var structuresData = {{ structuresJson|raw }};
  20. var markers = L.markerClusterGroup({ chunkedLoading: true });
  21. Object.keys(structuresData).forEach(function(type) {
  22. var list = structuresData[type];
  23. var icon = icons[type] || icons['CSO'];
  24. list.forEach(function(s) {
  25. var coords = s.coordinate.split(',');
  26. if (coords.length === 2) {
  27. var marker = L.marker([parseFloat(coords[0]), parseFloat(coords[1])], { icon: icon });
  28. marker.on('click', function(e) {
  29. var urlEdit = "{{ path('structure_edit', {'id': 'PLACEHOLDER'}) }}".replace('PLACEHOLDER', s.id);
  30. var content = "<div class='popup-header'><h4>";
  31. content += s.can_edit ? "<a href='"+urlEdit+"'>" + s.nom + "</a>" : s.nom;
  32. content += "</h4></div><div class='popup-body'>";
  33. if (s.adresse) content += "<p><i class='fa-solid fa-house'></i> " + s.adresse + "</p>";
  34. content += "<p><i class='fa-solid fa-location-dot'></i> " + s.code_postal + " " + s.commune + "</p>";
  35. if (s.telephone) content += "<p><i class='fa-solid fa-phone'></i> " + s.telephone + "</p>";
  36. if (s.email) content += "<p><i class='fa-solid fa-envelope'></i> " + s.email + "</p>";
  37. content += "</div>";
  38. e.target.bindPopup(content, { minWidth: 320 }).openPopup();
  39. });
  40. markers.addLayer(marker);
  41. }
  42. });
  43. });
  44. mymap.addLayer(markers);
  45. setTimeout(function() { mymap.invalidateSize(); }, 400);
  46. });
  47. </script>
  48. <style>
  49. /* Augmente la taille globale de la zone d'info */
  50. .popup-body {
  51. padding: 10px 0;
  52. font-size: 16px; /* Taille du texte augmentée */
  53. }
  54. /* Espace les lignes d'informations */
  55. .popup-body p {
  56. margin: 12px 0 !important; /* Plus d'espace entre chaque ligne */
  57. line-height: 1.4;
  58. }
  59. /* Grossit les icônes pour qu'elles correspondent au texte */
  60. .popup-body i {
  61. font-size: 18px;
  62. width: 28px !important;
  63. color: #555;
  64. }
  65. /* Optionnel : Ajuste la largeur de la bulle pour accueillir le texte plus gros */
  66. .leaflet-popup-content {
  67. width: 400px !important;
  68. }
  69. </style>