Fix refs to a renamed constant
[gitorious:mainline.git] / app / presenters / comment_presenter.rb
1 # encoding: utf-8
2 #--
3 #   Copyright (C) 2013 Gitorious AS
4 #
5 #   This program is free software: you can redistribute it and/or modify
6 #   it under the terms of the GNU Affero General Public License as published by
7 #   the Free Software Foundation, either version 3 of the License, or
8 #   (at your option) any later version.
9 #
10 #   This program is distributed in the hope that it will be useful,
11 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
12 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 #   GNU Affero General Public License for more details.
14 #
15 #   You should have received a copy of the GNU Affero General Public License
16 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 #++
18
19 class CommentPresenter
20   attr_reader :comment, :view_context
21   alias :v :view_context
22
23   def initialize(comment, view_context)
24     @comment = comment
25     @view_context = view_context
26   end
27
28   def id
29     comment.id
30   end
31
32   def body?
33     comment.body?
34   end
35
36   def context
37     return if comment.context.blank?
38     v.content_tag :blockquote do
39       v.content_tag :pre, :class => "diff-comment-context" do
40         v.content_tag(:code, comment.context)
41       end
42     end
43   end
44
45   def state_changed
46     return unless comment.state_changed_to
47
48     v.content_tag(:span) {
49       "→ State changed #{state_changed_from} #{state_changed_to}".html_safe
50     }
51   end
52
53   def markdown
54     v.render_markdown(comment.body, :auto_link).html_safe
55   end
56
57   def avatar
58     default_url = Gitorious::View::AvatarHelper::DEFAULT_USER_AVATAR_FILE
59     url = comment.user ? v.avatar_url(comment.user, :size => 24) : default_url
60     v.image_tag url, :size => '24x24', :alt => "avatar", :class => "gts-avatar"
61   end
62
63   def author_link
64     return v.content_tag :span, "Removed Author" unless comment.user
65     v.link_to(comment.user.login, v.user_path(comment.user))
66   end
67
68   def edit_link
69     return unless v.can_edit?(v.current_user, comment)
70     v.link_to(
71       '<i class="icon icon-edit"></i> Edit'.html_safe,
72       v.edit_comment_path(comment),
73       :class => 'btn btn-small'
74     )
75   end
76
77   def timestamp
78     v.content_tag(:span, :class => 'gts-timestamp', :title => comment.created_at.utc) {
79       v.time_ago_in_words(comment.created_at)+' ago'
80     }
81   end
82
83   def line_number
84     return unless comment.applies_to_line_numbers?
85     link = v.link_to("##{comment.sha1[0...7]}", v.project_repository_commit_path(comment.project, comment.repository, comment.sha1))
86     " commented on #{link}".html_safe
87   end
88
89   private
90
91   def time
92     comment.created_at.strftime("%b %-d %Y, %H:%M.")
93   end
94
95   def state_changed_from
96     return "" unless comment.state_changed_from
97     state_changed_span("from", comment.state_changed_from)
98   end
99
100   def state_changed_to
101     state_changed_span("to", comment.state_changed_to)
102   end
103
104   def state_changed_span(label, state)
105     label_class = v.status_open?(state) ? 'label-success' : 'label-inverse'
106     span = v.content_tag(:span, state, :class => "label #{label_class}")
107     "#{label} #{span}"
108   end
109 end
110