pagy 4.2.0 → 4.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/lib/config/pagy.rb +30 -23
  3. data/lib/javascripts/pagy.js +104 -93
  4. data/lib/locales/bg.yml +2 -2
  5. data/lib/locales/bs.yml +2 -2
  6. data/lib/locales/ca.yml +2 -2
  7. data/lib/locales/cs.yml +2 -2
  8. data/lib/locales/da.yml +2 -2
  9. data/lib/locales/de.yml +2 -2
  10. data/lib/locales/en.yml +2 -2
  11. data/lib/locales/es.yml +2 -2
  12. data/lib/locales/fr.yml +2 -2
  13. data/lib/locales/hr.yml +2 -2
  14. data/lib/locales/id.yml +2 -2
  15. data/lib/locales/it.yml +2 -2
  16. data/lib/locales/ja.yml +2 -2
  17. data/lib/locales/km.yml +2 -2
  18. data/lib/locales/ko.yml +2 -2
  19. data/lib/locales/nb.yml +2 -2
  20. data/lib/locales/nl.yml +2 -2
  21. data/lib/locales/pl.yml +2 -2
  22. data/lib/locales/pt-BR.yml +2 -2
  23. data/lib/locales/pt.yml +2 -2
  24. data/lib/locales/ru.yml +2 -2
  25. data/lib/locales/sr.yml +2 -2
  26. data/lib/locales/sv-SE.yml +2 -2
  27. data/lib/locales/sv.yml +2 -2
  28. data/lib/locales/sw.yml +2 -2
  29. data/lib/locales/tr.yml +2 -2
  30. data/lib/locales/zh-CN.yml +2 -2
  31. data/lib/locales/zh-HK.yml +2 -2
  32. data/lib/locales/zh-TW.yml +3 -3
  33. data/lib/pagy.rb +27 -21
  34. data/lib/pagy/backend.rb +1 -0
  35. data/lib/pagy/console.rb +21 -0
  36. data/lib/pagy/deprecation.rb +27 -0
  37. data/lib/pagy/extras/arel.rb +1 -0
  38. data/lib/pagy/extras/array.rb +1 -0
  39. data/lib/pagy/extras/bootstrap.rb +16 -11
  40. data/lib/pagy/extras/bulma.rb +18 -13
  41. data/lib/pagy/extras/countless.rb +2 -1
  42. data/lib/pagy/extras/elasticsearch_rails.rb +1 -0
  43. data/lib/pagy/extras/foundation.rb +24 -17
  44. data/lib/pagy/extras/headers.rb +3 -3
  45. data/lib/pagy/extras/items.rb +18 -32
  46. data/lib/pagy/extras/materialize.rb +25 -19
  47. data/lib/pagy/extras/metadata.rb +3 -2
  48. data/lib/pagy/extras/navs.rb +18 -14
  49. data/lib/pagy/extras/overflow.rb +2 -2
  50. data/lib/pagy/extras/searchkick.rb +1 -0
  51. data/lib/pagy/extras/semantic.rb +24 -19
  52. data/lib/pagy/extras/shared.rb +4 -9
  53. data/lib/pagy/extras/standalone.rb +58 -0
  54. data/lib/pagy/extras/support.rb +12 -8
  55. data/lib/pagy/extras/trim.rb +8 -7
  56. data/lib/pagy/extras/uikit.rb +24 -19
  57. data/lib/pagy/frontend.rb +34 -25
  58. metadata +6 -5
  59. data/lib/locales/README.md +0 -35
  60. data/pagy.gemspec +0 -16
data/lib/locales/ko.yml CHANGED
@@ -15,6 +15,6 @@ ko:
15
15
  single_page: "<b>%{count}</b>개의 %{item_name} 표시됨"
16
16
  multiple_pages: "총 <b>%{count}</b>개의 %{item_name} 중 <b>%{from}-%{to}</b>"
17
17
 
18
- combo_nav_js: " %{pages} 중 %{page_input} 페이지"
18
+ combo_nav_js: "<label>총 %{pages} 중 %{page_input}</label> 페이지"
19
19
 
