Improve sequential paginator

fixes #2044, fixes #1298
This commit is contained in:
Toks
2013-12-04 14:41:50 -05:00
parent 067d15d754
commit 9585e32914
4 changed files with 80 additions and 10 deletions

View File

@@ -31,7 +31,7 @@ module Danbooru
end
def paginate_sequential_before(before_id = nil)
c = limit(records_per_page)
c = limit(records_per_page + 1)
if before_id.to_i > 0
c = c.where("#{table_name}.id < ?", before_id.to_i)
@@ -44,7 +44,7 @@ module Danbooru
end
def paginate_sequential_after(after_id)
limit(records_per_page).where("#{table_name}.id > ?", after_id.to_i).reorder("#{table_name}.id asc").tap do |obj|
limit(records_per_page + 1).where("#{table_name}.id > ?", after_id.to_i).reorder("#{table_name}.id asc").tap do |obj|
obj.extend(SequentialCollectionExtension)
obj.sequential_paginator_mode = :after
end

View File

@@ -4,18 +4,26 @@ module Danbooru
attr_accessor :sequential_paginator_mode
def is_first_page?
size == 0
if sequential_paginator_mode == :before
false
else
size <= records_per_page
end
end
def is_last_page?
size == 0
if sequential_paginator_mode == :after
false
else
size <= records_per_page
end
end
def to_a
if sequential_paginator_mode == :before
super
super.first(records_per_page)
else
super.reverse
super.first(records_per_page).reverse
end
end
end