events_helper.rb 4.79 KB
Newer Older
1 2
module EventsHelper
  def link_to_author(event)
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
3
    author = event.author
4

Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
5
    if author
6
      link_to author.name, user_path(author.username), title: author.name
7 8 9 10 11 12
    else
      event.author_name
    end
  end

  def event_action_name(event)
13 14 15 16 17 18 19 20 21
    target =  if event.target_type
                if event.note?
                  event.note_target_type
                else
                  event.target_type.titleize.downcase
                end
              else
                'project'
              end
22 23 24

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

26
  def event_filter_link(key, tooltip)
27
    key = key.to_s
28 29
    active = 'active' if @event_filter.active?(key)
    link_opts = {
30
      class: "event-filter-link",
31 32 33
      id:    "#{key}_event_filter",
      title: "Filter by #{tooltip.downcase}",
    }
34

35 36 37 38
    content_tag :li, class: active do
      link_to request.path, link_opts do
        content_tag(:span, ' ' + tooltip)
      end
39 40
    end
  end
41

42 43 44 45 46 47 48 49
  def event_preposition(event)
    if event.push? || event.commented? || event.target
      "at"
    elsif event.milestone?
      "in"
    end
  end

50
  def event_feed_title(event)
51 52 53 54 55 56 57 58 59
    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?
60
      words << event.note_target_reference
61
      words << "at"
62 63 64
    elsif event.milestone?
      words << "##{event.target_iid}" if event.target_iid
      words << "in"
65
    elsif event.target
66
      words << "##{event.target_iid}:"
67 68
      words << event.target.title if event.target.respond_to?(:title)
      words << "at"
69
    end
70 71 72 73

    words << event.project_name

    words.join(" ")
74 75 76 77
  end

  def event_feed_url(event)
    if event.issue?
Vinnie Okada's avatar
Vinnie Okada committed
78 79
      namespace_project_issue_url(event.project.namespace, event.project,
                                  event.issue)
80
    elsif event.merge_request?
Vinnie Okada's avatar
Vinnie Okada committed
81 82
      namespace_project_merge_request_url(event.project.namespace,
                                          event.project, event.merge_request)
83
    elsif event.note? && event.commit_note?
Vinnie Okada's avatar
Vinnie Okada committed
84 85
      namespace_project_commit_url(event.project.namespace, event.project,
                                   event.note_target)
86 87
    elsif event.note?
      if event.note_target
88
        event_note_target_path(event)
89
      end
90
    elsif event.push?
91 92 93 94 95 96 97 98 99 100
      push_event_feed_url(event)
    end
  end

  def push_event_feed_url(event)
    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)
101
      else
102 103
        namespace_project_commit_url(event.project.namespace, event.project,
                                     id: event.commit_to)
104
      end
105 106 107
    else
      namespace_project_commits_url(event.project.namespace, event.project,
                                    event.ref_name)
108 109 110 111 112 113 114 115
    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
116 117 118 119
    elsif event.merge_request?
      render "events/event_merge_request", merge_request: event.merge_request
    elsif event.note?
      render "events/event_note", note: event.note
120 121
    end
  end
122 123

  def event_note_target_path(event)
124
    if event.note? && event.commit_note?
125 126 127 128 129 130 131 132 133
      namespace_project_commit_path(event.project.namespace,
                                    event.project,
                                    event.note_target,
                                    anchor: dom_id(event.target))
    elsif event.project_snippet_note?
      namespace_project_snippet_path(event.project.namespace,
                                     event.project,
                                     event.note_target,
                                     anchor: dom_id(event.target))
134
    else
Vinnie Okada's avatar
Vinnie Okada committed
135 136
      polymorphic_path([event.project.namespace.becomes(Namespace),
                        event.project, event.note_target],
137
                        anchor: dom_id(event.target))
138 139
    end
  end
140 141 142

  def event_note_title_html(event)
    if event.note_target
143 144
      link_to(event_note_target_path(event), title: event.target_title, class: 'has-tooltip') do
        "#{event.note_target_type} #{event.note_target_reference}"
145 146
      end
    else
147
      content_tag(:strong, '(deleted)')
148 149
    end
  end
150

151 152
  def event_note(text, options = {})
    text = first_line_in_markdown(text, 150, options)
153
    sanitize(text, tags: %w(a img b pre code p span))
154
  end
155 156 157 158 159 160

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

162
  def event_row_class(event)
163
    if event.body?
164 165 166 167 168
      "event-block"
    else
      "event-inline"
    end
  end
169
end