class Ariadne::PaginationCalculator
def page_series
def page_series return [] if pages <= 1 return (1..pages).to_a if pages <= 5 links = [] links << 1 if page <= 3 # Near the beginning: 1 2 3 4 5 6 7 8 ... 20 (2..8).each { |n| links << n if n <= pages } links << nil if pages > 8 links << pages if pages > 8 elsif page >= pages - 2 # Near the end: 1 ... 13 14 15 16 17 18 19 20 links << nil ((pages - 7)..pages).each { |n| links << n if n > 1 } else # Middle range: 1 ... 9 10 11 12 13 14 ... 20 links << nil ((page - 2)..(page + 2)).each { |n| links << n } links << nil links << pages end links end