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