diff --git a/app/helpers/posts_helper.rb b/app/helpers/posts_helper.rb index 7e3a2ffb4..f1ea2f60a 100644 --- a/app/helpers/posts_helper.rb +++ b/app/helpers/posts_helper.rb @@ -13,20 +13,6 @@ module PostsHelper params[:tags] =~ /order:rank/ || params[:action] =~ /searches|viewed/ end - def next_page_url - current_page = (params[:page] || 1).to_i - url_for(nav_params_for(current_page + 1)).html_safe - end - - def prev_page_url - current_page = (params[:page] || 1).to_i - if current_page >= 2 - url_for(nav_params_for(current_page - 1)).html_safe - else - nil - end - end - def missed_post_search_count_js return unless post_search_counts_enabled? return unless params[:ms] == "1" && @post_set.post_count == 0 && @post_set.is_single_tag? diff --git a/app/logical/pagination_extension.rb b/app/logical/pagination_extension.rb index efe55f2a4..a4d367be4 100644 --- a/app/logical/pagination_extension.rb +++ b/app/logical/pagination_extension.rb @@ -60,6 +60,30 @@ module PaginationExtension end end + def prev_page + return nil if is_first_page? + + if paginator_mode == :numbered + current_page - 1 + elsif paginator_mode == :sequential_before + "a#{records.first.id}" + elsif paginator_mode == :sequential_after + "b#{records.last.id}" + end + end + + def next_page + return nil if is_last_page? + + if paginator_mode == :numbered + current_page + 1 + elsif paginator_mode == :sequential_before + "b#{records.last.id}" + elsif paginator_mode == :sequential_after + "a#{records.first.id}" + end + end + # XXX Hack: in sequential pagination we fetch one more record than we # need so that we can tell when we're on the first or last page. Here # we override a rails internal method to discard that extra record. See diff --git a/app/views/layouts/default.html.erb b/app/views/layouts/default.html.erb index 6dd4f6431..13de838a3 100644 --- a/app/views/layouts/default.html.erb +++ b/app/views/layouts/default.html.erb @@ -2,8 +2,17 @@ <%= page_title %> + - + + <% if @current_item.try(:prev_page) %> + <%= tag.link rel: "prev", href: url_for(nav_params_for(@current_item.prev_page)) %> + <% end %> + + <% if @current_item.try(:next_page) %> + <%= tag.link rel: "next", href: url_for(nav_params_for(@current_item.next_page)) %> + <% end %> + <%= csrf_meta_tag %> <% unless CurrentUser.disable_responsive_mode? %> diff --git a/app/views/posts/partials/index/_seo_meta_tags.html.erb b/app/views/posts/partials/index/_seo_meta_tags.html.erb index 994811fba..111a1a7ff 100644 --- a/app/views/posts/partials/index/_seo_meta_tags.html.erb +++ b/app/views/posts/partials/index/_seo_meta_tags.html.erb @@ -10,11 +10,6 @@ <% atom_feed_tag "Posts: #{@post_set.tag_string}", posts_url(tags: @post_set.tag_string, format: :atom) %> <% end %> -<%= tag.link href: posts_path(format: "atom", tags: params[:tags]), rel: "alternate", title: "ATOM", type: "application/atom+xml" %> -<%= tag.link rel: "next", href: next_page_url %> -<% if prev_page_url %> - <%= tag.link rel: "prev", href: prev_page_url %> -<% end %> <%= missed_post_search_count_js %> <% if @post_set.hide_from_crawler? %>