20
- items_selector_js: "페이지 당 %{items_input}개 표시%"
20
+ items_selector_js: "<label>페이지 당 %{items_input}개 표시%</label>"
data/lib/locales/nb.yml CHANGED
@@ -17,6 +17,6 @@ nb:
17
17
  single_page: "Viser <b>%{count}</b> %{item_name}"
18
18
  multiple_pages: "Viser %{item_name} <b>%{from}-%{to}</b> av totalt <b>%{count}</b>"
19
19
 
20
- combo_nav_js: "Side %{page_input} av %{pages}"
20
+ combo_nav_js: "<label>Side %{page_input}</label> av %{pages}"
21
21
 
22
- items_selector_js: "Vis %{items_input} %{item_name} per side"
22
+ items_selector_js: "<label>Vis %{items_input} %{item_name} per side</label>"
data/lib/locales/nl.yml CHANGED
@@ -17,6 +17,6 @@ nl:
17
17
  single_page: "Toont <b>%{count}</b> %{item_name}"
18
18
  multiple_pages: "Toont <b>%{from}-%{to}</b> %{item_name} van <b>%{count}</b> in totaal"
19
19
 
20
- combo_nav_js: "Pagina %{page_input} van %{pages}"
20
+ combo_nav_js: "<label>Pagina %{page_input}</label> van %{pages}"
21
21
 
22
- items_selector_js: "Toont %{items_input} %{item_name} per pagina"
22
+ items_selector_js: "<label>Toont %{items_input} %{item_name} per pagina</label>"
data/lib/locales/pl.yml CHANGED
@@ -19,6 +19,6 @@ pl:
19
19
  single_page: "Wyświetlono <b>%{count}</b> %{item_name}"
20
20
  multiple_pages: "Wyświetlono %{item_name} <b>%{from}-%{to}</b> z wszystkich <b>%{count}</b>"
21
21
 
22
- combo_nav_js: "Strona %{page_input} z %{pages}"
22
+ combo_nav_js: "<label>Strona %{page_input}</label> z %{pages}"
23
23
 
24
- items_selector_js: "Pokaż %{items_input} %{item_name} na stronie"
24
+ items_selector_js: "<label>Pokaż %{items_input} %{item_name} na stronie</label>"
@@ -17,6 +17,6 @@ pt-BR:
17
17
  single_page: "Mostrando %{count} %{item_name}"
18
18
  multiple_pages: "Mostrando %{item_name} %{from}-%{to} do total de %{count}"
19
19
 
20
- combo_nav_js: "Página %{page_input} de %{pages}"
20
+ combo_nav_js: "<label>Página %{page_input}</label> de %{pages}"
21
21
 
22
- items_selector_js: "Mostrar %{items_input} %{item_name} por página"
22
+ items_selector_js: "<label>Mostrar %{items_input} %{item_name} por página</label>"
data/lib/locales/pt.yml CHANGED
@@ -17,6 +17,6 @@ pt:
17
17
  single_page: "Mostrando %{count} %{item_name}"
18
18
  multiple_pages: "Mostrando %{item_name} %{from}-%{to} de um total de %{count}"
19
19
 
20
- combo_nav_js: "Página %{page_input} de %{pages}"
20
+ combo_nav_js: "<label>Página %{page_input}</label> de %{pages}"
21
21
 
22
- items_selector_js: "Mostrar %{items_input} %{item_name} por página"
22
+ items_selector_js: "<label>Mostrar %{items_input} %{item_name} por página</label>"
data/lib/locales/ru.yml CHANGED
@@ -19,6 +19,6 @@ ru:
19
19
  single_page: "<b>%{count}</b> %{item_name}"
20
20
  multiple_pages: "Всего <b>%{count}</b> %{item_name}, показаны с <b>%{from}</b> по <b>%{to}</b>"
21
21
 
22
- combo_nav_js: "Страница %{page_input} из %{pages}"
22
+ combo_nav_js: "<label>Страница %{page_input}</label> из %{pages}"
23
23
 
24
- items_selector_js: "Показать %{items_input} %{item_name} на странице"
24
+ items_selector_js: "<label>Показать %{items_input} %{item_name} на странице</label>"
data/lib/locales/sr.yml CHANGED
@@ -18,6 +18,6 @@ sr:
18
18
  single_page: "Приказује се <b>%{count}</b> %{item_name}"
