]> git.openstreetmap.org Git - rails.git/commitdiff
Add addNewNoteMarker() and removeNewNoteMarker() functions
authorAnton Khorev <tony29@yandex.ru>
Wed, 25 Dec 2024 01:56:59 +0000 (04:56 +0300)
committerAnton Khorev <tony29@yandex.ru>
Tue, 31 Dec 2024 23:13:59 +0000 (02:13 +0300)
This ensures that marker is always added/removed together with its halo.

app/assets/javascripts/index/new_note.js

index 712d03dc50f780a6f2f740dc51e3ac9a94ba68d1..4cab9b797517f580f2bfcfd4cde75a001009ba9c 100644 (file)
@@ -77,6 +77,38 @@ OSM.NewNote = function (map) {
     halo = null;
   }
 
+  function addNewNoteMarker(latlng) {
+    if (newNoteMarker) map.removeLayer(newNoteMarker);
+
+    newNoteMarker = L.marker(latlng, {
+      icon: noteIcons.new,
+      opacity: 0.9,
+      draggable: true
+    });
+
+    newNoteMarker.on("dragstart dragend", function (a) {
+      removeHalo();
+      if (a.type === "dragend") {
+        addHalo(newNoteMarker.getLatLng());
+      }
+    });
+
+    newNoteMarker.addTo(map);
+    addHalo(newNoteMarker.getLatLng());
+
+    newNoteMarker.on("remove", function () {
+      addNoteButton.removeClass("active");
+    }).on("dragend", function () {
+      content.find("textarea").focus();
+    });
+  }
+
+  function removeNewNoteMarker() {
+    removeHalo();
+    if (newNoteMarker) map.removeLayer(newNoteMarker);
+    newNoteMarker = null;
+  }
+
   page.pushstate = page.popstate = function (path) {
     OSM.loadSidebarContent(path, function () {
       page.load(path);
@@ -104,27 +136,7 @@ OSM.NewNote = function (map) {
       padding: [50, 50]
     });
 
-    newNoteMarker = L.marker(markerLatlng, {
-      icon: noteIcons.new,
-      opacity: 0.9,
-      draggable: true
-    });
-
-    newNoteMarker.on("dragstart dragend", function (a) {
-      removeHalo();
-      if (a.type !== "dragstart") {
-        addHalo(newNoteMarker.getLatLng());
-      }
-    });
-
-    newNoteMarker.addTo(map);
-    addHalo(newNoteMarker.getLatLng());
-
-    newNoteMarker.on("remove", function () {
-      addNoteButton.removeClass("active");
-    }).on("dragend", function () {
-      content.find("textarea").focus();
-    });
+    addNewNoteMarker(markerLatlng);
 
     content.find("textarea")
       .on("input", disableWhenBlank)
@@ -146,8 +158,7 @@ OSM.NewNote = function (map) {
       createNote(location, text, (feature) => {
         content.find("textarea").val("");
         addCreatedNoteMarker(feature);
-        map.removeLayer(newNoteMarker);
-        newNoteMarker = null;
+        removeNewNoteMarker();
         addNoteButton.removeClass("active");
         OSM.router.route("/note/" + feature.properties.id);
       });
@@ -157,8 +168,7 @@ OSM.NewNote = function (map) {
   };
 
   page.unload = function () {
-    if (newNoteMarker) map.removeLayer(newNoteMarker);
-    removeHalo();
+    removeNewNoteMarker();
     addNoteButton.removeClass("active");
   };