From 2624faa256e51d4ff24a9948435b93452791cc56 Mon Sep 17 00:00:00 2001 From: Anton Khorev Date: Thu, 24 Oct 2024 06:02:07 +0300 Subject: [PATCH] Add subscribe/unsubscribe buttons to note pages --- app/assets/javascripts/index/note.js | 48 ++++++++++++++++------------ app/views/notes/show.html.erb | 26 +++++++++++++++ config/locales/en.yml | 3 ++ test/system/note_comments_test.rb | 47 ++++++++++++++++++++++++++- 4 files changed, 102 insertions(+), 22 deletions(-) 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 -%> +
+
+

<%= t(".discussion") %>

+
+ + <% if current_user %> +
+ <% if @note.subscribers.exists?(current_user.id) %> + <%= tag.button t(".unsubscribe"), + :type => "button", + :class => "btn btn-sm btn-primary", + :name => "unsubscribe", + :data => { :method => "DELETE", + :url => api_note_subscription_path(@note) } %> + <% else %> + <%= tag.button t(".subscribe"), + :type => "button", + :class => "btn btn-sm btn-primary", + :name => "subscribe", + :data => { :method => "POST", + :url => api_note_subscription_path(@note) } %> + <% end %> +
+ <% end %> +
+ <% if @note_comments.length > 1 %>