]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/index/notes.js.erb
Merge branch 'master' into notes
[rails.git] / app / assets / javascripts / index / notes.js.erb
index 674aa92040ab6eeb790acd26a7c896e736cc9504..5ecaca7dd61c3f20d3db0eff4dbc4eca16f7a8a5 100644 (file)
@@ -1,3 +1,6 @@
+//= require templates/notes/show
+//= require templates/notes/new
+
 $(document).ready(function () {
   var params = OSM.mapParams();
   var newNotes;
@@ -14,36 +17,79 @@ $(document).ready(function () {
     newNotes = undefined;
   }
 
-  function describeNote(n) {
-    var description = "<h2>Note " + n.id + "</h2>";
+  function createNote(feature, form) {
+    var location = unproj(feature.geometry.getBounds().getCenterLonLat());
+
+    $(form).find("input[type=submit]").prop("disabled", true);
+
+    $.ajax($("#createnoteanchor").attr("href"), {
+      type: "POST",
+      data: {
+        lon: location.lon,
+        lat: location.lat,
+        text: $(form.text).val()
+      },
+      success: function (data) {
+        map.noteSelector.unselect(feature);
+
+        feature.attributes = data.properties;
+
+        map.noteLayer.drawFeature(feature);
 
-    n.comments.forEach(function (c) {
-      description += "<p><small class='deemphasize'>" + c.action + " by ";
-      description += c.user + " at " + c.date + "</small><br/>" + c.text + "</p>";
+        map.noteMover.deactivate();
+      }
     });
+  }
 
-    return description;
+  function updateNote(feature, form, close) {
+    var url = close ? feature.attributes.close_url : feature.attributes.comment_url;
+
+    $(form).find("input[type=submit]").prop("disabled", true);
+
+    $.ajax(url, {
+      type: "POST",
+      data: {
+        text: $(form.text).val()
+      },
+      success: function (data) {
+        map.noteSelector.unselect(feature)
+        
+        feature.attributes = data.properties;
+        
+        map.noteSelector.select(feature)
+      }
+    });
   }
 
   function noteSelected(o) {
     var feature = o.feature;
     var location = feature.geometry.getBounds().getCenterLonLat();
     var content;
-    var close;
+    var onClose;
 
     if (feature.attributes.status === "new") {
-      var form = $("#new-note").clone();
-      form.removeClass("hidden");
-      content = form.html();
-      close = false;
+      content = JST["templates/notes/new"]();
+
+      onClose = function (e) {
+        feature.attributes.status = "cancelled";
+
+        map.noteSelector.unselect(feature);
+        map.noteLayer.removeFeatures(feature);
+
+        feature.destroy();
+
+        map.noteMover.deactivate();
+      };
     } else {
-      content = describeNote(feature.attributes);
-      close = true;
+      content = JST["templates/notes/show"]({ note: feature.attributes });
+
+      onClose = function (e) {
+        map.noteSelector.unselect(feature)
+      };
     };
 
     feature.popup = new OpenLayers.Popup.FramedCloud(
-      feature.attributes.id, location, null, content, null, close,
-      function (e) { map.noteSelector.unselect(feature) }
+      feature.attributes.id, location, null, content, null, true, onClose
     );
 
     map.addPopup(feature.popup);
@@ -51,43 +97,32 @@ $(document).ready(function () {
 
     $(feature.popup.contentDiv).find("textarea").autoGrow();
 
-    $(feature.popup.contentDiv).find("input#note-submit").click(function (e) {
-      var location = unproj(feature.geometry.getBounds().getCenterLonLat());
-      var form = $(e.target).parents("form").first();
-
-      $.ajax(form.prop("action"), {
-        type: form.prop("method"),
-        data: {
-          lon: location.lon,
-          lat: location.lat,
-          text: form.find("textarea#comment").val()
-        },
-        success: function (data) {
-          map.noteSelector.unselect(feature);
-
-          feature.attributes.status = "open";
-          feature.attributes.id = data;
-
-          map.noteLayer.drawFeature(feature);
-
-          map.noteMover.deactivate();
-        }
-      });
+    $(feature.popup.contentDiv).find("textarea").on("input", function (e) {
+      var form = e.target.form;
 
-      e.preventDefault();
+      if ($(e.target).val() == "") {
+        $(form.close).val(I18n.t("javascripts.notes.show.close"));
+      } else {
+        $(form.close).val(I18n.t("javascripts.notes.show.comment_and_close"));
+      }
     });
 
-    $(feature.popup.contentDiv).find("input#note-cancel").click(function (e) {
-      feature.attributes.status = "cancelled";
+    $(feature.popup.contentDiv).find("input#note-add").click(function (e) {
+      e.preventDefault();
 
-      map.noteSelector.unselect(feature);
-      map.noteLayer.removeFeatures(feature);
+      createNote(feature, e.target.form);
+    });
 
-      feature.destroy();
+    $(feature.popup.contentDiv).find("input#note-comment").click(function (e) {
+      e.preventDefault();
 
-      map.noteMover.deactivate();
+      updateNote(feature, e.target.form, false);
+    });
 
+    $(feature.popup.contentDiv).find("input#note-close").click(function (e) {
       e.preventDefault();
+
+      updateNote(feature, e.target.form, true);
     });
 
     feature.popup.updateSize();