diff --git a/app/assets/javascripts/index/note.js b/app/assets/javascripts/index/note.js index 24d24f8aef..f49d8aac43 100644 --- a/app/assets/javascripts/index/note.js +++ b/app/assets/javascripts/index/note.js @@ -37,31 +37,35 @@ OSM.Note = function (map) { }; function initialize(path, id) { - content.find("button[type=submit]").on("click", function (e) { + content.find("button[name]").on("click", function (e) { e.preventDefault(); var data = $(e.target).data(); - var form = e.target.form; - - $(form).find("button[type=submit]").prop("disabled", true); - - $.ajax({ + var name = $(e.target).attr("name"); + var ajaxSettings = { url: data.url, type: data.method, oauth: true, - data: { text: $(form.text).val() }, - success: function () { - OSM.loadSidebarContent(path, function () { + success: () => { + OSM.loadSidebarContent(path, () => { initialize(path, id); moveToNote(); }); }, - error: function (xhr) { - $(form).find("#comment-error") + error: updateButtons + }; + + if (name !== "subscribe" && name !== "unsubscribe") { + ajaxSettings.data = { text: $("textarea").val() }; + ajaxSettings.error = (xhr) => { + content.find("#comment-error") .text(xhr.responseText) .prop("hidden", false); - updateButtons(form); - } - }); + updateButtons(); + }; + } + + content.find("button[name]").prop("disabled", true); + $.ajax(ajaxSettings); }); content.find("textarea").on("input", function (e) { @@ -82,14 +86,16 @@ OSM.Note = function (map) { } } - 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); + function updateButtons() { + var resolveButton = content.find("button[name='close']"); + var commentButton = content.find("button[name='comment']"); + + content.find("button[name]").prop("disabled", false); + if (content.find("textarea").val() === "") { + resolveButton.text(resolveButton.data("defaultActionText")); + commentButton.prop("disabled", true); } else { - $(form.close).text($(form.close).data("commentActionText")); - $(form.comment).prop("disabled", false); + resolveButton.text(resolveButton.data("commentActionText")); } } diff --git a/app/views/notes/show.html.erb b/app/views/notes/show.html.erb index 4aa2e7fd34..8dda65c25d 100644 --- a/app/views/notes/show.html.erb +++ b/app/views/notes/show.html.erb @@ -28,6 +28,32 @@
<%= t ".anonymous_warning" %>
<% end -%> +
diff --git a/config/locales/en.yml b/config/locales/en.yml index f68488c09c..727b678324 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -2984,6 +2984,9 @@ en: report: report this note coordinates_html: "%{latitude}, %{longitude}" anonymous_warning: This note includes comments from anonymous users which should be independently verified. + discussion: Discussion + subscribe: Subscribe + unsubscribe: Unsubscribe hide: Hide resolve: Resolve reactivate: Reactivate diff --git a/test/system/note_comments_test.rb b/test/system/note_comments_test.rb index 7c830cc373..0577992f27 100644 --- a/test/system/note_comments_test.rb +++ b/test/system/note_comments_test.rb @@ -22,7 +22,7 @@ class NoteCommentsTest < ApplicationSystemTestCase end end - def test_add_comment + test "can add comment" do note = create(:note_with_comments) user = create(:user) sign_in_as(user) @@ -125,4 +125,49 @@ def test_add_comment assert_button "Reactivate", :disabled => false end end + + test "no subscribe button when not logged in" do + note = create(:note_with_comments) + visit note_path(note) + + within_sidebar do + assert_no_button "Subscribe" + assert_no_button "Unsubscribe" + end + end + + test "can subscribe" do + note = create(:note_with_comments) + user = create(:user) + sign_in_as(user) + visit note_path(note) + + within_sidebar do + assert_button "Subscribe" + assert_no_button "Unsubscribe" + + click_on "Subscribe" + + assert_no_button "Subscribe" + assert_button "Unsubscribe" + end + end + + test "can unsubscribe" do + note = create(:note_with_comments) + user = create(:user) + create(:note_subscription, :note => note, :user => user) + sign_in_as(user) + visit note_path(note) + + within_sidebar do + assert_no_button "Subscribe" + assert_button "Unsubscribe" + + click_on "Unsubscribe" + + assert_button "Subscribe" + assert_no_button "Unsubscribe" + end + end end