]> git.openstreetmap.org Git - rails.git/commitdiff
Merge remote-tracking branch 'upstream/pull/4612'
authorTom Hughes <tom@compton.nu>
Thu, 21 Mar 2024 17:25:41 +0000 (17:25 +0000)
committerTom Hughes <tom@compton.nu>
Thu, 21 Mar 2024 17:25:41 +0000 (17:25 +0000)
40 files changed:
Gemfile
Gemfile.lock
app/assets/javascripts/application.js
app/assets/javascripts/messages.js
app/controllers/messages_controller.rb
app/views/changesets/history.html.erb
app/views/diary_entries/_diary_comment.html.erb
app/views/diary_entries/_diary_entry.html.erb
app/views/diary_entries/_diary_entry_heading.html.erb
app/views/diary_entries/_location.html.erb
app/views/diary_entries/comments.html.erb
app/views/diary_entries/show.html.erb
app/views/layouts/_head.html.erb
app/views/layouts/_header.html.erb
app/views/layouts/_meta.html.erb
app/views/messages/_inbox_count.html.erb [deleted file]
app/views/messages/_message_summary.html.erb
app/views/messages/_messages_table.html.erb
app/views/messages/_muted_count.html.erb [deleted file]
app/views/messages/_outbox_count.html.erb [deleted file]
app/views/messages/_sent_message_summary.html.erb
app/views/messages/destroy.json.jbuilder [deleted file]
app/views/messages/inbox.html.erb
app/views/messages/mark.json.jbuilder [deleted file]
app/views/messages/muted.html.erb
app/views/messages/outbox.html.erb
app/views/notes/index.html.erb
app/views/oauth/authorize.html.erb
app/views/profiles/edit.html.erb
app/views/redactions/show.html.erb
app/views/user_mutes/index.html.erb
app/views/users/_user.html.erb
config/eslint.json
test/controllers/changesets_controller_test.rb
test/controllers/diary_entries_controller_test.rb
test/controllers/messages_controller_test.rb
test/controllers/notes_controller_test.rb
test/controllers/redactions_controller_test.rb
test/controllers/user_mutes_controller_test.rb
test/system/messages_test.rb

diff --git a/Gemfile b/Gemfile
index 0b7e25ec99cdffb9750d1b5160c5d868410917a0..13daf82676bb95bb735ba4daee79cf5f1a7f6cc1 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -2,6 +2,7 @@ source "https://rubygems.org"
 
 # Require rails
 gem "rails", "~> 7.1.0"
+gem "turbo-rails"
 
 # Require json for multi_json
 gem "json"
index 958f4579b529a8ae1c723987f26ac1c38fcecc39..77cf3dc193f11d944eb9c7156242b70a197bf1b9 100644 (file)
@@ -563,6 +563,10 @@ GEM
     thor (1.3.1)
     tilt (2.3.0)
     timeout (0.4.1)
+    turbo-rails (2.0.4)
+      actionpack (>= 6.0.0)
+      activejob (>= 6.0.0)
+      railties (>= 6.0.0)
     tzinfo (2.0.6)
       concurrent-ruby (~> 1.0)
     unicode-display_width (2.5.0)
@@ -680,6 +684,7 @@ DEPENDENCIES
   sprockets-exporters_pack
   strong_migrations
   terser
+  turbo-rails
   unicode-display_width
   validates_email_format_of (>= 1.5.1)
   vendorer
