Render Textile and Markdown attachments on the preview page (#29752).

Patch by Takenori TAKAKI.


git-svn-id: http://svn.redmine.org/redmine/trunk@18584 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Go MAEDA
2019-10-03 00:09:28 +00:00
parent df1c54146f
commit 3ce678510e
7 changed files with 62 additions and 1 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -1,4 +1,4 @@
<%= render :layout => 'layouts/file' do %>
&nbsp;
<%= render :partial => 'common/file', :locals => {:content => @content, :filename => @attachment.filename} %>
<%= render_file_content(@attachment, @content) %>
<% end %>

View File

@@ -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>

3
test/fixtures/files/testfile.md vendored Normal file
View File

@@ -0,0 +1,3 @@
# Header 1
## Header 2
### Header 3

5
test/fixtures/files/testfile.textile vendored Normal file
View File

@@ -0,0 +1,5 @@
h1. Header 1
h2. Header 2
h3. Header 3

View File

@@ -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 => {