From edfef10dc972b2e8ecdf3dbaa1658177e1a142c9 Mon Sep 17 00:00:00 2001 From: evazion Date: Wed, 29 Jan 2020 22:18:59 -0600 Subject: [PATCH] Fix #1883: Add elements for all paginated pages. Add and elements to most pages with pagination. This should work on all index pages, but it won't work for things like pool or forum topic show pages. Also remove the element (wasn't useful, was just a link back to the root url). --- app/helpers/posts_helper.rb | 14 ----------- app/logical/pagination_extension.rb | 24 +++++++++++++++++++ app/views/layouts/default.html.erb | 11 ++++++++- .../partials/index/_seo_meta_tags.html.erb | 5 ---- 4 files changed, 34 insertions(+), 20 deletions(-) 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? %>