]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/osm.js.erb
Merge remote-tracking branch 'upstream/pull/5600'
[rails.git] / app / assets / javascripts / osm.js.erb
index 602d3af10afb65049f194af1dca778832686ec65..254e00810cd6201e459388dd5754b9df9c0f57f6 100644 (file)
@@ -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) {