Module: LabelsHelper

Extended by:
LabelsHelper
Included in:
LabelsHelper
Defined in:
app/helpers/labels_helper.rb

Instance Method Summary collapse

Instance Method Details

#create_label_title(subject) ⇒ Object


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

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


263
264
265
# File 'app/helpers/labels_helper.rb', line 263

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

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


232
233
234
235
236
237
238
239
240
241
242
# File 'app/helpers/labels_helper.rb', line 232

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_from_hash(hash) ⇒ Object


257
258
259
260
261
# File 'app/helpers/labels_helper.rb', line 257

def label_from_hash(hash)
  klass = hash[:group_id] ? GroupLabel : ProjectLabel

  klass.new(hash.slice(:color, :description, :title, :group_id, :project_id))
end

#label_status_tooltip(label, status) ⇒ Object


220
221
222
223
224
225
226
# File 'app/helpers/labels_helper.rb', line 220

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


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

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


183
184
185
# File 'app/helpers/labels_helper.rb', line 183

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


153
154
155
156
157
158
159
160
161
162
163
164
# File 'app/helpers/labels_helper.rb', line 153

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


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

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

#light_color?(color) ⇒ Boolean

Returns:

  • (Boolean)

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

def light_color?(color)
  if color.length == 4
    r, g, b = color[1, 4].scan(/./).map { |v| (v * 2).hex }
  else
    r, g, b = color[1, 7].scan(/.{2}/).map(&:hex)
  end

  (r + g + b) > 500
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, &block)
  link = label.filter_path(type: type)

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

#manage_labels_title(subject) ⇒ Object


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

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


228
229
230
# File 'app/helpers/labels_helper.rb', line 228

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: text_color_class_for_bg(label.color),
    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

244
245
246
247
248
249
250
251
252
253
254
255
# File 'app/helpers/labels_helper.rb', line 244

def sidebar_label_dropdown_data(issuable_type, issuable_sidebar)
  label_dropdown_data(nil, {
   default_label: "Labels",
   field_name: "#{issuable_type}[label_names][]",
   ability_name: issuable_type,
   namespace_path: issuable_sidebar[:namespace_path],
   project_path: issuable_sidebar[:project_path],
   issue_update: issuable_sidebar[:issuable_json_path],
   labels: issuable_sidebar[:project_labels_path],
   display: 'static'
  })
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
  {
    '#0033CC' => s_('SuggestedColors|UA blue'),
    '#428BCA' => s_('SuggestedColors|Moderate blue'),
    '#44AD8E' => s_('SuggestedColors|Lime green'),
    '#A8D695' => s_('SuggestedColors|Feijoa'),
    '#5CB85C' => s_('SuggestedColors|Slightly desaturated green'),
    '#69D100' => s_('SuggestedColors|Bright green'),
    '#004E00' => s_('SuggestedColors|Very dark lime green'),
    '#34495E' => s_('SuggestedColors|Very dark desaturated blue'),
    '#7F8C8D' => s_('SuggestedColors|Dark grayish cyan'),
    '#A295D6' => s_('SuggestedColors|Slightly desaturated blue'),
    '#5843AD' => s_('SuggestedColors|Dark moderate blue'),
    '#8E44AD' => s_('SuggestedColors|Dark moderate violet'),
    '#FFECDB' => s_('SuggestedColors|Very pale orange'),
    '#AD4363' => s_('SuggestedColors|Dark moderate pink'),
    '#D10069' => s_('SuggestedColors|Strong pink'),
    '#CC0033' => s_('SuggestedColors|Strong red'),
    '#FF0000' => s_('SuggestedColors|Pure red'),
    '#D9534F' => s_('SuggestedColors|Soft red'),
    '#D1D100' => s_('SuggestedColors|Strong yellow'),
    '#F0AD4E' => s_('SuggestedColors|Soft orange'),
    '#AD8D43' => s_('SuggestedColors|Dark moderate orange')
  }
end

#text_color_class_for_bg(bg_color) ⇒ Object


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

def text_color_class_for_bg(bg_color)
  if light_color?(bg_color)
    'gl-label-text-dark'
  else
    'gl-label-text-light'
  end
end

#text_color_for_bg(bg_color) ⇒ Object


125
126
127
128
129
130
131
# File 'app/helpers/labels_helper.rb', line 125

def text_color_for_bg(bg_color)
  if light_color?(bg_color)
    '#333333'
  else
    '#FFFFFF'
  end
end

#toggle_subscription_label_path(label, project) ⇒ Object


173
174
175
176
177
178
179
180
181
# File 'app/helpers/labels_helper.rb', line 173

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


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

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