[PostVersions] Fix not switching to seq when max_results is reached

This commit is contained in:
Earlopain 2022-10-14 22:07:19 +02:00
parent a694385f4d
commit f4dafb348f
No known key found for this signature in database
GPG Key ID: 6CFB948E15246897
3 changed files with 27 additions and 22 deletions

View File

@ -1,3 +1,3 @@
class PaginatedDecorator < Draper::CollectionDecorator
delegate :current_page, :total_pages, :is_first_page?, :is_last_page?, :sequential_paginator_mode, :records, :total_count
delegate :current_page, :total_pages, :is_first_page?, :is_last_page?, :sequential_paginator_mode, :max_numbered_pages, :records, :total_count
end

View File

@ -17,7 +17,7 @@ module PaginationHelper
end
def use_sequential_paginator?(records)
params[:page] =~ /\A[ab]\d+\z/ || records.current_page >= Danbooru.config.max_numbered_pages
params[:page] =~ /\A[ab]\d+\z/ || records.current_page >= records.max_numbered_pages
end
def numbered_paginator(records, switch_to_sequential = true)
@ -36,35 +36,35 @@ module PaginationHelper
if records.total_pages <= (window * 2) + 5
1.upto(records.total_pages) do |page|
html << numbered_paginator_item(page, records.current_page)
html << numbered_paginator_item(page, records)
end
elsif records.current_page <= window + 2
1.upto(records.current_page + window) do |page|
html << numbered_paginator_item(page, records.current_page)
html << numbered_paginator_item(page, records)
end
html << numbered_paginator_item("...", records.current_page)
html << numbered_paginator_final_item(records.total_pages, records.current_page)
html << numbered_paginator_item("...", records)
html << numbered_paginator_final_item(records)
elsif records.current_page >= records.total_pages - (window + 1)
html << numbered_paginator_item(1, records.current_page)
html << numbered_paginator_item("...", records.current_page)
html << numbered_paginator_item(1, records)
html << numbered_paginator_item("...", records)
(records.current_page - window).upto(records.total_pages) do |page|
html << numbered_paginator_item(page, records.current_page)
html << numbered_paginator_item(page, records)
end
else
html << numbered_paginator_item(1, records.current_page)
html << numbered_paginator_item("...", records.current_page)
html << numbered_paginator_item(1, records)
html << numbered_paginator_item("...", records)
if records.size > 0
right_window = records.current_page + window
else
right_window = records.current_page
end
(records.current_page - window).upto(right_window) do |page|
html << numbered_paginator_item(page, records.current_page)
html << numbered_paginator_item(page, records)
end
if records.size > 0
html << numbered_paginator_item("...", records.current_page)
html << numbered_paginator_final_item(records.total_pages, records.current_page)
html << numbered_paginator_item("...", records)
html << numbered_paginator_final_item(records)
end
end
@ -78,23 +78,23 @@ module PaginationHelper
html.html_safe
end
def numbered_paginator_final_item(total_pages, current_page)
if total_pages <= Danbooru.config.max_numbered_pages
numbered_paginator_item(total_pages, current_page)
def numbered_paginator_final_item(records)
if records.total_pages <= records.max_numbered_pages
numbered_paginator_item(records.total_pages, records)
else
numbered_paginator_item(Danbooru.config.max_numbered_pages, current_page)
numbered_paginator_item(records.max_numbered_pages, records)
end
end
def numbered_paginator_item(page, current_page)
return "" if page.to_i > Danbooru.config.max_numbered_pages
def numbered_paginator_item(page, records)
return "" if page.to_i > records.max_numbered_pages
html = []
if page == "..."
html << "<li class='more'>"
html << content_tag(:i, nil, class: "fas fa-ellipsis-h")
html << "</li>"
elsif page == current_page
elsif page == records.current_page
html << "<li class='current-page'>"
html << '<span>' + page.to_s + '</span>'
html << "</li>"

View File

@ -8,6 +8,7 @@ module Danbooru
@_current_page = options[:current_page]
@_records_per_page = options[:per_page]
@_total_count = options[:total]
@_max_numbered_pages = options[:max_numbered_pages] || Danbooru.config.max_numbered_pages
real_array = orig_array || []
@_orig_size = real_array.size
if options[:mode] == :sequential
@ -41,6 +42,10 @@ module Danbooru
end
end
def max_numbered_pages
@_max_numbered_pages
end
def total_pages
if records_per_page > 0
(total_count.to_f / records_per_page).ceil
@ -58,7 +63,7 @@ module Danbooru
def paginate(page, options)
paginated, mode = paginate_base(page, options)
new_opts = {mode: mode, seq_mode: sequential_paginator_mode,
new_opts = {mode: mode, seq_mode: sequential_paginator_mode, max_numbered_pages: max_numbered_pages,
per_page: records_per_page, total: total_count, current_page: current_page}
if options[:results] == :results
PaginatedArray.new(paginated.results, new_opts)