]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/index/new_note.js
Decrease new note marker opacity when zoomed out
[rails.git] / app / assets / javascripts / index / new_note.js
index 712d03dc50f780a6f2f740dc51e3ac9a94ba68d1..76d134ce6bd4de0d6282bb25d148451f8c6e96d7 100644 (file)
@@ -77,6 +77,45 @@ OSM.NewNote = function (map) {
     halo = null;
   }
 
     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("dragend", function () {
+      content.find("textarea").focus();
+    });
+  }
+
+  function removeNewNoteMarker() {
+    removeHalo();
+    if (newNoteMarker) map.removeLayer(newNoteMarker);
+    newNoteMarker = null;
+  }
+
+  function updateControls() {
+    const zoomedOut = addNoteButton.hasClass("disabled");
+    const withoutText = content.find("textarea").val() === "";
+
+    content.find("#new-note-zoom-warning").prop("hidden", !zoomedOut);
+    content.find("input[type=submit]").prop("disabled", zoomedOut || withoutText);
+    if (newNoteMarker) newNoteMarker.setOpacity(zoomedOut ? 0.5 : 0.9);
+  }
+
   page.pushstate = page.popstate = function (path) {
     OSM.loadSidebarContent(path, function () {
       page.load(path);
   page.pushstate = page.popstate = function (path) {
     OSM.loadSidebarContent(path, function () {
       page.load(path);
@@ -84,9 +123,6 @@ OSM.NewNote = function (map) {
   };
 
   page.load = function (path) {
   };
 
   page.load = function (path) {
-    if (addNoteButton.hasClass("disabled")) return;
-    if (addNoteButton.hasClass("active")) return;
-
     addNoteButton.addClass("active");
 
     map.addLayer(noteLayer);
     addNoteButton.addClass("active");
 
     map.addLayer(noteLayer);
@@ -104,36 +140,12 @@ OSM.NewNote = function (map) {
       padding: [50, 50]
     });
 
       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")
 
     content.find("textarea")
-      .on("input", disableWhenBlank)
+      .on("input", updateControls)
       .focus();
 
       .focus();
 
-    function disableWhenBlank(e) {
-      $(e.target.form.add).prop("disabled", $(e.target).val() === "");
-    }
-
     content.find("input[type=submit]").on("click", function (e) {
       const location = newNoteMarker.getLatLng().wrap();
       const text = content.find("textarea").val();
     content.find("input[type=submit]").on("click", function (e) {
       const location = newNoteMarker.getLatLng().wrap();
       const text = content.find("textarea").val();
@@ -146,19 +158,19 @@ OSM.NewNote = function (map) {
       createNote(location, text, (feature) => {
         content.find("textarea").val("");
         addCreatedNoteMarker(feature);
       createNote(location, text, (feature) => {
         content.find("textarea").val("");
         addCreatedNoteMarker(feature);
-        map.removeLayer(newNoteMarker);
-        newNoteMarker = null;
-        addNoteButton.removeClass("active");
         OSM.router.route("/note/" + feature.properties.id);
       });
     });
 
         OSM.router.route("/note/" + feature.properties.id);
       });
     });
 
+    addNoteButton.on("disabled enabled", updateControls);
+    updateControls();
+
     return map.getState();
   };
 
   page.unload = function () {
     return map.getState();
   };
 
   page.unload = function () {
-    if (newNoteMarker) map.removeLayer(newNoteMarker);
-    removeHalo();
+    addNoteButton.off("disabled enabled", updateControls);
+    removeNewNoteMarker();
     addNoteButton.removeClass("active");
   };
 
     addNoteButton.removeClass("active");
   };