]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/index/layers/notes.js
Merge remote-tracking branch 'upstream/pull/5685'
[rails.git] / app / assets / javascripts / index / layers / notes.js
index c0ba35d7e1b0d6f7c2e3819af78f1a7aada91f6f..104f6f2f22cbf40d226bdfe1c411cb108c6a354f 100644 (file)
@@ -1,8 +1,9 @@
 OSM.initializeNotesLayer = function (map) {
 OSM.initializeNotesLayer = function (map) {
-  var noteLayer = map.noteLayer,
-      notes = {};
+  let noteLoader;
+  const noteLayer = map.noteLayer;
+  let notes = {};
 
 
-  var noteIcons = {
+  const noteIcons = {
     "new": L.icon({
       iconUrl: OSM.NEW_NOTE_MARKER,
       iconSize: [25, 40],
     "new": L.icon({
       iconUrl: OSM.NEW_NOTE_MARKER,
       iconSize: [25, 40],
@@ -25,6 +26,8 @@ OSM.initializeNotesLayer = function (map) {
     map.on("moveend", loadNotes);
     map.fire("overlayadd", { layer: noteLayer });
   }).on("remove", () => {
     map.on("moveend", loadNotes);
     map.fire("overlayadd", { layer: noteLayer });
   }).on("remove", () => {
+    if (noteLoader) noteLoader.abort();
+    noteLoader = null;
     map.off("moveend", loadNotes);
     noteLayer.clearLayers();
     notes = {};
     map.off("moveend", loadNotes);
     noteLayer.clearLayers();
     notes = {};
@@ -36,13 +39,20 @@ OSM.initializeNotesLayer = function (map) {
   });
 
   function updateMarker(old_marker, feature) {
   });
 
   function updateMarker(old_marker, feature) {
-    var marker = old_marker;
+    let marker = old_marker;
     if (marker) {
       marker.setIcon(noteIcons[feature.properties.status]);
     } else {
     if (marker) {
       marker.setIcon(noteIcons[feature.properties.status]);
     } else {
+      let title;
+      const description = feature.properties.comments[0];
+
+      if (description?.action === "opened") {
+        title = description.text;
+      }
+
       marker = L.marker(feature.geometry.coordinates.reverse(), {
         icon: noteIcons[feature.properties.status],
       marker = L.marker(feature.geometry.coordinates.reverse(), {
         icon: noteIcons[feature.properties.status],
-        title: feature.properties.comments[0].text,
+        title,
         opacity: 0.8,
         interactive: true
       });
         opacity: 0.8,
         interactive: true
       });
@@ -56,39 +66,35 @@ OSM.initializeNotesLayer = function (map) {
     return marker.id;
   };
 
     return marker.id;
   };
 
-  var noteLoader;
-
   function loadNotes() {
   function loadNotes() {
-    var bounds = map.getBounds();
-    var size = bounds.getSize();
+    const bounds = map.getBounds();
+    const size = bounds.getSize();
 
     if (size <= OSM.MAX_NOTE_REQUEST_AREA) {
 
     if (size <= OSM.MAX_NOTE_REQUEST_AREA) {
-      var url = "/api/" + OSM.API_VERSION + "/notes.json?bbox=" + bounds.toBBoxString();
+      const url = "/api/" + OSM.API_VERSION + "/notes.json?bbox=" + bounds.toBBoxString();
 
       if (noteLoader) noteLoader.abort();
 
 
       if (noteLoader) noteLoader.abort();
 
-      noteLoader = $.ajax({
-        url: url,
-        success: success
-      });
+      noteLoader = new AbortController();
+      fetch(url, { signal: noteLoader.signal })
+        .then(response => response.json())
+        .then(success)
+        .catch(() => {})
+        .finally(() => noteLoader = null);
     }
 
     function success(json) {
     }
 
     function success(json) {
-      var oldNotes = notes;
+      const oldNotes = notes;
       notes = {};
       notes = {};
-      json.features.forEach(updateMarkers);
-
-      function updateMarkers(feature) {
-        var marker = oldNotes[feature.properties.id];
+      for (const feature of json.features) {
+        const marker = oldNotes[feature.properties.id];
         delete oldNotes[feature.properties.id];
         notes[feature.properties.id] = updateMarker(marker, feature);
       }
 
         delete oldNotes[feature.properties.id];
         notes[feature.properties.id] = updateMarker(marker, feature);
       }
 
-      for (var id in oldNotes) {
+      for (const id in oldNotes) {
         noteLayer.removeLayer(oldNotes[id]);
       }
         noteLayer.removeLayer(oldNotes[id]);
       }
-
-      noteLoader = null;
     }
   }
 };
     }
   }
 };