19
19
  multiple_pages: "Приказ %{item_name} <b>%{from}-%{to}</b> од <b>%{count}</b> укупно"
20
20
 
21
- combo_nav_js: "Страниca %{page_input} од %{pages}"
21
+ combo_nav_js: "<label>Страниca %{page_input}</label> од %{pages}"
22
22
 
23
- items_selector_js: "Прикажи %{items_input} %{item_name} по страниcи"
23
+ items_selector_js: "<label>Прикажи %{items_input} %{item_name} по страниcи</label>"
@@ -18,6 +18,6 @@ sv-SE:
18
18
  single_page: "Visar <b>%{count}</b> %{item_name}"
19
19
  multiple_pages: "Visar %{item_name} <b>%{from}-%{to}</b> av <b>%{count}</b> totalt"
20
20
 
21
- combo_nav_js: "Sida %{page_input} av %{pages}"
21
+ combo_nav_js: "<label>Sida %{page_input}</label> av %{pages}"
22
22
 
23
- items_selector_js: "Visa %{items_input} %{item_name} per sida"
23
+ items_selector_js: "<label>Visa %{items_input} %{item_name} per sida</label>"
data/lib/locales/sv.yml CHANGED
@@ -18,6 +18,6 @@ sv:
18
18
  single_page: "Visar <b>%{count}</b> %{item_name}"
19
19
  multiple_pages: "Visar %{item_name} <b>%{from}-%{to}</b> av <b>%{count}</b> totalt"
20
20
 
21
- combo_nav_js: "Sida %{page_input} av %{pages}"
21
+ combo_nav_js: "<label>Sida %{page_input}</label> av %{pages}"
22
22
 
23
- items_selector_js: "Visa %{items_input} %{item_name} per sida"
23
+ items_selector_js: "<label>Visa %{items_input} %{item_name} per sida</label>"
data/lib/locales/sw.yml CHANGED
@@ -17,6 +17,6 @@ sw:
17
17
  single_page: "Inaonyesha %{item_name} <b>%{count}</b>"
18
18
  multiple_pages: "Inaonyesha %{item_name} <b>%{from}-%{to}</b> ya <b>%{count}</b> kwa jumla"
19
19
 
20
- combo_nav_js: "Kurasa %{page_input} ya %{pages}"
20
+ combo_nav_js: "<label>Kurasa %{page_input}</label> ya %{pages}"
21
21
 
22
- items_selector_js: "Onyesha %{items_input} %{item_name} kwa kila ukurasa"
22
+ items_selector_js: "<label>Onyesha %{items_input} %{item_name} kwa kila ukurasa</label>"
data/lib/locales/tr.yml CHANGED
@@ -15,6 +15,6 @@ tr:
15
15
  single_page: "Toplam <b>%{count}</b> %{item_name} gösteriliyor"
16
16
  multiple_pages: "<b>%{count}</b> %{item_name} içerisinden <b>%{from}-%{to}</b> kadarı gösteriliyor"
17
17
 
18
- combo_nav_js: "Sayfa %{page_input} / %{pages}"
18
+ combo_nav_js: "<label>Sayfa %{page_input}</label> / %{pages}"
19
19
 
20
- items_selector_js: "Sayfada %{items_input} %{item_name} göster"
20
+ items_selector_js: "<label>Sayfada %{items_input} %{item_name} göster</label>"
@@ -15,6 +15,6 @@ zh-CN:
15
15
  single_page: "显示<b>%{count}</b> 项%{item_name}"
16
16
  multiple_pages: "共 <b>%{count}</b> 项%{item_name},显示 <b>%{from}-%{to}</b>"
17
17
 
18
- combo_nav_js: " %{page_input} / %{pages} 页"
18
+ combo_nav_js: "<label>第 %{page_input}</label> / %{pages} 页"
19
19
 
20
- items_selector_js: "每页显示 %{items_input} 条%"
20
+ items_selector_js: "<label>每页显示 %{items_input} 条%</label>"
@@ -15,6 +15,6 @@ zh-HK:
15
15
  single_page: "顯示 <b>%{count}</b> %{item_name}"
16
16
  multiple_pages: "共 <b>%{count}</b> %{item_name},顯示 <b>%{from}-%{to}</b>"
