Skip to content

Commit

Permalink
Add subscribe/unsubscribe buttons to note pages
Browse files Browse the repository at this point in the history
  • Loading branch information
AntonKhorev committed Oct 24, 2024
1 parent 0837c28 commit 1de0127
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 4 deletions.
32 changes: 29 additions & 3 deletions app/assets/javascripts/index/note.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,37 @@ OSM.Note = function (map) {
};

function initialize(path, id, callback) {
content.find("button[type=submit]").on("click", function (e) {
content.find("button.btn[type=button]").on("click", function (e) {
e.preventDefault();
var data = $(e.target).data();
var form = e.target.form;

$(form).find("button[type=submit]").prop("disabled", true);
content.find("button.btn[type=button]").prop("disabled", true);
$(form).find("button.btn[type=submit]").prop("disabled", true);

$.ajax({
url: data.url,
type: data.method,
oauth: true,
success: function () {
OSM.loadSidebarContent(path, function () {
initialize(path, id, moveToNote);
});
},
error: function () {
content.find("button.btn[type=button]").prop("disabled", false);
updateButtons(form);
}
});
});

content.find("button.btn[type=submit]").on("click", function (e) {
e.preventDefault();
var data = $(e.target).data();
var form = e.target.form;

content.find("button.btn[type=button]").prop("disabled", true);
$(form).find("button.btn[type=submit]").prop("disabled", true);

$.ajax({
url: data.url,
Expand All @@ -57,6 +82,7 @@ OSM.Note = function (map) {
$(form).find("#comment-error")
.text(xhr.responseText)
.prop("hidden", false);
content.find("button.btn[type=button]").prop("disabled", false);
updateButtons(form);
}
});
Expand All @@ -83,7 +109,7 @@ OSM.Note = function (map) {
}

function updateButtons(form) {
$(form).find("button[type=submit]").prop("disabled", false);
$(form).find("button.btn[type=submit]").prop("disabled", false);
if ($(form.text).val() === "") {
$(form.close).text($(form.close).data("defaultActionText"));
$(form.comment).prop("disabled", true);
Expand Down
26 changes: 26 additions & 0 deletions app/views/notes/show.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,32 @@
<p class='alert alert-warning'><%= t ".anonymous_warning" %></p>
<% end -%>

<div class="row">
<div class="col">
<h4><%= t(".discussion") %></h4>
</div>

<% if current_user %>
<div class="col-auto">
<% 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 %>
</div>
<% end %>
</div>

<% if @note_comments.length > 1 %>
<div class='note-comments'>
<ul class="list-unstyled">
Expand Down
3 changes: 3 additions & 0 deletions config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
47 changes: 46 additions & 1 deletion test/system/note_comments_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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

0 comments on commit 1de0127

Please sign in to comment.