commontator 4.3.0 → 4.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +18 -11
  3. data/app/assets/stylesheets/commontator/comments.css +24 -3
  4. data/app/controllers/commontator/application_controller.rb +8 -3
  5. data/app/controllers/commontator/comments_controller.rb +13 -11
  6. data/app/controllers/commontator/subscriptions_controller.rb +2 -2
  7. data/app/controllers/commontator/threads_controller.rb +2 -2
  8. data/app/mailers/commontator/subscriptions_mailer.rb +5 -8
  9. data/app/models/commontator/comment.rb +37 -19
  10. data/app/models/commontator/thread.rb +18 -20
  11. data/app/views/commontator/comments/_body.html.erb +1 -1
  12. data/app/views/commontator/comments/_show.html.erb +10 -9
  13. data/app/views/commontator/comments/_votes.html.erb +11 -6
  14. data/app/views/commontator/comments/delete.js.erb +1 -1
  15. data/app/views/commontator/comments/update.js.erb +1 -1
  16. data/app/views/commontator/subscriptions_mailer/comment_created.html.erb +2 -2
  17. data/app/views/commontator/threads/_show.html.erb +3 -2
  18. data/config/initializers/commontator.rb +117 -96
  19. data/config/locales/{en.yml → commontator/en.yml} +15 -14
  20. data/lib/commontator.rb +61 -17
  21. data/lib/commontator/acts_as_commontable.rb +4 -0
  22. data/lib/commontator/acts_as_commontator.rb +16 -0
  23. data/lib/commontator/engine.rb +3 -0
  24. data/lib/commontator/shared_helper.rb +7 -19
  25. data/lib/commontator/version.rb +1 -1
  26. data/lib/tasks/commontator_tasks.rake +5 -2
  27. data/spec/app/mailers/commontator/subscriptions_mailer_spec.rb +2 -2
  28. data/spec/app/models/commontator/comment_spec.rb +19 -0
  29. data/spec/dummy/config/application.rb +1 -0
  30. data/spec/dummy/config/initializers/commontator.rb +3 -5
  31. data/spec/dummy/db/test.sqlite3 +0 -0
  32. data/spec/dummy/log/test.log +120400 -0
  33. data/spec/dummy/tmp/cache/assets/test/sprockets/72b63dddbc5c995f79af8e3c94904fd9 +0 -0
  34. data/spec/dummy/tmp/cache/assets/test/sprockets/a77b1a9223d168112e1705c29220116f +0 -0
  35. data/spec/dummy/tmp/cache/assets/test/sprockets/d2244ccef8e05bb993f75715af0344cc +0 -0
  36. data/spec/dummy/tmp/cache/assets/test/sprockets/decb63cac838a5314aa0c22a979f5ac9 +0 -0
  37. data/spec/dummy/tmp/cache/assets/test/sprockets/f721383d531f067d82b071e14aed7a92 +0 -0
  38. data/spec/lib/commontator/acts_as_commontable_spec.rb +1 -0
  39. data/spec/lib/commontator/acts_as_commontator_spec.rb +4 -0
  40. data/spec/lib/commontator/commontator_config_spec.rb +6 -4
  41. data/spec/test_helper.rb +0 -6
  42. metadata +3 -9
  43. data/app/helpers/commontator/comments_helper.rb +0 -17
  44. data/app/helpers/commontator/threads_helper.rb +0 -7
  45. data/spec/app/helpers/commontator/comments_helper_spec.rb +0 -29
  46. data/spec/app/helpers/commontator/threads_helper_spec.rb +0 -13
@@ -4,5 +4,5 @@
4
4
 
5
5
  <%= simple_format comment.is_deleted? ? \
6
6
  t('commontator.comment.status.deleted_by',
7
- :deleter_name => commontator_name(comment.editor)) : \
7
+ :deleter_name => comment.editor.commontator_name) : \
8
8
  comment.body %>
@@ -2,15 +2,16 @@
2
2
  # comment
