]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/osm.js.erb
Merge pull request #5676 from tomhughes/spam-score-reports
[rails.git] / app / assets / javascripts / osm.js.erb
index 749cf5b7736767b6e52a59e70c02babac07d9022..25d6596c2cd6fb160ef54bdba6641ee79e6c8a76 100644 (file)
@@ -44,8 +44,8 @@ OSM = {
   CLOSED_NOTE_MARKER: <%= image_path("closed_note_marker.svg").to_json %>,
 
   apiUrl: function (object) {
   CLOSED_NOTE_MARKER: <%= image_path("closed_note_marker.svg").to_json %>,
 
   apiUrl: function (object) {
-    var apiType = object.type === "note" ? "notes" : object.type;
-    var url = "/api/" + OSM.API_VERSION + "/" + apiType + "/" + object.id;
+    const apiType = object.type === "note" ? "notes" : object.type;
+    let url = "/api/" + OSM.API_VERSION + "/" + apiType + "/" + object.id;
 
     if (object.type === "way" || object.type === "relation") {
       url += "/full";
 
     if (object.type === "way" || object.type === "relation") {
       url += "/full";
@@ -57,12 +57,13 @@ OSM = {
   },
 
   params: function (search) {
   },
 
   params: function (search) {
-    var query = search || window.location.search;
+    const query = search || window.location.search;
     return Object.fromEntries(new URLSearchParams(query));
   },
 
   mapParams: function (search) {
     return Object.fromEntries(new URLSearchParams(query));
   },
 
   mapParams: function (search) {
-    var params = OSM.params(search), mapParams = {};
+    const params = OSM.params(search),
+          mapParams = {};
 
     if (params.mlon && params.mlat) {
       mapParams.marker = true;
 
     if (params.mlon && params.mlat) {
       mapParams.marker = true;
@@ -71,60 +72,55 @@ OSM = {
     }
 
     // Old-style object parameters; still in use for edit links e.g. /edit?way=1234
     }
 
     // Old-style object parameters; still in use for edit links e.g. /edit?way=1234
-    if (params.node) {
-      mapParams.object = { type: "node", id: parseInt(params.node, 10) };
-    } else if (params.way) {
-      mapParams.object = { type: "way", id: parseInt(params.way, 10) };
-    } else if (params.relation) {
-      mapParams.object = { type: "relation", id: parseInt(params.relation, 10) };
-    } else if (params.note) {
-      mapParams.object = { type: "note", id: parseInt(params.note, 10) };
+    for (const type of ["node", "way", "relation", "note"]) {
+      if (params[type]) {
+        mapParams.object = { type, id: parseInt(params[type], 10) };
+      }
     }
 
     }
 
-    var hash = OSM.parseHash(location.hash);
+    const hash = OSM.parseHash(location.hash);
 
     const loc = Cookies.get("_osm_location")?.split("|");
 
 
     const loc = Cookies.get("_osm_location")?.split("|");
 
+    function bboxToLatLngBounds({ minlon, minlat, maxlon, maxlat }) {
+      return L.latLngBounds([minlat, minlon], [maxlat, maxlon]);
+    }
+
     // Decide on a map starting position. Various ways of doing this.
     if (hash.center) {
       mapParams.lon = hash.center.lng;
       mapParams.lat = hash.center.lat;
       mapParams.zoom = hash.zoom;
     } else if (params.bbox) {
     // Decide on a map starting position. Various ways of doing this.
     if (hash.center) {
       mapParams.lon = hash.center.lng;
       mapParams.lat = hash.center.lat;
       mapParams.zoom = hash.zoom;
     } else if (params.bbox) {
-      var bbox = params.bbox.split(",");
-      mapParams.bounds = L.latLngBounds(
-        [parseFloat(bbox[1]), parseFloat(bbox[0])],
-        [parseFloat(bbox[3]), parseFloat(bbox[2])]);
+      const [minlon, minlat, maxlon, maxlat] = params.bbox.split(",");
+      mapParams.bounds = bboxToLatLngBounds({ minlon, minlat, maxlon, maxlat });
     } else if (params.minlon && params.minlat && params.maxlon && params.maxlat) {
     } else if (params.minlon && params.minlat && params.maxlon && params.maxlat) {
-      mapParams.bounds = L.latLngBounds(
-        [parseFloat(params.minlat), parseFloat(params.minlon)],
-        [parseFloat(params.maxlat), parseFloat(params.maxlon)]);
+      mapParams.bounds = bboxToLatLngBounds(params);
     } else if (params.mlon && params.mlat) {
     } else if (params.mlon && params.mlat) {
-      mapParams.lon = parseFloat(params.mlon);
-      mapParams.lat = parseFloat(params.mlat);
-      mapParams.zoom = parseInt(params.zoom || 12, 10);
+      mapParams.lon = params.mlon;
+      mapParams.lat = params.mlat;
+      mapParams.zoom = params.zoom || 12;
     } else if (loc) {
     } else if (loc) {
-      mapParams.lon = parseFloat(loc[0]);
-      mapParams.lat = parseFloat(loc[1]);
-      mapParams.zoom = parseInt(loc[2], 10);
+      [mapParams.lon, mapParams.lat, mapParams.zoom] = loc;
     } else if (OSM.home) {
       mapParams.lon = OSM.home.lon;
       mapParams.lat = OSM.home.lat;
       mapParams.zoom = 10;
     } else if (OSM.location) {
     } else if (OSM.home) {
       mapParams.lon = OSM.home.lon;
       mapParams.lat = OSM.home.lat;
       mapParams.zoom = 10;
     } else if (OSM.location) {
-      mapParams.bounds = L.latLngBounds(
-        [OSM.location.minlat, OSM.location.minlon],
-        [OSM.location.maxlat, OSM.location.maxlon]
-      );
+      mapParams.bounds = bboxToLatLngBounds(OSM.location);
     } else {
       mapParams.lon = -0.1;
       mapParams.lat = 51.5;
     } else {
       mapParams.lon = -0.1;
       mapParams.lat = 51.5;
-      mapParams.zoom = parseInt(params.zoom || 5, 10);
+      mapParams.zoom = params.zoom || 5;
     }
 
     }
 
+    if (typeof mapParams.lat === "string") mapParams.lat = parseFloat(mapParams.lat);
+    if (typeof mapParams.lon === "string") mapParams.lon = parseFloat(mapParams.lon);
+    if (typeof mapParams.zoom === "string") mapParams.zoom = parseInt(mapParams.zoom, 10);
+
     mapParams.layers = hash.layers || (loc && loc[3]) || "";
 
     mapParams.layers = hash.layers || (loc && loc[3]) || "";
 
-    var scale = parseFloat(params.scale);
+    const scale = parseFloat(params.scale);
     if (scale > 0) {
       mapParams.zoom = Math.log(360.0 / (scale * 512.0)) / Math.log(2.0);
     }
     if (scale > 0) {
       mapParams.zoom = Math.log(360.0 / (scale * 512.0)) / Math.log(2.0);
     }
@@ -133,19 +129,19 @@ OSM = {
   },
 
   parseHash: function (hash) {
   },
 
   parseHash: function (hash) {
-    var args = {};
+    const args = {};
 
 
-    var i = hash.indexOf("#");
+    const i = hash.indexOf("#");
     if (i < 0) {
       return args;
     }
 
     const hashParams = new URLSearchParams(hash.slice(i + 1));
 
     if (i < 0) {
       return args;
     }
 
     const hashParams = new URLSearchParams(hash.slice(i + 1));
 
-    var map = (hashParams.get("map") || "").split("/"),
-        zoom = parseInt(map[0], 10),
-        lat = parseFloat(map[1]),
-        lon = parseFloat(map[2]);
+    const map = (hashParams.get("map") || "").split("/"),
+          zoom = parseInt(map[0], 10),
+          lat = parseFloat(map[1]),
+          lon = parseFloat(map[2]);
 
     if (!isNaN(zoom) && !isNaN(lat) && !isNaN(lon)) {
       args.center = new L.LatLng(lat, lon);
 
     if (!isNaN(zoom) && !isNaN(lat) && !isNaN(lon)) {
       args.center = new L.LatLng(lat, lon);
@@ -160,7 +156,7 @@ OSM = {
   },
 
   formatHash: function (args) {
   },
 
   formatHash: function (args) {
-    var center, zoom, layers;
+    let center, zoom, layers;
 
     if (args instanceof L.Map) {
       center = args.getCenter();
 
     if (args instanceof L.Map) {
       center = args.getCenter();
@@ -184,8 +180,8 @@ OSM = {
   },
 
   zoomPrecision: function (zoom) {
   },
 
   zoomPrecision: function (zoom) {
-    var pixels = Math.pow(2, 8 + zoom);
-    var degrees = 180;
+    const pixels = Math.pow(2, 8 + zoom);
+    const degrees = 180;
     return Math.ceil(Math.log10(pixels / degrees));
   },
 
     return Math.ceil(Math.log10(pixels / degrees));
   },
 
@@ -202,12 +198,12 @@ OSM = {
   },
 
   distance: function (latlng1, latlng2) {
   },
 
   distance: function (latlng1, latlng2) {
-    var lat1 = latlng1.lat * Math.PI / 180,
-        lng1 = latlng1.lng * Math.PI / 180,
-        lat2 = latlng2.lat * Math.PI / 180,
-        lng2 = latlng2.lng * Math.PI / 180,
-        latdiff = lat2 - lat1,
-        lngdiff = lng2 - lng1;
+    const lat1 = latlng1.lat * Math.PI / 180,
+          lng1 = latlng1.lng * Math.PI / 180,
+          lat2 = latlng2.lat * Math.PI / 180,
+          lng2 = latlng2.lng * Math.PI / 180,
+          latdiff = lat2 - lat1,
+          lngdiff = lng2 - lng1;
 
     return 6372795 * 2 * Math.asin(
       Math.sqrt(
 
     return 6372795 * 2 * Math.asin(
       Math.sqrt(