work
This commit is contained in:
@@ -1,64 +1,61 @@
|
||||
module PaginationHelper
|
||||
def smart_paginator(set, &block)
|
||||
if params[:page] && set.page > 1000
|
||||
set.extend(PostSets::Sequential)
|
||||
sequential_paginator(set)
|
||||
def smart_paginator(records, &block)
|
||||
if records.is_sequential_paginator? || params[:page].to_i > 200
|
||||
sequential_paginator(records)
|
||||
else
|
||||
set.extend(PostSets::Numbered)
|
||||
numbered_paginator(set, &block)
|
||||
numbered_paginator(records, &block)
|
||||
end
|
||||
end
|
||||
|
||||
def sequential_paginator(set)
|
||||
def sequential_paginator(records)
|
||||
html = "<menu>"
|
||||
|
||||
unless set.is_first_page?
|
||||
html << '<li>' + link_to("« Previous", params.merge(:after_id => set.first_id)) + '</li>'
|
||||
unless records.is_first_page?
|
||||
html << '<li>' + link_to("« Previous", params.merge(:after_id => records.first_id)) + '</li>'
|
||||
end
|
||||
|
||||
unless set.is_last_page?
|
||||
html << '<li>' + link_to("Next »", params.merge(:before_id => set.last_id)) + '</li>'
|
||||
unless records.is_last_page?
|
||||
html << '<li>' + link_to("Next »", params.merge(:before_id => records.last_id)) + '</li>'
|
||||
end
|
||||
|
||||
html << "</menu>"
|
||||
html.html_safe
|
||||
end
|
||||
|
||||
def numbered_paginator(set, &block)
|
||||
def numbered_paginator(records, &block)
|
||||
html = "<menu>"
|
||||
window = 3
|
||||
if set.total_pages <= (window * 2) + 5
|
||||
1.upto(set.total_pages) do |page|
|
||||
html << numbered_paginator_item(page, set.current_page, &block)
|
||||
if records.total_pages <= (window * 2) + 5
|
||||
1.upto(records.total_pages) do |page|
|
||||
html << numbered_paginator_item(page, records.current_page, &block)
|
||||
end
|
||||
elsif set.current_page <= window + 2
|
||||
1.upto(set.current_page + window) do |page|
|
||||
html << numbered_paginator_item(page, set.current_page, &block)
|
||||
elsif records.current_page <= window + 2
|
||||
1.upto(records.current_page + window) do |page|
|
||||
html << numbered_paginator_item(page, records.current_page, &block)
|
||||
end
|
||||
html << numbered_paginator_item("...", set.current_page, &block)
|
||||
html << numbered_paginator_final_item(set.total_pages, set.current_page, &block)
|
||||
|
||||
elsif set.current_page >= set.total_pages - (window + 1)
|
||||
html << numbered_paginator_item(1, set.current_page, &block)
|
||||
html << numbered_paginator_item("...", set.current_page, &block)
|
||||
(set.current_page - window).upto(set.total_pages) do |page|
|
||||
html << numbered_paginator_item(page, set.current_page, &block)
|
||||
html << numbered_paginator_item("...", records.current_page, &block)
|
||||
html << numbered_paginator_final_item(records.total_pages, records.current_page, &block)
|
||||
elsif records.current_page >= records.total_pages - (window + 1)
|
||||
html << numbered_paginator_item(1, records.current_page, &block)
|
||||
html << numbered_paginator_item("...", records.current_page, &block)
|
||||
(records.current_page - window).upto(records.total_pages) do |page|
|
||||
html << numbered_paginator_item(page, records.current_page, &block)
|
||||
end
|
||||
else
|
||||
html << numbered_paginator_item(1, set.current_page, &block)
|
||||
html << numbered_paginator_item("...", set.current_page, &block)
|
||||
(set.current_page - window).upto(set.current_page + window) do |page|
|
||||
html << numbered_paginator_item(page, set.current_page, &block)
|
||||
html << numbered_paginator_item(1, records.current_page, &block)
|
||||
html << numbered_paginator_item("...", records.current_page, &block)
|
||||
(records.current_page - window).upto(records.current_page + window) do |page|
|
||||
html << numbered_paginator_item(page, records.current_page, &block)
|
||||
end
|
||||
html << numbered_paginator_item("...", set.current_page, &block)
|
||||
html << numbered_paginator_final_item(set.total_pages, set.current_page, &block)
|
||||
html << numbered_paginator_item("...", records.current_page, &block)
|
||||
html << numbered_paginator_final_item(records.total_pages, records.current_page, &block)
|
||||
end
|
||||
html << "</menu>"
|
||||
html.html_safe
|
||||
end
|
||||
|
||||
def numbered_paginator_final_item(total_pages, current_page, &block)
|
||||
if total_pages <= 1000
|
||||
if total_pages <= 200
|
||||
numbered_paginator_item(total_pages, current_page, &block)
|
||||
else
|
||||
""
|
||||
|
||||
Reference in New Issue
Block a user