3
3
  # user
4
4
  %>
5
-
5
+
6
+ <% creator = comment.creator
7
+ name = creator.commontator_name
8
+ link = creator.commontator_link(main_app)
9
+ avatar = creator.commontator_avatar(self) %>
10
+
6
11
  <div id="comment_<%= comment.id.to_s %>_div" class="comment">
7
12
  <div id="comment_<%= comment.id.to_s %>_top_div" class="comment_div">
8
13
  <span id="comment_<%= comment.id.to_s %>_commontator_span" class="comment_commontator">
9
- <% if user && user.commontator_config.user_name_clickable %>
10
- <%= link_to commontator_name(comment.creator), main_app.polymorphic_path(comment.creator) %>
11
- <% else %>
12
- <%= commontator_name comment.creator %>
13
- <% end %>
14
+ <%= link.blank? ? name : link_to(name, link) %>
14
15
  </span>
15
16
  <span id="comment_<%= comment.id.to_s %>_actions_span" class="comment_actions">
16
17
  <%= render :partial => 'commontator/comments/actions',
@@ -20,7 +21,7 @@
20
21
  </div>
21
22
  <div id="comment_<%= comment.id.to_s %>_middle_div" class="comment_div">
22
23
  <span id="comment_<%= comment.id.to_s %>_avatar_span" class="comment_avatar">
23
- <%= commontator_avatar comment.creator %>
24
+ <%= avatar %>
24
25
  </span>
25
26
  <span id="comment_<%= comment.id.to_s %>_votes_span" class="comment_votes">
26
27
  <%= render :partial => 'commontator/comments/votes',
@@ -34,12 +35,12 @@
34
35
  </div>
35
36
  <div id="comment_<%= comment.id.to_s %>_bottom_div" class="comment_div">
36
37
  <span id="comment_<%= comment.id.to_s %>_created_timestamp_span" class="comment_timestamp">
37
- <%= created_timestamp comment %>
38
+ <%= comment.created_timestamp %>
38
39
  </span>
39
40
  <br/>
40
41
  <span id="comment_<%= comment.id.to_s %>_updated_timestamp_span" class="comment_timestamp">
41
42
  <% if comment.is_modified? %>
42
- <%= updated_timestamp comment %>
43
+ <%= comment.updated_timestamp %>
43
44
  <% end %>
44
45
  </span>
45
46
  </div>
@@ -6,8 +6,12 @@
6
6
  <% if comment.can_be_voted_on? %>
7
7
  <% can_vote = comment.can_be_voted_on_by?(user) %>
8
8
  <% vote = comment.get_vote_by(user) %>
9
+ <% comment_voting = comment.thread.config.comment_voting.to_sym %>
9
10
 
10
- <span id="comment_<%= comment.id %>_upvote_span" class="comment_upvote">
11
+ <% if comment_voting == :ld || comment_voting == :l %>
12
+ <% vtype = (comment_voting == :ld) ? 'upvote' : 'like' %>
13
+ <span id="comment_<%= comment.id %>_<%= vtype %>_span"
14
+ class="comment_<%= vtype %>">
11
15
  <% if can_vote && (vote.blank? || !vote.vote_flag) %>
12
16
  <%= form_tag commontator.upvote_comment_path(comment),
13
17
  :method => :put,
@@ -28,15 +32,15 @@
28
32
  <%= image_tag "commontator/upvote_hover.png" %>
29
33
  <% end %>
30
34
  </span>
35
+ <% end %>
31
36
 
32
37
  <span id="comment_<%= comment.id %>_vote_count_span" class="comment_vote_count">
33
- <% if comment.thread.config.combine_upvotes_and_downvotes %>
34
- <p><%= "%+d" % (comment.upvotes.size - comment.downvotes.size) %></p>
35
- <% else %>
36
- <p>+<%= comment.upvotes.size %>/-<%= comment.downvotes.size %></p>
37
- <% end %>
38
+ <% config = comment.thread.config %>
39
+ <%= config.voting_text_proc.call(config.comment_voting,
40
+ comment.upvotes.size, comment.downvotes.size) %>
38
41
  </span>
