summaryrefslogtreecommitdiffstats
path: root/app/helpers/icons_helper.rb
blob: e297d950b88632f7e44db73c44de2db94d2ff6ed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# frozen_string_literal: true

# Redmine - project management software
# Copyright (C) 2006-  Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

module IconsHelper
  DEFAULT_ICON_SIZE = "18"
  DEFAULT_SPRITE = "icons"

  def icon_with_label(icon_name, label_text, icon_only: false, size: DEFAULT_ICON_SIZE, css_class: nil)
    label_classes = ["icon-label"]
    label_classes << "hidden" if icon_only
    sprite_icon(icon_name, size: size, css_class: css_class) + content_tag(:span, label_text, class: label_classes.join(' '))
  end

  def icon_for_file(entry, name, size: DEFAULT_ICON_SIZE, css_class: nil)
    if entry.is_dir?
      icon_with_label("folder", name, size: size, css_class: css_class)
    else
      icon = icon_for_mime_type(Redmine::MimeType.css_class_of(name))
      icon_with_label(icon, name, size: size, css_class: css_class)
    end
  end

  def icon_for_principal(principal_class, size: DEFAULT_ICON_SIZE, css_class: nil)
    sprite_icon('group', size: size, css_class: css_class) if ['groupanonymous', 'groupnonmember', 'group'].include?(principal_class)
  end

  def icon_for_event_type(event_type, size: DEFAULT_ICON_SIZE, css_class: nil)
    icon = case event_type
           when 'reply'
             'comments'
           when 'time-entry'
             'time'
           when 'message'
             'comment'
           else
             event_type
           end

    sprite_icon(icon, size: size, css_class: css_class)
  end

  def sprite_icon(icon_name, size: DEFAULT_ICON_SIZE, sprite: DEFAULT_SPRITE, css_class: nil)
    sprite_path = "#{sprite}.svg"
    css_classes = "s#{size} icon-svg"
    css_classes += " #{css_class}" unless css_class.nil?

    content_tag(
      :svg,
      content_tag(:use, '', { 'href' => "#{asset_path(sprite_path)}#icon--#{icon_name}" }),
      class: css_classes,
      aria: {
        hidden: true
      }
    )
  end

  private

  def icon_for_mime_type(mime)
    if %w(text-plain text-x-c text-x-csharp text-x-java text-x-php
          text-x-ruby text-xml text-css text-html text-css text-html
          image-gif image-jpeg image-png image-tiff
          application-pdf application-zip application-gzip application-javascript).include?(mime)
      mime
    else
      "file"
    end
  end
end