diff --git a/app/assets/images/icons.svg b/app/assets/images/icons.svg index b209a135e..d3e575f3c 100644 --- a/app/assets/images/icons.svg +++ b/app/assets/images/icons.svg @@ -221,6 +221,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/helpers/icons_helper.rb b/app/helpers/icons_helper.rb index 9a2ae2d98..794e5bd46 100644 --- a/app/helpers/icons_helper.rb +++ b/app/helpers/icons_helper.rb @@ -139,6 +139,16 @@ module IconsHelper when 'text' %w(markdown plain x-textile).include?(subtype) ? 'text-plain' : nil when 'video' then 'movie' + else + # MIME type mapping + { + # Microsoft Office Open XML documents + # Do not add legacy Office formats (.doc, .xls, .ppt) here because + # Redmine does not provide attachment preview for these formats. + 'application/vnd.openxmlformats-officedocument.presentationml.presentation' => 'file-type-ppt', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => 'file-type-xls', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => 'file-type-docx' + }[mime.to_s] end end icon_name || 'file' diff --git a/config/icon_source.yml b/config/icon_source.yml index 98fe995ab..4979d75b3 100644 --- a/config/icon_source.yml +++ b/config/icon_source.yml @@ -250,3 +250,9 @@ svg: movie - name: file-music svg: file-music +- name: file-type-docx + svg: file-type-docx +- name: file-type-xls + svg: file-type-xls +- name: file-type-ppt + svg: file-type-ppt diff --git a/test/helpers/icons_helper_test.rb b/test/helpers/icons_helper_test.rb index 061e5bede..07a656222 100644 --- a/test/helpers/icons_helper_test.rb +++ b/test/helpers/icons_helper_test.rb @@ -225,6 +225,12 @@ class IconsHelperTest < Redmine::HelperTest assert_equal 'application-pdf', icon_for_mime_type('application/pdf') assert_equal 'text-plain', icon_for_mime_type('text/markdown') assert_equal 'text-plain', icon_for_mime_type('text/plain') + assert_equal 'file-type-docx', + icon_for_mime_type('application/vnd.openxmlformats-officedocument.wordprocessingml.document') + assert_equal 'file-type-xls', + icon_for_mime_type('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') + assert_equal 'file-type-ppt', + icon_for_mime_type('application/vnd.openxmlformats-officedocument.presentationml.presentation') end def test_icon_for_mime_type_should_return_icon_for_top_level_types