:always_show_anchors => true,
:link_to_current_page => false,
:params => {}
- }
+ }.freeze
end
# Creates a basic HTML link bar for the given +paginator+. Links will be created
# pagination_links(@person_pages, :params => { :viewer => "flash" })
# # => 1 <a href="/?page=2&viewer=flash/">2</a> <a href="/?page=3&viewer=flash/">3</a> ...
# # <a href="/?page=10&viewer=flash/">10</a>
- def pagination_links(paginator, options={}, html_options={})
+ def pagination_links(paginator, options = {}, html_options = {})
name = options[:name] || DEFAULT_OPTIONS[:name]
params = (options[:params] || DEFAULT_OPTIONS[:params]).clone
- prefix = options[:prefix] || ''
- suffix = options[:suffix] || ''
+ prefix = options[:prefix] || ""
+ suffix = options[:suffix] || ""
pagination_links_each(paginator, options, prefix, suffix) do |n|
params[name] = n
current_page = paginator.current_page
window_pages = current_page.window(options[:window_size]).pages
- return if window_pages.length <= 1 unless link_to_current_page
+ return unless link_to_current_page || window_pages.length > 1
- first, last = paginator.first, paginator.last
+ first = paginator.first
+ last = paginator.last
- html = ''
+ html = ""
html << prefix if prefix
- if always_show_anchors and not (wp_first = window_pages[0]).first?
+ if always_show_anchors && !(wp_first = window_pages[0]).first?
html << yield(first.number)
- html << ' ... ' if wp_first.number - first.number > 1
- html << ' '
+ html << " ... " if wp_first.number - first.number > 1
+ html << " "
end
window_pages.each do |page|
- if current_page == page && !link_to_current_page
- html << page.number.to_s
- else
- html << yield(page.number)
- end
- html << ' '
+ html << if current_page == page && !link_to_current_page
+ page.number.to_s
+ else
+ yield(page.number)
+ end
+ html << " "
end
- if always_show_anchors and not (wp_last = window_pages[-1]).last?
- html << ' ... ' if last.number - wp_last.number > 1
+ if always_show_anchors && !(wp_last = window_pages[-1]).last?
+ html << " ... " if last.number - wp_last.number > 1
html << yield(last.number)
end
html
end
- end # PaginationHelper
- end # Helpers
-end # ActionView
+ # Same as above, but
+ # - with bootstrap classes
+ # - invoked block returns the page url
+ def pagination_links_bootstrap(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 = ""
+
+ html << "<ul class='pagination pagination-sm mb-1'>"
+
+ 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
+ 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
+ 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))
+ end
+
+ html << "</ul>"
+
+ 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
+ end
+ end
+ end
+end