]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/leaflet.map.js
Merge remote-tracking branch 'upstream/pull/5637'
[rails.git] / app / assets / javascripts / leaflet.map.js
index c45761d4eb1dbd9cb59f0a61f03ec49ac9be1123..1324532d3bb592d8272e5d5b6bcce302603899a8 100644 (file)
@@ -1,5 +1,3 @@
-//= require qs/dist/qs
-
 L.extend(L.LatLngBounds.prototype, {
   getSize: function () {
     return (this._northEast.lat - this._southWest.lat) *
@@ -108,26 +106,24 @@ L.OSM.Map = L.Map.extend({
           link.attr("target", "_blank");
         }
         return link.prop("outerHTML");
-      } else {
-        return text;
       }
+      return text;
     }
   },
 
   updateLayers: function (layerParam) {
-    var layers = layerParam || "M";
+    const oldBaseLayer = this.getMapBaseLayer();
+    let newBaseLayer;
 
-    for (let i = this.baseLayers.length - 1; i >= 0; i--) {
-      if (layers.indexOf(this.baseLayers[i].options.code) === -1) {
-        this.removeLayer(this.baseLayers[i]);
+    for (const layer of this.baseLayers) {
+      if (!newBaseLayer || layerParam.includes(layer.options.code)) {
+        newBaseLayer = layer;
       }
     }
 
-    for (let i = this.baseLayers.length - 1; i >= 0; i--) {
-      if (layers.indexOf(this.baseLayers[i].options.code) >= 0 || i === 0) {
-        this.addLayer(this.baseLayers[i]);
-        return;
-      }
+    if (newBaseLayer !== oldBaseLayer) {
+      if (oldBaseLayer) this.removeLayer(oldBaseLayer);
+      if (newBaseLayer) this.addLayer(newBaseLayer);
     }
   },
 
@@ -160,7 +156,7 @@ L.OSM.Map = L.Map.extend({
     }
 
     var url = window.location.protocol + "//" + OSM.SERVER_URL + "/",
-        query = Qs.stringify(params),
+        query = new URLSearchParams(params),
         hash = OSM.formatHash(this);
 
     if (query) url += "?" + query;
@@ -172,16 +168,15 @@ L.OSM.Map = L.Map.extend({
   getShortUrl: function (marker) {
     var zoom = this.getZoom(),
         latLng = marker && this.hasLayer(marker) ? marker.getLatLng().wrap() : this.getCenter().wrap(),
-        str = window.location.hostname.match(/^www\.openstreetmap\.org/i) ?
-          window.location.protocol + "//osm.org/go/" :
-          window.location.protocol + "//" + window.location.hostname + "/go/",
+        str = window.location.protocol + "//" + window.location.hostname.replace(/^www\.openstreetmap\.org/i, "osm.org") + "/go/",
         char_array = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_~",
         x = Math.round((latLng.lng + 180.0) * ((1 << 30) / 90.0)),
         y = Math.round((latLng.lat + 90.0) * ((1 << 30) / 45.0)),
         // JavaScript only has to keep 32 bits of bitwise operators, so this has to be
         // done in two parts. each of the parts c1/c2 has 30 bits of the total in it
         // and drops the last 4 bits of the full 64 bit Morton code.
-        c1 = interlace(x >>> 17, y >>> 17), c2 = interlace((x >>> 2) & 0x7fff, (y >>> 2) & 0x7fff),
+        c1 = interlace(x >>> 17, y >>> 17),
+        c2 = interlace((x >>> 2) & 0x7fff, (y >>> 2) & 0x7fff),
         digit,
         i;
 
@@ -210,22 +205,22 @@ L.OSM.Map = L.Map.extend({
       return (interlaced_x << 1) | interlaced_y;
     }
 
-    var params = {};
+    const params = new URLSearchParams();
     var layers = this.getLayersCode().replace("M", "");
 
     if (layers) {
-      params.layers = layers;
+      params.set("layers", layers);
     }
 
     if (marker && this.hasLayer(marker)) {
-      params.m = "";
+      params.set("m", "");
     }
 
     if (this._object) {
-      params[this._object.type] = this._object.id;
+      params.set(this._object.type, this._object.id);
     }
 
-    var query = Qs.stringify(params);
+    const query = params.toString();
     if (query) {
       str += "?" + query;
     }
@@ -316,13 +311,8 @@ L.OSM.Map = L.Map.extend({
           });
 
           map._objectLayer.interestingNode = function (node, wayNodes, relationNodes) {
-            if (object.type === "node") {
-              return true;
-            } else if (object.type === "relation") {
-              return Boolean(relationNodes[node.id]);
-            } else {
-              return false;
-            }
+            return object.type === "node" ||
+                   (object.type === "relation" && Boolean(relationNodes[node.id]));
           };
 
           map._objectLayer.addData(data);