63 lines
1.5 KiB
Ruby
63 lines
1.5 KiB
Ruby
|
# See: https://github.com/bootstrap-ruby/will_paginate-bootstrap/blob/master/lib/bootstrap_pagination/bootstrap_renderer.rb
|
||
|
class BootstrapLinkRenderer < WillPaginate::ActionView::LinkRenderer
|
||
|
|
||
|
ELLIPSIS = "…"
|
||
|
|
||
|
def to_html
|
||
|
list_items = pagination.map do |item|
|
||
|
case item
|
||
|
when Fixnum
|
||
|
page_number(item)
|
||
|
else
|
||
|
send(item)
|
||
|
end
|
||
|
end.join(@options[:link_separator])
|
||
|
|
||
|
tag("ul", list_items, class: ul_class)
|
||
|
end
|
||
|
|
||
|
def container_attributes
|
||
|
super.except(*[:link_options])
|
||
|
end
|
||
|
|
||
|
protected
|
||
|
|
||
|
def page_number(page)
|
||
|
link_options = @options[:link_options] || {}
|
||
|
|
||
|
if page == current_page
|
||
|
tag("li", tag("span", page), class: "active")
|
||
|
else
|
||
|
tag("li", link(page, page, link_options.merge(rel: rel_value(page))))
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def previous_or_next_page(page, text, classname)
|
||
|
link_options = @options[:link_options] || {}
|
||
|
|
||
|
if page
|
||
|
tag("li", link(text, page, link_options), class: classname)
|
||
|
else
|
||
|
tag("li", tag("span", text), class: "%s disabled" % classname)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def gap
|
||
|
tag("li", tag("span", ELLIPSIS), class: "disabled")
|
||
|
end
|
||
|
|
||
|
def previous_page
|
||
|
num = @collection.current_page > 1 && @collection.current_page - 1
|
||
|
previous_or_next_page(num, @options[:previous_label], "prev")
|
||
|
end
|
||
|
|
||
|
def next_page
|
||
|
num = @collection.current_page < @collection.total_pages && @collection.current_page + 1
|
||
|
previous_or_next_page(num, @options[:next_label], "next")
|
||
|
end
|
||
|
|
||
|
def ul_class
|
||
|
["pagination", @options[:class]].compact.join(" ")
|
||
|
end
|
||
|
end
|