diff --git a/app/assets/javascripts/comments.js b/app/assets/javascripts/comments.js
index 05229bce5..4e9012f1e 100644
--- a/app/assets/javascripts/comments.js
+++ b/app/assets/javascripts/comments.js
@@ -2,7 +2,8 @@
"use strict";
App.Comments = {
add_comment: function(parent_selector, response_html) {
- $(parent_selector + " .comment-list:first").prepend($(response_html));
+ $(parent_selector + " .comment-list:first").prepend($(response_html)).show("slow");
+ $(parent_selector + " .responses-count:first").removeClass("collapsed");
this.update_comments_count();
},
update_comments_count: function() {
@@ -14,6 +15,9 @@
$(this).text(new_val);
});
},
+ update_responses_count: function(comment_id, responses_count_html) {
+ $(comment_id + "_reply .responses-count").html(responses_count_html);
+ },
display_error: function(field_with_errors, error_html) {
$(error_html).insertAfter($("" + field_with_errors));
},
@@ -38,8 +42,7 @@
$("body").on("click", ".js-toggle-children", function() {
$(this).closest(".comment").find(".comment-list:first").toggle("slow");
- $(this).children(".far").toggleClass("fa-minus-square fa-plus-square");
- $(this).children(".js-child-toggle").toggle();
+ $(this).closest(".responses-count").toggleClass("collapsed");
return false;
});
}
diff --git a/app/assets/javascripts/users.js b/app/assets/javascripts/users.js
index 8f8f8ccfa..8608f4d30 100644
--- a/app/assets/javascripts/users.js
+++ b/app/assets/javascripts/users.js
@@ -2,7 +2,14 @@
"use strict";
App.Users = {
initialize: function() {
+ var observer;
$(".initialjs-avatar").initial();
+ observer = new MutationObserver(function(mutations) {
+ $.each(mutations, function(index, mutation) {
+ $(mutation.addedNodes).find(".initialjs-avatar").initial();
+ });
+ });
+ observer.observe(document.body, { childList: true, subtree: true });
}
};
}).call(this);
diff --git a/app/assets/stylesheets/layout.scss b/app/assets/stylesheets/layout.scss
index 3c195b1d8..9eb5c734b 100644
--- a/app/assets/stylesheets/layout.scss
+++ b/app/assets/stylesheets/layout.scss
@@ -2121,14 +2121,6 @@ table {
padding-left: rem-calc(18);
}
- .far {
- font-size: $small-font-size;
- left: 0;
- position: absolute;
- text-decoration: none;
- top: 2px;
- }
-
.divider {
color: $text-light;
display: inline-block;
@@ -2139,6 +2131,35 @@ table {
}
}
+ .responses-count {
+ .far {
+ @extend .fa-minus-square;
+ font-size: $small-font-size;
+ left: 0;
+ position: absolute;
+ text-decoration: none;
+ top: 2px;
+ }
+
+ .show-children {
+ display: none;
+ }
+
+ &.collapsed {
+ .far {
+ @extend .fa-plus-square;
+ }
+
+ .collapse-children {
+ display: none;
+ }
+
+ .show-children {
+ display: inline;
+ }
+ }
+ }
+
.comment-user {
margin-top: $line-height / 4;
padding: $line-height / 4 0;
diff --git a/app/views/comments/_comment.html.erb b/app/views/comments/_comment.html.erb
index 382555b62..545b379b4 100644
--- a/app/views/comments/_comment.html.erb
+++ b/app/views/comments/_comment.html.erb
@@ -85,15 +85,9 @@
<% end %>
- <% if comment.children.size > 0 %>
- <%= link_to "", class: "js-toggle-children relative" do %>
-
- <%= t("comments.comment.responses_show", count: comment.children.size) %>
- <%= t("comments.comment.responses_collapse", count: comment.children.size) %>
- <% end %>
- <% else %>
- <%= t("comments.comment.responses", count: 0) %>
- <% end %>
+
+ <%= render "comments/responses_count", count: comment.children.size %>
+
<% if user_signed_in? && !comments_closed_for_commentable?(comment.commentable) && !require_verified_resident_for_commentable?(comment.commentable, current_user) %>
|
diff --git a/app/views/comments/_responses_count.html.erb b/app/views/comments/_responses_count.html.erb
new file mode 100644
index 000000000..3915b5495
--- /dev/null
+++ b/app/views/comments/_responses_count.html.erb
@@ -0,0 +1,9 @@
+<% if count > 0 %>
+ <%= link_to "", class: "js-toggle-children relative" do %>
+
+ <%= t("comments.comment.responses_show", count: count) %>
+ <%= t("comments.comment.responses_collapse", count: count) %>
+ <% end %>
+<% else %>
+ <%= t("comments.comment.responses", count: 0) %>
+<% end %>
diff --git a/app/views/comments/create.js.erb b/app/views/comments/create.js.erb
index 1492140f0..a57b91126 100644
--- a/app/views/comments/create.js.erb
+++ b/app/views/comments/create.js.erb
@@ -2,6 +2,8 @@
var parent_id = "";
<% else -%>
var parent_id = "#" + "<%= "comment_#{@comment.parent_id}" %>";
+ var responses_count_html = "<%= j(render "comments/responses_count", count: @comment.parent.children.size) %>"
+ App.Comments.update_responses_count(parent_id, responses_count_html);
<% end -%>
App.Comments.reset_form(parent_id);
diff --git a/spec/system/comments/budget_investments_spec.rb b/spec/system/comments/budget_investments_spec.rb
index 7364c4698..c2adbbbb4 100644
--- a/spec/system/comments/budget_investments_spec.rb
+++ b/spec/system/comments/budget_investments_spec.rb
@@ -242,6 +242,38 @@ describe "Commenting Budget::Investments" do
expect(page).not_to have_selector("#js-comment-form-comment_#{comment.id}", visible: true)
end
+ scenario "Reply update parent comment responses count", :js do
+ comment = create(:comment, commentable: investment)
+
+ login_as(create(:user))
+ visit budget_investment_path(investment.budget, investment)
+
+ within ".comment", text: comment.body do
+ click_link "Reply"
+ fill_in "Leave your comment", with: "It will be done next week."
+ click_button "Publish reply"
+
+ expect(page).to have_content("1 response (collapse)")
+ end
+ end
+
+ scenario "Reply show parent comments responses when hidden", :js do
+ comment = create(:comment, commentable: investment)
+ create(:comment, commentable: investment, parent: comment)
+
+ login_as(create(:user))
+ visit budget_investment_path(investment.budget, investment)
+
+ within ".comment", text: comment.body do
+ click_link text: "1 response (collapse)"
+ click_link "Reply"
+ fill_in "Leave your comment", with: "It will be done next week."
+ click_button "Publish reply"
+
+ expect(page).to have_content("It will be done next week.")
+ end
+ end
+
scenario "Errors on reply", :js do
comment = create(:comment, commentable: investment, user: user)
diff --git a/spec/system/comments/budget_investments_valuation_spec.rb b/spec/system/comments/budget_investments_valuation_spec.rb
index c4d3c7990..87792acbd 100644
--- a/spec/system/comments/budget_investments_valuation_spec.rb
+++ b/spec/system/comments/budget_investments_valuation_spec.rb
@@ -216,6 +216,38 @@ describe "Internal valuation comments on Budget::Investments" do
expect(page).not_to have_content("It will be done next week.")
end
+ scenario "Reply update parent comment responses count", :js do
+ comment = create(:comment, :valuation, author: admin_user, commentable: investment)
+
+ login_as(valuator_user)
+ visit valuation_budget_budget_investment_path(budget, investment)
+
+ within ".comment", text: comment.body do
+ click_link "Reply"
+ fill_in "Leave your comment", with: "It will be done next week."
+ click_button "Publish reply"
+
+ expect(page).to have_content("1 response (collapse)")
+ end
+ end
+
+ scenario "Reply show parent comments responses when hidden", :js do
+ comment = create(:comment, :valuation, author: admin_user, commentable: investment)
+ create(:comment, :valuation, author: admin_user, commentable: investment, parent: comment)
+
+ login_as(valuator_user)
+ visit valuation_budget_budget_investment_path(budget, investment)
+
+ within ".comment", text: comment.body do
+ click_link text: "1 response (collapse)"
+ click_link "Reply"
+ fill_in "Leave your comment", with: "It will be done next week."
+ click_button "Publish reply"
+
+ expect(page).to have_content("It will be done next week.")
+ end
+ end
+
scenario "Errors on reply without comment text", :js do
comment = create(:comment, :valuation, author: admin_user, commentable: investment)
diff --git a/spec/system/comments/debates_spec.rb b/spec/system/comments/debates_spec.rb
index 2b8bbc3e8..ceaeede4f 100644
--- a/spec/system/comments/debates_spec.rb
+++ b/spec/system/comments/debates_spec.rb
@@ -91,8 +91,7 @@ describe "Commenting debates" do
end
scenario "can collapse comments after adding a reply", :js do
- parent_comment = create(:comment, body: "Main comment", commentable: debate)
- create(:comment, body: "First subcomment", commentable: debate, parent: parent_comment)
+ create(:comment, body: "Main comment", commentable: debate)
login_as(user)
visit debate_path(debate)
@@ -104,7 +103,7 @@ describe "Commenting debates" do
expect(page).to have_content("It will be done next week.")
- find(".fa-minus-square").click
+ click_link text: "1 response (collapse)"
expect(page).not_to have_content("It will be done next week.")
end
@@ -281,6 +280,38 @@ describe "Commenting debates" do
end
end
+ scenario "Reply update parent comment responses count", :js do
+ comment = create(:comment, commentable: debate)
+
+ login_as(create(:user))
+ visit debate_path(debate)
+
+ within ".comment", text: comment.body do
+ click_link "Reply"
+ fill_in "Leave your comment", with: "It will be done next week."
+ click_button "Publish reply"
+
+ expect(page).to have_content("1 response (collapse)")
+ end
+ end
+
+ scenario "Reply show parent comments responses when hidden", :js do
+ comment = create(:comment, commentable: debate)
+ create(:comment, commentable: debate, parent: comment)
+
+ login_as(create(:user))
+ visit debate_path(debate)
+
+ within ".comment", text: comment.body do
+ click_link text: "1 response (collapse)"
+ click_link "Reply"
+ fill_in "Leave your comment", with: "It will be done next week."
+ click_button "Publish reply"
+
+ expect(page).to have_content("It will be done next week.")
+ end
+ end
+
scenario "Errors on reply", :js do
comment = create(:comment, commentable: debate, user: user)
diff --git a/spec/system/comments/legislation_annotations_spec.rb b/spec/system/comments/legislation_annotations_spec.rb
index bb1788660..4e0663ca6 100644
--- a/spec/system/comments/legislation_annotations_spec.rb
+++ b/spec/system/comments/legislation_annotations_spec.rb
@@ -278,6 +278,46 @@ describe "Commenting legislation questions" do
expect(page).not_to have_selector("#js-comment-form-comment_#{comment.id}", visible: true)
end
+ scenario "Reply update parent comment responses count", :js do
+ manuela = create(:user, :level_two, username: "Manuela")
+ legislation_annotation = create(:legislation_annotation)
+ comment = legislation_annotation.comments.first
+
+ login_as(manuela)
+ visit legislation_process_draft_version_annotation_path(legislation_annotation.draft_version.process,
+ legislation_annotation.draft_version,
+ legislation_annotation)
+
+ within ".comment", text: comment.body do
+ click_link "Reply"
+ fill_in "Leave your comment", with: "It will be done next week."
+ click_button "Publish reply"
+
+ expect(page).to have_content("1 response (collapse)")
+ end
+ end
+
+ scenario "Reply show parent comments responses when hidden", :js do
+ manuela = create(:user, :level_two, username: "Manuela")
+ legislation_annotation = create(:legislation_annotation)
+ comment = legislation_annotation.comments.first
+ create(:comment, commentable: legislation_annotation, parent: comment)
+
+ login_as(manuela)
+ visit legislation_process_draft_version_annotation_path(legislation_annotation.draft_version.process,
+ legislation_annotation.draft_version,
+ legislation_annotation)
+
+ within ".comment", text: comment.body do
+ click_link text: "1 response (collapse)"
+ click_link "Reply"
+ fill_in "Leave your comment", with: "It will be done next week."
+ click_button "Publish reply"
+
+ expect(page).to have_content("It will be done next week.")
+ end
+ end
+
scenario "Errors on reply", :js do
comment = legislation_annotation.comments.first
diff --git a/spec/system/comments/legislation_questions_spec.rb b/spec/system/comments/legislation_questions_spec.rb
index 87167555f..6f55c7d49 100644
--- a/spec/system/comments/legislation_questions_spec.rb
+++ b/spec/system/comments/legislation_questions_spec.rb
@@ -260,6 +260,40 @@ describe "Commenting legislation questions" do
expect(page).not_to have_selector("#js-comment-form-comment_#{comment.id}", visible: true)
end
+ scenario "Reply update parent comment responses count", :js do
+ manuela = create(:user, :level_two, username: "Manuela")
+ comment = create(:comment, commentable: legislation_question)
+
+ login_as(manuela)
+ visit legislation_process_question_path(legislation_question.process, legislation_question)
+
+ within ".comment", text: comment.body do
+ click_link "Reply"
+ fill_in "Leave your answer", with: "It will be done next week."
+ click_button "Publish reply"
+
+ expect(page).to have_content("1 response (collapse)")
+ end
+ end
+
+ scenario "Reply show parent comments responses when hidden", :js do
+ manuela = create(:user, :level_two, username: "Manuela")
+ comment = create(:comment, commentable: legislation_question)
+ create(:comment, commentable: legislation_question, parent: comment)
+
+ login_as(manuela)
+ visit legislation_process_question_path(legislation_question.process, legislation_question)
+
+ within ".comment", text: comment.body do
+ click_link text: "1 response (collapse)"
+ click_link "Reply"
+ fill_in "Leave your answer", with: "It will be done next week."
+ click_button "Publish reply"
+
+ expect(page).to have_content("It will be done next week.")
+ end
+ end
+
scenario "Errors on reply", :js do
comment = create(:comment, commentable: legislation_question, user: user)
diff --git a/spec/system/comments/polls_spec.rb b/spec/system/comments/polls_spec.rb
index 298e8cb1f..ded564fac 100644
--- a/spec/system/comments/polls_spec.rb
+++ b/spec/system/comments/polls_spec.rb
@@ -240,6 +240,38 @@ describe "Commenting polls" do
expect(page).not_to have_selector("#js-comment-form-comment_#{comment.id}", visible: true)
end
+ scenario "Reply update parent comment responses count", :js do
+ comment = create(:comment, commentable: poll)
+
+ login_as(create(:user))
+ visit poll_path(poll)
+
+ within ".comment", text: comment.body do
+ click_link "Reply"
+ fill_in "Leave your comment", with: "It will be done next week."
+ click_button "Publish reply"
+
+ expect(page).to have_content("1 response (collapse)")
+ end
+ end
+
+ scenario "Reply show parent comments responses when hidden", :js do
+ comment = create(:comment, commentable: poll)
+ create(:comment, commentable: poll, parent: comment)
+
+ login_as(create(:user))
+ visit poll_path(poll)
+
+ within ".comment", text: comment.body do
+ click_link text: "1 response (collapse)"
+ click_link "Reply"
+ fill_in "Leave your comment", with: "It will be done next week."
+ click_button "Publish reply"
+
+ expect(page).to have_content("It will be done next week.")
+ end
+ end
+
scenario "Errors on reply", :js do
comment = create(:comment, commentable: poll, user: user)
diff --git a/spec/system/comments/proposals_spec.rb b/spec/system/comments/proposals_spec.rb
index d23aad2b4..02b08440d 100644
--- a/spec/system/comments/proposals_spec.rb
+++ b/spec/system/comments/proposals_spec.rb
@@ -238,6 +238,38 @@ describe "Commenting proposals" do
expect(page).not_to have_selector("#js-comment-form-comment_#{comment.id}", visible: true)
end
+ scenario "Reply update parent comment responses count", :js do
+ comment = create(:comment, commentable: proposal)
+
+ login_as(create(:user))
+ visit proposal_path(proposal)
+
+ within ".comment", text: comment.body do
+ click_link "Reply"
+ fill_in "Leave your comment", with: "It will be done next week."
+ click_button "Publish reply"
+
+ expect(page).to have_content("1 response (collapse)")
+ end
+ end
+
+ scenario "Reply show parent comments responses when hidden", :js do
+ comment = create(:comment, commentable: proposal)
+ create(:comment, commentable: proposal, parent: comment)
+
+ login_as(create(:user))
+ visit proposal_path(proposal)
+
+ within ".comment", text: comment.body do
+ click_link text: "1 response (collapse)"
+ click_link "Reply"
+ fill_in "Leave your comment", with: "It will be done next week."
+ click_button "Publish reply"
+
+ expect(page).to have_content("It will be done next week.")
+ end
+ end
+
scenario "Errors on reply", :js do
comment = create(:comment, commentable: proposal, user: user)
diff --git a/spec/system/comments/topics_spec.rb b/spec/system/comments/topics_spec.rb
index a00698047..377fc7236 100644
--- a/spec/system/comments/topics_spec.rb
+++ b/spec/system/comments/topics_spec.rb
@@ -264,6 +264,42 @@ describe "Commenting topics from proposals" do
expect(page).not_to have_selector("#js-comment-form-comment_#{comment.id}", visible: true)
end
+ scenario "Reply update parent comment responses count", :js do
+ community = proposal.community
+ topic = create(:topic, community: community)
+ comment = create(:comment, commentable: topic)
+
+ login_as(create(:user))
+ visit community_topic_path(community, topic)
+
+ within ".comment", text: comment.body do
+ click_link "Reply"
+ fill_in "Leave your comment", with: "It will be done next week."
+ click_button "Publish reply"
+
+ expect(page).to have_content("1 response (collapse)")
+ end
+ end
+
+ scenario "Reply show parent comments responses when hidden", :js do
+ community = proposal.community
+ topic = create(:topic, community: community)
+ comment = create(:comment, commentable: topic)
+ create(:comment, commentable: topic, parent: comment)
+
+ login_as(create(:user))
+ visit community_topic_path(community, topic)
+
+ within ".comment", text: comment.body do
+ click_link text: "1 response (collapse)"
+ click_link "Reply"
+ fill_in "Leave your comment", with: "It will be done next week."
+ click_button "Publish reply"
+
+ expect(page).to have_content("It will be done next week.")
+ end
+ end
+
scenario "Errors on reply", :js do
community = proposal.community
topic = create(:topic, community: community)
diff --git a/spec/system/users_spec.rb b/spec/system/users_spec.rb
index 778ecdb7b..d15cb7330 100644
--- a/spec/system/users_spec.rb
+++ b/spec/system/users_spec.rb
@@ -515,4 +515,18 @@ describe "Users" do
end
end
end
+
+ describe "Initials" do
+ scenario "display SVG avatars when loaded into the DOM", :js do
+ login_as(create(:user))
+ visit debate_path(create(:debate))
+
+ fill_in "Leave your comment", with: "I'm awesome"
+ click_button "Publish comment"
+
+ within ".comment", text: "I'm awesome" do
+ expect(page).to have_css "img.initialjs-avatar[src^='data:image/svg']"
+ end
+ end
+ end
end