mirror of
https://github.com/meineerde/redmine.git
synced 2025-12-19 23:11:12 +00:00
Add view for "no preview" repository files (#22482).
Patch by Gregor Schmidt. git-svn-id: http://svn.redmine.org/redmine/trunk@15397 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
d8d23fbb6b
commit
3d2c198c0f
@ -168,24 +168,26 @@ class RepositoriesController < ApplicationController
|
|||||||
# If the entry is a dir, show the browser
|
# If the entry is a dir, show the browser
|
||||||
(show; return) if @entry.is_dir?
|
(show; return) if @entry.is_dir?
|
||||||
|
|
||||||
@content = @repository.cat(@path, @rev)
|
if is_raw
|
||||||
(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)
|
|
||||||
# Force the download
|
# Force the download
|
||||||
send_opt = { :filename => filename_for_content_disposition(@path.split('/').last) }
|
send_opt = { :filename => filename_for_content_disposition(@path.split('/').last) }
|
||||||
send_type = Redmine::MimeType.of(@path)
|
send_type = Redmine::MimeType.of(@path)
|
||||||
send_opt[:type] = send_type.to_s if send_type
|
send_opt[:type] = send_type.to_s if send_type
|
||||||
send_opt[:disposition] = (Redmine::MimeType.is_type?('image', @path) && !is_raw ? 'inline' : 'attachment')
|
send_opt[:disposition] = (Redmine::MimeType.is_type?('image', @path) ? 'inline' : 'attachment')
|
||||||
send_data @content, send_opt
|
send_data @repository.cat(@path, @rev), send_opt
|
||||||
else
|
else
|
||||||
# Prevent empty lines when displaying a file with Windows style eol
|
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
|
# TODO: UTF-16
|
||||||
# Is this needs? AttachmentsController reads file simply.
|
# Prevent empty lines when displaying a file with Windows style eol
|
||||||
@content.gsub!("\r\n", "\n")
|
# Is this needed? AttachmentsController simply reads file.
|
||||||
|
@content = content.gsub("\r\n", "\n")
|
||||||
|
end
|
||||||
|
end
|
||||||
@changeset = @repository.find_changeset_by_name(@rev)
|
@changeset = @repository.find_changeset_by_name(@rev)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
1
app/views/common/_other.html.erb
Normal file
1
app/views/common/_other.html.erb
Normal file
@ -0,0 +1 @@
|
|||||||
|
<p class="nodata"><%= l(:label_no_preview) %></p>
|
||||||
@ -10,8 +10,10 @@
|
|||||||
|
|
||||||
<% if Redmine::MimeType.is_type?('image', @path) %>
|
<% if Redmine::MimeType.is_type?('image', @path) %>
|
||||||
<%= render :partial => 'common/image', :locals => {:path => url_for(params.merge(:action => 'raw')), :alt => @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} %>
|
<%= render :partial => 'common/file', :locals => {:filename => @path, :content => @content} %>
|
||||||
|
<% else %>
|
||||||
|
<%= render :partial => 'common/other' %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<% content_for :header_tags do %>
|
<% content_for :header_tags do %>
|
||||||
|
|||||||
@ -655,6 +655,7 @@ de:
|
|||||||
label_next: Weiter
|
label_next: Weiter
|
||||||
label_no_change_option: (Keine Änderung)
|
label_no_change_option: (Keine Änderung)
|
||||||
label_no_data: Nichts anzuzeigen
|
label_no_data: Nichts anzuzeigen
|
||||||
|
label_no_preview: Keine Vorschau verfügbar
|
||||||
label_no_issues_in_project: keine Tickets im Projekt
|
label_no_issues_in_project: keine Tickets im Projekt
|
||||||
label_nobody: Niemand
|
label_nobody: Niemand
|
||||||
label_none: kein
|
label_none: kein
|
||||||
|
|||||||
@ -531,6 +531,7 @@ en-GB:
|
|||||||
label_attribute: Attribute
|
label_attribute: Attribute
|
||||||
label_attribute_plural: Attributes
|
label_attribute_plural: Attributes
|
||||||
label_no_data: No data to display
|
label_no_data: No data to display
|
||||||
|
label_no_preview: No preview available
|
||||||
label_change_status: Change status
|
label_change_status: Change status
|
||||||
label_history: History
|
label_history: History
|
||||||
label_attachment: File
|
label_attachment: File
|
||||||
|
|||||||
@ -617,6 +617,7 @@ en:
|
|||||||
label_attribute: Attribute
|
label_attribute: Attribute
|
||||||
label_attribute_plural: Attributes
|
label_attribute_plural: Attributes
|
||||||
label_no_data: No data to display
|
label_no_data: No data to display
|
||||||
|
label_no_preview: No preview available
|
||||||
label_change_status: Change status
|
label_change_status: Change status
|
||||||
label_history: History
|
label_history: History
|
||||||
label_attachment: File
|
label_attachment: File
|
||||||
|
|||||||
@ -107,12 +107,13 @@ class RepositoriesFilesystemControllerTest < ActionController::TestCase
|
|||||||
end
|
end
|
||||||
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
|
with_settings :file_max_size_displayed => 1 do
|
||||||
get :entry, :id => PRJ_ID,
|
get :entry, :id => PRJ_ID,
|
||||||
:path => repository_path_hash(['japanese', 'big-file.txt'])[:param]
|
:path => repository_path_hash(['japanese', 'big-file.txt'])[:param]
|
||||||
assert_response :success
|
assert_response :success
|
||||||
assert_equal 'text/plain', @response.content_type
|
assert_equal 'text/html', @response.content_type
|
||||||
|
assert_select 'p.nodata'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -168,7 +168,7 @@ class RepositoriesSubversionControllerTest < ActionController::TestCase
|
|||||||
assert_template 'entry'
|
assert_template 'entry'
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_entry_should_send_if_too_big
|
def test_entry_should_show_other_if_too_big
|
||||||
assert_equal 0, @repository.changesets.count
|
assert_equal 0, @repository.changesets.count
|
||||||
@repository.fetch_changesets
|
@repository.fetch_changesets
|
||||||
@project.reload
|
@project.reload
|
||||||
@ -178,8 +178,8 @@ class RepositoriesSubversionControllerTest < ActionController::TestCase
|
|||||||
get :entry, :id => PRJ_ID,
|
get :entry, :id => PRJ_ID,
|
||||||
:path => repository_path_hash(['subversion_test', 'helloworld.c'])[:param]
|
:path => repository_path_hash(['subversion_test', 'helloworld.c'])[:param]
|
||||||
assert_response :success
|
assert_response :success
|
||||||
assert_equal 'attachment; filename="helloworld.c"',
|
assert_equal 'text/html', @response.content_type
|
||||||
@response.headers['Content-Disposition']
|
assert_select 'p.nodata'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user