Module: LabelsHelper

Extended by:
LabelsHelper
Included in:
Analytics::CycleAnalytics::StageEntity, LabelsHelper
Defined in:
app/helpers/labels_helper.rb

Instance Method Summary collapse

Instance Method Details

#create_label_title(subject) ⇒ Object


165
166
167
168
169
170
171
172
173
174
# File 'app/helpers/labels_helper.rb', line 165

def create_label_title(subject)
  case subject
  when Group
    _('Create group label')
  when Project
    _('Create project label')
  else
    _('Create new label')
  end
end

#issuable_typesObject


222
223
224
# File 'app/helpers/labels_helper.rb', line 222

def issuable_types
  ['issues', 'merge requests']
end

#label_dropdown_data(project, opts = {}) ⇒ Object


210
211
212
213
214
215
216
217
218
219
220
# File 'app/helpers/labels_helper.rb', line 210

def label_dropdown_data(project, opts = {})
  {
    toggle: "dropdown",
    field_name: opts[:field_name] || "label_name[]",
    show_no: "true",
    show_any: "true",
    project_id: project&.try(:id),
    namespace_path: project&.try(:namespace)&.try(:full_path),
    project_path: project&.try(:path)
  }.merge(opts)
end

#label_status_tooltip(label, status) ⇒ Object


198
199
200
201
202
203
204
# File 'app/helpers/labels_helper.rb', line 198

def label_status_tooltip(label, status)
  type = label.project_label? ? 'project' : 'group'
  level = status.unsubscribed? ? type : status.sub('-level', '')
  action = status.unsubscribed? ? 'Subscribe' : 'Unsubscribe'

  "#{action} at #{level} level"
end

#label_subscription_status(label, project) ⇒ Object


144
145
146
147
148
149
# File 'app/helpers/labels_helper.rb', line 144

def label_subscription_status(label, project)
  return 'group-level' if label.subscribed?(current_user)
  return 'project-level' if label.subscribed?(current_user, project)

  'unsubscribed'
end

#label_subscription_toggle_button_text(label, project = nil) ⇒ Object


161
162
163
# File 'app/helpers/labels_helper.rb', line 161

def label_subscription_toggle_button_text(label, project = nil)
  label.subscribed?(current_user, project) ? 'Unsubscribe' : 'Subscribe'
end

#label_tooltip_title(label) ⇒ Object


77
78
79
# File 'app/helpers/labels_helper.rb', line 77

def label_tooltip_title(label)
  Sanitize.clean(label.description)
end

#labels_filter_path(options = {}) ⇒ Object


131
132
133
134
135
136
137
138
139
140
141
142
# File 'app/helpers/labels_helper.rb', line 131

def labels_filter_path(options = {})
  project = @target_project || @project
  format = options.delete(:format)

  if project
    project_labels_path(project, format, options)
  elsif @group
    group_labels_path(@group, format, options)
  else
    dashboard_labels_path(format, options)
  end
end

#labels_filter_path_with_defaults(only_group_labels: false, include_ancestor_groups: true, include_descendant_groups: false) ⇒ Object


121
122
123
124
125
126
127
128
129
# File 'app/helpers/labels_helper.rb', line 121

def labels_filter_path_with_defaults(only_group_labels: false, include_ancestor_groups: true, include_descendant_groups: false)
  options = {}
  options[:include_ancestor_groups] = include_ancestor_groups if include_ancestor_groups
  options[:include_descendant_groups] = include_descendant_groups if include_descendant_groups
  options[:only_group_labels] = only_group_labels if only_group_labels && @group
  options[:format] = :json

  labels_filter_path(options)
end

Link to a Label

label - LabelPresenter object to link to type - The type of item the link will point to (:issue or

:merge_request). If omitted, defaults to :issue.

block - An optional block that will be passed to `link_to`, forming the

body of the link element. If omitted, defaults to
`render_colored_label`.

Examples:

# Allow the generated link to use the label's own subject
link_to_label(label)

# Force the generated link to use a provided group
link_to_label(label, subject: Group.last)

# Force the generated link to use a provided project
link_to_label(label, subject: Project.last)

# Force the generated link to point to merge requests instead of issues
link_to_label(label, type: :merge_request)

# Customize link body with a block
link_to_label(label) { "My Custom Label Text" }

Returns a String


39
40
41
42
43
44
45
46
47
# File 'app/helpers/labels_helper.rb', line 39

def link_to_label(label, type: :issue, tooltip: true, small: false, css_class: nil, &block)
  link = label.filter_path(type: type)

  if block_given?
    link_to link, class: css_class, &block
  else
    render_label(label, link: link, tooltip: tooltip, small: small)
  end
end

#manage_labels_title(subject) ⇒ Object


176
177
178
179
180
181
182
183
184
185
# File 'app/helpers/labels_helper.rb', line 176

def manage_labels_title(subject)
  case subject
  when Group
    _('Manage group labels')
  when Project
    _('Manage project labels')
  else
    _('Manage labels')
  end
end

#presented_labels_sorted_by_title(labels, subject) ⇒ Object


206
207
208
# File 'app/helpers/labels_helper.rb', line 206

