commontator 4.4.1 → 4.5.0

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 (34) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/app/assets/images/commontator/downvote.png +0 -0
  4. data/app/assets/images/commontator/downvote_active.png +0 -0
  5. data/app/assets/images/commontator/downvote_disabled.png +0 -0
  6. data/app/assets/images/commontator/downvote_hover.png +0 -0
  7. data/app/assets/images/commontator/upvote.png +0 -0
  8. data/app/assets/images/commontator/upvote_active.png +0 -0
  9. data/app/assets/images/commontator/upvote_disabled.png +0 -0
  10. data/app/assets/images/commontator/upvote_hover.png +0 -0
  11. data/app/assets/stylesheets/commontator/comments.css +17 -14
  12. data/app/assets/stylesheets/commontator/threads.css +48 -0
  13. data/app/models/commontator/thread.rb +12 -0
  14. data/app/views/commontator/comments/_votes.html.erb +8 -6
  15. data/app/views/commontator/shared/_thread.html.erb +9 -4
  16. data/app/views/commontator/threads/_reply.html.erb +17 -0
  17. data/app/views/commontator/threads/_show.html.erb +22 -17
  18. data/app/views/commontator/threads/show.js.erb +3 -1
  19. data/config/initializers/commontator.rb +31 -6
  20. data/lib/commontator.rb +3 -1
  21. data/lib/commontator/controller_includes.rb +3 -0
  22. data/lib/commontator/remote_link_renderer.rb +10 -0
  23. data/lib/commontator/shared_helper.rb +1 -1
  24. data/lib/commontator/version.rb +1 -1
  25. data/spec/dummy/db/test.sqlite3 +0 -0
  26. data/spec/dummy/log/test.log +4120 -0
  27. data/spec/dummy/tmp/cache/assets/test/sprockets/72b63dddbc5c995f79af8e3c94904fd9 +0 -0
  28. data/spec/dummy/tmp/cache/assets/test/sprockets/a473b3873e554893372a53d71f5e9879 +0 -0
  29. data/spec/dummy/tmp/cache/assets/test/sprockets/a77b1a9223d168112e1705c29220116f +0 -0
  30. data/spec/dummy/tmp/cache/assets/test/sprockets/afa63eb365bdf4f42584b17ac9176b9d +0 -0
  31. data/spec/dummy/tmp/cache/assets/test/sprockets/d2244ccef8e05bb993f75715af0344cc +0 -0
  32. data/spec/dummy/tmp/cache/assets/test/sprockets/decb63cac838a5314aa0c22a979f5ac9 +0 -0
  33. data/spec/dummy/tmp/cache/assets/test/sprockets/f721383d531f067d82b071e14aed7a92 +0 -0
  34. metadata +8 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 95f7d24f572a92460e3feb574f48e3abfe55cf51
4
- data.tar.gz: 80d83a831ca9d26f9aaec72e98611aa10e1c2778
3
+ metadata.gz: a273f377e74d4449ebd729e1865c6dcbc9e4c0c5
4
+ data.tar.gz: c8c70279649288314df84db409d04835dee64d42
5
5
  SHA512:
6
- metadata.gz: c3cef85703c6ea3fe65f317e96404be9f6e55cfcdb7e27d4dec3b3da7aaceafe3bf504ccffe14b959ef5516d09a07669efcb948cd9f18ea9e8d188ec6ad533f3
7
- data.tar.gz: 66e364a7b162b8223bea6a9ac97b08beb6977ed902a481ac50d1da490dcc127fc874a58ced12becd58c1a6534ab927d637ea1390ffe4ae78634a6e28a759b0cf
6
+ metadata.gz: c73e175a971bd4d7618a42681d0559f612668fa8ea1e7e3ec6f84eb786420e990ef8f47b42528dbf0c64e21bff66958829ea68972c2739483d798c3583358eed
7
+ data.tar.gz: 52ba09e55c25a169190e25d85b60279f26f7febe15fa9253ac06d41e6699a4af9f59e7ea3fef0a2a01509f3bf0c13c332221dbc4df8a26afd1bad57e68ddb246
data/README.md CHANGED
@@ -14,7 +14,7 @@ There are 4 steps you must follow to install commontator:
14
14
  Add this line to your application's Gemfile:
15
15
 
16
16
  ```ruby
17
- gem 'commontator', '~> 4.4.1'
17
+ gem 'commontator', '~> 4.5.0'
18
18
  ```
