Browse Source

Attachment preview does not work for some source files such as JavaScript and Go (#29259).

Patch by Go MAEDA with the help of Stephan Wenzel's contribution.


git-svn-id: http://svn.redmine.org/redmine/trunk@18122 e93f8b46-1217-0410-a6f0-8f06a7374b81
tags/4.1.0
Go MAEDA 5 years ago
parent
commit
400e1ca2ff

+ 1
- 1
app/models/attachment.rb View File

@@ -237,7 +237,7 @@ class Attachment < ActiveRecord::Base
end

def is_text?
Redmine::MimeType.is_type?('text', filename)
Redmine::MimeType.is_type?('text', filename) || Redmine::SyntaxHighlighting.filename_supported?(filename)
end

def is_image?

+ 13
- 1
lib/redmine/syntax_highlighting.rb View File

@@ -52,6 +52,14 @@ module Redmine
rescue
false
end

def filename_supported?(filename)
if highlighter.respond_to? :filename_supported?
highlighter.filename_supported? filename
else
false
end
end
end

module Rouge
@@ -101,7 +109,11 @@ module Redmine
def language_supported?(language)
find_lexer(language.to_s.downcase) ? true : false
end

def filename_supported?(filename)
!::Rouge::Lexer.guesses(:filename => filename).empty?
end

private
# Alias names used by CodeRay and not supported by Rouge
LANG_ALIASES = {

+ 1
- 0
test/fixtures/files/hello.js View File

@@ -0,0 +1 @@
document.write('Hello, World!');

+ 17
- 0
test/unit/attachment_test.rb View File

@@ -502,4 +502,21 @@ class AttachmentTest < ActiveSupport::TestCase
puts '(ImageMagick convert not available)'
end

def test_is_text
js_attachment = Attachment.new(
:container => Issue.find(1),
:file => uploaded_test_file('hello.js', 'application/javascript'),
:author => User.find(1))

to_test = {
js_attachment => true, # hello.js (application/javascript)
attachments(:attachments_003) => false, # logo.gif (image/gif)
attachments(:attachments_004) => true, # source.rb (application/x-ruby)
attachments(:attachments_015) => true, # private.diff (text/x-diff)
attachments(:attachments_016) => false, # testfile.png (image/png)
}
to_test.each do |attachment, expected|
assert_equal expected, attachment.is_text?, attachment.inspect
end
end
end

+ 12
- 0
test/unit/lib/redmine/syntax_highlighting/rouge_test.rb View File

@@ -20,6 +20,18 @@
require File.expand_path('../../../../../test_helper', __FILE__)

class Redmine::SyntaxHighlighting::RougeTest < ActiveSupport::TestCase
def test_filename_supported
to_test = {
'application.js' => true,
'Gemfile' => true,
'AUTOEXEC.BAT' => false, # Rouge does not support BAT files
'HELLO.C' => true
}
to_test.each do |filename, expected|
assert_equal expected, Redmine::SyntaxHighlighting::Rouge.filename_supported?(filename)
end
end

def test_highlight_by_filename_should_distinguish_perl_and_prolog
raw_perl = <<'RAW_PERL'
#!/usr/bin/perl

Loading…
Cancel
Save