17
17
 
18
- combo_nav_js: " %{page_input} / %{pages} 頁"
18
+ combo_nav_js: "<label>第 %{page_input}</label> / %{pages} 頁"
19
19
 
20
- items_selector_js: "每頁顯示 %{items_input} 記錄"
20
+ items_selector_js: "<label>每頁顯示 %{items_input} 記錄</label>"
@@ -10,11 +10,11 @@ zh-TW:
10
10
  next: "下一頁&nbsp;&rsaquo;"
11
11
  gap: "&hellip;"
12
12
 
13
- combo_nav_js: "第 %{page_input} / %{pages} 頁"
14
-
15
13
  info:
16
14
  no_items: "沒找到項"
17
15
  single_page: "顯示 <b>%{count}</b> 項%{item_name}"
18
16
  multiple_pages: "共 <b>%{count}</b> 項%{item_name},顯示 <b>%{from}-%{to}</b>"
19
17
 
20
- items_selector_js: "每頁顯示 %{items_input} 項%{item_name}"
18
+ combo_nav_js: "<label>第 %{page_input}</label> / %{pages}"
19
+
20
+ items_selector_js: "<label>每頁顯示 %{items_input} 項%{item_name}"
data/lib/pagy.rb CHANGED
@@ -5,7 +5,7 @@ require 'pathname'
5
5
 
6
6
  # main class
7
7
  class Pagy
8
- VERSION = '4.2.0'
8
+ VERSION = '4.6.0'
9
9
 
10
10
  # Root pathname to get the path of Pagy files like templates or dictionaries
11
11
  def self.root
@@ -14,7 +14,7 @@ class Pagy
14
14
 
15
15
  # default vars
16
16
  VARS = { page: 1, items: 20, outset: 0, size: [1, 4, 4, 1], page_param: :page, # rubocop:disable Style/MutableConstant
17
- params: {}, anchor: '', link_extra: '', i18n_key: 'pagy.item_name', cycle: false }
17
+ params: {}, fragment: '', link_extra: '', i18n_key: 'pagy.item_name', cycle: false }
18
18
 
19
19
  attr_reader :count, :page, :items, :vars, :pages, :last, :offset, :from, :to, :prev, :next
20
20
 
@@ -22,20 +22,22 @@ class Pagy
22
22
 
23
23
  # Merge and validate the options, do some simple arithmetic and set the instance variables
24
24
  def initialize(vars)
25
- @vars = VARS.merge( vars.delete_if{|_,v| v.nil? || v == '' } )
25
+ @vars = VARS.merge( vars.delete_if{|k,v| VARS.key?(k) && (v.nil? || v == '') } )
26
+ @vars[:fragment] = deprecated_var(:anchor, @vars[:anchor], :fragment, @vars[:fragment]) if @vars[:anchor]
26
27
 
27
28
  INSTANCE_VARS_MIN.each do |name,min|
28
29
  raise VariableError.new(self), "expected :#{name} >= #{min}; got #{@vars[name].inspect}" \
29
30
  unless @vars[name] && instance_variable_set(:"@#{name}", @vars[name].to_i) >= min
30
31
  end
31
32
  @pages = @last = [(@count.to_f / @items).ceil, 1].max
32
- raise OverflowError.new(self), "expected :page in 1..#{@last}; got #{@page.inspect}" if @page > @last
33
+ raise OverflowError.new(self), "expected :page in 1..#{@last}; got #{@page.inspect}" \
34
+ if @page > @last
33
35
 
34
36
  @offset = @items * (@page - 1) + @outset
35
- @items = @count - ((@pages-1) * @items) if @page == @last && @count.positive?
37
+ @items = @count - ((@pages - 1) * @items) if @page == @last && @count.positive?
36
38
  @from = @count.zero? ? 0 : @offset + 1 - @outset
37
39
  @to = @count.zero? ? 0 : @offset + @items - @outset
38
- @prev = (@page-1 unless @page == 1)
40
+ @prev = (@page - 1 unless @page == 1)
39
41
  @next = @page == @last ? (1 if @vars[:cycle]) : @page + 1
40
42
  end
41
43
 
@@ -43,28 +45,32 @@ class Pagy
43
45
  def series(size=@vars[:size])