19
19
 
20
20
  And then execute:
@@ -9,14 +9,14 @@
9
9
  margin-top: 15px;
10
10
  margin-bottom: 15px;
11
11
 
12
- padding-top: 8px;
13
- padding-bottom: 8px;
14
- padding-left: 13px;
15
- padding-right: 13px;
12
+ padding-top: 5px;
13
+ padding-bottom: 5px;
14
+ padding-left: 10px;
15
+ padding-right: 10px;
16
16
 
17
17
  color: #000;
18
- border-color: #ddd;
19
- background-color: #fff;
18
+ border-color: #DDD;
19
+ background-color: #FFF;
20
20
 
21
21
  clear: both;
22
22
  }
@@ -59,7 +59,7 @@
59
59
  }
60
60
 
61
61
  .comment_timestamp {
62
- color: #777;
62
+ color: #666;
63
63
  }
64
64
 
65
65
  .comment_votes {
@@ -82,19 +82,22 @@
82
82
  margin: 0px;
83
83
  }
84
84
 
85
- .comment_vote_count {
86
- margin-top: 7px;
87
- margin-bottom: 7px;
88
- }
89
-
90
85
  .comment_upvote {
91
86
  display: block;
92
- height: 32px;
87
+ height: 18px;
88
+ margin-top: 7px;
89
+ margin-bottom: 7px;
90
+ margin-left: 5px;
91
+ margin-right: 5px;
93
92
  }
94
93
 
95
94
  .comment_downvote {
96
95
  display: block;
97
- height: 32px;
96
+ height: 18px;
97
+ margin-top: 7px;
98
+ margin-bottom: 7px;
99
+ margin-left: 5px;
100
+ margin-right: 5px;
98
101
  }
99
102
 
100
103
  .comment_like {
@@ -10,8 +10,56 @@
10
10
  font-size: 16px;
11
11
  font-weight: bold;
12
12
  font-style: normal;
13
+ margin-top: 5px;
14
+ margin-bottom: 5px;
15
+ display: block;
13
16
  }
14
17
 
15
18
  .thread_new_comment {
16
19
  display: none;
20
+ }
21
+
22
+ .thread_new_comment_link {
23
+ display: block;
24
+ }
25
+
26
+ /* Modified from:
27
+ http://www.strangerstudios.com/sandbox/pagination/diggstyle.php */
28
+ .thread_pagination {
29
+ padding: 3px;
30
+ margin: 3px;
31
+ }
32
+
33
+ .thread_pagination a {
34
+ padding: 2px 5px 2px 5px;
35
+ margin: 2px;
36
+ border: 1px solid #999;
37
+
38
+ text-decoration: none;
39
+ color: #666;
40
+ }
41
+
42
+ .thread_pagination a:hover,
43
+ .thread_pagination a:active {
44
+ border: 1px solid #555;
45
+
46
+ color: #000;
47
+ }
48
+
49
+ .thread_pagination em {
50
+ padding: 2px 5px 2px 5px;
51
+ margin: 2px;
52
+ border: 1px solid #555;
53
+
54
+ font-weight: bold;
55
+ background-color: #555;
56
+ color: #FFF;
57
+ }
58
+
59
+ .thread_pagination span {
60
+ padding: 2px 5px 2px 5px;
61
+ margin: 2px;
62
+ border: 1px solid #EEE;
63
+
64
+ color: #DDD;
17
65
  }
@@ -15,6 +15,12 @@ module Commontator
15
15
  commontable.try(:commontable_config) || Commontator
16
16
  end
17
17
 
18
+ def will_paginate?
19
+ return false if config.comments_per_page.nil? || !comments.respond_to?(:paginate)
20
+ require 'commontator/remote_link_renderer'
21
+ true
22
+ end
23
+
18
24
  def ordered_comments
19
25
  case config.comment_order.to_sym
20
26
  when :l then comments.order('id DESC')
@@ -24,6 +30,12 @@ module Commontator
24
30
  end
25
31
  end
26
32
 
33
+ def paginated_comments(page, per_page)
34
+ oc = ordered_comments
35
+ return oc unless will_paginate?
36
+ oc.paginate(:page => page, :per_page => per_page)
37
+ end
38
+
27
39
  def is_closed?
28
40
  !closed_at.blank?
29
41
  end
@@ -24,12 +24,13 @@
24
24
  <%= form_tag commontator.unvote_comment_path(comment),
25
25
  :method => :put,
