From f42fe6bbaf8b501f70d0369c11e27c48440b3992 Mon Sep 17 00:00:00 2001 From: Anshul Zilpe Date: Wed, 7 Jan 2026 01:16:04 +0530 Subject: [PATCH] Fix incorrect z-order f dashboard map markers (fixes #6639) --- app/assets/javascripts/dashboard.js | 52 ++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/app/assets/javascripts/dashboard.js b/app/assets/javascripts/dashboard.js index cd1031f21..bb42f5472 100644 --- a/app/assets/javascripts/dashboard.js +++ b/app/assets/javascripts/dashboard.js @@ -12,6 +12,11 @@ $(function () { style: OSM.MapLibre.Styles.Mapnik, attributionControl: false, locale: OSM.MapLibre.Locale, + rollEnabled: false, + dragRotate: false, + pitchWithRotate: false, + bearingSnap: 180, + maxPitch: 0, center: OSM.home ? [OSM.home.lon, OSM.home.lat] : [0, 0], zoom: OSM.home ? defaultHomeZoom : 0 }); @@ -25,15 +30,46 @@ $(function () { trackUserLocation: true }); map.addControl(new OSM.MapLibre.CombinedControlGroup([navigationControl, geolocateControl]), position); + map.touchZoomRotate.disableRotation(); + map.keyboard.disableRotation(); - $("[data-user]").each(function () { - const user = $(this).data("user"); - if (user.lon && user.lat) { - OSM.MapLibre.getMarker({ icon: "dot", color: user.color }) - .setLngLat([user.lon, user.lat]) - .setPopup(OSM.MapLibre.getPopup(user.description)) - .addTo(map); + const markerObjects = $("[data-user]") + .filter(function () { + const { lat, lon } = $(this).data("user"); + return lat && lon; + }) + .map(function () { + const { lat, lon, color, description } = $(this).data("user"); + + const marker = OSM.MapLibre.getMarker({ icon: "dot", color }) + .setLngLat([lon, lat]) + .setPopup(OSM.MapLibre.getPopup(description)); + + return { marker, lat, lon }; + }) + .get(); + + for (const item of markerObjects) { + item.marker.addTo(map); + } + + const updateZIndex = () => { + for (const item of markerObjects) { + item.currentY = map.project([item.lon, item.lat]).y; } - }); + + markerObjects.sort((a, b) => a.currentY - b.currentY); + + for (const [index, item] of markerObjects.entries()) { + item.marker.getElement().style.zIndex = index; + } + }; + + if (markerObjects.length > 0) { + map.on("move", updateZIndex); + map.on("rotate", updateZIndex); + map.on("pitch", updateZIndex); + updateZIndex(); + } } }); -- 2.39.5