diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-25 15:08:50 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-25 15:08:50 +0000 |
commit | e06d0e779673d745972863302858105aad9032e5 (patch) | |
tree | 0ff35b27a949a164f586613004b4abfe33e7d20e /app/helpers/labels_helper.rb | |
parent | f7dae0cdcb70ecb71c1d65f099e9d96b27a4548c (diff) | |
download | gitlab-ce-e06d0e779673d745972863302858105aad9032e5.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/helpers/labels_helper.rb')
-rw-r--r-- | app/helpers/labels_helper.rb | 82 |
1 files changed, 63 insertions, 19 deletions
diff --git a/app/helpers/labels_helper.rb b/app/helpers/labels_helper.rb index 91127df318e..97232def91c 100644 --- a/app/helpers/labels_helper.rb +++ b/app/helpers/labels_helper.rb @@ -36,37 +36,42 @@ module LabelsHelper # link_to_label(label) { "My Custom Label Text" } # # Returns a String - def link_to_label(label, type: :issue, tooltip: true, css_class: nil, &block) + def link_to_label(label, type: :issue, tooltip: true, small: false, &block) link = label.filter_path(type: type) if block_given? - link_to link, class: css_class, &block + link_to link, &block else - render_label(label, tooltip: tooltip, link: link, css: css_class) + render_label(label, link: link, tooltip: tooltip, small: small) end end - def render_label(label, tooltip: true, link: nil, css: nil, dataset: nil) - # if scoped label is used then EE wraps label tag with scoped label - # doc link - html = render_colored_label(label, tooltip: tooltip) - html = link_to(html, link, class: css, data: dataset) if link + def render_label(label, link: nil, tooltip: true, dataset: nil, small: false) + html = render_colored_label(label) - html + 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 - def render_colored_label(label, label_suffix: '', tooltip: true, title: nil) - text_color = text_color_for_bg(label.color) - title ||= tooltip ? label_tooltip_title(label) : label.name + 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 - # Intentionally not using content_tag here so that this method can be called - # by LabelReferenceFilter - span = %(<span class="badge color-label #{"has-tooltip" if tooltip}" ) + - %(data-html="true" style="background-color: #{label.color}; color: #{text_color}" ) + - %(title="#{ERB::Util.html_escape_once(title)}" data-container="body">) + - %(#{ERB::Util.html_escape_once(label.name)}#{label_suffix}</span>) + # We need the `label` argument here for EE + def wrap_label_html(label_html, small:, label:) + wrapper_classes = %w(gl-label) + wrapper_classes << 'gl-label-sm' if small - span.html_safe + %(<span class="#{wrapper_classes.join(' ')}">#{label_html}</span>).html_safe end def label_tooltip_title(label) @@ -109,6 +114,20 @@ module LabelsHelper end end + def text_color_class_for_bg(bg_color) + 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 + + if (r + g + b) > 500 + 'gl-label-text-dark' + else + 'gl-label-text-light' + end + end + def text_color_for_bg(bg_color) if bg_color.length == 4 r, g, b = bg_color[1, 4].scan(/./).map { |v| (v * 2).hex } @@ -246,6 +265,31 @@ module LabelsHelper def issuable_types ['issues', 'merge requests'] end + + private + + def render_label_link(label_html, link:, title:, dataset:) + classes = %w(gl-link gl-label-link) + dataset ||= {} + + if title.present? + classes << 'has-tooltip' + dataset.merge!(html: true, title: title) + end + + link_to(label_html, link, class: classes.join(' '), data: dataset) + end + + def render_label_text(name, suffix: '', css_class: nil, bg_color: nil) + <<~HTML.chomp.html_safe + <span + class="gl-label-text #{css_class}" + data-container="body" + data-html="true" + #{"style=\"background-color: #{bg_color}\"" if bg_color} + >#{ERB::Util.html_escape_once(name)}#{suffix}</span> + HTML + end end LabelsHelper.prepend_if_ee('EE::LabelsHelper') |