]> git.openstreetmap.org Git - rails.git/commitdiff
Turn hide/unhide comment controls into buttons
authorAnton Khorev <tony29@yandex.ru>
Mon, 8 Jan 2024 13:02:16 +0000 (16:02 +0300)
committerAnton Khorev <tony29@yandex.ru>
Sun, 11 Feb 2024 22:27:12 +0000 (01:27 +0300)
app/assets/javascripts/index/changeset.js
app/assets/stylesheets/common.scss
app/views/browse/changeset.html.erb
test/application_system_test_case.rb
test/system/changeset_comments_test.rb

index c6e77bc71f2f9af2f8a69d194e3975598251f5a2..23d24d14168ff00a2c42fb16bc8a5201557e0e59 100644 (file)
@@ -30,7 +30,7 @@ OSM.Changeset = function (map) {
     var data;
 
     $(form).find("#comment-error").prop("hidden", true);
-    $(form).find("input[type=submit]").prop("disabled", true);
+    $(form).find("button").prop("disabled", true);
 
     if (include_data) {
       data = { text: $(form.text).val() };
@@ -49,22 +49,17 @@ OSM.Changeset = function (map) {
       error: function (xhr) {
         $(form).find("#comment-error").text(xhr.responseText);
         $(form).find("#comment-error").prop("hidden", false);
-        $(form).find("input[type=submit]").prop("disabled", false);
+        $(form).find("button").prop("disabled", false);
       }
     });
   }
 
   function initialize() {
-    content.find("input[name=comment]").on("click", function (e) {
+    content.find("button").on("click", function (e) {
       e.preventDefault();
       var data = $(e.target).data();
-      updateChangeset(e.target.form, data.method, data.url, true);
-    });
-
-    content.find(".action-button").on("click", function (e) {
-      e.preventDefault();
-      var data = $(e.target).data();
-      updateChangeset(e.target.form, data.method, data.url);
+      var include_data = e.target.name === "comment";
+      updateChangeset(e.target.form, data.method, data.url, include_data);
     });
 
     content.find("textarea").on("input", function (e) {
index f0746117d7b53dcd29010e509c1d2225b363835c..18eab1316222ec54a180fb38c839c32e1fa511eb 100644 (file)
@@ -647,11 +647,6 @@ tr.turn:hover {
     }
   }
 
-  span.action-button:hover {
-    cursor: pointer;
-    text-decoration: underline;
-  }
-
   .note-description {
     overflow: hidden;
     margin: 0 0 10px 10px;
index 583ac107fbb34fa35b01ee656b61a92d935b4f9e..1190423f680e35f0e64c7f507e5a5be3fa9c857a 100644 (file)
@@ -18,9 +18,9 @@
     <% if current_user %>
       <div class="col-auto">
         <% if @changeset.subscribers.exists?(current_user.id) %>
-          <button class="action-button btn btn-sm btn-primary" name="unsubscribe" data-method="POST" data-url="<%= changeset_unsubscribe_url(@changeset) %>"><%= t("javascripts.changesets.show.unsubscribe") %></button>
+          <button class="btn btn-sm btn-primary" name="unsubscribe" data-method="POST" data-url="<%= changeset_unsubscribe_url(@changeset) %>"><%= t("javascripts.changesets.show.unsubscribe") %></button>
         <% else %>
-          <button class="action-button btn btn-sm btn-primary" name="subscribe" data-method="POST" data-url="<%= changeset_subscribe_url(@changeset) %>"><%= t("javascripts.changesets.show.subscribe") %></button>
+          <button class="btn btn-sm btn-primary" name="subscribe" data-method="POST" data-url="<%= changeset_subscribe_url(@changeset) %>"><%= t("javascripts.changesets.show.subscribe") %></button>
         <% end %>
       </div>
     <% end %>
@@ -38,7 +38,7 @@
                         :time_ago => friendly_date_ago(comment.created_at),
                         :user => link_to(comment.author.display_name, user_path(comment.author))) %>
                   <% if current_user and current_user.moderator? %>
-                    — <span class="action-button" data-comment-id="<%= comment.id %>" data-method="POST" data-url="<%= changeset_comment_hide_url(comment.id) %>"><%= t("javascripts.changesets.show.hide_comment") %></span>
+                    — <button class="btn btn-sm small btn-link link-secondary p-0 align-baseline" data-method="POST" data-url="<%= changeset_comment_hide_url(comment.id) %>"><%= t("javascripts.changesets.show.hide_comment") %></button>
                   <% end %>
                 </small>
                 <div class="mx-2">
@@ -51,7 +51,7 @@
                   <%= t(".hidden_comment_by_html",
                         :time_ago => friendly_date_ago(comment.created_at),
                         :user => link_to(comment.author.display_name, user_path(comment.author))) %>
-                  — <span class="action-button text-muted" data-comment-id="<%= comment.id %>" data-method="POST" data-url="<%= changeset_comment_unhide_url(comment.id) %>"><%= t("javascripts.changesets.show.unhide_comment") %></span>
+                  — <button class="btn btn-sm small btn-link link-secondary p-0 align-baseline" data-method="POST" data-url="<%= changeset_comment_unhide_url(comment.id) %>"><%= t("javascripts.changesets.show.unhide_comment") %></button>
                  </small>
                 <div class="mx-2">
                   <%= comment.body.to_html %>
@@ -79,7 +79,7 @@
         <div id="comment-error" class="alert alert-danger p-2 mb-3" hidden>
         </div>
         <div>
-          <input type="submit" name="comment" value="<%= t("javascripts.changesets.show.comment") %>" data-changeset-id="<%= @changeset.id %>" data-method="POST" data-url="<%= changeset_comment_url(@changeset) %>" disabled="1" class="btn btn-sm btn-primary" />
+          <button name="comment" data-method="POST" data-url="<%= changeset_comment_url(@changeset) %>" disabled class="btn btn-sm btn-primary"><%= t("javascripts.changesets.show.comment") %></button>
         </div>
       </form>
     <% else %>
index 7931546d403028e755d1aaa6af6abb89a0e76f77..ef8f0e371feb924e35651e227fe47dbaf279f572 100644 (file)
@@ -33,6 +33,11 @@ class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
     end
   end
 
+  def sign_out
+    visit logout_path
+    click_on "Logout", :match => :first
+  end
+
   def within_sidebar(&block)
     within "#sidebar_content", &block
   end
index 51695c516e5aed274bb334a9bc9c88ad554e48d1..82fd81286ea4bb4d8c6dcce7c58ae2b949407c7f 100644 (file)
@@ -44,4 +44,82 @@ class ChangesetCommentsTest < ApplicationSystemTestCase
       assert_content "Some newly added changeset comment"
     end
   end
+
+  test "regular users can't hide comments" do
+    changeset = create(:changeset, :closed)
+    create(:changeset_comment, :changeset => changeset, :body => "Unwanted comment")
+    sign_in_as(create(:user))
+    visit changeset_path(changeset)
+
+    within_sidebar do
+      assert_text "Unwanted comment"
+      assert_no_button "hide"
+    end
+  end
+
+  test "moderators can hide comments" do
+    changeset = create(:changeset, :closed)
+    create(:changeset_comment, :changeset => changeset, :body => "Unwanted comment")
+
+    visit changeset_path(changeset)
+
+    within_sidebar do
+      assert_text "Unwanted comment"
+    end
+
+    sign_in_as(create(:moderator_user))
+    visit changeset_path(changeset)
+
+    within_sidebar do
+      assert_text "Unwanted comment"
+      assert_button "hide", :exact => true
+      assert_no_button "unhide", :exact => true
+
+      click_on "hide", :exact => true
+
+      assert_text "Unwanted comment"
+      assert_no_button "hide", :exact => true
+      assert_button "unhide", :exact => true
+    end
+
+    sign_out
+    visit changeset_path(changeset)
+
+    within_sidebar do
+      assert_no_text "Unwanted comment"
+    end
+  end
+
+  test "moderators can unhide comments" do
+    changeset = create(:changeset, :closed)
+    create(:changeset_comment, :changeset => changeset, :body => "Wanted comment", :visible => false)
+
+    visit changeset_path(changeset)
+
+    within_sidebar do
+      assert_no_text "Wanted comment"
+    end
+
+    sign_in_as(create(:moderator_user))
+    visit changeset_path(changeset)
+
+    within_sidebar do
+      assert_text "Wanted comment"
+      assert_no_button "hide", :exact => true
+      assert_button "unhide", :exact => true
+
+      click_on "unhide", :exact => true
+
+      assert_text "Wanted comment"
+      assert_button "hide", :exact => true
+      assert_no_button "unhide", :exact => true
+    end
+
+    sign_out
+    visit changeset_path(changeset)
+
+    within_sidebar do
+      assert_text "Wanted comment"
+    end
+  end
 end