def presented_labels_sorted_by_title(labels, subject)
  labels.sort_by(&:title).map { |label| label.present(issuable_subject: subject) }
end

#render_colored_label(label, suffix: '') ⇒ Object


60
61
62
63
64
65
66
67
# File 'app/helpers/labels_helper.rb', line 60

def render_colored_label(label, suffix: '')
  render_label_text(
    label.name,
    suffix: suffix,
    css_class: "gl-label-text #{label.text_color_class}",
    bg_color: label.color
  )
end

#render_label(label, link: nil, tooltip: true, dataset: nil, small: false) ⇒ Object


49
50
51
52
53
54
55
56
57
58
# File 'app/helpers/labels_helper.rb', line 49

def render_label(label, link: nil, tooltip: true, dataset: nil, small: false)
  html = render_colored_label(label)

  if link
    title = label_tooltip_title(label) if tooltip
    html = render_label_link(html, link: link, title: title, dataset: dataset)
  end

  wrap_label_html(html, small: small, label: label)
end

#render_suggested_colorsObject


107
108
109
110
111
112
113
114
115
# File 'app/helpers/labels_helper.rb', line 107

def render_suggested_colors
  colors_html = suggested_colors.map do |color_hex_value, color_name|
    link_to('', '#', class: "has-tooltip", style: "background-color: #{color_hex_value}", data: { color: color_hex_value }, title: color_name)
  end

  (:div, class: 'suggest-colors') do
    colors_html.join.html_safe
  end
end

#show_label_issuables_link?(label, issuables_type, current_user: nil) ⇒ Boolean

Returns:

  • (Boolean)

6
7
8
9
10
# File 'app/helpers/labels_helper.rb', line 6

def show_label_issuables_link?(label, issuables_type, current_user: nil)
  return true unless label.project_label?

  label.project.feature_available?(issuables_type, current_user)
end

#show_labels_full_path?(project, group) ⇒ Boolean

Returns:

  • (Boolean)

226
227
228
# File 'app/helpers/labels_helper.rb', line 226

def show_labels_full_path?(project, group)
  project || group&.subgroup?
end

#suggested_colorsObject


81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'app/helpers/labels_helper.rb', line 81

def suggested_colors
  {
    '#009966' => s_('SuggestedColors|Green-cyan'),
    '#8fbc8f' => s_('SuggestedColors|Dark sea green'),
    '#3cb371' => s_('SuggestedColors|Medium sea green'),
    '#00b140' => s_('SuggestedColors|Green screen'),
    '#013220' => s_('SuggestedColors|Dark green'),
    '#6699cc' => s_('SuggestedColors|Blue-gray'),
    '#0000ff' => s_('SuggestedColors|Blue'),
    '#e6e6fa' => s_('SuggestedColors|Lavendar'),
    '#9400d3' => s_('SuggestedColors|Dark violet'),
    '#330066' => s_('SuggestedColors|Deep violet'),
    '#808080' => s_('SuggestedColors|Gray'),
    '#36454f' => s_('SuggestedColors|Charcoal grey'),
    '#f7e7ce' => s_('SuggestedColors|Champagne'),
    '#c21e56' => s_('SuggestedColors|Rose red'),
    '#cc338b' => s_('SuggestedColors|Magenta-pink'),
    '#dc143c' => s_('SuggestedColors|Crimson'),
    '#ff0000' => s_('SuggestedColors|Red'),
    '#cd5b45' => s_('SuggestedColors|Dark coral'),
    '#eee600' => s_('SuggestedColors|Titanium yellow'),
    '#ed9121' => s_('SuggestedColors|Carrot orange'),
    '#c39953' => s_('SuggestedColors|Aztec Gold')
  }
end

#text_color_for_bg(bg_color) ⇒ Object


117
118
119
# File 'app/helpers/labels_helper.rb', line 117

def text_color_for_bg(bg_color)
  ::Gitlab::Color.of(bg_color).contrast
end

#toggle_subscription_label_path(label, project) ⇒ Object


151
152
153
154
155
156
157
158
159
# File 'app/helpers/labels_helper.rb', line 151

def toggle_subscription_label_path(label, project)
  return toggle_subscription_group_label_path(label.group, label) unless project

  case label_subscription_status(label, project)
  when 'group-level' then toggle_subscription_group_label_path(label.group, label)
  when 'project-level' then toggle_subscription_project_label_path(project, label)
  when 'unsubscribed' then toggle_subscription_project_label_path(project, label)
  end
end

#view_labels_title(subject) ⇒ Object


187
188
189
190
191
192
193
194
195
196
# File 'app/helpers/labels_helper.rb', line 187

def view_labels_title(subject)
  case subject
  when Group
    _('View group labels')
  when Project
    _('View project labels')
  else
    _('View labels')
  end
end

#wrap_label_html(label_html, small:, label:) ⇒ Object

We need the `label` argument here for EE


70
71
72
73
74
75
# File 'app/helpers/labels_helper.rb', line 70

def wrap_label_html(label_html, small:, label:)
  wrapper_classes = %w(gl-label)
  wrapper_classes << 'gl-label-sm' if small

  %(<span class="#{wrapper_classes.join(' ')}">#{label_html}</span>).html_safe
end