Welcome to mirror list, hosted at ThFree Co, Russian Federation.

labels_helper.rb « gitlab « helpers « app - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: aa16d71f42c61f0c2ffd25a7f1426b1fe02bb41a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
module Gitlab
  module LabelsHelper
    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.
    # 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)
    #
    #   # Customize link body with a block
    #   link_to_label(label) { "My Custom Label Text" }
    #
    # Returns a String
    def link_to_label(label, project: nil, &block)
      project ||= @project || label.project
      link = namespace_project_issues_path(project.namespace, project,
                                           label_name: label.name)

      if block_given?
        link_to link, &block
      else
        link_to render_colored_label(label), link
      end
    end

    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)

      # 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
    end

    def suggested_colors
      [
        '#0033CC',
        '#428BCA',
        '#44AD8E',
        '#A8D695',
        '#5CB85C',
        '#69D100',
        '#004E00',
        '#34495E',
        '#7F8C8D',
        '#A295D6',
        '#5843AD',
        '#8E44AD',
        '#FFECDB',
        '#AD4363',
        '#D10069',
        '#CC0033',
        '#FF0000',
        '#D9534F',
        '#D1D100',
        '#F0AD4E',
        '#AD8D43'
      ]
    end

    def text_color_for_bg(bg_color)
      r, g, b = bg_color.slice(1,7).scan(/.{2}/).map(&:hex)

      if (r + g + b) > 500
        '#333333'
      else
        '#FFFFFF'
      end
    end

    def project_labels_options(project)
      options_from_collection_for_select(project.labels, 'name', 'name', params[:label_name])
    end

    # Required for Gitlab::Markdown::LabelReferenceFilter
    module_function :render_colored_label, :text_color_for_bg, :escape_once
  end
end