44
46
  return [] if size.empty?
45
47
  raise VariableError.new(self), "expected 4 items >= 0 in :size; got #{size.inspect}" \
46
- unless size.size == 4 && size.all?{ |num| num >= 0 rescue false } # rubocop:disable Style/RescueModifier
47
-
48
+ unless size.size == 4 && size.all?{ |num| !num.negative? rescue false } # rubocop:disable Style/RescueModifier
49
+ # This algorithm is up to ~5x faster and ~2.3x lighter than the previous one (pagy < 4.3)
50
+ left_gap_start = 1 + size[0]
51
+ left_gap_end = @page - size[1] - 1
52
+ right_gap_start = @page + size[2] + 1
53
+ right_gap_end = @last - size[3]
54
+ left_gap_end = right_gap_end if left_gap_end > right_gap_end
55
+ right_gap_start = left_gap_start if left_gap_start > right_gap_start
48
56
  series = []
49
- [ *0..size[0], # initial pages from 0
50
- *@page-size[1]..@page+size[2], # around current page
51
- *@last-size[3]+1..@last+1 # final pages till @last+1
52
- ].sort!.each_cons(2) do |left, right| # sort and loop by 2
53
- next if left.negative? || left == right # skip out of range and duplicates
54
- break if left > @last # break if out of @last boundary
55
- case right
56
- when left+1 then series.push(left) # no gap -> no additions
57
- when left+2 then series.push(left, left+1) # 1 page gap -> fill with missing page
58
- else series.push(left, :gap) # n page gap -> add gap
59
- end
57
+ start = 1
58
+ if (left_gap_end - left_gap_start).positive?
59
+ series.push(*start..(left_gap_start - 1), :gap)
60
+ start = left_gap_end + 1
61
+ end
62
+ if (right_gap_end - right_gap_start).positive?
63
+ series.push(*start..(right_gap_start - 1), :gap)
64
+ start = right_gap_end + 1
60
65
  end
61
- series.shift # shift the start boundary (0)
62
- series[series.index(@page)] = @page.to_s # convert the current page to String
66
+ series.push(*start..@last)
67
+ series[series.index(@page)] = @page.to_s
63
68
  series
64
69
  end
65
70
 
66
71
  end
67
72
 
73
+ require 'pagy/deprecation'
68
74
  require 'pagy/backend'
69
75
  require 'pagy/frontend'
70
76
  require 'pagy/exceptions'
data/lib/pagy/backend.rb CHANGED
@@ -19,6 +19,7 @@ class Pagy
19
19
 
20
20
  # Sub-method called only by #pagy: here for easy customization of variables by overriding
21
21
  def pagy_get_vars(collection, vars)
22
+ pagy_set_items_from_params(vars) if defined?(UseItemsExtra)
22
23
  vars[:count] ||= (c = collection.count(:all)).is_a?(Hash) ? c.size : c
23
24
  vars[:page] ||= params[ vars[:page_param] || VARS[:page_param] ]
24
25
  vars
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pagy' # so you can require just the extra in the console
4
+ require 'pagy/extras/standalone'
5
+
6
+ class Pagy
7
+ # include Pagy::Console in irb/rails console for a ready to use pagy environment
8
+ module Console
9
+ def self.included(main)
10
+ main.include(Backend)
11
+ main.include(Frontend)
12
+ VARS[:url] = 'http://www.example.com/subdir'
13
+ end
14
+
15
+ def pagy_extras(*extras)
16
+ extras.each {|extra| require "pagy/extras/#{extra}"}
17
+ puts "Required extras: #{extras.map(&:inspect).join(', ')}"
18
+ end
19
+ end
20
+
21
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+ class Pagy
3
+ class << self
4
+
5
+ # deprecated variables
6
+ def deprecated_var(var, val, new_var, new_val)
7
+ value = new_val || val
8
+ Warning.warn %([PAGY WARNING] deprecated use of `#{var}` var will not be supported in 5.0! Use `#{new_var}: #{value.inspect}` instead.)
9
+ value
10
+ end
11
+
12
+ # deprecated pagy_url_for argument order
13
+ def deprecated_order(pagy, page)
14
+ Warning.warn '[PAGY WARNING] inverted use of pagy/page in pagy_url_for will not be supported in 5.0! Use pagy_url_for(pagy, page) instead.'
15
+ [page, pagy]
16
+ end
17
+
18
+
19
+ # deprecated posiitioal arguments
20
+ def deprecated_arg(arg, val, new_key, new_val)
21
+ value = new_val || val # we use the new_val if present
22
+ Warning.warn %([PAGY WARNING] deprecated use of positional `#{arg}` arg will not be supported in 5.0! Use only the keyword arg `#{new_key}: #{value.inspect}` instead.)
23
+ value
24
+ end
25
+
26
+ end
27
+ end
@@ -11,6 +11,7 @@ class Pagy
11
11
  end
