]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/index/new_note.js
Rename updateMarker() to addCreatedNoteMarker()
[rails.git] / app / assets / javascripts / index / new_note.js
index 54c0b0db150ff25bb2c36a02b540b55cf612ba83..bd093e11adcb6fca2a45bd7fb72c6843dea0164e 100644 (file)
@@ -1,10 +1,12 @@
-OSM.NewNote = function(map) {
+//= require qs/dist/qs
+
+OSM.NewNote = function (map) {
   var noteLayer = map.noteLayer,
-    content = $('#sidebar_content'),
-    page = {},
-    addNoteButton = $(".control-note .control-button"),
-    newNote,
-    halo;
+      content = $("#sidebar_content"),
+      page = {},
+      addNoteButton = $(".control-note .control-button"),
+      newNoteMarker,
+      halo;
 
   var noteIcons = {
     "new": L.icon({
@@ -28,44 +30,26 @@ OSM.NewNote = function(map) {
     e.preventDefault();
     e.stopPropagation();
 
-    if ($(this).hasClass('disabled')) return;
+    if ($(this).hasClass("disabled")) return;
 
-    OSM.router.route('/note/new');
+    OSM.router.route("/note/new");
   });
 
-  function createNote(marker, form, url) {
-    var location = marker.getLatLng().wrap();
-
-    marker.options.draggable = false;
-    marker.dragging.disable();
-
-    $(form).find("input[type=submit]").prop("disabled", true);
-
+  function createNote(location, text, callback) {
     $.ajax({
-      url: url,
+      url: "/api/0.6/notes.json",
       type: "POST",
       oauth: true,
       data: {
         lat: location.lat,
         lon: location.lng,
-        text: $(form.text).val()
+        text
       },
-      success: function (feature) {
-        noteCreated(feature, marker);
-      }
+      success: callback
     });
-
-    function noteCreated(feature, marker) {
-      content.find("textarea").val("");
-      updateMarker(feature);
-      newNote = null;
-      noteLayer.removeLayer(marker);
-      addNoteButton.removeClass("active");
-      OSM.router.route('/note/' + feature.properties.id);
-    }
   }
 
-  function updateMarker(feature) {
+  function addCreatedNoteMarker(feature) {
     var marker = L.marker(feature.geometry.coordinates.reverse(), {
       icon: noteIcons[feature.properties.status],
       opacity: 0.9,
@@ -83,10 +67,12 @@ OSM.NewNote = function(map) {
   };
 
   function newHalo(loc, a) {
-    if (a === 'dragstart' && map.hasLayer(halo)) {
+    var hasHalo = halo && map.hasLayer(halo);
+
+    if (a === "dragstart" && hasHalo) {
       map.removeLayer(halo);
     } else {
-      if (map.hasLayer(halo)) map.removeLayer(halo);
+      if (hasHalo) map.removeLayer(halo);
 
       halo = L.circleMarker(loc, {
         weight: 2.5,
@@ -107,50 +93,34 @@ OSM.NewNote = function(map) {
 
     map.addLayer(noteLayer);
 
-    var params = querystring.parse(path.substring(path.indexOf('?') + 1));
+    var params = Qs.parse(path.substring(path.indexOf("?") + 1));
     var markerLatlng;
 
     if (params.lat && params.lon) {
       markerLatlng = L.latLng(params.lat, params.lon);
-
-      var markerPosition = map.latLngToContainerPoint(markerLatlng),
-          mapSize = map.getSize(),
-          panBy = L.point(0, 0);
-
-      if (markerPosition.x < 50) {
-        panBy.x = markerPosition.x - 50;
-      } else if (markerPosition.x > mapSize.x - 50) {
-        panBy.x = 50 - mapSize.x + markerPosition.x;
-      }
-
-      if (markerPosition.y < 50) {
-        panBy.y = markerPosition.y - 50;
-      } else if (markerPosition.y > mapSize.y - 50) {
-        panBy.y = 50 - mapSize.y + markerPosition.y;
-      }
-
-      map.panBy(panBy);
     } else {
       markerLatlng = map.getCenter();
     }
 
-    newNote = L.marker(markerLatlng, {
-      icon: noteIcons["new"],
+    map.panInside(markerLatlng, {
+      padding: [50, 50]
+    });
+
+    newNoteMarker = L.marker(markerLatlng, {
+      icon: noteIcons.new,
       opacity: 0.9,
       draggable: true
     });
 
-    newNote.on("dragstart dragend", function(a) {
-      newHalo(newNote.getLatLng(), a.type);
+    newNoteMarker.on("dragstart dragend", function (a) {
+      newHalo(newNoteMarker.getLatLng(), a.type);
     });
 
-    newNote.addTo(noteLayer);
-    newHalo(newNote.getLatLng());
+    newNoteMarker.addTo(noteLayer);
+    newHalo(newNoteMarker.getLatLng());
 
-    newNote.on("remove", function () {
+    newNoteMarker.on("remove", function () {
       addNoteButton.removeClass("active");
-    }).on("dragstart",function () {
-      $(newNote).stopTime("removenote");
     }).on("dragend", function () {
       content.find("textarea").focus();
     });
@@ -163,17 +133,31 @@ OSM.NewNote = function(map) {
       $(e.target.form.add).prop("disabled", $(e.target).val() === "");
     }
 
-    content.find('input[type=submit]').on('click', function (e) {
+    content.find("input[type=submit]").on("click", function (e) {
+      const location = newNoteMarker.getLatLng().wrap();
+      const text = content.find("textarea").val();
+
       e.preventDefault();
-      createNote(newNote, e.target.form, '/api/0.6/notes.json');
+      $(this).prop("disabled", true);
+      newNoteMarker.options.draggable = false;
+      newNoteMarker.dragging.disable();
+
+      createNote(location, text, (feature) => {
+        content.find("textarea").val("");
+        addCreatedNoteMarker(feature);
+        noteLayer.removeLayer(newNoteMarker);
+        newNoteMarker = null;
+        addNoteButton.removeClass("active");
+        OSM.router.route("/note/" + feature.properties.id);
+      });
     });
 
     return map.getState();
   };
 
   page.unload = function () {
-    noteLayer.removeLayer(newNote);
-    map.removeLayer(halo);
+    if (newNoteMarker) noteLayer.removeLayer(newNoteMarker);
+    if (halo) map.removeLayer(halo);
     addNoteButton.removeClass("active");
   };