26
26
  :remote => true do %>
27
- <%= image_submit_tag "commontator/upvote_hover.png",
27
+ <%= image_submit_tag "commontator/upvote_active.png",
28
28
  :onmouseover => "this.src='/assets/commontator/upvote.png'",
29
- :onmouseout => "this.src='/assets/commontator/upvote_hover.png'" %>
29
+ :onmouseout => "this.src='/assets/commontator/upvote_active.png'"
30
+ %>
30
31
  <% end %>
31
32
  <% else %>
32
- <%= image_tag "commontator/upvote_hover.png" %>
33
+ <%= image_tag "commontator/upvote_disabled.png" %>
33
34
  <% end %>
34
35
  </span>
35
36
  <% end %>
@@ -54,12 +55,13 @@
54
55
  <%= form_tag commontator.unvote_comment_path(comment),
55
56
  :method => :put,
56
57
  :remote => true do %>
57
- <%= image_submit_tag "commontator/downvote_hover.png",
58
+ <%= image_submit_tag "commontator/downvote_active.png",
58
59
  :onmouseover => "this.src='/assets/commontator/downvote.png'",
59
- :onmouseout => "this.src='/assets/commontator/downvote_hover.png'" %>
60
+ :onmouseout => "this.src='/assets/commontator/downvote_active.png'"
61
+ %>
60
62
  <% end %>
61
63
  <% else %>
62
- <%= image_tag "commontator/downvote_hover.png" %>
64
+ <%= image_tag "commontator/downvote_disabled.png" %>
63
65
  <% end %>
64
66
  </span>
65
67
  <% end %>
@@ -10,11 +10,16 @@
10
10
 
11
11
  <div id="thread_<%= thread.id %>_div" class="thread" style="display: none;">
12
12
  <% if @commontator_thread_show %>
13
- <%= render :partial => 'commontator/threads/show', :locals => {:thread => thread,
14
- :user => user} %>
13
+ <%= render :partial => 'commontator/threads/show',
14
+ :locals => {:thread => thread,
15
+ :user => user,
16
+ :page => @commontator_page,
17
+ :per_page => @commontator_per_page} %>
15
18
  <% else %>
16
- <%= link_to "#{t 'commontator.thread.actions.show'} (#{subscription ? (subscription.unread.to_s + '/' + thread.comments.count.to_s) : thread.comments.count.to_s})", \
17
- commontator.thread_path(thread), :remote => true %>
19
+ <%= link_to "#{t 'commontator.thread.actions.show'} (#{subscription ?
20
+ (subscription.unread.to_s + '/' + thread.comments.count.to_s) :
21
+ thread.comments.count.to_s})", commontator.thread_path(thread),
22
+ :remote => true %>
18
23
  <% end %>
19
24
  </div>
20
25
  <% end %>
@@ -0,0 +1,17 @@
1
+ <% # Clients of this partial must supply the following variables:
2
+ # thread
3
+ # user
4
+ %>
5
+
6
+ <% if thread.is_closed? %>
7
+ <p><%= t 'commontator.thread.status.closed_by' %></p>
8
+ <% elsif !user %>
9
+ <p><%= t 'commontator.require_login' %>.</p>
10
+ <% else %>
11
+ <div id="thread_<%= thread.id %>_new_comment_div" class="thread_new_comment"></div>
12
+
13
+ <span id="thread_<%= thread.id %>_new_comment_link_span" class="thread_new_comment_link">
14
+ <%= link_to t('commontator.comment.actions.new'),
15
+ commontator.new_thread_comment_path(thread), :remote => true %>
16
+ </span>
17
+ <% end %>
@@ -1,16 +1,13 @@
1
1
  <% # Clients of this partial must supply the following variables:
2
2
  # thread
3
3
  # user
4
+ # page
5
+ # per_page
4
6
  %>
5
7
 
6
8
  <% can_subscribe = thread.can_subscribe?(user) %>
7
9
  <% can_edit = thread.can_be_edited_by?(user) %>
8
10
 
9
- <span id="thread_<%= thread.id.to_s %>_header_span" class="thread_header">
10
- <%= t "commontator.thread.status.#{thread.is_closed? ? 'closed' : 'open'}",
11
- :closer_name => thread.closer.try(:commontator_name) %>
12
- </span>
13
-
14
11
  <span id="thread_<%= thread.id.to_s %>_actions_span" class="thread_actions">
15
12
  <% if can_subscribe %>
