X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/0cd18eb02f853bfa93673f046b793bd53ac5aa68..628f6149d1c76ac09ebf8dea8d71f86eb9a91dc9:/app/assets/javascripts/osm.js.erb diff --git a/app/assets/javascripts/osm.js.erb b/app/assets/javascripts/osm.js.erb index 602d3af10..254e00810 100644 --- a/app/assets/javascripts/osm.js.erb +++ b/app/assets/javascripts/osm.js.erb @@ -2,7 +2,6 @@ //= depend_on settings.local.yml //= depend_on layers.yml //= depend_on key.yml -//= require qs/dist/qs OSM = { <% if defined?(Settings.matomo) %> @@ -158,9 +157,9 @@ OSM = { return args; } - hash = Qs.parse(hash.slice(i + 1)); + const hashParams = new URLSearchParams(hash.slice(i + 1)); - var map = (hash.map || "").split("/"), + var map = (hashParams.get("map") || "").split("/"), zoom = parseInt(map[0], 10), lat = parseFloat(map[1]), lon = parseFloat(map[2]); @@ -170,8 +169,8 @@ OSM = { args.zoom = zoom; } - if (hash.layers) { - args.layers = hash.layers; + if (hashParams.has("layers")) { + args.layers = hashParams.get("layers"); } return args; @@ -190,13 +189,9 @@ OSM = { layers = args.layers || ""; } - center = center.wrap(); layers = layers.replace("M", ""); - var precision = OSM.zoomPrecision(zoom), - hash = "#map=" + zoom + - "/" + center.lat.toFixed(precision) + - "/" + center.lng.toFixed(precision); + let hash = "#map=" + [zoom, ...OSM.cropLocation(center, zoom)].join("/"); if (layers) { hash += "&layers=" + layers; @@ -211,11 +206,16 @@ OSM = { return Math.ceil(Math.log10(pixels / degrees)); }, + cropLocation: function (latLng, zoom) { + const precision = OSM.zoomPrecision(zoom), + wrapped = latLng.wrap(); + return [wrapped.lat, wrapped.lng].map(c => c.toFixed(precision)); + }, + locationCookie: function (map) { - var center = map.getCenter().wrap(), - zoom = map.getZoom(), - precision = OSM.zoomPrecision(zoom); - return [center.lng.toFixed(precision), center.lat.toFixed(precision), zoom, map.getLayersCode()].join("|"); + const zoom = map.getZoom(), + center = OSM.cropLocation(map.getCenter(), zoom).reverse(); + return [...center, zoom, map.getLayersCode()].join("|"); }, distance: function (latlng1, latlng2) {