12
12
 
13
13
  def pagy_arel_get_vars(collection, vars)
14
+ pagy_set_items_from_params(vars) if defined?(UseItemsExtra)
14
15
  vars[:count] ||= pagy_arel_count(collection)
15
16
  vars[:page] ||= params[ vars[:page_param] || VARS[:page_param] ]
16
17
  vars
@@ -14,6 +14,7 @@ class Pagy
14
14
 
15
15
  # Sub-method called only by #pagy_array: here for easy customization of variables by overriding
16
16
  def pagy_array_get_vars(array, vars)
17
+ pagy_set_items_from_params(vars) if defined?(UseItemsExtra)
17
18
  vars[:count] ||= array.size
18
19
  vars[:page] ||= params[ vars[:page_param] || VARS[:page_param] ]
19
20
  vars
@@ -7,10 +7,11 @@ class Pagy
7
7
  module Frontend
8
8
 
9
9
  # Pagination for bootstrap: it returns the html with the series of links to the pages
10
- def pagy_bootstrap_nav(pagy)
11
- link = pagy_link_proc(pagy, 'class="page-link"')
10
+ def pagy_bootstrap_nav(pagy, pagy_id: nil, link_extra: '')
11
+ p_id = %( id="#{pagy_id}") if pagy_id
12
+ link = pagy_link_proc(pagy, link_extra: %(class="page-link" #{link_extra}))
12
13
 
13
- html = +%(<nav class="pagy-bootstrap-nav" role="navigation" aria-label="pager"><ul class="pagination">)
14
+ html = +%(<nav#{p_id} class="pagy-bootstrap-nav" aria-label="pager"><ul class="pagination">)
14
15
  html << pagy_bootstrap_prev_html(pagy, link)
15
16
  pagy.series.each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
16
17
  html << case item
@@ -24,26 +25,30 @@ class Pagy
24
25
  end
25
26
 
26
27
  # Javascript pagination for bootstrap: it returns a nav and a JSON tag used by the Pagy.nav javascript
27
- def pagy_bootstrap_nav_js(pagy, id=pagy_id)
28
- link = pagy_link_proc(pagy, 'class="page-link"')
28
+ def pagy_bootstrap_nav_js(pagy, deprecated_id=nil, pagy_id: nil, link_extra: '', steps: nil)
29
+ pagy_id = Pagy.deprecated_arg(:id, deprecated_id, :pagy_id, pagy_id) if deprecated_id
30
+ p_id = %( id="#{pagy_id}") if pagy_id
31
+ link = pagy_link_proc(pagy, link_extra: %(class="page-link" #{link_extra}))
29
32
  tags = { 'before' => %(<ul class="pagination">#{pagy_bootstrap_prev_html pagy, link}),
30
33
  'link' => %(<li class="page-item">#{mark = link.call(PAGE_PLACEHOLDER)}</li>),
31
34
  'active' => %(<li class="page-item active">#{mark}</li>),
32
35
  'gap' => %(<li class="page-item gap disabled"><a href="#" class="page-link">#{pagy_t 'pagy.nav.gap'}</a></li>),
33
36
  'after' => %(#{pagy_bootstrap_next_html pagy, link}</ul>) }
34
37
 
35
- html = %(<nav id="#{id}" class="pagy-bootstrap-nav-js" role="navigation" aria-label="pager"></nav>)
36
- html << pagy_json_tag(pagy, :nav, id, tags, pagy.sequels)
38
+ html = %(<nav#{p_id} class="pagy-njs pagy-bootstrap-nav-js" aria-label="pager"></nav>)
39
+ html << pagy_json_tag(pagy, :nav, tags, pagy.sequels(steps))
37
40
  end
38
41
 
39
42
  # Javascript combo pagination for bootstrap: it returns a nav and a JSON tag used by the Pagy.combo_nav javascript
40
- def pagy_bootstrap_combo_nav_js(pagy, id=pagy_id)
41
- link = pagy_link_proc(pagy)
43
+ def pagy_bootstrap_combo_nav_js(pagy, deprecated_id=nil, pagy_id: nil, link_extra: '')
44
+ pagy_id = Pagy.deprecated_arg(:id, deprecated_id, :pagy_id, pagy_id) if deprecated_id
45
+ p_id = %( id="#{pagy_id}") if pagy_id
46
+ link = pagy_link_proc(pagy, link_extra: link_extra)
42
47
  p_page = pagy.page
43
48
  p_pages = pagy.pages
44
49
  input = %(<input type="number" min="1" max="#{p_pages}" value="#{p_page}" class="text-primary" style="padding: 0; border: none; text-align: center; width: #{p_pages.to_s.length+1}rem;">)
45
50
 
46
- %(<nav id="#{id}" class="pagy-bootstrap-combo-nav-js pagination" role="navigation" aria-label="pager"><div class="btn-group" role="group">#{
51
+ %(<nav#{p_id} class="pagy-bootstrap-combo-nav-js pagination" aria-label="pager"><div class="btn-group" role="group">#{
47
52
  if (p_prev = pagy.prev)
48
53
  link.call p_prev, pagy_t('pagy.nav.prev'), 'aria-label="previous" class="prev btn btn-primary"'
49
54
  else
@@ -56,7 +61,7 @@ class Pagy
56
61
  %(<a class="next btn btn-primary disabled" href="#">#{pagy_t 'pagy.nav.next' }</a>)
57
62
  end
58
63
  }</div></nav>#{
59
- pagy_json_tag(pagy, :combo_nav, id, p_page, pagy_marked_link(link))
64
+ pagy_json_tag pagy, :combo_nav, p_page, pagy_marked_link(link)
60
65
  })
61
66
  end
62
67
 
@@ -7,55 +7,60 @@ class Pagy
7
7
  module Frontend
8
8
 
9
9
  # Pagination for Bulma: it returns the html with the series of links to the pages
10
- def pagy_bulma_nav(pagy)
11
- link = pagy_link_proc(pagy)
10
+ def pagy_bulma_nav(pagy, pagy_id: nil, link_extra: '')
11
+ p_id = %( id="#{pagy_id}") if pagy_id
12
+ link = pagy_link_proc(pagy, link_extra: link_extra)
12
13
 
13
- html = +%(<nav class="pagy-bulma-nav pagination is-centered" role="navigation" aria-label="pagination">)
14
+ html = +%(<nav#{p_id} class="pagy-bulma-nav pagination is-centered" aria-label="pagination">)
14
15
  html << pagy_bulma_prev_next_html(pagy, link)
15
16
  html << %(<ul class="pagination-list">)
16
17
  pagy.series.each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
17
18
  html << case item
18
19
  when Integer then %(<li>#{link.call item, item, %(class="pagination-link" aria-label="goto page #{item}") }</li>) # page link
19
20
  when String then %(<li>#{link.call item, item, %(class="pagination-link is-current" aria-label="page #{item}" aria-current="page")}</li>) # active page
20
- when :gap then %(<li><span class="pagination-ellipsis">#{pagy_t('pagy.nav.gap')}</span></li>) # page gap
21
+ when :gap then %(<li><span class="pagination-ellipsis">#{pagy_t 'pagy.nav.gap'}</span></li>) # page gap
21
22
  end
22
23
  end
23
24
  html << %(</ul></nav>)
24
25
  end
25
26
 
26
- def pagy_bulma_nav_js(pagy, id=pagy_id)
27
- link = pagy_link_proc(pagy)
27
+ def pagy_bulma_nav_js(pagy, deprecated_id=nil, pagy_id: nil, link_extra: '', steps: nil)
28
+ pagy_id = Pagy.deprecated_arg(:id, deprecated_id, :pagy_id, pagy_id) if deprecated_id
29
+ p_id = %( id="#{pagy_id}") if pagy_id
30
+ link = pagy_link_proc(pagy, link_extra: link_extra)
28
31
  tags = { 'before' => %(#{pagy_bulma_prev_next_html(pagy, link)}<ul class="pagination-list">),
29
32
  'link' => %(<li>#{link.call PAGE_PLACEHOLDER, PAGE_PLACEHOLDER, %(class="pagination-link" aria-label="goto page #{PAGE_PLACEHOLDER}")}</li>),
30
33
  'active' => %(<li>#{link.call PAGE_PLACEHOLDER, PAGE_PLACEHOLDER, %(class="pagination-link is-current" aria-current="page" aria-label="page #{PAGE_PLACEHOLDER}")}</li>),
31
34
  'gap' => %(<li><span class="pagination-ellipsis">#{pagy_t 'pagy.nav.gap' }</span></li>),
32
35
  'after' => '</ul>' }
33
36
 
34
- html = %(<nav id="#{id}" class="pagy-bulma-nav-js pagination is-centered" role="navigation" aria-label="pagination"></nav>)
35
- html << pagy_json_tag(pagy, :nav, id, tags, pagy.sequels)
37
+ html = %(<nav#{p_id} class="pagy-njs pagy-bulma-nav-js pagination is-centered" aria-label="pagination"></nav>)
38
+ html << pagy_json_tag(pagy, :nav, tags, pagy.sequels(steps))
36
39
  end
37
40
 
38
41
  # Javascript combo pagination for Bulma: it returns a nav and a JSON tag used by the Pagy.combo_nav javascript
39
- def pagy_bulma_combo_nav_js(pagy, id=pagy_id)
40
- link = pagy_link_proc(pagy)
42
+ def pagy_bulma_combo_nav_js(pagy, deprecated_id=nil, pagy_id: nil, link_extra: '')
43
+ pagy_id = Pagy.deprecated_arg(:id, deprecated_id, :pagy_id, pagy_id) if deprecated_id
44
+ p_id = %( id="#{pagy_id}") if pagy_id
45
+ link = pagy_link_proc(pagy, link_extra: link_extra)
41
46
  p_page = pagy.page
42
47
  p_pages = pagy.pages
43
48
  input = %(<input class="input" type="number" min="1" max="#{p_pages}" value="#{p_page}" style="padding: 0; text-align: center; width: #{p_pages.to_s.length+1}rem; margin:0 0.3rem;">)
44
49
 
45
- %(<nav id="#{id}" class="pagy-bulma-combo-nav-js" role="navigation" aria-label="pagination"><div class="field is-grouped is-grouped-centered" role="group">#{
50
+ %(<nav#{p_id} class="pagy-bulma-combo-nav-js" aria-label="pagination"><div class="field is-grouped is-grouped-centered" role="group">#{
46
51
  if (p_prev = pagy.prev)
47
52
  %(<p class="control">#{link.call p_prev, pagy_t('pagy.nav.prev'), 'class="button" aria-label="previous page"'}</p>)
48
53
  else
49
54
  %(<p class="control"><a class="button" disabled>#{pagy_t 'pagy.nav.prev'}</a></p>)
50
55
  end
51
- }<div class="pagy-combo-input control level is-mobile">#{pagy_t('pagy.combo_nav_js', page_input: input, count: p_page, pages: p_pages)}</div>#{
56
+ }<div class="pagy-combo-input control level is-mobile">#{pagy_t 'pagy.combo_nav_js', page_input: input, count: p_page, pages: p_pages}</div>#{
52
57
  if (p_next = pagy.next)
53
58
  %(<p class="control">#{link.call p_next, pagy_t('pagy.nav.next'), 'class="button" aria-label="next page"'}</p>)
54
59
  else
55
60
  %(<p class="control"><a class="button" disabled>#{pagy_t 'pagy.nav.next'}</a></p>)
56
61
  end
57
62
  }</div></nav>#{
58
- pagy_json_tag(pagy, :combo_nav, id, p_page, pagy_marked_link(link))
63
+ pagy_json_tag pagy, :combo_nav, p_page, pagy_marked_link(link)
59
64
  })
60
65
  end
61
66