]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/index/note.js
Remove query result geometry when unloading the page
[rails.git] / app / assets / javascripts / index / note.js
index 85267ab93ed5d53f9c47fadf4123cf37f01c8a21..e5eb3a04148112279862854d3136ced79cbfe175 100644 (file)
@@ -1,7 +1,6 @@
 OSM.Note = function (map) {
-  var content = $('#sidebar_content'),
-    page = {},
-    halo, currentNote;
+  var content = $("#sidebar_content"),
+      page = {};
 
   var noteIcons = {
     "new": L.icon({
@@ -21,39 +20,40 @@ OSM.Note = function (map) {
     })
   };
 
-  function updateNote(form, method, url) {
-    $(form).find("input[type=submit]").prop("disabled", true);
-
-    $.ajax({
-      url: url,
-      type: method,
-      oauth: true,
-      data: {text: $(form.text).val()},
-      success: function () {
-        OSM.loadSidebarContent(window.location.pathname, page.load);
-      }
-    });
-  }
-
-  page.pushstate = page.popstate = function (path) {
-    OSM.loadSidebarContent(path, function() {
-      initialize(function() {
-        var data = $('.details').data(),
-          latLng = L.latLng(data.coordinates.split(','));
+  page.pushstate = page.popstate = function (path, id) {
+    OSM.loadSidebarContent(path, function () {
+      initialize(path, id, function () {
+        var data = $(".details").data();
+        if (!data) return;
+        var latLng = L.latLng(data.coordinates.split(","));
         if (!map.getBounds().contains(latLng)) moveToNote();
       });
     });
   };
 
-  page.load = function() {
-    initialize(moveToNote);
+  page.load = function (path, id) {
+    initialize(path, id, moveToNote);
   };
 
-  function initialize(callback) {
+  function initialize(path, id, callback) {
     content.find("input[type=submit]").on("click", function (e) {
       e.preventDefault();
       var data = $(e.target).data();
-      updateNote(e.target.form, data.method, data.url);
+      var form = e.target.form;
+
+      $(form).find("input[type=submit]").prop("disabled", true);
+
+      $.ajax({
+        url: data.url,
+        type: data.method,
+        oauth: true,
+        data: { text: $(form.text).val() },
+        success: function () {
+          OSM.loadSidebarContent(path, function () {
+            initialize(path, id, moveToNote);
+          });
+        }
+      });
     });
 
     content.find("textarea").on("input", function (e) {
@@ -68,47 +68,36 @@ OSM.Note = function (map) {
       }
     });
 
-    content.find("textarea").val('').trigger("input");
+    content.find("textarea").val("").trigger("input");
 
-    var data = $('.details').data(),
-      latLng = L.latLng(data.coordinates.split(','));
+    var data = $(".details").data();
 
-    if (!map.hasLayer(halo)) {
-      halo = L.circleMarker(latLng, {
-        weight: 2.5,
-        radius: 20,
-        fillOpacity: 0.5,
-        color: "#FF6200"
+    if (data) {
+      map.addObject({
+        type: "note",
+        id: parseInt(id, 10),
+        latLng: L.latLng(data.coordinates.split(",")),
+        icon: noteIcons[data.status]
       });
-      map.addLayer(halo);
     }
 
-    if (map.hasLayer(currentNote)) map.removeLayer(currentNote);
-    currentNote = L.marker(latLng, {
-      icon: noteIcons[data.status],
-      opacity: 1,
-      interactive: true
-    });
-
-    map.addLayer(currentNote);
-
     if (callback) callback();
   }
 
   function moveToNote() {
-    var data = $('.details').data(),
-      latLng = L.latLng(data.coordinates.split(','));
+    var data = $(".details").data();
+    if (!data) return;
+    var latLng = L.latLng(data.coordinates.split(","));
 
     if (!window.location.hash || window.location.hash.match(/^#?c[0-9]+$/)) {
       OSM.router.withoutMoveListener(function () {
-        map.setView(latLng, 15, {reset: true});
+        map.setView(latLng, 15, { reset: true });
       });
     }
   }
 
   page.unload = function () {
-    if (map.hasLayer(halo)) map.removeLayer(halo);
-    if (map.hasLayer(currentNote)) map.removeLayer(currentNote);
+    map.removeObject();
   };
 
   return page;