16
13
  <span id="thread_<%= thread.id.to_s %>_subscription_span" class="thread_subscription">
@@ -35,21 +32,29 @@
35
32
  <% end %>
36
33
  </span>
37
34
 
35
+ <span id="thread_<%= thread.id.to_s %>_header_span" class="thread_header">
36
+ <%= t "commontator.thread.status.#{thread.is_closed? ? 'closed' : 'open'}",
37
+ :closer_name => thread.closer.try(:commontator_name) %>
38
+ </span>
39
+
40
+ <% if thread.config.comment_order == :l %>
41
+ <%= render :partial => 'reply', :locals => {:thread => thread, :user => user} %>
42
+ <% end %>
43
+
38
44
  <div id="thread_<%= thread.id.to_s %>_comment_list_div" class="thread_comment_list">
45
+ <% comments = thread.paginated_comments(page, per_page) %>
39
46
  <%= render :partial => 'commontator/comments/list',
40
- :locals => {:comments => thread.ordered_comments,
47
+ :locals => {:comments => comments,
41
48
  :user => user} %>
42
49
  </div>
43
50
 
44
- <% if thread.is_closed? %>
45
- <p><%= t 'commontator.thread.status.cannot_post' %></p>
46
- <% elsif !user %>
47
- <p><%= t 'commontator.require_login' %>.</p>
48
- <% else %>
49
- <div id="thread_<%= thread.id %>_new_comment_div" class="thread_new_comment"></div>
50
-
51
- <span id="thread_<%= thread.id %>_new_comment_link_span" class="thread_new_comment_link">
52
- <%= link_to t('commontator.comment.actions.new'),
53
- commontator.new_thread_comment_path(thread), :remote => true %>
54
- </span>
51
+ <% if thread.will_paginate? %>
52
+ <div id="thread_<%= thread.id.to_s %>_pagination_div" class="thread_pagination">
53
+ <%= will_paginate comments,
54
+ :renderer => thread.config.wp_link_renderer_proc.call(thread) %>
55
+ </div>
56
+ <% end %>
57
+
58
+ <% if thread.config.comment_order != :l %>
59
+ <%= render :partial => 'reply', :locals => {:thread => thread, :user => user} %>
55
60
  <% end %>
@@ -2,6 +2,8 @@ $("#thread_<%= @thread.id %>_div").html(
2
2
  "<%= escape_javascript(
3
3
  render :partial => 'show',
4
4
  :locals => {:thread => @thread,
5
- :user => @user}) %>");
5
+ :user => @user,
6
+ :page => @commontator_page,
7
+ :per_page => @commontator_per_page}) %>");
6
8
 
7
9
  <%= javascript_proc %>
@@ -19,7 +19,7 @@ Commontator.configure do |config|
19
19
  # However, the view_context does not include the main application's helpers
20
20
  # Default: lambda { |view_context| '$("#error_explanation").remove();' }
21
21
  config.javascript_proc = lambda { |view_context|
22
- '$("#error_explanation").remove();' }
22
+ '$("#error_explanation").remove();' }
23
23
 
24
24
 
25
25
 
@@ -40,8 +40,8 @@ Commontator.configure do |config|
40
40
  # view_context.commontator_gravatar_image_tag(
41
41
  # user, 1, :s => 60, :d => 'mm') }
42
42
  config.user_avatar_proc = lambda { |user, view_context|
43
- view_context.commontator_gravatar_image_tag(
44
- user, 1, :s => 60, :d => 'mm') }
43
+ view_context.commontator_gravatar_image_tag(
44
+ user, 1, :s => 60, :d => 'mm') }
45
45
 
46
46
  # Proc called with a user and a mailer object as arguments
47
47
  # If the mailer argument is nil, the email is for internal use only and
@@ -65,7 +65,7 @@ Commontator.configure do |config|
65
65
  # Thread/Commontable (acts_as_commontable) Configuration
66
66
 
67
67
  # Proc called with a mailer object as argument
68
- # Returns the address emails are sent 'from'
68
+ # Returns the address emails are sent "from"
69
69
  # Important: Change this to at least match your domain name
70
70
  # Default: lambda { |mailer| 'no-reply@example.com' }
71
71
  config.email_from_proc = lambda { |mailer| 'no-reply@example.com' }
@@ -112,7 +112,7 @@ Commontator.configure do |config|
112
112
  # Returns the text to be displayed in between the voting buttons
