pagy 8.6.3 → 9.3.4

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 (106) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/apps/calendar.ru +119 -127
  4. data/apps/demo.ru +274 -260
  5. data/apps/index.rb +7 -0
  6. data/apps/keyset_ar.ru +227 -0
  7. data/apps/keyset_s.ru +219 -0
  8. data/apps/rails.ru +25 -20
  9. data/apps/repro.ru +108 -103
  10. data/bin/pagy +18 -20
  11. data/config/pagy.rb +19 -15
  12. data/javascripts/pagy.min.js +2 -2
  13. data/javascripts/pagy.min.js.map +3 -3
  14. data/javascripts/pagy.mjs +2 -2
  15. data/lib/pagy/b64.rb +33 -0
  16. data/lib/pagy/backend.rb +20 -20
  17. data/lib/pagy/calendar/day.rb +2 -2
  18. data/lib/pagy/calendar/month.rb +2 -2
  19. data/lib/pagy/calendar/quarter.rb +2 -2
  20. data/lib/pagy/calendar/unit.rb +7 -10
  21. data/lib/pagy/calendar/week.rb +2 -2
  22. data/lib/pagy/calendar/year.rb +2 -2
  23. data/lib/pagy/calendar.rb +15 -13
  24. data/lib/pagy/countless.rb +10 -14
  25. data/lib/pagy/extras/arel.rb +3 -11
  26. data/lib/pagy/extras/array.rb +5 -10
  27. data/lib/pagy/extras/bootstrap.rb +5 -5
  28. data/lib/pagy/extras/bulma.rb +10 -7
  29. data/lib/pagy/extras/calendar.rb +13 -17
  30. data/lib/pagy/extras/countless.rb +8 -13
  31. data/lib/pagy/extras/elasticsearch_rails.rb +16 -25
  32. data/lib/pagy/extras/gearbox.rb +18 -18
  33. data/lib/pagy/extras/headers.rb +25 -24
  34. data/lib/pagy/extras/i18n.rb +1 -1
  35. data/lib/pagy/extras/js_tools.rb +6 -6
  36. data/lib/pagy/extras/jsonapi.rb +30 -21
  37. data/lib/pagy/extras/keyset.rb +30 -0
  38. data/lib/pagy/extras/limit.rb +63 -0
  39. data/lib/pagy/extras/meilisearch.rb +9 -17
  40. data/lib/pagy/extras/metadata.rb +3 -3
  41. data/lib/pagy/extras/overflow.rb +9 -9
  42. data/lib/pagy/extras/pagy.rb +16 -16
  43. data/lib/pagy/extras/searchkick.rb +9 -17
  44. data/lib/pagy/extras/size.rb +1 -1
  45. data/lib/pagy/extras/standalone.rb +6 -6
  46. data/lib/pagy/extras/trim.rb +3 -3
  47. data/lib/pagy/frontend.rb +32 -33
  48. data/lib/pagy/i18n.rb +3 -2
  49. data/lib/pagy/keyset/active_record.rb +38 -0
  50. data/lib/pagy/keyset/sequel.rb +51 -0
  51. data/lib/pagy/keyset.rb +118 -0
  52. data/lib/pagy/shared_methods.rb +26 -0
  53. data/lib/pagy/url_helpers.rb +5 -5
  54. data/lib/pagy.rb +53 -67
  55. data/locales/ar.yml +1 -1
  56. data/locales/be.yml +1 -1
  57. data/locales/bg.yml +1 -1
  58. data/locales/bs.yml +1 -1
  59. data/locales/ca.yml +1 -1
  60. data/locales/ckb.yml +1 -1
  61. data/locales/cs.yml +1 -1
  62. data/locales/da.yml +1 -1
  63. data/locales/de.yml +1 -1
  64. data/locales/dz.yml +17 -0
  65. data/locales/en.yml +1 -1
  66. data/locales/es.yml +1 -1
  67. data/locales/fr.yml +1 -1
  68. data/locales/hr.yml +1 -1
  69. data/locales/id.yml +1 -1
  70. data/locales/it.yml +1 -1
  71. data/locales/ja.yml +1 -1
  72. data/locales/km.yml +1 -1
  73. data/locales/ko.yml +1 -1
  74. data/locales/nb.yml +1 -1
  75. data/locales/nl.yml +1 -1
  76. data/locales/nn.yml +1 -1
  77. data/locales/pl.yml +1 -1
  78. data/locales/pt-BR.yml +1 -1
  79. data/locales/pt.yml +1 -1
  80. data/locales/ru.yml +1 -1
  81. data/locales/sr.yml +1 -1
  82. data/locales/sv-SE.yml +1 -1
  83. data/locales/sv.yml +1 -1
  84. data/locales/sw.yml +3 -1
  85. data/locales/ta.yml +3 -1
  86. data/locales/tr.yml +1 -1
  87. data/locales/uk.yml +1 -1
  88. data/locales/vi.yml +1 -1
  89. data/locales/zh-CN.yml +7 -9
  90. data/locales/zh-HK.yml +7 -9
  91. data/locales/zh-TW.yml +7 -9
  92. metadata +14 -27
  93. data/apps/tmp/calendar.sqlite3 +0 -0
  94. data/apps/tmp/calendar.sqlite3-shm +0 -0
  95. data/apps/tmp/calendar.sqlite3-wal +0 -0
  96. data/apps/tmp/local_secret.txt +0 -1
  97. data/apps/tmp/pagy-keyset.sqlite3 +0 -0
  98. data/apps/tmp/pagy-keyset.sqlite3-shm +0 -0
  99. data/apps/tmp/pagy-keyset.sqlite3-wal +0 -0
  100. data/javascripts/pagy-module.js +0 -100
  101. data/javascripts/pagy.js +0 -4
  102. data/lib/pagy/extras/foundation.rb +0 -95
  103. data/lib/pagy/extras/items.rb +0 -64
  104. data/lib/pagy/extras/materialize.rb +0 -100
  105. data/lib/pagy/extras/semantic.rb +0 -94
  106. data/lib/pagy/extras/uikit.rb +0 -98