39
42
 
43
+ <% if comment_voting == :ld %>
40
44
  <span id="comment_<%= comment.id %>_downvote_span" class="comment_downvote">
41
45
  <% if can_vote && (vote.blank? || vote.vote_flag) %>
42
46
  <%= form_tag commontator.downvote_comment_path(comment),
@@ -58,4 +62,5 @@
58
62
  <%= image_tag "commontator/downvote_hover.png" %>
59
63
  <% end %>
60
64
  </span>
65
+ <% end %>
61
66
  <% end %>
@@ -2,7 +2,7 @@ $("#comment_<%= @comment.id.to_s %>_body_div").html("<%= escape_javascript(
2
2
  render :partial => 'body', :locals => {:comment => @comment}) %>");
3
3
 
4
4
  $("#comment_<%= @comment.id.to_s %>_updated_timestamp_span").html("<%= escape_javascript(
5
- updated_timestamp(@comment)) %>");
5
+ @comment.updated_timestamp) %>");
6
6
 
7
7
  $("#comment_<%= @comment.id.to_s %>_actions_span").html("<%= escape_javascript(
8
8
  render :partial => 'actions',
@@ -2,6 +2,6 @@ $("#comment_<%= @comment.id.to_s %>_body_div").html("<%= escape_javascript(
2
2
  render :partial => 'body', :locals => {:comment => @comment}) %>");
3
3
 
4
4
  $("#comment_<%= @comment.id.to_s %>_updated_timestamp_span").html("<%= escape_javascript(
5
- updated_timestamp(@comment)) %>");
5
+ @comment.updated_timestamp) %>");
6
6
 
7
7
  <%= javascript_proc %>
@@ -1,10 +1,10 @@
1
- <h4><%= t 'commontator.emails.comment_created.body',
1
+ <h4><%= t 'commontator.email.comment_created.body',
2
2
  :creator_name => @creator_name,
3
3
  :commontable_name => @commontable_name %></h4>
4
4
 
5
5
  <%= render :partial => 'commontator/comments/body',
6
6
  :locals => { :comment => @comment } %>
7
7
 
8
- <p><%= t 'commontator.emails.thread_link_html',
8
+ <p><%= t 'commontator.email.thread_link_html',
9
9
  :commontable_url => @commontable_url,
10
10
  :commontable_name => @commontable_name %></p>
@@ -7,7 +7,8 @@
7
7
  <% can_edit = thread.can_be_edited_by?(user) %>
8
8
 
9
9
  <span id="thread_<%= thread.id.to_s %>_header_span" class="thread_header">
10
- <%= t "commontator.thread.status.#{thread.is_closed? ? 'closed' : 'open'}" %>
10
+ <%= t "commontator.thread.status.#{thread.is_closed? ? 'closed' : 'open'}",
11
+ :closer_name => thread.closer.try(:commontator_name) %>
11
12
  </span>
12
13
 
13
14
  <span id="thread_<%= thread.id.to_s %>_actions_span" class="thread_actions">
@@ -41,7 +42,7 @@
41
42
  </div>
42
43
 
43
44
  <% if thread.is_closed? %>
44
- <p><%= t 'commontator.thread.status.closed_by' %></p>
45
+ <p><%= t 'commontator.thread.status.cannot_post' %></p>
45
46
  <% elsif !user %>
46
47
  <p><%= t 'commontator.require_login' %>.</p>
47
48
  <% else %>
@@ -1,5 +1,8 @@
1
1
  # Change the settings below to suit your needs
2
2
  # All settings are initially set to their default values
3
+
4
+ # Note: Do not "return" from procs
5
+ # Use "next" instead
3
6
  Commontator.configure do |config|
4
7
  # Engine Configuration
5
8
 
