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



158
159
160
161
162
163
164
165
166
167
# File 'app/helpers/labels_helper.rb', line 158

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

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



203
204
205
206
207
208
209
210
211
212
213
# File 'app/helpers/labels_helper.rb', line 203

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_lock_on_merge_help_textObject



223
224
225
226
227
# File 'app/helpers/labels_helper.rb', line 223

def label_lock_on_merge_help_text
  _('IMPORTANT: Use this setting only for VERY strict auditing purposes. ' \
    'When turned on, nobody will be able to remove the label from any merge requests after they are merged. ' \
    'In addition, nobody will be able to turn off this setting or delete this label.')
end

#label_status_tooltip(label, status) ⇒ Object



191
192
193
194
195
196
197
# File 'app/helpers/labels_helper.rb', line 191

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



137
138
139
140
141
142
# File 'app/helpers/labels_helper.rb', line 137

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



154
155
156
# File 'app/helpers/labels_helper.rb', line 154

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

#label_tooltip_title(label, tooltip_shows_title: false) ⇒ Object



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

def label_tooltip_title(label, tooltip_shows_title: false)
  Sanitize.clean(tooltip_shows_title ? label.title : label.description)
end

#labels_filter_path(options = {}) ⇒ Object



124
125
126
127
128
129
130
131
132
133
134
135
# File 'app/helpers/labels_helper.rb', line 124

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



114
115
116
117
118
119
120
121
122
# File 'app/helpers/labels_helper.rb', line 114

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

#labels_function_introductionObject



215
216
217
# File 'app/helpers/labels_helper.rb', line 215

def labels_function_introduction
  _('Labels can be applied to issues and merge requests. Group labels are available for any project within the group.')
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
    link_to link, class: css_class, &block
  else
    render_label(label, link: link, tooltip: tooltip, small: small)
  end
end

#manage_labels_title(subject) ⇒ Object



169
170
171
172
173
174
175
176
177
178
# File 'app/helpers/labels_helper.rb', line 169

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



199
200
201
# File 'app/helpers/labels_helper.rb', line 199

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, tooltip_shows_title: 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, tooltip_shows_title: false)
  html = render_colored_label(label)

  if link
    title = label_tooltip_title(label, tooltip_shows_title: tooltip_shows_title) 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



100
101
102
103
104
105
106
107
108
# File 'app/helpers/labels_helper.rb', line 100

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)


219
220
221
# File 'app/helpers/labels_helper.rb', line 219

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
# File 'app/helpers/labels_helper.rb', line 81

def suggested_colors
  {
    '#cc338b' => s_('SuggestedColors|Magenta-pink'),
    '#dc143c' => s_('SuggestedColors|Crimson'),
    '#c21e56' => s_('SuggestedColors|Rose red'),
    '#cd5b45' => s_('SuggestedColors|Dark coral'),
    '#ed9121' => s_('SuggestedColors|Carrot orange'),
    '#eee600' => s_('SuggestedColors|Titanium yellow'),
    '#009966' => s_('SuggestedColors|Green-cyan'),
    '#8fbc8f' => s_('SuggestedColors|Dark sea green'),
    '#6699cc' => s_('SuggestedColors|Blue-gray'),
    '#e6e6fa' => s_('SuggestedColors|Lavender'),
    '#9400d3' => s_('SuggestedColors|Dark violet'),
    '#330066' => s_('SuggestedColors|Deep violet'),
    '#36454f' => s_('SuggestedColors|Charcoal grey'),
    '#808080' => s_('SuggestedColors|Gray')
  }
end

#text_color_for_bg(bg_color) ⇒ Object



110
111
112
# File 'app/helpers/labels_helper.rb', line 110

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

#toggle_subscription_label_path(label, project) ⇒ Object



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

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



180
181
182
183
184
185
186
187
188
189
# File 'app/helpers/labels_helper.rb', line 180

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