diff options
Diffstat (limited to 'app/helpers/icons_helper.rb')
-rw-r--r-- | app/helpers/icons_helper.rb | 74 |
1 files changed, 44 insertions, 30 deletions
diff --git a/app/helpers/icons_helper.rb b/app/helpers/icons_helper.rb index bba3fac7468..ebebdfa56e6 100644 --- a/app/helpers/icons_helper.rb +++ b/app/helpers/icons_helper.rb @@ -29,9 +29,10 @@ module IconsHelper ActionController::Base.helpers.image_path('file_icons/file_icons.svg', host: sprite_base_url) end - def sprite_icon(icon_name, size: DEFAULT_ICON_SIZE, css_class: nil) + def sprite_icon(icon_name, size: DEFAULT_ICON_SIZE, css_class: nil, file_icon: false) memoized_icon("#{icon_name}_#{size}_#{css_class}") do - if known_sprites&.exclude?(icon_name) + unknown_icon = file_icon ? unknown_file_icon_sprite(icon_name) : unknown_icon_sprite(icon_name) + if unknown_icon exception = ArgumentError.new("#{icon_name} is not a known icon in @gitlab-org/gitlab-svg") Gitlab::ErrorTracking.track_and_raise_for_dev_exception(exception) end @@ -39,10 +40,11 @@ module IconsHelper css_classes = [] css_classes << "s#{size}" if size css_classes << css_class.to_s unless css_class.blank? + sprite_path = file_icon ? sprite_file_icons_path : sprite_icon_path content_tag( :svg, - content_tag(:use, '', { 'href' => "#{sprite_icon_path}##{icon_name}" }), + content_tag(:use, '', { 'href' => "#{sprite_path}##{icon_name}" }), class: css_classes.empty? ? nil : css_classes.join(' '), data: { testid: "#{icon_name}-icon" } ) @@ -123,61 +125,73 @@ module IconsHelper def file_type_icon_class(type, mode, name) if type == 'folder' - icon_class = 'folder-o' + 'folder-o' elsif type == 'archive' - icon_class = 'archive' + 'archive' elsif mode == '120000' - icon_class = 'share' + 'share' else # Guess which icon to choose based on file extension. # If you think a file extension is missing, feel free to add it on PR case File.extname(name).downcase when '.pdf' - icon_class = 'document' + 'document' when '.jpg', '.jpeg', '.jif', '.jfif', - '.jp2', '.jpx', '.j2k', '.j2c', - '.apng', '.png', '.gif', '.tif', '.tiff', - '.svg', '.ico', '.bmp', '.webp' - icon_class = 'doc-image' + '.jp2', '.jpx', '.j2k', '.j2c', + '.apng', '.png', '.gif', '.tif', '.tiff', + '.svg', '.ico', '.bmp', '.webp' + 'doc-image' when '.zip', '.zipx', '.tar', '.gz', '.gzip', '.tgz', '.bz', '.bzip', - '.bz2', '.bzip2', '.car', '.tbz', '.xz', 'txz', '.rar', '.7z', - '.lz', '.lzma', '.tlz' - icon_class = 'doc-compressed' + '.bz2', '.bzip2', '.car', '.tbz', '.xz', 'txz', '.rar', '.7z', + '.lz', '.lzma', '.tlz' + 'doc-compressed' when '.mp3', '.wma', '.ogg', '.oga', '.wav', '.flac', '.aac', '.3ga', - '.ac3', '.midi', '.m4a', '.ape', '.mpa' - icon_class = 'volume-up' + '.ac3', '.midi', '.m4a', '.ape', '.mpa' + 'volume-up' when '.mp4', '.m4p', '.m4v', - '.mpg', '.mp2', '.mpeg', '.mpe', '.mpv', - '.mpg', '.mpeg', '.m2v', '.m2ts', - '.avi', '.mkv', '.flv', '.ogv', '.mov', - '.3gp', '.3g2' - icon_class = 'live-preview' + '.mpg', '.mp2', '.mpeg', '.mpe', '.mpv', + '.mpg', '.mpeg', '.m2v', '.m2ts', + '.avi', '.mkv', '.flv', '.ogv', '.mov', + '.3gp', '.3g2' + 'live-preview' when '.doc', '.dot', '.docx', '.docm', '.dotx', '.dotm', '.docb', - '.odt', '.ott', '.uot', '.rtf' - icon_class = 'doc-text' + '.odt', '.ott', '.uot', '.rtf' + 'doc-text' when '.xls', '.xlt', '.xlm', '.xlsx', '.xlsm', '.xltx', '.xltm', - '.xlsb', '.xla', '.xlam', '.xll', '.xlw', '.ots', '.ods', '.uos' - icon_class = 'document' + '.xlsb', '.xla', '.xlam', '.xll', '.xlw', '.ots', '.ods', '.uos' + 'document' when '.ppt', '.pot', '.pps', '.pptx', '.pptm', '.potx', '.potm', - '.ppam', '.ppsx', '.ppsm', '.sldx', '.sldm', '.odp', '.otp', '.uop' - icon_class = 'doc-chart' + '.ppam', '.ppsx', '.ppsm', '.sldx', '.sldm', '.odp', '.otp', '.uop' + 'doc-chart' else - icon_class = 'doc-text' + 'doc-text' end end - - icon_class end private + def unknown_icon_sprite(icon_name) + known_sprites&.exclude?(icon_name) + end + + def unknown_file_icon_sprite(icon_name) + known_file_icon_sprites&.exclude?(icon_name) + end + def known_sprites return if Rails.env.production? @known_sprites ||= Gitlab::Json.parse(File.read(Rails.root.join('node_modules/@gitlab/svgs/dist/icons.json')))['icons'] end + def known_file_icon_sprites + return if Rails.env.production? + + @known_file_icon_sprites ||= Gitlab::Json.parse(File.read(Rails.root.join('node_modules/@gitlab/svgs/dist/file_icons/file_icons.json')))['icons'] + end + def memoized_icon(key) @rendered_icons ||= {} |