class Lipstick::Helpers::PaginationLinkRenderer
Attributes
current[R]
items[R]
template[R]
total[R]
Public Instance Methods
prepare(collection, _options, template)
click to toggle source
# File lib/lipstick/helpers/pagination_link_renderer.rb, line 11 def prepare(collection, _options, template) @current = collection.current_page @total = collection.total_pages @items = [*prefix, *middle, *suffix] @template = template end
to_html()
click to toggle source
# File lib/lipstick/helpers/pagination_link_renderer.rb, line 19 def to_html template.content_tag('nav', class: 'pagination-wrapper') do template.content_tag('ul', class: 'pagination') do items.each do |item| template.concat(render_item(item)) end end end end
Private Instance Methods
disabled_item(content)
click to toggle source
# File lib/lipstick/helpers/pagination_link_renderer.rb, line 134 def disabled_item(content) template.content_tag('li', content, class: 'disabled') end
gap_item()
click to toggle source
# File lib/lipstick/helpers/pagination_link_renderer.rb, line 114 def gap_item template.content_tag('li') do template.content_tag('span', "\u2026", 'aria-hidden': 'true') end end
link_to_page(content, page:, **opts)
click to toggle source
# File lib/lipstick/helpers/pagination_link_renderer.rb, line 120 def link_to_page(content, page:, **opts) li_opts = {} li_opts[:class] = 'active' if page == current url_opts = template.params.permit( :page, :per_page, :filter, :direction, :sort_by, :state_filter ).merge(page: page) opts = opts.merge(href: template.url_for(url_opts)) template.content_tag('li', li_opts) do template.content_tag('a', content, opts) end end
middle()
click to toggle source
# File lib/lipstick/helpers/pagination_link_renderer.rb, line 38 def middle return page_range(1, total) if short_list? page_range(*page_window) end
next_item()
click to toggle source
# File lib/lipstick/helpers/pagination_link_renderer.rb, line 106 def next_item icon = template.content_tag('span', "\u25B6", 'aria-hidden': 'true') return disabled_item(icon) if current >= total link_to_page(icon, page: current + 1, 'aria-label': 'Next') end
page_range(start, finish)
click to toggle source
# File lib/lipstick/helpers/pagination_link_renderer.rb, line 61 def page_range(start, finish) [start, 1].max.upto([finish, total].min) end
page_window()
click to toggle source
Decides which pages to show in the links surrounding the “current” page.
# File lib/lipstick/helpers/pagination_link_renderer.rb, line 45 def page_window # If we're close to the start/end we can show a few extra page links. return [1, 8] if current < 5 return [total - 7, total] if current > total - 4 # Otherwise show 3 pages either side of the current page [current - 3, current + 3] end
prefix()
click to toggle source
# File lib/lipstick/helpers/pagination_link_renderer.rb, line 31 def prefix return [:prev] if !show_first? || short_list? return [:prev, 1, :gap] if prefix_gap? [:prev, 1] end
prefix_gap?()
click to toggle source
# File lib/lipstick/helpers/pagination_link_renderer.rb, line 77 def prefix_gap? !middle.include?(2) end
prev_item()
click to toggle source
# File lib/lipstick/helpers/pagination_link_renderer.rb, line 98 def prev_item icon = template.content_tag('span', "\u25C0", 'aria-hidden': 'true') return disabled_item(icon) if current < 2 link_to_page(icon, page: current - 1, 'aria-label': 'Previous') end
render_item(item)
click to toggle source
# File lib/lipstick/helpers/pagination_link_renderer.rb, line 85 def render_item(item) case item when :prev prev_item when :next next_item when :gap gap_item else link_to_page(item, page: item) end end
short_list?()
click to toggle source
# File lib/lipstick/helpers/pagination_link_renderer.rb, line 65 def short_list? total <= 10 end
show_first?()
click to toggle source
# File lib/lipstick/helpers/pagination_link_renderer.rb, line 69 def show_first? !middle.include?(1) end
show_last?()
click to toggle source
# File lib/lipstick/helpers/pagination_link_renderer.rb, line 73 def show_last? !middle.include?(total) end
suffix()
click to toggle source
# File lib/lipstick/helpers/pagination_link_renderer.rb, line 54 def suffix return [:next] if !show_last? || short_list? return [:gap, total, :next] if suffix_gap? [total, :next] end
suffix_gap?()
click to toggle source
# File lib/lipstick/helpers/pagination_link_renderer.rb, line 81 def suffix_gap? !middle.include?(total - 1) end