2012-10-01 09:39:19 -04:00
|
|
|
module EventsHelper
|
2017-04-12 16:07:55 -04:00
|
|
|
ICON_NAMES_BY_EVENT_TYPE = {
|
|
|
|
'pushed to' => 'icon_commit',
|
|
|
|
'pushed new' => 'icon_commit',
|
|
|
|
'created' => 'icon_status_open',
|
|
|
|
'opened' => 'icon_status_open',
|
|
|
|
'closed' => 'icon_status_closed',
|
|
|
|
'accepted' => 'icon_code_fork',
|
|
|
|
'commented on' => 'icon_comment_o',
|
|
|
|
'deleted' => 'icon_trash_o'
|
|
|
|
}.freeze
|
|
|
|
|
2012-10-01 09:39:19 -04:00
|
|
|
def link_to_author(event)
|
2013-01-22 12:05:01 -05:00
|
|
|
author = event.author
|
2012-10-01 09:39:19 -04:00
|
|
|
|
2013-01-22 12:05:01 -05:00
|
|
|
if author
|
2016-05-08 15:37:43 -04:00
|
|
|
link_to author.name, user_path(author.username), title: author.name
|
2012-10-01 09:39:19 -04:00
|
|
|
else
|
|
|
|
event.author_name
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def event_action_name(event)
|
2015-02-13 06:00:12 -05:00
|
|
|
target = if event.target_type
|
|
|
|
if event.note?
|
|
|
|
event.note_target_type
|
|
|
|
else
|
|
|
|
event.target_type.titleize.downcase
|
|
|
|
end
|
|
|
|
else
|
|
|
|
'project'
|
|
|
|
end
|
2012-10-01 09:39:19 -04:00
|
|
|
|
|
|
|
[event.action_name, target].join(" ")
|
|
|
|
end
|
2012-10-01 09:58:13 -04:00
|
|
|
|
2014-09-25 18:07:40 -04:00
|
|
|
def event_filter_link(key, tooltip)
|
2012-11-05 13:12:26 -05:00
|
|
|
key = key.to_s
|
2015-05-06 12:25:23 -04:00
|
|
|
active = 'active' if @event_filter.active?(key)
|
|
|
|
link_opts = {
|
2016-01-13 08:37:25 -05:00
|
|
|
class: "event-filter-link",
|
2015-05-06 12:25:23 -04:00
|
|
|
id: "#{key}_event_filter",
|
|
|
|
title: "Filter by #{tooltip.downcase}",
|
|
|
|
}
|
2012-11-05 13:12:26 -05:00
|
|
|
|
2016-01-13 08:37:25 -05:00
|
|
|
content_tag :li, class: active do
|
|
|
|
link_to request.path, link_opts do
|
|
|
|
content_tag(:span, ' ' + tooltip)
|
|
|
|
end
|
2012-11-05 13:12:26 -05:00
|
|
|
end
|
|
|
|
end
|
2013-01-10 01:43:25 -05:00
|
|
|
|
2016-10-26 04:27:40 -04:00
|
|
|
def event_filter_visible(feature_key)
|
2016-10-21 07:14:14 -04:00
|
|
|
return true unless @project
|
|
|
|
|
2016-10-26 04:27:40 -04:00
|
|
|
@project.feature_available?(feature_key, current_user)
|
2016-10-21 07:14:14 -04:00
|
|
|
end
|
|
|
|
|
2016-12-03 15:26:02 -05:00
|
|
|
def comments_visible?
|
|
|
|
event_filter_visible(:repository) ||
|
|
|
|
event_filter_visible(:merge_requests) ||
|
|
|
|
event_filter_visible(:issues)
|
|
|
|
end
|
|
|
|
|
2015-08-31 00:51:34 -04:00
|
|
|
def event_preposition(event)
|
|
|
|
if event.push? || event.commented? || event.target
|
|
|
|
"at"
|
|
|
|
elsif event.milestone?
|
|
|
|
"in"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2013-04-05 12:47:12 -04:00
|
|
|
def event_feed_title(event)
|
2015-02-13 06:00:12 -05:00
|
|
|
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?
|
2016-05-12 17:47:45 -04:00
|
|
|
words << event.note_target_reference
|
2015-02-13 06:00:12 -05:00
|
|
|
words << "at"
|
2015-08-31 00:51:34 -04:00
|
|
|
elsif event.milestone?
|
|
|
|
words << "##{event.target_iid}" if event.target_iid
|
|
|
|
words << "in"
|
2015-02-13 06:00:12 -05:00
|
|
|
elsif event.target
|
2015-09-03 07:44:54 -04:00
|
|
|
words << "##{event.target_iid}:"
|
2015-02-13 06:00:12 -05:00
|
|
|
words << event.target.title if event.target.respond_to?(:title)
|
|
|
|
words << "at"
|
2013-04-05 12:47:12 -04:00
|
|
|
end
|
2015-02-13 06:00:12 -05:00
|
|
|
|
|
|
|
words << event.project_name
|
|
|
|
|
|
|
|
words.join(" ")
|
2013-04-05 12:47:12 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def event_feed_url(event)
|
|
|
|
if event.issue?
|
2015-01-24 13:02:58 -05:00
|
|
|
namespace_project_issue_url(event.project.namespace, event.project,
|
|
|
|
event.issue)
|
2013-04-05 12:47:12 -04:00
|
|
|
elsif event.merge_request?
|
2015-01-24 13:02:58 -05:00
|
|
|
namespace_project_merge_request_url(event.project.namespace,
|
|
|
|
event.project, event.merge_request)
|
2016-11-16 09:17:09 -05:00
|
|
|
elsif event.commit_note?
|
2015-01-24 13:02:58 -05:00
|
|
|
namespace_project_commit_url(event.project.namespace, event.project,
|
|
|
|
event.note_target)
|
2014-05-29 10:37:28 -04:00
|
|
|
elsif event.note?
|
|
|
|
if event.note_target
|
2016-05-12 17:47:45 -04:00
|
|
|
event_note_target_path(event)
|
2014-05-29 10:37:28 -04:00
|
|
|
end
|
2013-04-05 12:47:12 -04:00
|
|
|
elsif event.push?
|
2015-11-12 18:15:33 -05:00
|
|
|
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)
|
2013-04-05 12:47:12 -04:00
|
|
|
else
|
2015-11-12 18:15:33 -05:00
|
|
|
namespace_project_commit_url(event.project.namespace, event.project,
|
|
|
|
id: event.commit_to)
|
2013-04-05 12:47:12 -04:00
|
|
|
end
|
2015-11-12 18:15:33 -05:00
|
|
|
else
|
|
|
|
namespace_project_commits_url(event.project.namespace, event.project,
|
|
|
|
event.ref_name)
|
2013-04-05 12:47:12 -04:00
|
|
|
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
|
2014-05-29 10:55:55 -04:00
|
|
|
elsif event.merge_request?
|
|
|
|
render "events/event_merge_request", merge_request: event.merge_request
|
|
|
|
elsif event.note?
|
|
|
|
render "events/event_note", note: event.note
|
2013-04-05 12:47:12 -04:00
|
|
|
end
|
|
|
|
end
|
2013-06-07 10:18:11 -04:00
|
|
|
|
|
|
|
def event_note_target_path(event)
|
2016-11-16 09:17:09 -05:00
|
|
|
if event.commit_note?
|
2016-05-12 17:47:45 -04:00
|
|
|
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))
|
2013-06-07 10:18:11 -04:00
|
|
|
else
|
2015-01-24 13:02:58 -05:00
|
|
|
polymorphic_path([event.project.namespace.becomes(Namespace),
|
|
|
|
event.project, event.note_target],
|
2016-05-12 17:47:45 -04:00
|
|
|
anchor: dom_id(event.target))
|
2013-06-07 10:18:11 -04:00
|
|
|
end
|
|
|
|
end
|
2013-06-07 11:46:33 -04:00
|
|
|
|
|
|
|
def event_note_title_html(event)
|
|
|
|
if event.note_target
|
2016-05-12 17:47:45 -04:00
|
|
|
link_to(event_note_target_path(event), title: event.target_title, class: 'has-tooltip') do
|
|
|
|
"#{event.note_target_type} #{event.note_target_reference}"
|
2013-06-07 11:46:33 -04:00
|
|
|
end
|
|
|
|
else
|
2016-05-12 17:47:45 -04:00
|
|
|
content_tag(:strong, '(deleted)')
|
2013-06-07 11:46:33 -04:00
|
|
|
end
|
|
|
|
end
|
2013-08-20 14:20:11 -04:00
|
|
|
|
2015-05-14 07:05:33 -04:00
|
|
|
def event_note(text, options = {})
|
|
|
|
text = first_line_in_markdown(text, 150, options)
|
2017-03-07 05:08:59 -05:00
|
|
|
|
|
|
|
sanitize(
|
|
|
|
text,
|
2017-03-14 02:24:56 -04:00
|
|
|
tags: %w(a img gl-emoji b pre code p span),
|
|
|
|
attributes: Rails::Html::WhiteListSanitizer.allowed_attributes + ['style', 'data-name', 'data-unicode-version']
|
2017-03-07 05:08:59 -05:00
|
|
|
)
|
2013-08-20 14:20:11 -04:00
|
|
|
end
|
2013-11-01 03:36:59 -04:00
|
|
|
|
|
|
|
def event_commit_title(message)
|
2016-10-17 06:07:44 -04:00
|
|
|
(message.split("\n").first || "").truncate(70)
|
2013-11-01 03:36:59 -04:00
|
|
|
rescue
|
|
|
|
"--broken encoding"
|
|
|
|
end
|
2014-12-04 15:14:20 -05:00
|
|
|
|
2016-03-31 06:38:44 -04:00
|
|
|
def event_row_class(event)
|
2016-04-04 12:59:04 -04:00
|
|
|
if event.body?
|
2016-03-31 06:38:44 -04:00
|
|
|
"event-block"
|
|
|
|
else
|
|
|
|
"event-inline"
|
|
|
|
end
|
|
|
|
end
|
2017-04-12 16:07:55 -04:00
|
|
|
|
|
|
|
def icon_for_event(note)
|
|
|
|
icon_name = ICON_NAMES_BY_EVENT_TYPE[note]
|
|
|
|
custom_icon(icon_name) if icon_name
|
|
|
|
end
|
|
|
|
|
|
|
|
def icon_for_profile_event(event)
|
|
|
|
if current_path?('users#show')
|
|
|
|
content_tag :div, class: "system-note-image #{event.action_name.parameterize}-icon" do
|
|
|
|
icon_for_event(event.action_name)
|
|
|
|
end
|
|
|
|
else
|
|
|
|
content_tag :div, class: 'system-note-image user-avatar' do
|
|
|
|
author_avatar(event, size: 32)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2012-10-01 09:39:19 -04:00
|
|
|
end
|