]> source.dussan.org Git - redmine.git/commitdiff
Fix code copying in common browsers (#36580).
authorGo MAEDA <maeda@farend.jp>
Sat, 19 Feb 2022 07:36:40 +0000 (07:36 +0000)
committerGo MAEDA <maeda@farend.jp>
Sat, 19 Feb 2022 07:36:40 +0000 (07:36 +0000)
Patch by Vitaly vit9696.

git-svn-id: http://svn.redmine.org/redmine/trunk@21415 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/views/common/_diff.html.erb
app/views/common/_file.html.erb
app/views/repositories/annotate.html.erb
public/stylesheets/scm.css
test/functional/attachments_controller_test.rb
test/functional/repositories_bazaar_controller_test.rb
test/functional/repositories_cvs_controller_test.rb
test/functional/repositories_git_controller_test.rb
test/functional/repositories_mercurial_controller_test.rb
test/functional/repositories_subversion_controller_test.rb

index 35dfdea283b5a2c42e36f381e83efd4fd215223f..f54bdfa4ca71534117403810e1ebbb5c8fa5bf33 100644 (file)
@@ -6,7 +6,7 @@
 <% diff.each do |table_file| -%>
 <div class="autoscroll">
 <% if diff.diff_type == 'sbs' -%>
-<table class="filecontent">
+<table class="filecontent diffcontent">
 <thead>
 <tr>
   <th colspan="4" class="filename">
 <% table_file.each_line do |spacing, line| -%>
 <% if spacing -%>
 <tr class="spacing">
-  <th class="line-num">...</th><td></td><th class="line-num">...</th><td></td>
+  <th class="line-num" data-txt="..."></th><td></td><th class="line-num" data-txt="..."></th><td></td>
 </tr>
 <% end -%>
 <tr>
-  <th class="line-num"><%= line.nb_line_left %></th>
+  <th class="line-num" data-txt="<%= line.nb_line_left %>"></th>
   <td class="line-code <%= line.type_diff_left %>">
-    <pre><%= line.html_line_left.html_safe %></pre>
+    <div><%= line.html_line_left.html_safe %></div>
   </td>
-  <th class="line-num"><%= line.nb_line_right %></th>
+  <th class="line-num" data-txt="<%= line.nb_line_right %>"></th>
   <td class="line-code <%= line.type_diff_right %>">
-    <pre><%= line.html_line_right.html_safe %></pre>
+    <div><%= line.html_line_right.html_safe %></div>
   </td>
 </tr>
 <% end -%>
@@ -39,7 +39,7 @@
 </table>
 
 <% else -%>
-<table class="filecontent">
+<table class="filecontent diffcontent">
 <thead>
   <tr>
     <th colspan="3" class="filename">
 </tr>
 <% end -%>
 <tr>
-  <th class="line-num"><%= line.nb_line_left %></th>
-  <th class="line-num"><%= line.nb_line_right %></th>
+  <th class="line-num" data-txt="<%= line.nb_line_left %>"></th>
+  <th class="line-num" data-txt="<%= line.nb_line_right %>"></th>
   <td class="line-code <%= line.type_diff %>">
-    <pre><%= line.html_line.html_safe %></pre>
+    <div><%= line.html_line.html_safe %></div>
   </td>
 </tr>
 <% end -%>
index 95e0fb998ff43416dabb6397539fec981c19313f..b0610f6ac3397268cdbb9c4db1703193d2278480 100644 (file)
@@ -4,11 +4,13 @@
 <% line_num = 1 %>
 <% syntax_highlight_lines(filename, Redmine::CodesetUtil.to_utf8_by_setting(content)).each do |line| %>
   <tr id="L<%= line_num %>">
-    <th class="line-num">
-      <a href="#L<%= line_num %>"><%= line_num %></a>
-    </th>
+    <th class="line-num"><a href="#L<%= line_num %>" data-txt="<%= line_num %>"></a></th>
     <td class="line-code">
-      <pre><%= line.html_safe %></pre>
+      <% if line == "\n" or line == "\r\n" %>
+      <br>
+      <% else %>
+      <div><%= line.html_safe %></div>
+      <% end %>
     </td>
   </tr>
   <% line_num += 1 %>
index 829090af6621747a61b5d7f28ac4ca87ab5849af..de30e7c00bb672ed15dbdd458a4a563fd57bdf5a 100644 (file)
@@ -17,7 +17,7 @@
     <% syntax_highlight_lines(@path, Redmine::CodesetUtil.to_utf8_by_setting(@annotate.content)).each do |line| %>
       <% revision = @annotate.revisions[line_num - 1] %>
       <tr id="L<%= line_num %>" class="bloc-<%= revision.nil? ? 0 : colors[revision.identifier || revision.revision] %> <%= previous_revision && revision && revision != previous_revision ? 'bloc-change' : nil%>">
-        <th class="line-num"><a href="#L<%= line_num %>"><%= line_num %></a></th>
+        <th class="line-num"><a href="#L<%= line_num %>" data-txt="<%= line_num %>"></a></th>
         <td class="revision">
           <% if revision && revision != previous_revision %>
             <%= revision.identifier ?
             <%= author.split('<').first %>
           <% end %>
         </td>
-        <td class="line-code"><pre><%= line.html_safe %></pre></td>
+        <% if line == "\n" or line == "\r\n" %>
+        <td class="line-code"><br></td>
+        <% else %>
+        <td class="line-code"><div><%= line.html_safe %></div></td>
+        <% end %>
       </tr>
       <% line_num += 1; previous_revision = revision %>
     <% end %>
index 4640be5f9fa81c26ac9c957600a3bff3e05b3841..3bbf6010bc536713b02cd3f75c1c3cead6a176fd 100644 (file)
@@ -61,8 +61,14 @@ table.filecontent th.line-num a {
     text-decoration: none;
     color: inherit;
 }
+table.filecontent th.line-num a:after {
+    content:  attr(data-txt);
+}
+table.diffcontent th.line-num:after {
+    content:  attr(data-txt);
+}
 table.filecontent td.line-code {padding: 0 0 0 4px;}
-table.filecontent td.line-code pre {
+table.filecontent td.line-code pre, table.filecontent td.line-code div {
     margin: 0px;
     white-space: pre-wrap;
     font-family:Consolas, Menlo, "Liberation Mono", Courier, monospace; font-size:12px;
index f89b03052082881af95866f63bde7cf8a41d199c..885a79dbb959f8b940cf80a7c52230987a5e3d67 100644 (file)
@@ -157,7 +157,7 @@ class AttachmentsControllerTest < Redmine::ControllerTest
     assert_response :success
     assert_equal 'text/html', @response.media_type
     assert_select 'tr#L1' do
-      assert_select 'th.line-num', :text => '1'
+      assert_select 'th.line-num a[data-txt=?]', '1'
       assert_select 'td', :text => /日本語/
     end
   end
@@ -174,7 +174,7 @@ class AttachmentsControllerTest < Redmine::ControllerTest
       assert_response :success
       assert_equal 'text/html', @response.media_type
       assert_select 'tr#L7' do
-        assert_select 'th.line-num', :text => '7'
+        assert_select 'th.line-num a[data-txt=?]', '7'
         assert_select 'td', :text => /Demande cr\?\?e avec succ\?s/
       end
     end
@@ -192,7 +192,7 @@ class AttachmentsControllerTest < Redmine::ControllerTest
       assert_response :success
       assert_equal 'text/html', @response.media_type
       assert_select 'tr#L7' do
-        assert_select 'th.line-num', :text => '7'
+        assert_select 'th.line-num a[data-txt=?]', '7'
         assert_select 'td', :text => /Demande créée avec succès/
       end
     end
index e8559fc78b08050a3a36f367dc7b65ff07a086a1..929df7b3995734cf1c4912dbdcf450ea01541d77 100644 (file)
@@ -181,7 +181,7 @@ class RepositoriesBazaarControllerTest < Redmine::RepositoryControllerTest
         )
         assert_response :success
         # Line 11 removed
-        assert_select 'th.line-num:contains(11) ~ td.diff_out', :text => /Display more information/
+        assert_select 'th.line-num[data-txt=11] ~ td.diff_out', :text => /Display more information/
       end
     end
 
@@ -196,7 +196,8 @@ class RepositoriesBazaarControllerTest < Redmine::RepositoryControllerTest
       )
       assert_response :success
 
-      assert_select "th.line-num", :text => '2' do
+      assert_select "th.line-num" do
+        assert_select 'a[data-txt=?]', '2'
         assert_select "+ td.revision" do
           assert_select "a", :text => '3'
           assert_select "+ td.author", :text => "jsmith@" do
@@ -226,7 +227,8 @@ class RepositoriesBazaarControllerTest < Redmine::RepositoryControllerTest
       )
       assert_response :success
 
