otwarchive-symphonyarchive/app/helpers/pagination_helper.rb

67 lines
2.2 KiB
Ruby
Raw Permalink Normal View History

2026-03-11 22:22:11 +00:00
module PaginationHelper
include Pagy::Frontend
# change the default link renderer for will_paginate
def will_paginate(collection_or_options = nil, options = {})
if collection_or_options.is_a? Hash
options = collection_or_options
collection_or_options = nil
end
options = options.merge renderer: PaginationListLinkRenderer unless options[:renderer]
super(*[collection_or_options, options].compact)
end
# Cf https://github.com/ddnexus/pagy/blob/master/gem/lib/pagy/frontend.rb
# i18n-tasks-use t("pagy.prev")
# i18n-tasks-use t("pagy.next")
# i18n-tasks-use t("pagy.aria_label.nav")
def pagy_nav(pagy, id: nil, aria_label: nil, **vars)
return nil unless pagy
# Keep will_paginate behavior of showing nothing if only one page
return nil if pagy.series.length <= 1
id = %( id="#{id}") if id
a = pagy_anchor(pagy, **vars)
html = %(<h4 class="landmark heading">#{t('a11y.navigation')}</h4>)
html << %(<ol#{id} class="pagination actions pagy" role="navigation" #{nav_aria_label(pagy, aria_label: aria_label)}>)
prev_text = pagy_t("pagy.prev")
prev_a =
if (p_prev = pagy.prev)
a.call(p_prev, prev_text)
else
%(<span class="disabled">#{prev_text}</span>)
end
html << %(<li class="previous">#{prev_a}</li>)
pagy.series(**vars).each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
html << %(<li>)
html << case item
when Integer
a.call(item)
when String
%(<a role="link" aria-disabled="true" aria-current="page" class="current">#{pagy.label_for(item)}</a>)
when :gap
%(<span class="gap">#{pagy_t('pagy.gap')}</span>)
else
raise InternalError, "expected item types in series to be Integer, String or :gap; got #{item.inspect}"
end
html << %(</li>)
end
next_text = pagy_t("pagy.next")
next_a =
if (p_next = pagy.next)
a.call(p_next, next_text)
else
%(<span class="disabled">#{next_text}</span>)
end
html << %(<li class="next">#{next_a}</li>)
html << %(</ol>)
end
end