]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/index/note.js
Add status filter to user's note page
[rails.git] / app / assets / javascripts / index / note.js
index 4da3395fb71f757da7382b4d5da2707156ef0153..24d24f8aef082ec3d17a649ec7c2ad328fcdc1ae 100644 (file)
@@ -1,7 +1,6 @@
 OSM.Note = function (map) {
   var content = $("#sidebar_content"),
 OSM.Note = function (map) {
   var content = $("#sidebar_content"),
-      page = {},
-      halo, currentNote;
+      page = {};
 
   var noteIcons = {
     "new": L.icon({
 
   var noteIcons = {
     "new": L.icon({
@@ -23,25 +22,27 @@ OSM.Note = function (map) {
 
   page.pushstate = page.popstate = function (path, id) {
     OSM.loadSidebarContent(path, function () {
 
   page.pushstate = page.popstate = function (path, id) {
     OSM.loadSidebarContent(path, function () {
-      initialize(path, id, function () {
-        var data = $(".details").data(),
-            latLng = L.latLng(data.coordinates.split(","));
-        if (!map.getBounds().contains(latLng)) moveToNote();
-      });
+      initialize(path, id);
+
+      var data = $(".details").data();
+      if (!data) return;
+      var latLng = L.latLng(data.coordinates.split(","));
+      if (!map.getBounds().contains(latLng)) moveToNote();
     });
   };
 
   page.load = function (path, id) {
     });
   };
 
   page.load = function (path, id) {
-    initialize(path, id, moveToNote);
+    initialize(path, id);
+    moveToNote();
   };
 
   };
 
-  function initialize(path, id, callback) {
-    content.find("input[type=submit]").on("click", function (e) {
+  function initialize(path, id) {
+    content.find("button[type=submit]").on("click", function (e) {
       e.preventDefault();
       var data = $(e.target).data();
       var form = e.target.form;
 
       e.preventDefault();
       var data = $(e.target).data();
       var form = e.target.form;
 
-      $(form).find("input[type=submit]").prop("disabled", true);
+      $(form).find("button[type=submit]").prop("disabled", true);
 
       $.ajax({
         url: data.url,
 
       $.ajax({
         url: data.url,
@@ -50,55 +51,52 @@ OSM.Note = function (map) {
         data: { text: $(form.text).val() },
         success: function () {
           OSM.loadSidebarContent(path, function () {
         data: { text: $(form.text).val() },
         success: function () {
           OSM.loadSidebarContent(path, function () {
-            initialize(path, id, moveToNote);
+            initialize(path, id);
+            moveToNote();
           });
           });
+        },
+        error: function (xhr) {
+          $(form).find("#comment-error")
+            .text(xhr.responseText)
+            .prop("hidden", false);
+          updateButtons(form);
         }
       });
     });
 
     content.find("textarea").on("input", function (e) {
         }
       });
     });
 
     content.find("textarea").on("input", function (e) {
-      var form = e.target.form;
-
-      if ($(e.target).val() === "") {
-        $(form.close).val(I18n.t("javascripts.notes.show.resolve"));
-        $(form.comment).prop("disabled", true);
-      } else {
-        $(form.close).val(I18n.t("javascripts.notes.show.comment_and_resolve"));
-        $(form.comment).prop("disabled", false);
-      }
+      updateButtons(e.target.form);
     });
 
     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 (!halo || !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 (currentNote && 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 updateButtons(form) {
+    $(form).find("button[type=submit]").prop("disabled", false);
+    if ($(form.text).val() === "") {
+      $(form.close).text($(form.close).data("defaultActionText"));
+      $(form.comment).prop("disabled", true);
+    } else {
+      $(form.close).text($(form.close).data("commentActionText"));
+      $(form.comment).prop("disabled", false);
+    }
   }
 
   function moveToNote() {
   }
 
   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 () {
 
     if (!window.location.hash || window.location.hash.match(/^#?c[0-9]+$/)) {
       OSM.router.withoutMoveListener(function () {
@@ -108,8 +106,7 @@ OSM.Note = function (map) {
   }
 
   page.unload = function () {
   }
 
   page.unload = function () {
-    if (map.hasLayer(halo)) map.removeLayer(halo);
-    if (map.hasLayer(currentNote)) map.removeLayer(currentNote);
+    map.removeObject();
   };
 
   return page;
   };
 
   return page;