rosa-build/lib/ext/bootstrap_link_renderer.rb

68 lines
1.6 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 = "&hellip;"
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])
res = tag("ul", list_items, class: ul_class)
if @options[:rd_widget_footer]
tag("rd-widget-footer", res)
else
res
end
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