2013-05-07 12:26:41 -04:00
|
|
|
module LabelsHelper
|
2015-04-16 12:41:59 -04:00
|
|
|
include ActionView::Helpers::TagHelper
|
|
|
|
|
2015-05-21 23:40:25 -04:00
|
|
|
# Link to a Label
|
|
|
|
#
|
|
|
|
# label - Label object to link to
|
2016-09-20 12:54:29 -04:00
|
|
|
# subject - Project/Group object which will be used as the context for the
|
|
|
|
# label's link. If omitted, defaults to the label's own group/project.
|
2015-12-18 08:20:15 -05:00
|
|
|
# type - The type of item the link will point to (:issue or
|
|
|
|
# :merge_request). If omitted, defaults to :issue.
|
2015-05-21 23:40:25 -04:00
|
|
|
# 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:
|
|
|
|
#
|
2016-10-17 15:48:46 -04:00
|
|
|
# # Allow the generated link to use the label's own subject
|
2015-05-21 23:40:25 -04:00
|
|
|
# link_to_label(label)
|
|
|
|
#
|
2016-09-20 12:54:29 -04:00
|
|
|
# # Force the generated link to use a provided group
|
|
|
|
# link_to_label(label, subject: Group.last)
|
2015-05-21 23:40:25 -04:00
|
|
|
#
|
|
|
|
# # Force the generated link to use a provided project
|
2016-09-20 12:54:29 -04:00
|
|
|
# link_to_label(label, subject: Project.last)
|
2015-05-21 23:40:25 -04:00
|
|
|
#
|
2015-12-18 08:20:15 -05:00
|
|
|
# # Force the generated link to point to merge requests instead of issues
|
|
|
|
# link_to_label(label, type: :merge_request)
|
|
|
|
#
|
2015-05-21 23:40:25 -04:00
|
|
|
# # Customize link body with a block
|
|
|
|
# link_to_label(label) { "My Custom Label Text" }
|
|
|
|
#
|
|
|
|
# Returns a String
|
2016-09-20 12:54:29 -04:00
|
|
|
def link_to_label(label, subject: nil, type: :issue, tooltip: true, css_class: nil, &block)
|
2016-10-17 15:48:46 -04:00
|
|
|
link = label_filter_path(subject || label.subject, label, type: type)
|
2015-05-21 23:40:25 -04:00
|
|
|
|
|
|
|
if block_given?
|
2016-05-24 05:29:26 -04:00
|
|
|
link_to link, class: css_class, &block
|
2015-05-21 23:40:25 -04:00
|
|
|
else
|
2016-05-24 05:29:26 -04:00
|
|
|
link_to render_colored_label(label, tooltip: tooltip), link, class: css_class
|
2015-05-21 23:40:25 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-10-11 13:18:21 -04:00
|
|
|
def label_filter_path(subject, label, type: :issue)
|
2016-09-26 18:58:36 -04:00
|
|
|
case subject
|
|
|
|
when Group
|
2016-09-20 12:54:29 -04:00
|
|
|
send("#{type.to_s.pluralize}_group_path",
|
2016-09-26 18:58:36 -04:00
|
|
|
subject,
|
2016-09-20 12:54:29 -04:00
|
|
|
label_name: [label.name])
|
2016-09-26 18:58:36 -04:00
|
|
|
when Project
|
2016-09-19 15:49:08 -04:00
|
|
|
send("namespace_project_#{type.to_s.pluralize}_path",
|
2016-09-26 18:58:36 -04:00
|
|
|
subject.namespace,
|
|
|
|
subject,
|
2016-09-19 15:49:08 -04:00
|
|
|
label_name: [label.name])
|
|
|
|
end
|
2016-06-24 06:31:36 -04:00
|
|
|
end
|
|
|
|
|
2016-09-19 23:09:57 -04:00
|
|
|
def edit_label_path(label)
|
|
|
|
case label
|
|
|
|
when GroupLabel then edit_group_label_path(label.group, label)
|
2016-09-20 16:07:56 -04:00
|
|
|
when ProjectLabel then edit_namespace_project_label_path(label.project.namespace, label.project, label)
|
2016-09-19 23:09:57 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def destroy_label_path(label)
|
|
|
|
case label
|
|
|
|
when GroupLabel then group_label_path(label.group, label)
|
2016-09-20 16:07:56 -04:00
|
|
|
when ProjectLabel then namespace_project_label_path(label.project.namespace, label.project, label)
|
2016-09-19 23:09:57 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-03-08 05:50:51 -05:00
|
|
|
def render_colored_label(label, label_suffix = '', tooltip: true)
|
2014-08-15 03:20:12 -04:00
|
|
|
label_color = label.color || Label::DEFAULT_COLOR
|
2014-07-30 10:17:29 -04:00
|
|
|
text_color = text_color_for_bg(label_color)
|
2014-07-29 15:19:47 -04:00
|
|
|
|
2015-04-02 20:46:43 -04:00
|
|
|
# Intentionally not using content_tag here so that this method can be called
|
|
|
|
# by LabelReferenceFilter
|
2016-03-20 15:01:46 -04:00
|
|
|
span = %(<span class="label color-label #{"has-tooltip" if tooltip}" ) +
|
2016-03-08 05:50:51 -05:00
|
|
|
%(style="background-color: #{label_color}; color: #{text_color}" ) +
|
|
|
|
%(title="#{escape_once(label.description)}" data-container="body">) +
|
2016-02-26 04:52:00 -05:00
|
|
|
%(#{escape_once(label.name)}#{label_suffix}</span>)
|
2015-04-02 20:46:43 -04:00
|
|
|
|
|
|
|
span.html_safe
|
2013-05-07 12:26:41 -04:00
|
|
|
end
|
2014-07-30 06:27:29 -04:00
|
|
|
|
|
|
|
def suggested_colors
|
|
|
|
[
|
2015-01-13 08:09:19 -05:00
|
|
|
'#0033CC',
|
2014-08-15 05:02:05 -04:00
|
|
|
'#428BCA',
|
2015-01-13 08:09:19 -05:00
|
|
|
'#44AD8E',
|
|
|
|
'#A8D695',
|
2014-08-15 05:02:05 -04:00
|
|
|
'#5CB85C',
|
2015-01-13 08:09:19 -05:00
|
|
|
'#69D100',
|
|
|
|
'#004E00',
|
2014-08-15 05:02:05 -04:00
|
|
|
'#34495E',
|
|
|
|
'#7F8C8D',
|
2015-01-13 08:09:19 -05:00
|
|
|
'#A295D6',
|
|
|
|
'#5843AD',
|
2014-08-15 05:02:05 -04:00
|
|
|
'#8E44AD',
|
2015-01-13 08:09:19 -05:00
|
|
|
'#FFECDB',
|
2015-01-13 09:47:23 -05:00
|
|
|
'#AD4363',
|
|
|
|
'#D10069',
|
|
|
|
'#CC0033',
|
|
|
|
'#FF0000',
|
|
|
|
'#D9534F',
|
|
|
|
'#D1D100',
|
|
|
|
'#F0AD4E',
|
|
|
|
'#AD8D43'
|
2014-07-30 06:27:29 -04:00
|
|
|
]
|
|
|
|
end
|
2014-07-30 10:17:29 -04:00
|
|
|
|
|
|
|
def text_color_for_bg(bg_color)
|
2016-01-24 18:06:46 -05:00
|
|
|
if bg_color.length == 4
|
|
|
|
r, g, b = bg_color[1, 4].scan(/./).map { |v| (v * 2).hex }
|
|
|
|
else
|
|
|
|
r, g, b = bg_color[1, 7].scan(/.{2}/).map(&:hex)
|
|
|
|
end
|
2014-07-30 10:17:29 -04:00
|
|
|
|
|
|
|
if (r + g + b) > 500
|
2015-04-02 20:46:43 -04:00
|
|
|
'#333333'
|
2014-07-30 10:17:29 -04:00
|
|
|
else
|
2015-04-02 20:46:43 -04:00
|
|
|
'#FFFFFF'
|
2014-07-30 10:17:29 -04:00
|
|
|
end
|
|
|
|
end
|
2015-03-26 22:13:49 -04:00
|
|
|
|
2016-03-16 15:14:31 -04:00
|
|
|
def labels_filter_path
|
2016-09-20 10:55:31 -04:00
|
|
|
return group_labels_path(@group, :json) if @group
|
|
|
|
|
2016-07-16 04:41:55 -04:00
|
|
|
project = @target_project || @project
|
2016-09-20 10:55:31 -04:00
|
|
|
|
2016-07-18 12:43:00 -04:00
|
|
|
if project
|
2016-07-16 04:41:55 -04:00
|
|
|
namespace_project_labels_path(project.namespace, project, :json)
|
2016-03-16 15:14:31 -04:00
|
|
|
else
|
2016-03-22 14:19:53 -04:00
|
|
|
dashboard_labels_path(:json)
|
2016-03-16 15:14:31 -04:00
|
|
|
end
|
2015-03-26 22:13:49 -04:00
|
|
|
end
|
2015-04-02 20:46:43 -04:00
|
|
|
|
2016-11-15 18:11:13 -05:00
|
|
|
def label_subscription_status(label, project)
|
2016-11-15 16:59:12 -05:00
|
|
|
return 'project-level' if label.subscribed?(current_user, project)
|
|
|
|
return 'group-level' if label.subscribed?(current_user)
|
|
|
|
|
|
|
|
'unsubscribed'
|
|
|
|
end
|
|
|
|
|
|
|
|
def group_label_unsubscribe_path(label, project)
|
2016-11-15 18:11:13 -05:00
|
|
|
case label_subscription_status(label, project)
|
2016-11-15 16:59:12 -05:00
|
|
|
when 'project-level' then toggle_subscription_namespace_project_label_path(@project.namespace, @project, label)
|
|
|
|
when 'group-level' then toggle_subscription_group_label_path(label.group, label)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-10-31 22:04:19 -04:00
|
|
|
def label_subscription_toggle_button_text(label, project)
|
2016-11-01 13:02:58 -04:00
|
|
|
label.subscribed?(current_user, project) ? 'Unsubscribe' : 'Subscribe'
|
2016-03-01 11:33:13 -05:00
|
|
|
end
|
|
|
|
|
2016-10-17 23:32:00 -04:00
|
|
|
def label_deletion_confirm_text(label)
|
|
|
|
case label
|
|
|
|
when GroupLabel then 'Remove this label? This will affect all projects within the group. Are you sure?'
|
|
|
|
when ProjectLabel then 'Remove this label? Are you sure?'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2015-12-15 10:10:32 -05:00
|
|
|
# Required for Banzai::Filter::LabelReferenceFilter
|
2016-11-02 19:49:13 -04:00
|
|
|
module_function :render_colored_label, :text_color_for_bg, :escape_once
|
2013-05-07 12:26:41 -04:00
|
|
|
end
|