X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/a6ac56c5e510395d160cdb7ccc7a88d87403e687..e6b0e1ae7ef45b87a61f18bb50296273d6dd1bfb:/app/assets/javascripts/leaflet.sidebar.js?ds=inline diff --git a/app/assets/javascripts/leaflet.sidebar.js b/app/assets/javascripts/leaflet.sidebar.js index a6529ad00..910da53f2 100644 --- a/app/assets/javascripts/leaflet.sidebar.js +++ b/app/assets/javascripts/leaflet.sidebar.js @@ -1,34 +1,62 @@ -L.OSM.sidebar = function(selector) { - var control = {}, - sidebar = $(selector), - current = $(); +L.OSM.sidebar = function (selector) { + const control = {}, + sidebar = $(selector); + let current = $(), + currentButton = $(), + map; - control.addPane = function(pane) { + control.addTo = function (_) { + map = _; + return control; + }; + + control.addPane = function (pane) { pane .hide() .appendTo(sidebar); }; - control.togglePane = function(pane) { - var controlContainer = $('.leaflet-control-container .leaflet-top.leaflet-right'); + 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'); + .trigger("hide"); + + currentButton + .removeClass("active"); if (current === pane) { $(sidebar).hide(); - controlContainer.css({paddingRight: '0'}); - current = $(); + $("#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(); - controlContainer.css({paddingRight: '200px'}); + $("#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 }); + current .show() - .trigger('show'); + .trigger("show"); + + currentButton + .addClass("active"); }; return control;