@@ -8,148 +11,166 @@ Commontator.configure do |config|
8
11
  # Default: lambda { |controller| controller.current_user }
9
12
  config.current_user_proc = lambda { |controller| controller.current_user }
10
13
 
11
- # Proc called with the view_context object as argument
14
+ # Proc called with the current view_context as argument
12
15
  # Returns a string to be appended to all JavaScript responses from Commontator
13
16
  # Can be used, for example, to display/clear Rails error messages
14
17
  # Objects visible in view templates can be accessed through
15
18
  # the view_context object (for example, view_context.flash)
16
19
  # However, the view_context does not include the main application's helpers
17
20
  # Default: lambda { |view_context| '$("#error_explanation").remove();' }
18
- config.javascript_proc = lambda { |view_context| '$("#error_explanation").remove();' }
21
+ config.javascript_proc = lambda { |view_context|
22
+ '$("#error_explanation").remove();' }
23
+
19
24
 
20
25
 
21
26
  # User (acts_as_commontator) Configuration
22
27
 
23
28
  # Proc called with a user as argument
24
- # Returns the user's name
25
- # Important: change this to return the users' display names
29
+ # Returns the user's display name
30
+ # Important: change this to return actual names or usernames
26
31
  # Default: lambda { |user| t('commontator.anonymous') } (all users are Anonymous)
27
32
  config.user_name_proc = lambda { |user| I18n.t('commontator.anonymous') }
28
33
 
29
- # Whether the comment creator's name is clickable in the comment view
30
- # If enabled, the link will point to the comment creator's 'show' page
31
- # Default: false
32
- config.user_name_clickable = false
33
-
34
- # Proc called with a user as argument
35
- # Returns the user's email address
36
- # Used in mailers
37
- # Default: lambda { |user| user.email }
38
- config.user_email_proc = lambda { |user| user.email }
39
-
40
- # Proc called with a user as argument
41
- # Returns true iif the user is an admin (a moderator for all threads)
42
- # Moderators can delete other users' comments and close threads
43
- # Default: lambda { |user| false } (no admins)
44
- config.user_admin_proc = lambda { |user| false }
45
-
46
- # Proc called with a user and the view_context object as arguments
34
+ # Proc called with a user and the current view_context as arguments
47
35
  # Returns an HTML image tag containing the user's avatar image
48
36
  # The commontator_gravatar_image_tag helper takes a user object,
49
37
  # a border size, and an options hash for gravatar
50
38
  # See available options at http://en.gravatar.com/site/implement/images/)
51
- # Default: lambda { |user, view_context| view_context.commontator_gravatar_image_tag(user, 1, :s => 60, :d => 'mm') }
52
- config.user_avatar_proc = lambda { |user, view_context| view_context.commontator_gravatar_image_tag(user, 1, :s => 60, :d => 'mm') }
53
-
54
- # Proc called with a user as argument
55
- # Returns true iif emails should be sent to this user
56
- # Currently, only the subscription email exists
57
- # Default: lambda { |user| true } (emails can be sent to all users)
58
- config.user_email_enable_proc = lambda { |user| true }
39
+ # Default: lambda { |user, view_context|
40
+ # view_context.commontator_gravatar_image_tag(
41
+ # user, 1, :s => 60, :d => 'mm') }
42
+ config.user_avatar_proc = lambda { |user, view_context|
43
+ view_context.commontator_gravatar_image_tag(
44
+ user, 1, :s => 60, :d => 'mm') }
45
+
46
+ # Proc called with a user and a mailer object as arguments
47
+ # If the mailer argument is nil, the email is for internal use only and
48
+ # this method should always return the user's email, no matter what
49
+ # If the mailer argument is not nil, then an actual email will be sent to the
50
+ # address returned; you can prevent it from being sent by checking the
51
+ # arguments and returning a blank string, if appropriate
52
+ # Default: lambda { |user, mailer| user.email }
53
+ config.user_email_proc = lambda { |user, mailer| user.email }
54
+
55
+ # Proc called with a user and the current view_context as arguments
56
+ # Returns a link to the user's page
57
+ # If anything non-blank is returned, the user's name in comments
58
+ # will become a hyperlink pointing to this
59
+ # The main application's routes can be accessed through the main_app object
60
+ # Default: lambda { |user, main_app| '' } (no link)
61
+ config.user_link_proc = lambda { |user, main_app| '' }
62
+
59
63
 
