]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/leaflet.sidebar.js
Associate search input with route destination instead of departure
[rails.git] / app / assets / javascripts / leaflet.sidebar.js
index f51aaa72829dfe74e2d26b1705f0372c406d24ec..910da53f20ca17d4ee685ca4fd9acaca74c7fb0c 100644 (file)
@@ -1,7 +1,7 @@
 L.OSM.sidebar = function (selector) {
-  var control = {},
-      sidebar = $(selector),
-      current = $(),
+  const control = {},
+        sidebar = $(selector);
+  let current = $(),
       currentButton = $(),
       map;
 
@@ -17,6 +17,10 @@ L.OSM.sidebar = function (selector) {
   };
 
   control.togglePane = function (pane, button) {
+    const mediumDeviceWidth = window.getComputedStyle(document.documentElement).getPropertyValue("--bs-breakpoint-md");
+    const isMediumDevice = window.matchMedia(`(max-width: ${mediumDeviceWidth})`).matches;
+    const paneWidth = 250;
+
     current
       .hide()
       .trigger("hide");
@@ -26,11 +30,23 @@ L.OSM.sidebar = function (selector) {
 
     if (current === pane) {
       $(sidebar).hide();
+      $("#content").addClass("overlay-right-sidebar");
       current = currentButton = $();
+      if (isMediumDevice) {
+        map.panBy([0, -$("#map").height() / 2], { animate: false });
+      } else if ($("html").attr("dir") === "rtl") {
+        map.panBy([-paneWidth, 0], { animate: false });
+      }
     } else {
       $(sidebar).show();
+      $("#content").removeClass("overlay-right-sidebar");
       current = pane;
       currentButton = button || $();
+      if (isMediumDevice) {
+        map.panBy([0, $("#map").height()], { animate: false });
+      } else if ($("html").attr("dir") === "rtl") {
+        map.panBy([paneWidth, 0], { animate: false });
+      }
     }
 
     map.invalidateSize({ pan: false, animate: false });