From 1f06652075fd75f4c602dc55b51b1ef058fcb65e Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Fri, 21 Sep 2012 09:05:56 +0100 Subject: [PATCH] Add support for creating new notes --- app/assets/javascripts/notes.js.erb | 62 ++++++++++++++++++++++++++--- app/views/notes/_new.html.erb | 12 ++++++ app/views/site/index.html.erb | 4 +- 3 files changed, 72 insertions(+), 6 deletions(-) create mode 100644 app/views/notes/_new.html.erb 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: +

+<%= form_tag notes_path do %> + <%= hidden_field_tag "lon" %> + <%= hidden_field_tag "lat" %> + <%= text_area_tag "comment", "", :cols => 40, :rows => 10 %> +
+ <%= submit_tag "Submit", :id => "note-submit" %> + <%= submit_tag "Cancel", :id => "note-cancel" %> +<% end %> diff --git a/app/views/site/index.html.erb b/app/views/site/index.html.erb index 58bc59c20..d613754f2 100644 --- a/app/views/site/index.html.erb +++ b/app/views/site/index.html.erb @@ -45,6 +45,8 @@ + +