60
64
 
61
65
  # Thread/Commontable (acts_as_commontable) Configuration
62
66
 
63
- # Proc called with a mailer as argument
67
+ # Proc called with a mailer object as argument
64
68
  # Returns the address emails are sent 'from'
65
69
  # Important: Change this to at least match your domain name
66
- # Default:
67
- # lambda { |mailer| 'no-reply@example.com' }
70
+ # Default: lambda { |mailer| 'no-reply@example.com' }
68
71
  config.email_from_proc = lambda { |mailer| 'no-reply@example.com' }
69
72
 
70
- # Whether moderators can edit other users' comments
71
- # Default: false
72
- config.moderators_can_edit_comments = false
73
-
74
- # Whether users automatically subscribe to a thread when commenting
75
- # Default: false
76
- config.auto_subscribe_on_comment = false
77
-
78
- # Whether users can edit their own comments
79
- # Default: true
80
- config.can_edit_own_comments = true
81
-
82
- # Whether users can edit their own comments
83
- # after someone posted a newer comment
84
- # Default: false
85
- config.can_edit_old_comments = false
86
-
87
- # Whether users can delete their own comments
88
- # Default: true
89
- config.can_delete_own_comments = true
90
-
91
- # Whether users can delete their own comments
92
- # after someone posted a newer comment
93
- # Default: false
94
- config.can_delete_old_comments = false
73
+ # Proc called with a thread and a user as arguments
74
+ # Returns true iif the user should be allowed to read that thread
75
+ # Note: can be called with a user object that is false or nil if not logged in
76
+ # Default: lambda { |thread, user| true } (anyone can read any thread)
77
+ config.thread_read_proc = lambda { |thread, user| true }
95
78
 
96
- # Whether users can manually subscribe or unsubscribe to threads
97
- # Default: true
98
- config.can_subscribe_to_thread = true
79
+ # Proc called with a thread and a user as arguments
80
+ # Returns true iif the user is a moderator for that thread
81
+ # Moderators can delete other users' comments and close threads
82
+ # If you want global moderators, make this proc true for them
83
+ # Note: moderators must "acts_as_commontator" too (like other users)
84
+ # Default: lambda { |thread, user| false } (no moderators)
85
+ config.thread_moderator_proc = lambda { |thread, user| false }
86
+
87
+ # Whether users can subscribe to threads to receive activity email notifications
88
+ # Valid options:
89
+ # :n (no subscriptions)
90
+ # :a (automatically subscribe when you comment; cannot do it manually)
91
+ # :m (manual subscriptions only)
92
+ # :b (both automatic, when commenting, and manual)
93
+ # Default: :m
94
+ config.thread_subscription = :m
99
95
 
100
96
  # Whether users can vote on other users' comments
101
- # Note: requires acts_as_votable gem installed
102
- # and configured for your application
103
- # Default: false
104
- config.can_vote_on_comments = false
105
-
106
- # Whether to display upvotes and downvotes separately, as two numbers,
107
- # or together, as their difference
108
- # Default: false (display as two numbers)
109
- config.combine_upvotes_and_downvotes = false
97
+ # Valid options:
98
+ # :n (no voting)
99
+ # :l (likes - requires acts_as_votable gem)
100
+ # :ld (likes/dislikes - requires acts_as_votable gem)
101
+ # Not yet implemented:
102
+ # :s (star ratings)
103
+ # :r (reputation system)
104
+ # Note: you can format how the votes are displayed by modifying the locale file
105
+ # Default: :n
106
+ config.comment_voting = :n
107
+
108
+ # This proc is called with the value of config.comment_voting as an argument,
109
+ # as well as pos and neg
110
+ # pos is the number of likes or the rating or the reputation
111
+ # neg is the number of dislikes, if applicable, or 0 otherwise
112
+ # Returns the text to be displayed in between the voting buttons
113
+ # Default: lambda { |comment_voting, pos, neg| "%+d" % (pos - neg) }
114
+ config.voting_text_proc = lambda { |comment_voting, pos, neg|
115
+ "%+d" % (pos - neg) }
110
116
 
