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 -%> »