index 0bfff869ebcc87186c1aec12c4a0ff75949a923f..c71c0652dad9b652dc34caa44e9392d8013a5f91 100644 (file)
@@ -69,6 +69,10 @@ window.updateLinks = function (loc, zoom, layers, object) {
 };
 
 $(document).ready(function () {
+  // NB: Turns Turbo Drive off by default. Turbo Drive must be opt-in on a per-link and per-form basis
+  // See https://turbo.hotwired.dev/reference/drive#turbo.session.drive
+  Turbo.session.drive = false;
+
   var headerWidth = 0,
       compactWidth = 0;
 
@@ -108,6 +112,7 @@ $(document).ready(function () {
     updateHeader();
 
     $(window).resize(updateHeader);
+    $(document).on("turbo:render", updateHeader);
   }, 0);
 
   $("#menu-icon").on("click", function (e) {
index cc86da05ea38365abaaa39a75f7dd25f94007dc6..eef06457b3f8e70e43eaa87d07ef55d6eab1f351 100644 (file)
@@ -1,36 +1,16 @@
 $(document).ready(function () {
-  $(".inbox-mark-unread").on("ajax:success", function (event, data) {
-    updateHtml(data);
-    updateReadState(this, false);
+  $(".messages-table .destroy-message").on("turbo:submit-end", function (event) {
+    if (event.detail.success) {
+      event.target.dataset.isDestroyed = true;
+    }
   });
 
-  $(".inbox-mark-read").on("ajax:success", function (event, data) {
-    updateHtml(data);
-    updateReadState(this, true);
+  $(".messages-table .message-summary").on("turbo:before-morph-element", function (event) {
+    if ($(event.target).find("[data-is-destroyed]").length > 0) {
+      event.preventDefault(); // NB: prevent Turbo from morhping/removing this element
+      $(event.target).fadeOut(800, "linear", function () {
+        $(this).remove();
+      });
+    }
   });
-
-  $(".inbox-destroy").on("ajax:success", function (event, data) {
-    updateHtml(data);
-
-    $(this).closest("tr").fadeOut(800, "linear", function () {
-      $(this).remove();
-    });
-  });
-
-  function updateHtml(data) {
-    $("#inboxanchor").remove();
-    $(".user-button").before(data.inboxanchor);
-
-    $("#inbox-count").replaceWith(data.inbox_count);
-    $("#outbox-count").replaceWith(data.outbox_count);
-    $("#muted-count").replaceWith(data.muted_count);
-  }
-
-  function updateReadState(target, isRead) {
-    $(target).closest("tr")
-      .toggleClass("inbox-row", isRead)
-      .toggleClass("inbox-row-unread", !isRead)
-      .find(".inbox-mark-unread").prop("hidden", !isRead).end()
-      .find(".inbox-mark-read").prop("hidden", isRead);
-  }
 });
index 2ca86fc028dca2dbe9af4c0a8ec14b71665c3ca9..d231fddde32945eff8a7454e3d7a09d37318bfc6 100644 (file)
@@ -60,12 +60,12 @@ class MessagesController < ApplicationController
     @message = Message.where(:recipient => current_user).or(Message.where(:sender => current_user.id)).find(params[:id])
     @message.from_user_visible = false if @message.sender == current_user
     @message.to_user_visible = false if @message.recipient == current_user
-    if @message.save && !request.xhr?
+    if @message.save
       flash[:notice] = t ".destroyed"
 
       referer = safe_referer(params[:referer]) if params[:referer]
 
-      redirect_to referer || { :action => :inbox }
+      redirect_to referer || { :action => :inbox }, :status => :see_other
     end
   rescue ActiveRecord::RecordNotFound
     @title = t "messages.no_such_message.title"
@@ -125,9 +125,9 @@ class MessagesController < ApplicationController
       notice = t ".as_read"
     end
     @message.message_read = message_read
-    if @message.save && !request.xhr?
+    if @message.save
       flash[:notice] = notice
-      redirect_to :action => :inbox
+      redirect_back_or_to inbox_messages_path, :status => :see_other
     end
   rescue ActiveRecord::RecordNotFound
     @title = t "messages.no_such_message.title"
index a9970e652dae24da2542bf32fddfc9e15a2f9035..a536677b08b727fc304414ba8b5571c29e2618b7 100644 (file)
@@ -6,7 +6,7 @@
 
 <% set_title(changeset_index_title(params, current_user))
    @heading = if params[:display_name]
-                t("changesets.index.title_user_link_html", :user_link => link_to(params[:display_name], user_path(:display_name => params[:display_name])))
+                t("changesets.index.title_user_link_html", :user_link => link_to(params[:display_name], user_path(params[:display_name])))
               else
                 @title
               end %>
index 04e01157460ac38cf82ac54f30b2fd771a17f758..5ade361aa1ac66ff90f0f70f1981a0e94a5f4637 100644 (file)
@@ -3,7 +3,7 @@
     <%= user_thumbnail diary_comment.user %>
   </div>
   <div class="col">
-    <p class="text-muted m-0" id="comment<%= diary_comment.id %>"><%= t(".comment_from_html", :link_user => (link_to diary_comment.user.display_name, user_path(diary_comment.user)), :comment_created_at => link_to(l(diary_comment.created_at, :format => :friendly), :anchor => "comment#{diary_comment.id}")) %>
+    <p class="text-muted m-0" id="comment<%= diary_comment.id %>"><%= t(".comment_from_html", :link_user => (link_to diary_comment.user.display_name, diary_comment.user), :comment_created_at => link_to(l(diary_comment.created_at, :format => :friendly), :anchor => "comment#{diary_comment.id}")) %>
       <% if current_user and diary_comment.user.id != current_user.id %>
         | <%= report_link(t(".report"), diary_comment) %>
       <% end %>
@@ -13,9 +13,9 @@
     <% if can? :hidecomment, DiaryEntry %>
       <span>
         <% if diary_comment.visible? %>
-          <%= link_to t(".hide_link"), hide_diary_comment_path(:display_name => diary_comment.diary_entry.user.display_name, :id => diary_comment.diary_entry.id, :comment => diary_comment.id), :method => :post, :data => { :confirm => t(".confirm") } %>
+          <%= link_to t(".hide_link"), hide_diary_comment_path(diary_comment.diary_entry.user, diary_comment.diary_entry, diary_comment), :method => :post, :data => { :confirm => t(".confirm") } %>
         <% else %>
-          <%= link_to t(".unhide_link"), unhide_diary_comment_path(:display_name => diary_comment.diary_entry.user.display_name, :id => diary_comment.diary_entry.id, :comment => diary_comment.id), :method => :post, :data => { :confirm => t(".confirm") } %>
+          <%= link_to t(".unhide_link"), unhide_diary_comment_path(diary_comment.diary_entry.user, diary_comment.diary_entry, diary_comment), :method => :post, :data => { :confirm => t(".confirm") } %>
         <% end %>
       </span>
     <% end %>
index 8bd4dc57fd652b78c6dc2a9d70abd332f1f1e537..a25ef10db7087591568f29c01ffbbbe164abbd8e 100644 (file)
@@ -24,7 +24,7 @@
       <% end %>
 
       <% if current_user && current_user == diary_entry.user %>
-        <li><%= link_to t(".edit_link"), :action => "edit", :display_name => diary_entry.user.display_name, :id => diary_entry.id %></li>
+        <li><%= link_to t(".edit_link"), edit_diary_entry_path(diary_entry.user, diary_entry) %></li>
       <% end %>
 
       <% if current_user and diary_entry.user != current_user %>
@@ -36,9 +36,9 @@
       <% if can? :hide, DiaryEntry %>
         <li>
           <% if diary_entry.visible %>
-            <%= link_to t(".hide_link"), hide_diary_entry_path(:display_name => diary_entry.user.display_name, :id => diary_entry.id), :method => :post, :data => { :confirm => t(".confirm") } %>
+            <%= link_to t(".hide_link"), hide_diary_entry_path(diary_entry.user, diary_entry), :method => :post, :data => { :confirm => t(".confirm") } %>
           <% else %>
-            <%= link_to t(".unhide_link"), unhide_diary_entry_path(:display_name => diary_entry.user.display_name, :id => diary_entry.id), :method => :post, :data => { :confirm => t(".confirm") } %>
+            <%= link_to t(".unhide_link"), unhide_diary_entry_path(diary_entry.user, diary_entry), :method => :post, :data => { :confirm => t(".confirm") } %>
           <% end %>
         </li>
       <% end %>
index ef924ffddcc816017f237a762bb92e0b9b8a3af1..30f7bc03baf2a13a27e4827901a1d1849dffc35d 100644 (file)
@@ -13,7 +13,7 @@
   <% end %>
 
   <small class='text-muted'>
-    <%= t("diary_entries.diary_entry.posted_by_html", :link_user => (link_to diary_entry.user.display_name, user_path(diary_entry.user)), :created => l(diary_entry.created_at, :format => :blog), :language_link => (link_to diary_entry.language.name, :controller => "diary_entries", :action => "index", :display_name => nil, :language => diary_entry.language_code)) %>
+    <%= t("diary_entries.diary_entry.posted_by_html", :link_user => (link_to diary_entry.user.display_name, diary_entry.user), :created => l(diary_entry.created_at, :format => :blog), :language_link => (link_to diary_entry.language.name, :controller => "diary_entries", :action => "index", :display_name => nil, :language => diary_entry.language_code)) %>
     <% if (l(diary_entry.updated_at, :format => :blog) != l(diary_entry.created_at, :format => :blog)) %>
       <%= t("diary_entries.diary_entry.updated_at_html", :updated => l(diary_entry.updated_at, :format => :blog)) %>
     <% end %>
index d5860f11d8e4db5e549b331d0dd3be2ca52754d2..ae48e86b9f7694f4eb40f8e1fd343964004db34c 100644 (file)
@@ -1,7 +1,9 @@
 <%= t ".location" %>
 
-<a href="<%= url_for :controller => "site", :action => "index", :anchor => "map=14/#{location.latitude}/#{location.longitude}" %>">
-<abbr class="geo" title="<%= t ".coordinates", :latitude => number_with_precision(location.latitude, :precision => 4), :longitude => number_with_precision(location.longitude, :precision => 4) %>">
-<%= describe_location location.latitude, location.longitude, 14, location.language_code %>
-</abbr>
-</a>
+<%= link_to root_path(:anchor => "map=14/#{location.latitude}/#{location.longitude}") do
+      tag.abbr :class => "geo",
+               :title => t(".coordinates", :latitude => number_with_precision(location.latitude, :precision => 4),
+                                           :longitude => number_with_precision(location.longitude, :precision => 4)) do
+        describe_location location.latitude, location.longitude, 14, location.language_code
+      end
+    end %>
index 61ceccdc06635cc07ffd2a0f317cc51a2fe2a8e2..aa0fceb95c921046bb962547c7a5816f8089692b 100644 (file)
@@ -1,6 +1,6 @@
 <% content_for :heading do %>
   <h1><%= t ".heading", :user => @user.display_name %></h1>
-  <p><%= t ".subheading_html", :user => link_to(@user.display_name, user_path(@user)) %></p>
+  <p><%= t ".subheading_html", :user => link_to(@user.display_name, @user) %></p>
 <% end %>
 
 <% if @comments.empty? %>
index 63ab89b8f376006a7a52f348648dbd19da5811f9..0aea2d442b4d5d5e947cb642fe163b93bd2f9d7c 100644 (file)
@@ -19,9 +19,9 @@
     <% if current_user %>
       <div class="col-auto">
         <% if @entry.subscribers.exists?(current_user.id) %>
-          <%= link_to t("javascripts.changesets.show.unsubscribe"), diary_entry_unsubscribe_path(:display_name => @entry.user.display_name, :id => @entry.id), :method => :post, :class => "btn btn-sm btn-primary" %>
+          <%= link_to t("javascripts.changesets.show.unsubscribe"), diary_entry_unsubscribe_path(@entry.user, @entry), :method => :post, :class => "btn btn-sm btn-primary" %>
         <% else %>
-          <%= link_to t("javascripts.changesets.show.subscribe"), diary_entry_subscribe_path(:display_name => @entry.user.display_name, :id => @entry.id), :method => :post, :class => "btn btn-sm btn-primary" %>
+          <%= link_to t("javascripts.changesets.show.subscribe"), diary_entry_subscribe_path(@entry.user, @entry.id), :method => :post, :class => "btn btn-sm btn-primary" %>
         <% end %>
       </div>
     <% end %>
index 34046bcab85ecac58481bfb6d0dcaf07911697b6..724ca552635e4582313d043070a85b3077a5faa7 100644 (file)
@@ -2,6 +2,7 @@
   <meta http-equiv="X-UA-Compatible" content="IE=edge" />
   <meta name="viewport" content="width=device-width, initial-scale=1">
   <%= javascript_include_tag "es6" unless browser.es6? %>
+  <%= javascript_include_tag "turbo", :type => "module" %>
   <%= javascript_include_tag "application" %>
   <%= javascript_include_tag "i18n/#{I18n.locale}" %>
   <%= stylesheet_link_tag "screen-#{dir}", :media => "screen" %>
index e9ded0f75c7f68cda1aec81000512bbf5e9c4d01..97be3f7b8c96b78774ed2e5fd09dc3608ee3744c 100644 (file)
@@ -96,7 +96,7 @@
             <%= t("users.show.my messages") %>
             <span class='badge count-number'><%= number_with_delimiter(current_user.new_messages.size) %></span>
           <% end %>
-          <%= link_to t("users.show.my profile"), user_path(current_user), :class => "dropdown-item" %>
+          <%= link_to t("users.show.my profile"), current_user, :class => "dropdown-item" %>
           <%= link_to t("users.show.my settings"), edit_account_path, :class => "dropdown-item" %>
           <%= link_to t("users.show.my_preferences"), preferences_path, :class => "dropdown-item" %>
           <div class="dropdown-divider"></div>
index 3517673ac6ba085624da2f3ce0a26b01d98a3b87..2352ad0b6931993eb488bb5e5e257b869241d7e9 100644 (file)
@@ -13,6 +13,8 @@
 <%= tag.meta :name => "msapplication-TileColor", :content => "#00a300" %>
 <%= tag.meta :name => "msapplication-TileImage", :content => image_path("mstile-144x144.png") %>
 <%= tag.meta :name => "theme-color", :content => "#ffffff" %>
+<%= turbo_refresh_method_tag :morph %>
+<%= turbo_refresh_scroll_tag :preserve %>
 <%= canonical_tag %>
 <% if Settings.key?(:publisher_url) -%>
 <%= tag.link :rel => "publisher", :href => Settings.publisher_url %>
diff --git a/app/views/messages/_inbox_count.html.erb b/app/views/messages/_inbox_count.html.erb
deleted file mode 100644 (file)
index 86bb2c4..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<h4 id="inbox-count">
-<%= t "messages.inbox.messages",
-      :new_messages => t("messages.inbox.new_messages",
-                         :count => current_user.new_messages.size),
-      :old_messages => t("messages.inbox.old_messages",
-                         :count => current_user.messages.size - current_user.new_messages.size) %>
-</h4>
index cb85a62ba6edfc01d6474811cd88999ccaca9c08..81ef48402e74bf8630ed33e1fcf19047dd0627b3 100644 (file)
@@ -1,13 +1,13 @@
-<tr id="inbox-<%= message.id %>" class="inbox-row<%= "-unread" unless message.message_read? %>">
-  <td><%= link_to message.sender.display_name, message.sender %></td>
-  <td><%= link_to message.title, message %></td>
+<tr id="inbox-<%= message.id %>" class="message-summary inbox-row<%= "-unread" unless message.message_read? %>">
+  <td><%= link_to message.sender.display_name, user_path(message.sender) %></td>
+  <td><%= link_to message.title, message_path(message) %></td>
   <td class="text-nowrap"><%= l message.sent_on, :format => :friendly %></td>
   <td class="text-nowrap d-flex justify-content-end gap-1">
-    <%= button_to t(".unread_button"), message_mark_path(message, :mark => "unread"), :remote => true, :class => "btn btn-sm btn-primary", :form => { :class => "inbox-mark-unread", :hidden => !message.message_read? } %>
-    <%= button_to t(".read_button"), message_mark_path(message, :mark => "read"), :remote => true, :class => "btn btn-sm btn-primary", :form => { :class => "inbox-mark-read", :hidden => message.message_read? } %>
-    <%= button_to t(".destroy_button"), message_path(message, :referer => request.fullpath), :method => :delete, :remote => true, :class => "btn btn-sm btn-danger", :form_class => "inbox-destroy" %>
+    <%= button_to t(".unread_button"), message_mark_path(message, :mark => "unread"), :class => "btn btn-sm btn-primary", :form => { :data => { :turbo => true }, :class => "inbox-mark-unread", :hidden => !message.message_read? } %>
+    <%= button_to t(".read_button"), message_mark_path(message, :mark => "read"), :class => "btn btn-sm btn-primary", :form => { :data => { :turbo => true }, :class => "inbox-mark-read", :hidden => message.message_read? } %>
+    <%= button_to t(".destroy_button"), message_path(message, :referer => request.fullpath), :method => :delete, :class => "btn btn-sm btn-danger", :form => { :data => { :turbo => true }, :class => "destroy-message" } %>
     <% if message.muted? %>
-      <%= button_to t(".unmute_button"), message_unmute_path(message), :method => :patch, :class => "btn btn-sm btn-secondary" %>
+      <%= button_to t(".unmute_button"), message_unmute_path(message), :method => :patch, :class => "btn btn-sm btn-secondary", :form => { :data => { :turbo => true } } %>
     <% end %>
   </td>
 </tr>
index ce222dfab9b2ef84ebc67d62a946d475db1a3859..f11fe3f628c0dc58d6968217164173786565cdcf 100644 (file)
@@ -1,4 +1,4 @@
-<table class="table table-sm align-middle">
+<table class="table table-sm align-middle messages-table">
   <thead>
     <tr>
       <% columns.each do |column| %>
diff --git a/app/views/messages/_muted_count.html.erb b/app/views/messages/_muted_count.html.erb
deleted file mode 100644 (file)
index 207973d..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<h4 id="muted-count">
-<%= t "messages.muted.messages", :count => current_user.muted_messages.size %>
-</h4>
diff --git a/app/views/messages/_outbox_count.html.erb b/app/views/messages/_outbox_count.html.erb
deleted file mode 100644 (file)
index 5b27f1d..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<h4 id="outbox-count">
-<%= t "messages.outbox.messages", :count => current_user.sent_messages.size %>
-</h4>
index a9f011f5e431629847f930a3f42fa4bbb2da2d58..683d8d6ad7614e13f0830e54857883c6c86913de 100644 (file)
@@ -1,8 +1,8 @@
-<tr class="inbox-row">
-  <td><%= link_to message.recipient.display_name, message.recipient %></td>
-  <td><%= link_to message.title, message %></td>
+<tr id="outbox-<%= message.id %>" class="message-summary inbox-row">
+  <td><%= link_to message.recipient.display_name, user_path(message.recipient) %></td>
+  <td><%= link_to message.title, message_path(message) %></td>
   <td class="text-nowrap"><%= l message.sent_on, :format => :friendly %></td>
   <td class="text-nowrap d-flex justify-content-end gap-1">
-    <%= button_to t(".destroy_button"), message_path(message, :referer => request.fullpath), :method => :delete, :remote => true, :class => "btn btn-sm btn-danger", :form_class => "inbox-destroy" %>
+    <%= button_to t(".destroy_button"), message_path(message, :referer => request.fullpath), :method => :delete, :class => "btn btn-sm btn-danger", :form => { :data => { :turbo => true }, :class => "destroy-message" } %>
   </td>
 </tr>
diff --git a/app/views/messages/destroy.json.jbuilder b/app/views/messages/destroy.json.jbuilder
deleted file mode 100644 (file)
index 65bfd6a..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-json.inboxanchor render(:partial => "layouts/inbox")
-json.inbox_count render(:partial => "inbox_count")
-json.outbox_count render(:partial => "outbox_count")
-json.muted_count render(:partial => "muted_count")
index 611b0b1c972e02272fbedecbd84fc5683cf368aa..835d70a74cd8ee1f7d4c4af4c0ddf381b156f89b 100644 (file)
@@ -4,7 +4,7 @@
 
 <%= render :partial => "heading", :locals => { :active_link_path => inbox_messages_path } %>
 
-<%= render :partial => "inbox_count" %>
+<h4><%= t "messages.inbox.messages", :new_messages => t(".new_messages", :count => current_user.new_messages.size), :old_messages => t(".old_messages", :count => current_user.messages.size - current_user.new_messages.size) %></h4>
 
 <% if current_user.messages.size > 0 %>
   <%= render :partial => "messages_table", :locals => { :columns => %w[from subject date], :messages => current_user.messages, :inner_partial => "message_summary" } %>
diff --git a/app/views/messages/mark.json.jbuilder b/app/views/messages/mark.json.jbuilder
deleted file mode 100644 (file)
index 65bfd6a..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-json.inboxanchor render(:partial => "layouts/inbox")
-json.inbox_count render(:partial => "inbox_count")
-json.outbox_count render(:partial => "outbox_count")
-json.muted_count render(:partial => "muted_count")
index 8e97abc7f2ff701d4cd9f67d266856cf7d36bc49..40c74e915762cb918a76233ff6faec6943528cdd 100644 (file)
@@ -4,6 +4,6 @@
 
 <%= render :partial => "heading", :locals => { :active_link_path => muted_messages_path } %>
 
-<%= render :partial => "muted_count" %>
+<h4><%= t ".messages", :count => current_user.muted_messages.size %></h4>
 
 <%= render :partial => "messages_table", :locals => { :columns => %w[from subject date], :messages => current_user.muted_messages, :inner_partial => "message_summary" } %>
index 096427e8d4534ab507135169cefb77461a647a7b..5cb357f6fa19c899e88eb4970ca7caeb0844816e 100644 (file)
@@ -4,7 +4,7 @@
 
 <%= render :partial => "heading", :locals => { :active_link_path => outbox_messages_path } %>
 
-<%= render :partial => "outbox_count" %>
+<h4><%= t ".messages", :count => current_user.sent_messages.size %></h4>
 
 <% if current_user.sent_messages.size > 0 %>
   <%= render :partial => "messages_table", :locals => { :columns => %w[to subject date], :messages => current_user.sent_messages, :inner_partial => "sent_message_summary" } %>
index ef625163400ceac7c75eb9c903fffa30c4c0fc95..d93978480e8bfe2b4d98094d88640a73d58514b0 100644 (file)
@@ -1,7 +1,7 @@
 <% content_for :heading do %>
   <h1><%= t ".heading", :user => @user.display_name %></h1>
   <p><%= t ".subheading_html",
-           :user => link_to(@user.display_name, user_path(@user)),
+           :user => link_to(@user.display_name, @user),
            :submitted => tag.span(t(".subheading_submitted"), :class => "px-2 py-1 bg-primary bg-opacity-25"),
            :commented => tag.span(t(".subheading_commented"), :class => "px-2 py-1 bg-white") %></p>
 <% end %>
index 8576ea3ab77c7cdbf761d8167f12f71d7a01896b..b8fe11f75b1ffdbdc7bab0e02d006e3bd73982e4 100644 (file)
@@ -2,7 +2,7 @@
   <h1><%= t ".title" %></h1>
 <% end %>
 
-<p><%= t(".request_access_html", :app_name => link_to(@token.client_application.name, @token.client_application.url), :user => link_to(current_user.display_name, user_path(current_user))) %></p>
+<p><%= t(".request_access_html", :app_name => link_to(@token.client_application.name, @token.client_application.url), :user => link_to(current_user.display_name, current_user)) %></p>
 
 <%= bootstrap_form_tag do |f| %>
   <%= f.hidden_field :oauth_token, :value => @token.token %>
index b207e72e2e6f979df549e0987aa0b73957e63731..47282d5a22cbee0622336649fcdf9ef5a0c3567d 100644 (file)
@@ -60,5 +60,5 @@
   </fieldset>
 
   <%= f.primary t(".save") %>
-    <%= link_to t(".cancel"), user_path(current_user), :class => "btn btn-link" %>
+    <%= link_to t(".cancel"), current_user, :class => "btn btn-link" %>
 <% end %>
index 22d17cd5d5c3ad503e17be5cc3724456f2e834e5..5b9749a5113b7f2c3caa686b98c84b7b3103c75a 100644 (file)
@@ -5,7 +5,7 @@
 
 <p>
   <b><%= t ".user" %></b>
-  <%= link_to(@redaction.user.display_name, user_path(@redaction.user)) %>
+  <%= link_to @redaction.user.display_name, @redaction.user %>
 </p>
 <div class="richtext text-break">
   <b><%= t ".description" %></b>
index cf9e7ed6bc4336b74ae4fa7f1884e376b116f0b5..8779a4bba011d014a956507214b3667a68303e1a 100644 (file)
@@ -25,7 +25,7 @@
         <tr>
           <td>
             <%= user_thumbnail_tiny user %>
-            <%= link_to user.display_name, user_path(user) %>
+            <%= link_to user.display_name, user %>
           </td>
           <td class="text-nowrap text-end">
             <%= link_to t(".table.tbody.unmute"), user_mute_path(user), :method => :delete, :class => "btn btn-sm btn-primary" %>
index e419aed1d43d2b22d7cde109f4fef91d45ab2391..ef50ccaf2fb4bffa27c19ce8950fbbd6b7e13209 100644 (file)
@@ -6,12 +6,12 @@
     <p>
       <% if user.creation_ip %>
         <%= t "users.index.summary_html",
-              :name => link_to(user.display_name, user_path(user)),
+              :name => link_to(user.display_name, user),
               :ip_address => link_to(user.creation_ip, :ip => user.creation_ip),
               :date => l(user.created_at, :format => :friendly) %>
       <% else %>
         <%= t "users.index.summary_no_ip_html",
-              :name => link_to(user.display_name, user_path(user)),
+              :name => link_to(user.display_name, user),
               :date => l(user.created_at, :format => :friendly) %>
       <% end %>
     </p>
index 3b878d48a8cb813955fb399243ed01af1e892fef..397615d1a13f0f13a23afb89b8e7e67464b65bc1 100644 (file)
@@ -13,7 +13,8 @@
     "OSM": "writable",
     "Matomo": "readonly",
     "Qs": "readonly",
-    "updateLinks": "readonly"
+    "updateLinks": "readonly",
+    "Turbo": "readonly"
   },
   "rules": {
     "accessor-pairs": "error",
index 32a4e4f70545eaddb275a3055fa40f63b2251cd7..1fd9de2e810fb8a9735731055213fecd5148f967 100644 (file)
@@ -133,7 +133,9 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest
     assert_response :success
     assert_template "history"
     assert_template :layout => "map"
-    assert_select "h2", :text => "Changesets by #{user.display_name}", :count => 1
+    assert_select "h2", :text => "Changesets by #{user.display_name}", :count => 1 do
+      assert_select "a[href=?]", user_path(user)
+    end
     assert_select "link[rel='alternate'][type='application/atom+xml']", :count => 1 do
       assert_select "[href=?]", "http://www.example.com/user/#{ERB::Util.url_encode(user.display_name)}/history/feed"
     end
index 84d650e239ea145cc411a845169f6f8c94bc1713..94b7069758029f588fddd24d49035037082276c1 100644 (file)
@@ -886,8 +886,9 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
     get diary_comments_path(:display_name => other_user.display_name)
     assert_response :success
     assert_template :comments
-    assert_select "table.table-striped" do
-      assert_select "tr", :count => 2 # header and one comment
+    assert_dom "a[href='#{user_path(other_user)}']", :text => other_user.display_name
+    assert_select "table.table-striped tbody" do
+      assert_select "tr", :count => 1
     end
 
     # Test a suspended user
index df7146ad645686f6575c91561e3199cf5c7982f6..40581993fc6a7b6d648e9cc2928a863fbfe36959 100644 (file)
@@ -408,15 +408,13 @@ class MessagesControllerTest < ActionDispatch::IntegrationTest
     assert_not Message.find(unread_message.id).message_read
 
     # Check that the marking a message read via XHR works
-    post message_mark_path(:message_id => unread_message, :mark => "read"), :xhr => true
-    assert_response :success
-    assert_template "mark"
+    post message_mark_path(:message_id => unread_message, :mark => "read")
+    assert_response :see_other
     assert Message.find(unread_message.id).message_read
 
     # Check that the marking a message unread via XHR works
-    post message_mark_path(:message_id => unread_message, :mark => "unread"), :xhr => true
-    assert_response :success
-    assert_template "mark"
+    post message_mark_path(:message_id => unread_message, :mark => "unread")
+    assert_response :see_other
     assert_not Message.find(unread_message.id).message_read
 
     # Asking to mark a message with no ID should fail
index 8f764a3f249b58bcad66fa7baa70a3735dff6870..99886c80fd0e66fe71972a90e1350c6ceb3d6ffc 100644 (file)
@@ -42,10 +42,12 @@ class NotesControllerTest < ActionDispatch::IntegrationTest
 
     get user_notes_path(first_user)
     assert_response :success
+    assert_select ".content-heading a[href='#{user_path first_user}']", :text => first_user.display_name
     assert_select "table.note_list tbody tr", :count => 1
 
     get user_notes_path(second_user)
     assert_response :success
+    assert_select ".content-heading a[href='#{user_path second_user}']", :text => second_user.display_name
     assert_select "table.note_list tbody tr", :count => 1
 
     get user_notes_path("non-existent")
index 002e483fea3262e6e45c9f2f1be129f6079ee8fa..5ca72fe478263bde3b0234638990f1fc13ad8d92 100644 (file)
@@ -45,6 +45,15 @@ class RedactionsControllerTest < ActionDispatch::IntegrationTest
     end
   end
 
+  def test_show
+    redaction = create(:redaction, :title => "tested-redaction")
+
+    get redaction_path(redaction)
+    assert_response :success
+    assert_dom "h1", :text => /tested-redaction/
+    assert_dom "a[href='#{user_path redaction.user}']", :text => redaction.user.display_name
+  end
+
   def test_new
     get new_redaction_path
     assert_redirected_to login_path(:referer => new_redaction_path)
index cc22faaaa1dfc3ca8c175fd3c5eede9cdf58d673..2e98dc819866a05512d0f12a78a4905fb9e9af97 100644 (file)
@@ -18,11 +18,13 @@ class UserMutesControllerTest < ActionDispatch::IntegrationTest
 
   def test_index
     user = create(:user)
-    user.mutes.create(:subject => create(:user))
+    muted_user = create(:user)
+    user.mutes.create(:subject => muted_user)
     session_for(user)
 
     get user_mutes_path
     assert_match "You have muted 1 User", @response.body
+    assert_dom "tr a[href='#{user_path muted_user}']", :text => muted_user.display_name
   end
 
   def test_create
index dea0d2208f32e04f9779cda321c892ba22f800c6..b78568314166ab4e357f16841008a970848290ad 100644 (file)
@@ -36,6 +36,7 @@ class MessagesTest < ApplicationSystemTestCase
     assert_text "1 muted message"
 
     click_on "Delete"
-    assert_text "0 muted messages"
+    refute_text "1 muted message"
+    assert_text "You have 0 new messages and 0 old messages"
   end
 end