111
117
  # What order to use for comments
112
- # Valid values:
118
+ # Valid options:
113
119
  # :e (earliest comment first)
114
120
  # :l (latest comment first)
115
121
  # :ve (highest voted first; earliest first if tied)
116
122
  # :vl (highest voted first; latest first if tied)
117
- # Default: :e (earliest comment first)
118
- config.comments_order = :e
123
+ # Default: :e
124
+ config.comment_order = :e
119
125
 
120
- # Whether users can read threads closed by moderators
121
- # Default: true
122
- config.closed_threads_are_readable = true
126
+ # Whether users can edit their own comments
127
+ # Valid options:
128
+ # :a (always)
129
+ # :l (only if it's the latest comment)
130
+ # :n (never)
131
+ # Default: :l
132
+ config.comment_editing = :l
123
133
 
124
- # Whether to show that comments deleted by a moderator actually existed
125
- # (the content will be hidden either way)
126
- # Default: true
127
- config.deleted_comments_are_visible = true
134
+ # Whether users can delete their own comments
135
+ # Valid options:
136
+ # :a (always)
137
+ # :l (only if it's the latest comment)
138
+ # :n (never)
139
+ # Note: moderators can always delete any comment
140
+ # Default: :l
141
+ config.comment_deletion = :l
128
142
 
129
- # Proc called with a thread and a user as arguments
130
- # Returns true iif the user should be allowed to read that thread
131
- # Note: can be called with a user object that is false or nil if not logged in
132
- # Default: lambda { |thread, user| true } (anyone can read threads even if not logged in)
133
- config.can_read_thread_proc = lambda { |thread, user| true }
143
+ # Whether moderators can edit other users' comments
144
+ # Default: false
145
+ config.moderators_can_edit_comments = false
134
146
 
135
- # Proc called with a thread and a user as arguments
136
- # Returns true iif the user is a moderator for that particular thread
137
- # and can delete users' comments in the thread or close it
138
- # Default: lambda { |thread, user| false }
139
- # (no thread-specific moderators, but there can still be admins)
140
- config.can_edit_thread_proc = lambda { |thread, user| false }
147
+ # Whether to hide deleted comments completely or show a placeholder message
148
+ # that indicates when a comment was deleted in a thread
149
+ # (moderators will always see the placeholder;
150
+ # the content of the comment will be hidden from all users with either option)
151
+ # Default: false (show placeholder message)
152
+ config.hide_deleted_comments = false
153
+
154
+ # If set to true, threads closed by moderators will be invisible to normal users
155
+ # (moderators can still see them)
156
+ # Default: false (normal users can still read closed threads)
157
+ config.hide_closed_threads = false
141
158
 
142
159
  # Proc called with the commontable object as argument
143
160
  # Returns the name by which the commontable object will be called in email messages
144
161
  # If you have multiple commontable models, you may want to pass this
145
162
  # configuration value as an argument to acts_as_commontable in each one
146
- # Default: lambda { |commontable| "#{commontable.class.name} ##{commontable.id}" }
147
- config.commontable_name_proc = lambda { |commontable| "#{commontable.class.name} ##{commontable.id}" }
163
+ # Default: lambda { |commontable|
164
+ # "#{commontable.class.name} ##{commontable.id}" }
165
+ config.commontable_name_proc = lambda { |commontable|
166
+ "#{commontable.class.name} ##{commontable.id}" }
148
167
 
