# encoding: UTF-8
# Almost entirely taken from http://thewebfellas.com/blog/2010/8/22/revisited-roll-your-own-pagination-links-with-will_paginate-and-rails-3
#
#
Pages Navigation
#
class PaginationListLinkRenderer < WillPaginate::ActionView::LinkRenderer
def to_html
html = pagination.map do |item|
if item.is_a?(Integer)
page_number(item, @options[:remote])
else
send(item)
end
end.join(@options[:link_separator])
@options[:container] ? html_container(html) : html
end
protected
def gap
tag(:li, "…", class: "gap")
end
def page_number(page, remote = nil)
unless page == current_page
tag(:li, link(page, page, {rel: rel_value(page)}.merge(:"data-remote" => remote)))
else
tag(:li, tag(:span, page, class: "current"))
end
end
def previous_page
num = @collection.current_page > 1 && @collection.current_page - 1
previous_or_next_page(num, @options[:previous_label], 'previous', @options[:remote])
end
def next_page
num = @collection.current_page < @collection.total_pages && @collection.current_page + 1
previous_or_next_page(num, @options[:next_label], 'next', @options[:remote])
end
def previous_or_next_page(page, text, classname, remote = nil)
if page
tag(:li, link(text, page, {:"data-remote" => remote}), class: classname, title: classname)
else
tag(:li, tag(:span, text, class: "disabled"), class: classname, title: classname)
end
end
def html_container(html)
tag(:h4, "Pages Navigation", class: "landmark heading") +
tag(:ol, html, container_attributes.merge(class: "pagination actions", role: "navigation", title: "pagination"))
end
end