Module: Pagy::ItemsExtra::Frontend

Included in:
Frontend
Defined in:
lib/pagy/extras/items.rb

Constant Summary collapse

ITEMS_PLACEHOLDER =
'__pagy_items__'

Instance Method Summary collapse

Instance Method Details

#pagy_items_selector_js(pagy, pagy_id: nil, item_name: nil, i18n_key: nil, link_extra: '') ⇒ Object

Return the items selector HTML. For example “Show [20] items per page”



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/pagy/extras/items.rb', line 29

def pagy_items_selector_js(pagy, pagy_id: nil, item_name: nil, i18n_key: nil, link_extra: '')
  return '' unless pagy.vars[:items_extra]

  p_id           = %( id="#{pagy_id}") if pagy_id
  p_vars         = pagy.vars
  p_items        = p_vars[:items]
  p_vars[:items] = ITEMS_PLACEHOLDER
  link           = pagy_marked_link(pagy_link_proc(pagy, link_extra: link_extra))
  p_vars[:items] = p_items # restore the items

  html  = +%(<span#{p_id} class="pagy-items-selector-js" #{pagy_json_attr pagy, :items_selector, pagy.from, link}>)
  input = %(<input type="number" min="1" max="#{p_vars[:max_items]}" value="#{
              p_items}" style="padding: 0; text-align: center; width: #{p_items.to_s.length + 1}rem;">)
  html << pagy_t('pagy.items_selector_js', item_name: item_name || pagy_t(i18n_key || p_vars[:i18n_key], count: p_items),
                                           items_input: input,
                                           count: p_items)
  html << %(</span>)
end