debian-mirror-gitlab/app/helpers/labels_helper.rb

124 lines
3.2 KiB
Ruby
Raw Normal View History

2014-09-02 18:07:02 +05:30
module LabelsHelper
2015-09-11 14:41:01 +05:30
include ActionView::Helpers::TagHelper
# Link to a Label
#
# label - Label object to link to
# project - Project object which will be used as the context for the label's
# link. If omitted, defaults to `@project`, or the label's own
# project.
2016-04-02 18:10:28 +05:30
# type - The type of item the link will point to (:issue or
# :merge_request). If omitted, defaults to :issue.
2015-09-11 14:41:01 +05:30
# 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 project
# link_to_label(label)
#
# # Force the generated link to use @project
# @project = Project.first
# link_to_label(label)
#
# # Force the generated link to use a provided project
# link_to_label(label, project: Project.last)
#
2016-04-02 18:10:28 +05:30
# # Force the generated link to point to merge requests instead of issues
# link_to_label(label, type: :merge_request)
#
2015-09-11 14:41:01 +05:30
# # Customize link body with a block
# link_to_label(label) { "My Custom Label Text" }
#
# Returns a String
2016-04-02 18:10:28 +05:30
def link_to_label(label, project: nil, type: :issue, &block)
2015-09-11 14:41:01 +05:30
project ||= @project || label.project
2016-04-02 18:10:28 +05:30
link = send("namespace_project_#{type.to_s.pluralize}_path",
project.namespace,
project,
label_name: label.name)
2015-09-11 14:41:01 +05:30
if block_given?
link_to link, &block
else
link_to render_colored_label(label), link
end
end
2014-09-02 18:07:02 +05:30
def project_label_names
@project.labels.pluck(:title)
end
def render_colored_label(label)
label_color = label.color || Label::DEFAULT_COLOR
text_color = text_color_for_bg(label_color)
2015-09-11 14:41:01 +05:30
# Intentionally not using content_tag here so that this method can be called
# by LabelReferenceFilter
span = %(<span class="label color-label") +
%( style="background-color: #{label_color}; color: #{text_color}">) +
escape_once(label.name) + '</span>'
span.html_safe
2014-09-02 18:07:02 +05:30
end
def suggested_colors
[
2015-04-26 12:48:37 +05:30
'#0033CC',
2014-09-02 18:07:02 +05:30
'#428BCA',
2015-04-26 12:48:37 +05:30
'#44AD8E',
'#A8D695',
2014-09-02 18:07:02 +05:30
'#5CB85C',
2015-04-26 12:48:37 +05:30
'#69D100',
'#004E00',
2014-09-02 18:07:02 +05:30
'#34495E',
'#7F8C8D',
2015-04-26 12:48:37 +05:30
'#A295D6',
'#5843AD',
2014-09-02 18:07:02 +05:30
'#8E44AD',
2015-04-26 12:48:37 +05:30
'#FFECDB',
'#AD4363',
'#D10069',
'#CC0033',
'#FF0000',
'#D9534F',
'#D1D100',
'#F0AD4E',
'#AD8D43'
2014-09-02 18:07:02 +05:30
]
end
def text_color_for_bg(bg_color)
2016-04-02 18:10:28 +05:30
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-09-02 18:07:02 +05:30
if (r + g + b) > 500
2015-09-11 14:41:01 +05:30
'#333333'
2014-09-02 18:07:02 +05:30
else
2015-09-11 14:41:01 +05:30
'#FFFFFF'
2014-09-02 18:07:02 +05:30
end
end
2015-04-26 12:48:37 +05:30
2015-10-24 18:46:33 +05:30
def projects_labels_options
labels =
if @project
@project.labels
else
Label.where(project_id: @projects)
end
2015-11-26 14:37:03 +05:30
grouped_labels = GlobalLabel.build_collection(labels)
2015-10-24 18:46:33 +05:30
grouped_labels.unshift(Label::None)
grouped_labels.unshift(Label::Any)
options_from_collection_for_select(grouped_labels, 'name', 'title', params[:label_name])
2015-04-26 12:48:37 +05:30
end
2015-09-11 14:41:01 +05:30
2015-12-23 02:04:40 +05:30
# Required for Banzai::Filter::LabelReferenceFilter
2015-09-11 14:41:01 +05:30
module_function :render_colored_label, :text_color_for_bg, :escape_once
2014-09-02 18:07:02 +05:30
end