diff options
-rw-r--r-- | app/helpers/attachments_helper.rb | 10 | ||||
-rw-r--r-- | app/models/attachment.rb | 8 | ||||
-rw-r--r-- | app/views/attachments/file.html.erb | 2 | ||||
-rw-r--r-- | app/views/common/_markup.html.erb | 3 | ||||
-rw-r--r-- | test/fixtures/files/testfile.md | 3 | ||||
-rw-r--r-- | test/fixtures/files/testfile.textile | 5 | ||||
-rw-r--r-- | test/functional/attachments_controller_test.rb | 32 |
7 files changed, 62 insertions, 1 deletions
diff --git a/app/helpers/attachments_helper.rb b/app/helpers/attachments_helper.rb index 5421731ea..476b93ef3 100644 --- a/app/helpers/attachments_helper.rb +++ b/app/helpers/attachments_helper.rb @@ -86,4 +86,14 @@ module AttachmentsHelper end api.created_on attachment.created_on end + + def render_file_content(attachment, content) + if attachment.is_markdown? + render :partial => 'common/markup', :locals => {:markup_text_formatting => 'markdown', :markup_text => content} + elsif attachment.is_textile? + render :partial => 'common/markup', :locals => {:markup_text_formatting => 'textile', :markup_text => content} + else + render :partial => 'common/file', :locals => {:content => content, :filename => attachment.filename} + end + end end diff --git a/app/models/attachment.rb b/app/models/attachment.rb index 29d1acc79..0cd666499 100644 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -240,6 +240,14 @@ class Attachment < ActiveRecord::Base Redmine::MimeType.is_type?('text', filename) || Redmine::SyntaxHighlighting.filename_supported?(filename) end + def is_markdown? + Redmine::MimeType.of(filename) == 'text/markdown' + end + + def is_textile? + self.filename =~ /\.textile$/i + end + def is_image? Redmine::MimeType.is_type?('image', filename) end diff --git a/app/views/attachments/file.html.erb b/app/views/attachments/file.html.erb index af5ea78dc..e19b9127e 100644 --- a/app/views/attachments/file.html.erb +++ b/app/views/attachments/file.html.erb @@ -1,4 +1,4 @@ <%= render :layout => 'layouts/file' do %> - <%= render :partial => 'common/file', :locals => {:content => @content, :filename => @attachment.filename} %> + <%= render_file_content(@attachment, @content) %> <% end %> diff --git a/app/views/common/_markup.html.erb b/app/views/common/_markup.html.erb new file mode 100644 index 000000000..dc6c7f474 --- /dev/null +++ b/app/views/common/_markup.html.erb @@ -0,0 +1,3 @@ +<div class="wiki"> + <%= Redmine::WikiFormatting.to_html(markup_text_formatting, Redmine::CodesetUtil.to_utf8_by_setting(markup_text)).html_safe %> +</div> diff --git a/test/fixtures/files/testfile.md b/test/fixtures/files/testfile.md new file mode 100644 index 000000000..3606a410e --- /dev/null +++ b/test/fixtures/files/testfile.md @@ -0,0 +1,3 @@ +# Header 1 +## Header 2 +### Header 3 diff --git a/test/fixtures/files/testfile.textile b/test/fixtures/files/testfile.textile new file mode 100644 index 000000000..6339de56b --- /dev/null +++ b/test/fixtures/files/testfile.textile @@ -0,0 +1,5 @@ +h1. Header 1 + +h2. Header 2 + +h3. Header 3 diff --git a/test/functional/attachments_controller_test.rb b/test/functional/attachments_controller_test.rb index ff2838931..b9fad5ec2 100644 --- a/test/functional/attachments_controller_test.rb +++ b/test/functional/attachments_controller_test.rb @@ -205,6 +205,38 @@ class AttachmentsControllerTest < Redmine::ControllerTest end end + def test_show_text_file_formated_markdown + set_tmp_attachments_directory + a = Attachment.new(:container => Issue.find(1), + :file => uploaded_test_file('testfile.md', 'text/plain'), + :author => User.find(1)) + assert a.save + assert_equal 'testfile.md', a.filename + + get :show, :params => { + :id => a.id + } + assert_response :success + assert_equal 'text/html', @response.content_type + assert_select 'div.wiki', :html => "<h1>Header 1</h1>\n\n<h2>Header 2</h2>\n\n<h3>Header 3</h3>" + end + + def test_show_text_file_fromated_textile + set_tmp_attachments_directory + a = Attachment.new(:container => Issue.find(1), + :file => uploaded_test_file('testfile.textile', 'text/plain'), + :author => User.find(1)) + assert a.save + assert_equal 'testfile.textile', a.filename + + get :show, :params => { + :id => a.id + } + assert_response :success + assert_equal 'text/html', @response.content_type + assert_select 'div.wiki', :html => "<h1>Header 1</h1>\n\n\n\t<h2>Header 2</h2>\n\n\n\t<h3>Header 3</h3>" + end + def test_show_image @request.session[:user_id] = 2 get :show, :params => { |