# See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/pagy
# frozen_string_literal: true
require 'pagy/extras/js_tools'
class Pagy # :nodoc:
# Frontend modules are specially optimized for performance.
# The resulting code may not look very elegant, but produces the best benchmarks
module PagyExtra
# pagy_nav is defined in the Frontend itself
# Javascript pagination: it returns a nav with a data-pagy attribute used by the pagy.js file
def pagy_nav_js(pagy, id: nil, aria_label: nil, **vars)
sequels = pagy.sequels(**vars)
id = %( id="#{id}") if id
a = pagy_anchor(pagy)
tokens = { 'before' => prev_a(pagy, a),
'a' => a.(PAGE_TOKEN, LABEL_TOKEN),
'current' => %(#{
LABEL_TOKEN}),
'gap' => %(#{pagy_t('pagy.gap')}),
'after' => next_a(pagy, a) }
%()
end
# Javascript combo pagination: it returns a nav with a data-pagy attribute used by the pagy.js file
def pagy_combo_nav_js(pagy, id: nil, aria_label: nil)
id = %( id="#{id}") if id
a = pagy_anchor(pagy)
pages = pagy.pages
page_input = %()
%()
end
# Return the previous page URL string or nil
def pagy_prev_url(pagy, absolute: false)
pagy_url_for(pagy, pagy.prev, absolute:) if pagy.prev
end
# Return the next page URL string or nil
def pagy_next_url(pagy, absolute: false)
pagy_url_for(pagy, pagy.next, absolute:) if pagy.next
end
# Return the enabled/disabled previous page anchor tag
def pagy_prev_a(pagy, text: pagy_t('pagy.prev'), aria_label: pagy_t('pagy.aria_label.prev'))
a = pagy_anchor(pagy)
prev_a(pagy, a, text:, aria_label:)
end
# Return the enabled/disabled next page anchor tag
def pagy_next_a(pagy, text: pagy_t('pagy.next'), aria_label: pagy_t('pagy.aria_label.prev'))
a = pagy_anchor(pagy)
next_a(pagy, a, text:, aria_label:)
end
# Conditionally return the previous page link tag
def pagy_prev_link(pagy, absolute: false)
%() if pagy.prev
end
# Conditionally return the next page link tag
def pagy_next_link(pagy, absolute: false)
%() if pagy.next
end
end
Frontend.prepend PagyExtra
end