<h4 class="fs-5 mb-0"><%= heading %></h4>
<% if pages.page_count > 1 %>
<ul class="pagination pagination-sm mb-1 ms-auto">
- <%= raw pagination_links_bootstrap(pages, {}) { |n| url_for(page_param => n) } %>
+ <% pagination_items(pages, {}).each do |body, n| %>
+ <% linked = !(n.is_a? String)
+ classes = ["page-item"]
+ classes.push(n) unless linked %>
+ <%= content_tag "li", :class => classes do
+ if linked
+ link_to(body, url_for(page_param => n), :class => "page-link")
+ else
+ content_tag("span", body, :class => "page-link")
+ end
+ end %>
+ <% end %>
</ul>
<% end %>
</div>
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