Separate pagination item computation and output
This commit is contained in:
parent
b7ce0f09e6
commit
de793fb01d
2 changed files with 24 additions and 38 deletions
|
@ -131,63 +131,38 @@ module ActionView
|
|||
html
|
||||
end
|
||||
|
||||
# Same as above, but
|
||||
# - with bootstrap classes
|
||||
# - no list wrapper
|
||||
# - invoked block returns the page url
|
||||
def pagination_links_bootstrap(paginator, options)
|
||||
def pagination_items(paginator, options)
|
||||
options = DEFAULT_OPTIONS.merge(options)
|
||||
link_to_current_page = options[:link_to_current_page]
|
||||
always_show_anchors = options[:always_show_anchors]
|
||||
|
||||
current_page = paginator.current_page
|
||||
window_pages = current_page.window(options[:window_size]).pages
|
||||
return unless link_to_current_page || window_pages.length > 1
|
||||
|
||||
first = paginator.first
|
||||
last = paginator.last
|
||||
|
||||
html = ""
|
||||
items = []
|
||||
|
||||
if always_show_anchors && !(wp_first = window_pages[0]).first?
|
||||
html << bootstrap_page_item_link(first.number.to_s, yield(first.number))
|
||||
html << bootstrap_page_item_disabled("...") if wp_first.number - first.number > 1
|
||||
items.push [first.number.to_s, first.number]
|
||||
items.push ["...", "disabled"] if wp_first.number - first.number > 1
|
||||
end
|
||||
|
||||
window_pages.each do |page|
|
||||
html << if current_page == page && !link_to_current_page
|
||||
bootstrap_page_item_active(page.number.to_s)
|
||||
else
|
||||
bootstrap_page_item_link(page.number.to_s, yield(page.number))
|
||||
end
|
||||
if current_page == page && !link_to_current_page
|
||||
items.push [page.number.to_s, "active"]
|
||||
else
|
||||
items.push [page.number.to_s, page.number]
|
||||
end
|
||||
end
|
||||
|
||||
if always_show_anchors && !(wp_last = window_pages[-1]).last?
|
||||
html << bootstrap_page_item_disabled("...") if last.number - wp_last.number > 1
|
||||
html << bootstrap_page_item_link(last.number.to_s, yield(last.number))
|
||||
items.push ["...", "disabled"] if last.number - wp_last.number > 1
|
||||
items.push [last.number.to_s, last.number]
|
||||
end
|
||||
|
||||
html
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def bootstrap_page_item_disabled(body)
|
||||
content_tag "li", :class => "page-item disabled" do
|
||||
content_tag "span", body, :class => "page-link"
|
||||
end
|
||||
end
|
||||
|
||||
def bootstrap_page_item_active(body)
|
||||
content_tag "li", :class => "page-item active", :'aria-current' => "page" do
|
||||
content_tag "span", body, :class => "page-link"
|
||||
end
|
||||
end
|
||||
|
||||
def bootstrap_page_item_link(body, url)
|
||||
content_tag "li", :class => "page-item" do
|
||||
link_to body, url, :class => "page-link"
|
||||
end
|
||||
items
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue