diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 8f34c00..9c39ad0 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -168,24 +168,26 @@ class RepositoriesController < ApplicationController # If the entry is a dir, show the browser (show; return) if @entry.is_dir? - @content = @repository.cat(@path, @rev) - (show_error_not_found; return) unless @content - if !is_raw && Redmine::MimeType.is_type?('image', @path) - # simply render - elsif is_raw || - (@content.size && @content.size > Setting.file_max_size_displayed.to_i.kilobyte) || - ! is_entry_text_data?(@content, @path) + if is_raw # Force the download send_opt = { :filename => filename_for_content_disposition(@path.split('/').last) } send_type = Redmine::MimeType.of(@path) send_opt[:type] = send_type.to_s if send_type - send_opt[:disposition] = (Redmine::MimeType.is_type?('image', @path) && !is_raw ? 'inline' : 'attachment') - send_data @content, send_opt + send_opt[:disposition] = (Redmine::MimeType.is_type?('image', @path) ? 'inline' : 'attachment') + send_data @repository.cat(@path, @rev), send_opt else - # Prevent empty lines when displaying a file with Windows style eol - # TODO: UTF-16 - # Is this needs? AttachmentsController reads file simply. - @content.gsub!("\r\n", "\n") + if !@entry.size || @entry.size <= Setting.file_max_size_displayed.to_i.kilobyte + content = @repository.cat(@path, @rev) + (show_error_not_found; return) unless content + + if content.size <= Setting.file_max_size_displayed.to_i.kilobyte && + is_entry_text_data?(content, @path) + # TODO: UTF-16 + # Prevent empty lines when displaying a file with Windows style eol + # Is this needed? AttachmentsController simply reads file. + @content = content.gsub("\r\n", "\n") + end + end @changeset = @repository.find_changeset_by_name(@rev) end end diff --git a/app/views/common/_other.html.erb b/app/views/common/_other.html.erb new file mode 100644 index 0000000..fe0228a --- /dev/null +++ b/app/views/common/_other.html.erb @@ -0,0 +1 @@ +
<%= l(:label_no_preview) %>
diff --git a/app/views/repositories/entry.html.erb b/app/views/repositories/entry.html.erb index d9b5be9..37a5db9 100644 --- a/app/views/repositories/entry.html.erb +++ b/app/views/repositories/entry.html.erb @@ -10,8 +10,10 @@ <% if Redmine::MimeType.is_type?('image', @path) %> <%= render :partial => 'common/image', :locals => {:path => url_for(params.merge(:action => 'raw')), :alt => @path} %> -<% else %> +<% elsif @content %> <%= render :partial => 'common/file', :locals => {:filename => @path, :content => @content} %> +<% else %> + <%= render :partial => 'common/other' %> <% end %> <% content_for :header_tags do %> diff --git a/config/locales/de.yml b/config/locales/de.yml index 3cac093..6b248c7 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -655,6 +655,7 @@ de: label_next: Weiter label_no_change_option: (Keine Änderung) label_no_data: Nichts anzuzeigen + label_no_preview: Keine Vorschau verfügbar label_no_issues_in_project: keine Tickets im Projekt label_nobody: Niemand label_none: kein diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index 4953f02..3241d61 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -531,6 +531,7 @@ en-GB: label_attribute: Attribute label_attribute_plural: Attributes label_no_data: No data to display + label_no_preview: No preview available label_change_status: Change status label_history: History label_attachment: File diff --git a/config/locales/en.yml b/config/locales/en.yml index 947b2c9..f7c696d 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -617,6 +617,7 @@ en: label_attribute: Attribute label_attribute_plural: Attributes label_no_data: No data to display + label_no_preview: No preview available label_change_status: Change status label_history: History label_attachment: File diff --git a/test/functional/repositories_filesystem_controller_test.rb b/test/functional/repositories_filesystem_controller_test.rb index 6d872cd..87c6cd2 100644 --- a/test/functional/repositories_filesystem_controller_test.rb +++ b/test/functional/repositories_filesystem_controller_test.rb @@ -107,12 +107,13 @@ class RepositoriesFilesystemControllerTest < ActionController::TestCase end end - def test_show_text_file_should_send_if_too_big + def test_show_text_file_should_show_other_if_too_big with_settings :file_max_size_displayed => 1 do get :entry, :id => PRJ_ID, :path => repository_path_hash(['japanese', 'big-file.txt'])[:param] assert_response :success - assert_equal 'text/plain', @response.content_type + assert_equal 'text/html', @response.content_type + assert_select 'p.nodata' end end diff --git a/test/functional/repositories_subversion_controller_test.rb b/test/functional/repositories_subversion_controller_test.rb index 41ea3ed..9eef38e 100644 --- a/test/functional/repositories_subversion_controller_test.rb +++ b/test/functional/repositories_subversion_controller_test.rb @@ -168,7 +168,7 @@ class RepositoriesSubversionControllerTest < ActionController::TestCase assert_template 'entry' end - def test_entry_should_send_if_too_big + def test_entry_should_show_other_if_too_big assert_equal 0, @repository.changesets.count @repository.fetch_changesets @project.reload @@ -178,8 +178,8 @@ class RepositoriesSubversionControllerTest < ActionController::TestCase get :entry, :id => PRJ_ID, :path => repository_path_hash(['subversion_test', 'helloworld.c'])[:param] assert_response :success - assert_equal 'attachment; filename="helloworld.c"', - @response.headers['Content-Disposition'] + assert_equal 'text/html', @response.content_type + assert_select 'p.nodata' end end