113
113
  # Default: lambda { |comment_voting, pos, neg| "%+d" % (pos - neg) }
114
114
  config.voting_text_proc = lambda { |comment_voting, pos, neg|
115
- "%+d" % (pos - neg) }
115
+ "%+d" % (pos - neg) }
116
116
 
117
117
  # What order to use for comments
118
118
  # Valid options:
@@ -120,9 +120,33 @@ Commontator.configure do |config|
120
120
  # :l (latest comment first)
121
121
  # :ve (highest voted first; earliest first if tied)
122
122
  # :vl (highest voted first; latest first if tied)
123
+ # Notes:
124
+ # :e is usually used in forums (discussions)
125
+ # :l is usually used in blogs (opinions)
126
+ # :ve and :vl are usually used where it makes sense to rate comments
127
+ # based on usefulness (q&a, reviews, guides, etc.)
128
+ # If :l is selected, the "reply to thread" form will appear before the comments
129
+ # Otherwise, it will appear after the comments
123
130
  # Default: :e
124
131
  config.comment_order = :e
125
132
 
133
+ # Number of comments to display in each page
134
+ # Set to nil to disable pagination
135
+ # Any other value requires the will_paginate gem
136
+ # Default: nil (no pagination)
137
+ config.comments_per_page = nil
138
+
139
+ # Proc called with a thread as argument
140
+ # Returns a LinkRenderer to be used with will_paginate for that thread,
141
+ # assuming pagination is enabled
142
+ # Commontator supplies its own RemoteLinkRenderer,
143
+ # which is exactly like will_paginate's default, except it returns remote links
144
+ # For more information, see:
145
+ # https://github.com/mislav/will_paginate/wiki/Link-renderer
146
+ # Default: lambda { |thread| Commontator::RemoteLinkRenderer }
147
+ config.wp_link_renderer_proc = lambda { |thread|
148
+ Commontator::RemoteLinkRenderer }
149
+
126
150
  # Whether users can edit their own comments
127
151
  # Valid options:
128
152
  # :a (always)
@@ -166,7 +190,8 @@ Commontator.configure do |config|
166
190
  "#{commontable.class.name} ##{commontable.id}" }
167
191
 
168
192
  # Proc called with main_app and a commontable object as arguments
169
- # Return the url that contains the commontable's thread (to be used in the subscription email)
193
+ # Return the url that contains the commontable's thread
194
+ # This usually is the commontable's "show" page
170
195
  # The main application's routes can be accessed through the main_app object
171
196
  # Default: lambda { |commontable, main_app|
172
197
  # main_app.polymorphic_url(commontable) }
@@ -27,6 +27,8 @@ module Commontator
27
27
  :comment_voting,
28
28
  :voting_text_proc,
29
29
  :comment_order,
30
+ :comments_per_page,
31
+ :wp_link_renderer_proc,
30
32
  :comment_editing,
31
33
  :comment_deletion,
32
34
  :moderators_can_edit_comments,
@@ -96,4 +98,4 @@ module Commontator
96
98
  end
97
99
 
98
100
  require 'commontator/acts_as_commontator'
99
- require 'commontator/acts_as_commontable'
101
+ require 'commontator/acts_as_commontable'
@@ -14,6 +14,9 @@ module Commontator
14
14
  thread = commontable.thread
15
15
  raise SecurityTransgression unless thread.can_be_read_by?(user)
16
16
  thread.mark_as_read_for(user)
17
+ @commontator_page = params[:page] || 1
18
+ @commontator_per_page = params[:per_page] ||\
19
+ thread.config.comments_per_page
17
20
  @commontator_thread_show = true
18
21
  end
19
22
  end
@@ -0,0 +1,10 @@
1
+ require 'will_paginate/view_helpers/action_view'
2
+
3
+ module Commontator
4
+ class RemoteLinkRenderer < WillPaginate::ActionView::LinkRenderer
5
+ def link(text, target, attributes = {})
6
+ attributes = attributes.merge('data-remote' => true)
7
+ super(text, target, attributes)
8
+ end
9
+ end
10
+ end
@@ -5,7 +5,7 @@ module Commontator
5
5
 
6
6
  render(:partial => 'commontator/shared/thread',
7
7
  :locals => {:thread => commontable.thread,
8
- :user => user}).html_safe
8
+ :user => user}).html_safe
9
9
  end
10
10
 
11
11
  def commontator_gravatar_image_tag(user, border = 1, options = {})