commontator 4.3.0 → 4.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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"