diff --git a/app/models/pool.rb b/app/models/pool.rb
index 115088842..012eb6469 100644
--- a/app/models/pool.rb
+++ b/app/models/pool.rb
@@ -268,19 +268,25 @@ class Pool < ApplicationRecord
end
def first_post?(post_id)
- page_number(post_id) == 1
+ post_id == post_ids.first
+ end
+
+ def last_post?(post_id)
+ post_id == post_ids.last
end
# XXX finds wrong post when the pool contains multiple copies of the same post (#2042).
def previous_post_id(post_id)
+ return nil if first_post?(post_id) || !contains?(post_id)
+
n = post_ids.index(post_id) - 1
- return nil if n < 0
post_ids[n]
end
def next_post_id(post_id)
+ return nil if last_post?(post_id) || !contains?(post_id)
+
n = post_ids.index(post_id) + 1
- return nil if n >= post_ids.size
post_ids[n]
end
diff --git a/app/views/posts/partials/show/_pool_list_item.html.erb b/app/views/posts/partials/show/_pool_list_item.html.erb
index 63d0723a3..621a7e3e8 100644
--- a/app/views/posts/partials/show/_pool_list_item.html.erb
+++ b/app/views/posts/partials/show/_pool_list_item.html.erb
@@ -1,5 +1,5 @@
<%= content_tag :li, id: "nav-link-for-pool-#{pool.id}", class: "pool-category-#{pool.category} pool-selected-#{selected}" do -%>
- <% if !pool.first_post?(post.id) -%>
+ <% if !pool.first_post?(post.id) && pool.post_ids.first -%>
<%= link_to("«".html_safe, post_path(pool.post_ids.first, pool_id: pool.id), class: "first", title: "to page 1") %>
<% else -%>
«
@@ -25,7 +25,7 @@
<% end -%>
<% end -%>
- <% if post.id != pool.post_ids.last -%>
+ <% if !pool.last_post?(post.id) && pool.post_ids.last -%>
<%= link_to("»".html_safe, post_path(pool.post_ids.last, pool_id: pool.id), class: "last", title: "to page #{pool.post_count}") -%>
<% else -%>
»