diff --git a/app/assets/javascripts/notes.js.erb b/app/assets/javascripts/notes.js.erb index 72b7b2118..4df32264c 100644 --- a/app/assets/javascripts/notes.js.erb +++ b/app/assets/javascripts/notes.js.erb @@ -1,4 +1,4 @@ -function addNoteLayer(map, notesUrl, newNoteControls, minZoom) { +function addNoteLayer(map, notesUrl, newNoteControls, newNoteForm, minZoom) { var newNotes; var noteCallback = function (scope, response) { @@ -22,17 +22,69 @@ function addNoteLayer(map, notesUrl, newNoteControls, minZoom) { var noteSelected = function (o) { var feature = o.feature; var location = feature.geometry.getBounds().getCenterLonLat(); + var content; + var close; + + if (feature.attributes.status === "new") { + var form = newNoteForm.clone(); + form.removeClass("hidden"); + content = form.html(); + close = false; + } else { + content = "
" + feature.attributes.id + "
"; + close = true; + }; feature.popup = new OpenLayers.Popup.FramedCloud( - feature.attributes.id, location, null, - "" + feature.attributes.id + "
", - null, - feature.attributes.status !== "new", + feature.attributes.id, location, null, content, null, close, function (e) { map.noteSelector.unselect(feature) } ); map.addPopup(feature.popup); // feature.popup.show(); + + $(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(); + } + }); + + e.preventDefault(); + }); + + $(feature.popup.contentDiv).find("input#note-cancel").click(function (e) { + feature.attributes.status = "cancelled"; + + map.noteSelector.unselect(feature); + map.noteLayer.removeFeatures(feature); + + feature.destroy(); + + map.noteMover.deactivate(); + + e.preventDefault(); + }); + + feature.popup.updateSize(); }; var noteUnselected = function (o) { diff --git a/app/views/notes/_new.html.erb b/app/views/notes/_new.html.erb new file mode 100644 index 000000000..8a34093c3 --- /dev/null +++ b/app/views/notes/_new.html.erb @@ -0,0 +1,12 @@ +
+ Move the marker to the correct position and
+ describe the problem in the box below:
+