@@ -1,94 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- warn '[PAGY WARNING] The semantic extra has been discontinued and it will be removed in v9 ' \
4
- '(https://github.com/ddnexus/pagy/discussions/672#discussioncomment-9212328)'
5
-
6
- require_relative 'js_tools'
7
-
8
- class Pagy # :nodoc:
9
- # Frontend modules are specially optimized for performance.
10
- # The resulting code may not look very elegant, but produces the best benchmarks
11
- module SemanticExtra
12
- # Pagination for semantic: it returns the html with the series of links to the pages
13
- def pagy_semantic_nav(pagy, id: nil, aria_label: nil, **vars)
14
- id = %( id="#{id}") if id
15
- a = pagy_anchor(pagy)
16
-
17
- html = %(<div#{id} role="navigation" class="pagy-semantic nav ui pagination menu" #{
18
- nav_aria_label(pagy, aria_label:)}>#{semantic_prev_html(pagy, a)})
19
- pagy.series(**vars).each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
20
- html << case item
21
- when Integer
22
- a.(item, pagy.label_for(item), classes: 'item')
23
- when String
24
- %(<a role="link" class="item active" aria-current="page" aria-disabled="true">#{pagy.label_for(item)}</a>)
25
- when :gap
26
- %(<div class="disabled item">#{pagy_t 'pagy.gap'}</div>)
27
- else
28
- raise InternalError, "expected item types in series to be Integer, String or :gap; got #{item.inspect}"
29
- end
30
- end
31
- html << %(#{semantic_next_html(pagy, a)}</div>)
32
- end
33
-
34
- # Javascript pagination for semantic: it returns a nav with a data-pagy attribute used by the pagy.js file
35
- def pagy_semantic_nav_js(pagy, id: nil, aria_label: nil, **vars)
36
- sequels = pagy.sequels(**vars)
37
- id = %( id="#{id}") if id
38
- a = pagy_anchor(pagy)
39
- tokens = { 'before' => semantic_prev_html(pagy, a),
40
- 'a' => a.(PAGE_TOKEN, LABEL_TOKEN, classes: 'item'),
41
- 'current' => %(<a role="link" class="item active" aria-current="page" aria-disabled="true">#{LABEL_TOKEN}</a>),
42
- 'gap' => %(<div class="disabled item">#{pagy_t('pagy.gap')}</div>),
43
- 'after' => semantic_next_html(pagy, a) }
44
-
45
- %(<div#{id} class="#{'pagy-rjs ' if sequels.size > 1}pagy-semantic nav-js ui pagination menu" role="navigation" #{
46
- nav_aria_label(pagy, aria_label:)} #{
47
- pagy_data(pagy, :nav, tokens, sequels, pagy.label_sequels(sequels))
48
- }></div>)
49
- end
50
-
51
- # Combo pagination for semantic: it returns a nav with a data-pagy attribute used by the pagy.js file
52
- def pagy_semantic_combo_nav_js(pagy, id: nil, aria_label: nil)
53
- id = %( id="#{id}") if id
54
- a = pagy_anchor(pagy)
55
- pages = pagy.pages
56
-
57
- page_input = %(<input name="page" type="number" min="1" max="#{pages}" value="#{pagy.page}" aria-current="page") <<
58
- %(style="text-align: center; width: #{pages.to_s.length + 1}rem; padding: 0; margin: 0 0.3rem">) <<
59
- JSTools::A_TAG
60
-
61
- %(<div#{id} class="pagy-semantic combo-nav-js ui compact menu" role="navigation" #{
62
- nav_aria_label(pagy, aria_label:)} #{
63
- pagy_data(pagy, :combo, pagy_url_for(pagy, PAGE_TOKEN))
64
- }>#{
65
- semantic_prev_html(pagy, a)
66
- }<div class="item"><label>#{
67
- pagy_t('pagy.combo_nav_js', page_input:, pages:)
68
- }</label></div> #{
69
- semantic_next_html(pagy, a)
70
- }</div>)
71
- end
72
-
73
- private
74
-
75
- def semantic_prev_html(pagy, a)
76
- if (p_prev = pagy.prev)
77
- a.(p_prev, pagy_t('pagy.prev'), classes: 'item', aria_label: pagy_t('pagy.aria_label.prev'))
78
- else
79
- %(<div class="item disabled" role="a" aria-disabled="true" aria-label="#{
80
- pagy_t('pagy.aria_label.prev')}">#{pagy_t('pagy.prev')}</div>)
81
- end
82
- end
83
-
84
- def semantic_next_html(pagy, a)
85
- if (p_next = pagy.next)
86
- a.(p_next, pagy_t('pagy.next'), classes: 'item', aria_label: pagy_t('pagy.aria_label.next'))
87
- else
88
- %(<div class="item disabled" role="link" aria-disabled="true" aria=label="#{
89
- pagy_t('pagy.aria_label.prev')}">#{pagy_t('pagy.next')}</div>)
90
- end
91
- end
92
- end
93
- Frontend.prepend SemanticExtra
94
- end
@@ -1,98 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- warn '[PAGY WARNING] The uikit extra has been discontinued and it will be removed in v9 ' \
4
- '(https://github.com/ddnexus/pagy/discussions/672#discussioncomment-9212328)'
5
-
6
- require_relative 'js_tools'
7
-
8
- class Pagy # :nodoc:
9
- # Frontend modules are specially optimized for performance.
10
- # The resulting code may not look very elegant, but produces the best benchmarks
11
- module UikitExtra
12
- # Pagination for uikit: it returns the html with the series of links to the pages
13
- def pagy_uikit_nav(pagy, id: nil, aria_label: nil, **vars)
14
- id = %( id="#{id}") if id
15
- a = pagy_anchor(pagy)
16
-
17
- html = %(<ul#{id} class="pagy-uikit nav uk-pagination uk-flex-center" role="navigation" #{
18
- nav_aria_label(pagy, aria_label:)}>#{
19
- uikit_prev_html(pagy, a)})
20
- pagy.series(**vars).each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
21
- html << case item
22
- when Integer
23
- %(<li>#{a.(item)}</li>)
24
- when String
25
- %(<li class="uk-active"><span role="link" aria-current="page" aria-disabled="true">#{
26
- pagy.label_for(item)}</span></li>)
27
- when :gap
28
- %(<li class="uk-disabled"><span>#{pagy_t 'pagy.gap'}</span></li>)
29
- else
30
- raise InternalError, "expected item types in series to be Integer, String or :gap; got #{item.inspect}"
31
- end
32
- end
33
- html << %(#{uikit_next_html(pagy, a)}</ul>)
34
- end
35
-
36
- # Javascript pagination for uikit: it returns a nav with a data-pagy attribute used by the pagy.js file
37
- def pagy_uikit_nav_js(pagy, id: nil, aria_label: nil, **vars)
38
- sequels = pagy.sequels(**vars)
39
- id = %( id="#{id}") if id
40
- a = pagy_anchor(pagy)
41
- tokens = { 'before' => uikit_prev_html(pagy, a),
42
- 'a' => %(<li>#{a.(PAGE_TOKEN, LABEL_TOKEN)}</li>),
43
- 'current' => %(<li class="uk-active"><span role="link" aria-current="page" aria-disabled="true">#{
44
- LABEL_TOKEN}</span></li>),
45
- 'gap' => %(<li class="uk-disabled"><span>#{pagy_t 'pagy.gap'}</span></li>),
46
- 'after' => uikit_next_html(pagy, a) }
47
-
48
- %(<ul#{id} class="#{'pagy-rjs ' if sequels.size > 1}pagy-uikit nav-js uk-pagination uk-flex-center" role="navigation" #{
49
- nav_aria_label(pagy, aria_label:)} #{
50
- pagy_data(pagy, :nav, tokens, sequels, pagy.label_sequels(sequels))
51
- }></ul>)
52
- end
53
-
54
- # Javascript combo pagination for uikit: it returns a nav with a data-pagy attribute used by the pagy.js file
55
- def pagy_uikit_combo_nav_js(pagy, id: nil, aria_label: nil)
56
- id = %( id="#{id}") if id
57
- a = pagy_anchor(pagy)
58
- pages = pagy.pages
59
-
60
- page_input = %(<input name="page" type="number" min="1" max="#{pages}" value="#{pagy.page}" aria-current="page" ) <<
61
- %(style="text-align: center; width: #{pages.to_s.length + 1}rem;">#{JSTools::A_TAG})
62
-
63
- %(<ul#{id} class="pagy-uikit combo-nav-js uk-button-group uk-pagination uk-flex-center" role="navigation" #{
64
- nav_aria_label(pagy, aria_label:)} #{
65
- pagy_data(pagy, :combo, pagy_url_for(pagy, PAGE_TOKEN))
66
- }>#{
67
- uikit_prev_html(pagy, a)
68
- }<li><label>#{
69
- pagy_t('pagy.combo_nav_js', page_input:, pages:)
70
- }</label></li>#{
71
- uikit_next_html(pagy, a)
72
- }</ul>)
73
- end
74
-
75
- private
76
-
77
- def uikit_prev_html(pagy, a)
78
- span = %(<span uk-pagination-previous></span>)
79
- if (p_prev = pagy.prev)
80
- %(<li>#{a.(p_prev, span, aria_label: pagy_t('pagy.aria_label.prev'))}</li>)
81
- else
82
- %(<li class="uk-disabled"><a role="link" aria-disabled="true" aria-label="#{
83
- pagy_t('pagy.aria_label.prev')}">#{span}</a></li>)
84
- end
85
- end
86
-
87
- def uikit_next_html(pagy, a)
88
- span = %(<span uk-pagination-next></span>)
89
- if (p_next = pagy.next)
90
- %(<li>#{a.(p_next, span, aria_label: pagy_t('pagy.aria_label.prev'))}</li>)
91
- else
92
- %(<li class="uk-disabled"><a role="link" aria-disabled="true" aria-label="#{
93
- pagy_t('pagy.aria_label.next')}">#{span}</a></li>)
94
- end
95
- end
96
- end
97
- Frontend.include UikitExtra
98
- end