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

events_helper.rb « gitlab « helpers « app - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 65522dae53392d2d7fb7601a77ac9471fe86eb25 (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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
module Gitlab
  module EventsHelper
    def link_to_author(event)
      author = event.author

      if author
        link_to author.name, user_path(author.username)
      else
        event.author_name
      end
    end

    def event_action_name(event)
      target =  if event.target_type
                  if event.note?
                    event.note_target_type
                  else
                    event.target_type.titleize.downcase
                  end
                else
                  'project'
                end

      [event.action_name, target].join(" ")
    end

    def event_filter_link(key, tooltip)
      key = key.to_s
      active = 'active' if @event_filter.active?(key)
      link_opts = {
        class: 'event_filter_link',
        id:    "#{key}_event_filter",
        title: "Filter by #{tooltip.downcase}",
        data:  { toggle: 'tooltip', placement: 'top' }
      }

      content_tag :li, class: "filter_icon #{active}" do
        link_to request.path, link_opts do
          icon(icon_for_event[key]) + content_tag(:span, ' ' + tooltip)
        end
      end
    end

    def icon_for_event
      {
        EventFilter.push     => 'upload',
        EventFilter.merged   => 'check-square-o',
        EventFilter.comments => 'comments',
        EventFilter.team     => 'user',
      }
    end

    def event_feed_title(event)
      words = []
      words << event.author_name
      words << event_action_name(event)

      if event.push?
        words << event.ref_type
        words << event.ref_name
        words << "at"
      elsif event.commented?
        if event.note_commit?
          words << event.note_short_commit_id
        else
          words << "##{truncate event.note_target_iid}"
        end
        words << "at"
      elsif event.target
        words << "##{event.target_iid}:" 
        words << event.target.title if event.target.respond_to?(:title)
        words << "at"
      end

      words << event.project_name

      words.join(" ")
    end

    def event_feed_url(event)
      if event.issue?
        namespace_project_issue_url(event.project.namespace, event.project,
                                    event.issue)
      elsif event.merge_request?
        namespace_project_merge_request_url(event.project.namespace,
                                            event.project, event.merge_request)
      elsif event.note? && event.note_commit?
        namespace_project_commit_url(event.project.namespace, event.project,
                                     event.note_target)
      elsif event.note?
        if event.note_target
          if event.note_commit?
            namespace_project_commit_path(event.project.namespace, event.project,
                                          event.note_commit_id,
                                          anchor: dom_id(event.target))
          elsif event.note_project_snippet?
            namespace_project_snippet_path(event.project.namespace,
                                           event.project, event.note_target)
          else
            event_note_target_path(event)
          end
        end
      elsif event.push?
        if event.push_with_commits? && event.md_ref?
          if event.commits_count > 1
            namespace_project_compare_url(event.project.namespace, event.project,
                                          from: event.commit_from, to:
                                          event.commit_to)
          else
            namespace_project_commit_url(event.project.namespace, event.project,
                                         id: event.commit_to)
          end
        else
          namespace_project_commits_url(event.project.namespace, event.project,
                                        event.ref_name)
        end
      end
    end

    def event_feed_summary(event)
      if event.issue?
        render "events/event_issue", issue: event.issue
      elsif event.push?
        render "events/event_push", event: event
      elsif event.merge_request?
        render "events/event_merge_request", merge_request: event.merge_request
      elsif event.note?
        render "events/event_note", note: event.note
      end
    end

    def event_note_target_path(event)
      if event.note? && event.note_commit?
        namespace_project_commit_path(event.project.namespace, event.project,
                                      event.note_target)
      else
        polymorphic_path([event.project.namespace.becomes(Namespace),
                          event.project, event.note_target],
                         anchor: dom_id(event.target))
      end
    end

    def event_note_title_html(event)
      if event.note_target
        if event.note_commit?
          link_to(
            namespace_project_commit_path(event.project.namespace, event.project,
                                          event.note_commit_id,
                                          anchor: dom_id(event.target)),
            class: "commit_short_id"
          ) do
            "#{event.note_target_type} #{event.note_short_commit_id}"
          end
        elsif event.note_project_snippet?
          link_to(namespace_project_snippet_path(event.project.namespace,
                                                 event.project,
                                                 event.note_target)) do
            "#{event.note_target_type} ##{truncate event.note_target_id}"
          end
        else
          link_to event_note_target_path(event) do
            "#{event.note_target_type} ##{truncate event.note_target_iid}"
          end
        end
      else
        content_tag :strong do
          "(deleted)"
        end
      end
    end

    def event_note(text, options = {})
      text = first_line_in_markdown(text, 150, options)
      sanitize(text, tags: %w(a img b pre code p span))
    end

    def event_commit_title(message)
      escape_once(truncate(message.split("\n").first, length: 70))
    rescue
      "--broken encoding"
    end

    def event_to_atom(xml, event)
      if event.proper?
        xml.entry do
          event_link = event_feed_url(event)
          event_title = event_feed_title(event)
          event_summary = event_feed_summary(event)

          xml.id      "tag:#{request.host},#{event.created_at.strftime("%Y-%m-%d")}:#{event.id}"
          xml.link    href: event_link
          xml.title   truncate(event_title, length: 80)
          xml.updated event.created_at.xmlschema
          xml.media   :thumbnail, width: "40", height: "40", url: avatar_icon(event.author_email)
          xml.author do |author|
            xml.name event.author_name
            xml.email event.author_email
          end

          xml.summary(type: "xhtml") { |x| x << event_summary unless event_summary.nil? }
        end
      end
    end
  end
end