-      assert_select "th.line-num", :text => '1' do
+      assert_select "th.line-num" do
+        assert_select "a[data-txt=?]", '1'
         assert_select "+ td.revision" do
           assert_select "a", :text => '2'
           assert_select "+ td.author", :text => "test &" do
@@ -262,7 +264,8 @@ class RepositoriesBazaarControllerTest < Redmine::RepositoryControllerTest
         )
         assert_response :success
 
-        assert_select "th.line-num", :text => '1' do
+        assert_select "th.line-num" do
+          assert_select 'a[data-txt=?]', '1'
           assert_select "+ td.revision" do
             assert_select "a", :text => '2'
             assert_select "+ td.author", :text => "test Ü" do
index 09db1611a889710e59d5557d895791819b976e3e..fdd8e986d19e614a702c4e950be9f5fa0a3b365c 100644 (file)
@@ -283,13 +283,13 @@ class RepositoriesCvsControllerTest < Redmine::RepositoryControllerTest
 
       # 1.1 line
       assert_select 'tr' do
-        assert_select 'th.line-num', :text => '21'
+        assert_select 'th.line-num a[data-txt=?]', '21'
         assert_select 'td.revision', :text => /1.1/
         assert_select 'td.author', :text => /LANG/
       end
       # 1.2 line
       assert_select 'tr' do