149
168
  # Proc called with main_app and a commontable object as arguments
150
169
  # Return the url that contains the commontable's thread (to be used in the subscription email)
151
- # The application's routes can be accessed using the main_app object
152
- # Default: lambda { |main_app, commontable| main_app.polymorphic_url(commontable) }
170
+ # The main application's routes can be accessed through the main_app object
171
+ # Default: lambda { |commontable, main_app|
172
+ # main_app.polymorphic_url(commontable) }
153
173
  # (defaults to the commontable's show url)
154
- config.commontable_url_proc = lambda { |main_app, commontable| main_app.polymorphic_url(commontable) }
174
+ config.commontable_url_proc = lambda { |commontable, main_app|
175
+ main_app.polymorphic_url(commontable) }
155
176
  end
@@ -19,29 +19,29 @@
19
19
  # To learn more, please read the Rails Internationalization guide
20
20
  # available at http://guides.rubyonrails.org/i18n.html.
21
21
 
22
+ ---
22
23
  en:
23
24
  activerecord:
24
25
  attributes:
25
- commontator/comment:
26
+ commontator/comment:
26
27
  body: Comment
27
28
  creator: Creator
28
29
  editor: Editor
29
30
  thread: Discussion
30
- commontator/subscription:
31
+ commontator/subscription:
31
32
  subscriber: Subscriber
32
33
  thread: Discussion
33
- commontator/thread:
34
+ commontator/thread:
34
35
  commontable: Commontable
35
- models:
36
+ models:
36
37
  commontator/comment: Comment
37
38
  commontator/subscription: Subscription
38
39
  commontator/thread: Discussion
39
- time:
40
- formats:
41
- commontator: "%b %d %Y at %I:%M%p %Z"
42
40
  commontator:
41
+ anonymous: Anonymous
43
42
  comment:
44
43
  actions:
44
+ cancel: Cancel
45
45
  confirm_delete: "Are you sure you want to delete this comment?"
46
46
  create: "Post Comment"
47
47
  delete: Delete
@@ -49,7 +49,6 @@ en:
49
49
  new: "New Comment"
50
50
  undelete: Undelete
51
51
  update: "Modify Comment"
52
- cancel: Cancel
53
52
  errors:
54
53
  already_deleted: "This comment has already been deleted."
55
54
  create: "This comment could not be posted because:"
@@ -60,12 +59,13 @@ en:
60
59
  created_at: "Posted on %{created_at}."
61
60
  deleted_by: "Comment deleted by %{deleter_name}."
62
61
  updated_at: "Last modified by %{editor_name} on %{updated_at}."
63
- emails:
62
+ email:
64
63
  comment_created:
65
64
  body: "%{creator_name} commented on %{commontable_name}:"
66
65
  subject: "%{creator_name} posted a comment on %{commontable_name}"
67
- thread_link_html: "<a href=%{commontable_url}>Click here</a> to view all comments on %{commontable_name}."
66
+ thread_link_html: "<a href=\"%{commontable_url}\">Click here</a> to view all comments on %{commontable_name}."
68
67
  undisclosed_recipients: "Undisclosed Recipients"
68
+ require_login: "You must login before you can post a comment."
69
69
  subscription:
70
70
  actions:
71
71
  confirm_unsubscribe: "Are you sure you want to unsubscribe from this discussion?"
@@ -84,8 +84,9 @@ en:
84
84
  already_closed: "This discussion has already been closed."
85
85
  not_closed: "This discussion is not closed."
86
86
  status:
87
- closed: "Comments (Closed)"
88
- closed_by: "This discussion has been closed by a moderator."
87
+ cannot_post: "New comments cannot be posted at this time."
88
+ closed: "Comments (Closed by %{closer_name})"
89
89
  open: Comments
90
- anonymous: Anonymous
91
- require_login: "You must login before you can post a comment."
90
+ time:
91
+ formats:
92
+ commontator: "%b %d %Y at %I:%M%p %Z"