summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/helpers/attachments_helper.rb10
-rw-r--r--app/models/attachment.rb8
-rw-r--r--app/views/attachments/file.html.erb2
-rw-r--r--app/views/common/_markup.html.erb3
-rw-r--r--test/fixtures/files/testfile.md3
-rw-r--r--test/fixtures/files/testfile.textile5
-rw-r--r--test/functional/attachments_controller_test.rb32
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 %>
&nbsp;
- <%= 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 => {