-        assert_select 'th.line-num', :text => '32'
+        assert_select 'th.line-num a[data-txt=?]', '32'
         assert_select 'td.revision', :text => /1.2/
         assert_select 'td.author', :text => /LANG/
       end
index 120118d9c88cbf078f622d3fc5560f79f77d1f32..09458f7f905e329182b5a8b17bd062bea6a5c651 100644 (file)
@@ -378,7 +378,7 @@ class RepositoriesGitControllerTest < Redmine::RepositoryControllerTest
         )
         assert_response :success
         # Line 22 removed
-        assert_select 'th.line-num:contains(22) ~ td.diff_out', :text => /def remove/
+        assert_select 'th.line-num[data-txt=22] ~ td.diff_out', :text => /def remove/
         assert_select 'h2', :text => /2f9c0091/
       end
     end
@@ -403,7 +403,7 @@ class RepositoriesGitControllerTest < Redmine::RepositoryControllerTest
           )
           assert_response :success
           # Line 22 removed
-          assert_select 'th.line-num:contains(22) ~ td.diff_out', :text => /def remove/
+          assert_select 'th.line-num[data-txt=22] ~ td.diff_out', :text => /def remove/
           assert_select 'h2', :text => /2f9c0091/
         end
       end
@@ -589,7 +589,7 @@ class RepositoriesGitControllerTest < Redmine::RepositoryControllerTest
 
       # Line 23, changeset 2f9c0091
       assert_select 'tr' do
-        assert_select 'th.line-num', :text => '23'
+        assert_select 'th.line-num a[data-txt=?]', '23'
         assert_select 'td.revision', :text => /2f9c0091/
         assert_select 'td.author', :text => 'jsmith'
         assert_select 'td', :text => /remove_watcher/
@@ -673,7 +673,8 @@ class RepositoriesGitControllerTest < Redmine::RepositoryControllerTest
                 :rev => r1
               }
             )
-            assert_select "th.line-num", :text => '1' do
+            assert_select "th.line-num" do
+              assert_select "a[data-txt=?]", '1'
               assert_select "+ td.revision" do
                 assert_select "a", :text => '57ca437c'
                 assert_select "+ td.author", :text => "jsmith" do
@@ -698,7 +699,8 @@ class RepositoriesGitControllerTest < Redmine::RepositoryControllerTest
             :rev => r1
           }
         )
-        assert_select "th.line-num", :text => '1' do
+        assert_select "th.line-num" do
+          assert_select "a[data-txt=?]", '1'
           assert_select "+ td.revision" do
             assert_select "a", :text => '83ca5fd5'
             assert_select "+ td.author", :text => "Felix Schäfer" do
index fadb9c7f234e726ec187fe853025988b020f112c..d88a95f0aa50274c40fbc56a1c00d7d8b55a1091 100644 (file)
@@ -396,7 +396,7 @@ class RepositoriesMercurialControllerTest < Redmine::RepositoryControllerTest
           assert_response :success
           if @diff_c_support
             # Line 22 removed
-            assert_select 'th.line-num:contains(22) ~ td.diff_out', :text => /def remove/
+            assert_select 'th.line-num[data-txt=22] ~ td.diff_out', :text => /def remove/
             assert_select 'h2', :text => /4:def6d2f1254a/
           end
         end
@@ -492,7 +492,7 @@ class RepositoriesMercurialControllerTest < Redmine::RepositoryControllerTest
 
       # Line 22, revision 4:def6d2f1254a
       assert_select 'tr' do
-        assert_select 'th.line-num', :text => '22'
+        assert_select 'th.line-num a[data-txt=?]', '22'
         assert_select 'td.revision', :text => '4:def6d2f1254a'
         assert_select 'td.author', :text => 'jsmith'
         assert_select 'td', :text => /remove_watcher/
@@ -548,7 +548,8 @@ class RepositoriesMercurialControllerTest < Redmine::RepositoryControllerTest
           }
         )
         assert_response :success
-        assert_select "th.line-num", :text => '1' do
+        assert_select "th.line-num" do
+          assert_select "a[data-txt=?]", '1'
           assert_select "+ td.revision" do
             assert_select "a", :text => '20:709858aafd1b'
             assert_select "+ td.author", :text => "jsmith" do
index 4c248a790a98b936cae37a24b73b11fb80e9583d..ca2a224a872b8f717594f534e5a38156b8cdfddd 100644 (file)
@@ -557,14 +557,14 @@ class RepositoriesSubversionControllerTest < Redmine::RepositoryControllerTest
       assert_response :success
 
       assert_select 'tr' do
-        assert_select 'th.line-num', :text => '1'
+        assert_select 'th.line-num a[data-txt=?]', '1'
         assert_select 'td.revision', :text => '4'
         assert_select 'td.author', :text => 'jp'
         assert_select 'td', :text => /stdio.h/
       end
       # Same revision
       assert_select 'tr' do
-        assert_select 'th.line-num', :text => '2'
+        assert_select 'th.line-num a[data-txt=?]', '2'
         assert_select 'td.revision', :text => ''
         assert_select 'td.author', :text => ''
       end