# 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 = %() %(#{ prev_a(pagy, a) }#{ next_a(pagy, a) }) 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