pagy 7.0.11 → 8.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/gem/apps/calendar.ru +2196 -0
  3. data/gem/apps/demo.ru +452 -0
  4. data/gem/apps/rails.ru +205 -0
  5. data/gem/apps/repro.ru +168 -0
  6. data/gem/bin/pagy +83 -0
  7. data/{lib → gem}/config/pagy.rb +6 -17
  8. data/{lib → gem}/javascripts/pagy-dev.js +10 -10
  9. data/{lib → gem}/javascripts/pagy-module.js +9 -9
  10. data/gem/javascripts/pagy.js +1 -0
  11. data/gem/lib/optimist.rb +1022 -0
  12. data/gem/lib/pagy/extras/bootstrap.rb +97 -0
  13. data/gem/lib/pagy/extras/bulma.rb +89 -0
  14. data/gem/lib/pagy/extras/foundation.rb +93 -0
  15. data/{lib → gem/lib}/pagy/extras/items.rb +21 -18
  16. data/{lib/pagy/extras/frontend_helpers.rb → gem/lib/pagy/extras/js_tools.rb} +1 -1
  17. data/gem/lib/pagy/extras/materialize.rb +97 -0
  18. data/gem/lib/pagy/extras/pagy.rb +82 -0
  19. data/gem/lib/pagy/extras/semantic.rb +91 -0
  20. data/gem/lib/pagy/extras/trim.rb +29 -0
  21. data/gem/lib/pagy/extras/uikit.rb +96 -0
  22. data/gem/lib/pagy/frontend.rb +97 -0
  23. data/{lib → gem/lib}/pagy/url_helpers.rb +1 -2
  24. data/{lib → gem/lib}/pagy.rb +12 -11
  25. data/{lib → gem}/locales/ar.yml +2 -2
  26. data/{lib → gem}/locales/be.yml +4 -4
  27. data/{lib → gem}/locales/bg.yml +4 -4
  28. data/{lib → gem}/locales/bs.yml +4 -4
  29. data/{lib → gem}/locales/ca.yml +4 -4
  30. data/gem/locales/ckb.yml +18 -0
  31. data/{lib → gem}/locales/cs.yml +4 -4
  32. data/{lib → gem}/locales/da.yml +4 -4
  33. data/{lib → gem}/locales/de.yml +4 -4
  34. data/{lib → gem}/locales/en.yml +4 -4
  35. data/{lib → gem}/locales/es.yml +2 -2
  36. data/{lib → gem}/locales/fr.yml +4 -4
  37. data/{lib → gem}/locales/hr.yml +4 -4
  38. data/{lib → gem}/locales/id.yml +4 -4
  39. data/{lib → gem}/locales/it.yml +4 -4
  40. data/{lib → gem}/locales/ja.yml +4 -4
  41. data/{lib → gem}/locales/km.yml +4 -4
  42. data/{lib → gem}/locales/ko.yml +4 -4
  43. data/{lib → gem}/locales/nb.yml +4 -4
  44. data/{lib → gem}/locales/nl.yml +4 -4
  45. data/{lib → gem}/locales/nn.yml +4 -4
  46. data/{lib → gem}/locales/pl.yml +4 -4
  47. data/{lib → gem}/locales/pt-BR.yml +2 -2
  48. data/{lib → gem}/locales/pt.yml +2 -2
  49. data/{lib → gem}/locales/ru.yml +4 -4
  50. data/{lib → gem}/locales/sr.yml +4 -4
  51. data/{lib → gem}/locales/sv-SE.yml +4 -4
  52. data/{lib → gem}/locales/sv.yml +4 -4
  53. data/{lib → gem}/locales/sw.yml +4 -4
  54. data/{lib → gem}/locales/ta.yml +4 -4
  55. data/{lib → gem}/locales/tr.yml +4 -4
  56. data/{lib → gem}/locales/uk.yml +4 -4
  57. data/{lib → gem}/locales/vi.yml +4 -4
  58. data/{lib → gem}/locales/zh-CN.yml +4 -4
  59. data/{lib → gem}/locales/zh-HK.yml +4 -4
  60. data/{lib → gem}/locales/zh-TW.yml +4 -4
  61. data/{lib → gem}/stylesheets/pagy.css +19 -34
  62. data/{lib → gem}/stylesheets/pagy.scss +17 -19
  63. data/gem/stylesheets/pagy.tailwind.css +21 -0
  64. metadata +103 -90
  65. data/lib/javascripts/pagy.js +0 -1
  66. data/lib/locales/ckb.yml +0 -18
  67. data/lib/pagy/extras/bootstrap.rb +0 -108
  68. data/lib/pagy/extras/bulma.rb +0 -105
  69. data/lib/pagy/extras/foundation.rb +0 -105
  70. data/lib/pagy/extras/materialize.rb +0 -96
  71. data/lib/pagy/extras/navs.rb +0 -51
  72. data/lib/pagy/extras/semantic.rb +0 -95
  73. data/lib/pagy/extras/support.rb +0 -40
  74. data/lib/pagy/extras/trim.rb +0 -29
  75. data/lib/pagy/extras/uikit.rb +0 -97
  76. data/lib/pagy/frontend.rb +0 -114
  77. data/lib/stylesheets/pagy.tailwind.scss +0 -24
  78. /data/{lib → gem}/javascripts/pagy-module.d.ts +0 -0
  79. /data/{lib → gem/lib}/pagy/backend.rb +0 -0
  80. /data/{lib → gem/lib}/pagy/calendar/day.rb +0 -0
  81. /data/{lib → gem/lib}/pagy/calendar/helper.rb +0 -0
  82. /data/{lib → gem/lib}/pagy/calendar/month.rb +0 -0
  83. /data/{lib → gem/lib}/pagy/calendar/quarter.rb +0 -0
  84. /data/{lib → gem/lib}/pagy/calendar/week.rb +0 -0
  85. /data/{lib → gem/lib}/pagy/calendar/year.rb +0 -0
  86. /data/{lib → gem/lib}/pagy/calendar.rb +0 -0
  87. /data/{lib → gem/lib}/pagy/console.rb +0 -0
  88. /data/{lib → gem/lib}/pagy/countless.rb +0 -0
  89. /data/{lib → gem/lib}/pagy/exceptions.rb +0 -0
  90. /data/{lib → gem/lib}/pagy/extras/arel.rb +0 -0
  91. /data/{lib → gem/lib}/pagy/extras/array.rb +0 -0
  92. /data/{lib → gem/lib}/pagy/extras/calendar.rb +0 -0
  93. /data/{lib → gem/lib}/pagy/extras/countless.rb +0 -0
  94. /data/{lib → gem/lib}/pagy/extras/elasticsearch_rails.rb +0 -0
  95. /data/{lib → gem/lib}/pagy/extras/gearbox.rb +0 -0
  96. /data/{lib → gem/lib}/pagy/extras/headers.rb +0 -0
  97. /data/{lib → gem/lib}/pagy/extras/i18n.rb +0 -0
  98. /data/{lib → gem/lib}/pagy/extras/jsonapi.rb +0 -0
  99. /data/{lib → gem/lib}/pagy/extras/meilisearch.rb +0 -0
  100. /data/{lib → gem/lib}/pagy/extras/metadata.rb +0 -0
  101. /data/{lib → gem/lib}/pagy/extras/overflow.rb +0 -0
  102. /data/{lib → gem/lib}/pagy/extras/searchkick.rb +0 -0
  103. /data/{lib → gem/lib}/pagy/extras/standalone.rb +0 -0
  104. /data/{lib → gem/lib}/pagy/i18n.rb +0 -0
@@ -1,105 +0,0 @@
1
- # See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/bulma
2
- # frozen_string_literal: true
3
-
4
- require 'pagy/extras/frontend_helpers'
5
-
6
- class Pagy # :nodoc:
7
- DEFAULT[:bulma_nav_classes] = 'is-centered'
8
-
9
- # Frontend modules are specially optimized for performance.
10
- # The resulting code may not look very elegant, but produces the best benchmarks
11
- module BulmaExtra
12
- # Pagination for bulma: it returns the html with the series of links to the pages
13
- def pagy_bulma_nav(pagy, pagy_id: nil, link_extra: '',
14
- nav_aria_label: nil, nav_i18n_key: nil, **vars)
15
- p_id = %( id="#{pagy_id}") if pagy_id
16
- link = pagy_link_proc(pagy, link_extra:)
17
-
18
- html = +%(<nav#{p_id} class="pagy-bulma-nav pagination #{DEFAULT[:bulma_nav_classes]}" #{
19
- nav_aria_label_attr(pagy, nav_aria_label, nav_i18n_key)}>)
20
- html << bulma_prev_next_html(pagy, link)
21
- html << %(<ul class="pagination-list">)
22
- pagy.series(**vars).each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
23
- html << case item
24
- when Integer
25
- %(<li>#{link.call(item, pagy.label_for(item), %(class="pagination-link"))}</li>)
26
- when String
27
- %(<li><a role="link" class="pagination-link is-current" aria-current="page" aria-disabled="true">#{
28
- pagy.label_for(item)}</a></li>)
29
- when :gap
30
- %(<li><span class="pagination-ellipsis">#{pagy_t 'pagy.gap'}</span></li>)
31
- else raise InternalError, "expected item types in series to be Integer, String or :gap; got #{item.inspect}"
32
- end
33
- end
34
- html << %(</ul></nav>)
35
- end
36
-
37
- # Javascript pagination for bulma: it returns a nav and a JSON tag used by the Pagy.nav javascript
38
- def pagy_bulma_nav_js(pagy, pagy_id: nil, link_extra: '',
39
- nav_aria_label: nil, nav_i18n_key: nil, **vars)
40
- sequels = pagy.sequels(**vars)
41
- p_id = %( id="#{pagy_id}") if pagy_id
42
- link = pagy_link_proc(pagy, link_extra:)
43
- tags = { 'before' => %(#{bulma_prev_next_html(pagy, link)}<ul class="pagination-list">),
44
- 'link' => %(<li>#{link.call(PAGE_TOKEN, LABEL_TOKEN, %(class="pagination-link"))}</li>),
45
- 'active' => %(<li><a role="link" class="pagination-link is-current" aria-current="page" aria-disabled="true">#{
46
- LABEL_TOKEN}</a></li>),
47
- 'gap' => %(<li><span class="pagination-ellipsis">#{pagy_t 'pagy.gap'}</span></li>),
48
- 'after' => '</ul>' }
49
-
50
- %(<nav#{p_id} class="#{'pagy-rjs ' if sequels.size > 1}pagy-bulma-nav-js pagination #{DEFAULT[:bulma_nav_classes]}" #{
51
- nav_aria_label_attr(pagy, nav_aria_label, nav_i18n_key)}#{
52
- pagy_data(pagy, :nav, tags, sequels, pagy.label_sequels(sequels))}></nav>)
53
- end
54
-
55
- # Javascript combo pagination for bulma: it returns a nav and a JSON tag used by the pagy.js file
56
- def pagy_bulma_combo_nav_js(pagy, pagy_id: nil, link_extra: '',
57
- nav_aria_label: nil, nav_i18n_key: nil)
58
- p_id = %( id="#{pagy_id}") if pagy_id
59
- link = pagy_link_proc(pagy, link_extra:)
60
- p_page = pagy.page
61
- p_pages = pagy.pages
62
- input = %(<input name="page" class="input" type="number" min="1" max="#{p_pages}" value="#{
63
- p_page}" style="padding: 0; text-align: center; width: #{
64
- p_pages.to_s.length + 1}rem; margin:0 0.3rem;" aria-current="page">)
65
-
66
- html = %(<nav#{p_id} class="pagy-bulma-combo-nav-js #{DEFAULT[:bulma_nav_classes]}" #{
67
- nav_aria_label_attr(pagy, nav_aria_label, nav_i18n_key)} #{
68
- pagy_data(pagy, :combo, pagy_url_for(pagy, PAGE_TOKEN))}>)
69
- %(#{html}<div class="field is-grouped is-grouped-centered" role="group">#{
70
- if (p_prev = pagy.prev)
71
- %(<p class="control">#{link.call(p_prev, pagy_t('pagy.prev'), %(class="button" #{prev_aria_label_attr}))}</p>)
72
- else
73
- %(<p class="control"><a role="link" class="button" disabled aria-disabled="true" #{
74
- prev_aria_label_attr}>#{pagy_t 'pagy.prev'}</a></p>)
75
- end
76
- }<div class="pagy-combo-input control level is-mobile">#{
77
- pagy_t 'pagy.combo_nav_js', page_input: input, count: p_page, pages: p_pages}</div>#{
78
- if (p_next = pagy.next)
79
- %(<p class="control">#{link.call(p_next, pagy_t('pagy.next'), %(class="button" #{next_aria_label_attr}))}</p>)
80
- else
81
- %(<p class="control"><a role="link" class="button" disabled aria-disabled="true"#{
82
- next_aria_label_attr}>#{pagy_t 'pagy.next'}</a></p>)
83
- end
84
- }</div></nav>)
85
- end
86
-
87
- private
88
-
89
- def bulma_prev_next_html(pagy, link)
90
- html = +if (p_prev = pagy.prev)
91
- link.call(p_prev, pagy_t('pagy.prev'), %(#{prev_aria_label_attr} class="pagination-previous"))
92
- else
93
- %(<a role="link" class="pagination-previous" disabled aria-disabled="true" #{
94
- prev_aria_label_attr}>#{pagy_t 'pagy.prev'}</a>)
95
- end
96
- html << if (p_next = pagy.next)
97
- link.call(p_next, pagy_t('pagy.next'), %(#{next_aria_label_attr} class="pagination-next"))
98
- else
99
- %(<a role="link" class="pagination-next" disabled aria-disabled="true" #{
100
- next_aria_label_attr}>#{pagy_t('pagy.next')}</a>)
101
- end
102
- end
103
- end
104
- Frontend.prepend BulmaExtra
105
- end
@@ -1,105 +0,0 @@
1
- # See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/foundation
2
- # frozen_string_literal: true
3
-
4
- require 'pagy/extras/frontend_helpers'
5
-
6
- class Pagy # :nodoc:
7
- # Frontend modules are specially optimized for performance.
8
- # The resulting code may not look very elegant, but produces the best benchmarks
9
- module FoundationExtra
10
- # Pagination for Foundation: it returns the html with the series of links to the pages
11
- def pagy_foundation_nav(pagy, pagy_id: nil, link_extra: '',
12
- nav_aria_label: nil, nav_i18n_key: nil, **vars)
13
- p_id = %( id="#{pagy_id}") if pagy_id
14
- link = pagy_link_proc(pagy, link_extra:)
15
-
16
- html = +%(<nav#{p_id} class="pagy-foundation-nav" #{
17
- nav_aria_label_attr(pagy, nav_aria_label, nav_i18n_key)}><ul class="pagination">)
18
- html << foundation_prev_html(pagy, link)
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
- %(<li>#{link.call item}</li>)
23
- when String
24
- %(<li class="current" role="link" aria-current="page" aria-disabled="true">#{pagy.label_for(item)}</li>)
25
- when :gap
26
- %(<li class="ellipsis gap"></li>)
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 << pagy_foundation_next_html(pagy, link)
32
- html << %(</ul></nav>)
33
- end
34
-
35
- # Javascript pagination for foundation: it returns a nav and a JSON tag used by the pagy.js file
36
- def pagy_foundation_nav_js(pagy, pagy_id: nil, link_extra: '',
37
- nav_aria_label: nil, nav_i18n_key: nil, **vars)
38
- sequels = pagy.sequels(**vars)
39
- p_id = %( id="#{pagy_id}") if pagy_id
40
- link = pagy_link_proc(pagy, link_extra:)
41
- tags = { 'before' => %(<ul class="pagination">#{foundation_prev_html pagy, link}),
42
- 'link' => %(<li>#{link.call(PAGE_TOKEN, LABEL_TOKEN)}</li>),
43
- 'active' => %(<li class="current" role="link" aria-current="page" aria-disabled="true">#{LABEL_TOKEN}</li>),
44
- 'gap' => %(<li class="ellipsis gap"></li>),
45
- 'after' => %(#{pagy_foundation_next_html pagy, link}</ul>) }
46
-
47
- %(<nav#{p_id} class="#{'pagy-rjs ' if sequels.size > 1}pagy-foundation-nav-js" #{
48
- nav_aria_label_attr(pagy, nav_aria_label, nav_i18n_key)} #{
49
- pagy_data(pagy, :nav, tags, sequels, pagy.label_sequels(sequels))}></nav>)
50
- end
51
-
52
- # Javascript combo pagination for Foundation: it returns a nav and a JSON tag used by the pagy.js file
53
- def pagy_foundation_combo_nav_js(pagy, pagy_id: nil, link_extra: '',
54
- nav_aria_label: nil, nav_i18n_key: nil)
55
- p_id = %( id="#{pagy_id}") if pagy_id
56
- link = pagy_link_proc(pagy, link_extra:)
57
- p_page = pagy.page
58
- p_pages = pagy.pages
59
- input = %(<input name="page" class="input-group-field cell shrink" type="number" min="1" max="#{
60
- p_pages}" value="#{p_page}" style="width: #{
61
- p_pages.to_s.length + 1}rem; padding: 0 0.3rem; margin: 0 0.3rem;" aria-current="page">)
62
-
63
- %(<nav#{p_id} class="pagy-foundation-combo-nav-js" #{
64
- nav_aria_label_attr(pagy, nav_aria_label, nav_i18n_key)} #{
65
- pagy_data(pagy, :combo, pagy_url_for(pagy, PAGE_TOKEN))}><div class="input-group">#{
66
- if (p_prev = pagy.prev)
67
- link.call(p_prev, pagy_t('pagy.prev'),
68
- %(style="margin-bottom: 0" class="prev button primary" #{prev_aria_label_attr}))
69
- else
70
- %(<a style="margin-bottom: 0" class="prev button primary disabled" role="link" aria-disabled="true" #{
71
- prev_aria_label_attr}>#{pagy_t('pagy.prev')}</a>)
72
- end
73
- }#{
74
- pagy_t('pagy.combo_nav_js', page_input: input, count: p_page, pages: p_pages)
75
- .sub!('<label>', '<label class="input-group-label">')}#{ # add the class to the official dictionary string
76
- if (p_next = pagy.next)
77
- link.call(p_next, pagy_t('pagy.next'),
78
- %(style="margin-bottom: 0" class="next button primary" #{next_aria_label_attr}))
79
- else
80
- %(<a style="margin-bottom: 0" class="next button primary disabled" role="link" aria-disabled="true" #{
81
- next_aria_label_attr}>#{pagy_t 'pagy.next'}</a>)
82
- end
83
- }</div></nav>)
84
- end
85
-
86
- private
87
-
88
- def foundation_prev_html(pagy, link)
89
- if (p_prev = pagy.prev)
90
- %(<li class="prev">#{link.call(p_prev, pagy_t('pagy.prev'), prev_aria_label_attr)}</li>)
91
- else
92
- %(<li class="prev disabled" role="link" aria-disabled="true" #{prev_aria_label_attr}>#{pagy_t('pagy.prev')}</li>)
93
- end
94
- end
95
-
96
- def pagy_foundation_next_html(pagy, link)
97
- if (p_next = pagy.next)
98
- %(<li class="next">#{link.call(p_next, pagy_t('pagy.next'), next_aria_label_attr)}</li>)
99
- else
100
- %(<li class="next disabled" role="link" aria-disabled="true" #{next_aria_label_attr}>#{pagy_t('pagy.next')}</li>)
101
- end
102
- end
103
- end
104
- Frontend.prepend FoundationExtra
105
- end
@@ -1,96 +0,0 @@
1
- # See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/materialize
2
- # frozen_string_literal: true
3
-
4
- require 'pagy/extras/frontend_helpers'
5
-
6
- class Pagy # :nodoc:
7
- # Frontend modules are specially optimized for performance.
8
- # The resulting code may not look very elegant, but produces the best benchmarks
9
- module MaterializeExtra
10
- # Pagination for materialize: it returns the html with the series of links to the pages
11
- def pagy_materialize_nav(pagy, pagy_id: nil, link_extra: '',
12
- nav_aria_label: nil, nav_i18n_key: nil, **vars)
13
- p_id = %( id="#{pagy_id}") if pagy_id
14
- link = pagy_link_proc(pagy, link_extra:)
15
-
16
- html = +%(<div#{p_id} class="pagy-materialize-nav pagination" role="navigation" #{
17
- nav_aria_label_attr(pagy, nav_aria_label, nav_i18n_key)}><ul class="pagination">)
18
- html << materialize_prev_html(pagy, link)
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
- %(<li class="waves-effect">#{link.call(item)}</li>)
23
- when String
24
- %(<li class="active"><a role="link" aria-current="page" aria-disabled="true">#{pagy.label_for(item)}</a></li>)
25
- when :gap
26
- %(<li class="gap disabled"><a role="link" aria-disabled="true">#{pagy_t 'pagy.gap'}</a></li>)
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 << materialize_next_html(pagy, link)
32
- html << %(</ul></div>)
33
- end
34
-
35
- # Javascript pagination for materialize: it returns a nav and a JSON tag used by the pagy.js file
36
- def pagy_materialize_nav_js(pagy, pagy_id: nil, link_extra: '',
37
- nav_aria_label: nil, nav_i18n_key: nil, **vars)
38
- sequels = pagy.sequels(**vars)
39
- p_id = %( id="#{pagy_id}") if pagy_id
40
- link = pagy_link_proc(pagy, link_extra:)
41
-
42
- tags = { 'before' => %(<ul class="pagination">#{materialize_prev_html pagy, link}),
43
- 'link' => %(<li class="waves-effect">#{link.call(PAGE_TOKEN, LABEL_TOKEN)}</li>),
44
- 'active' => %(<li class="active"><a role="link" aria-current="page" aria-disabled="true">#{LABEL_TOKEN}</a></li>),
45
- 'gap' => %(<li class="gap disabled"><a role="link" aria-disabled="true">#{pagy_t 'pagy.gap'}</a></li>),
46
- 'after' => %(#{materialize_next_html pagy, link}</ul>) }
47
-
48
- %(<div#{p_id} class="#{'pagy-rjs ' if sequels.size > 1}pagy-materialize-nav-js" role="navigation" #{
49
- nav_aria_label_attr(pagy, nav_aria_label, nav_i18n_key)} #{
50
- pagy_data(pagy, :nav, tags, sequels, pagy.label_sequels(sequels))}></div>)
51
- end
52
-
53
- # Javascript combo pagination for materialize: it returns a nav and a JSON tag used by the pagy.js file
54
- def pagy_materialize_combo_nav_js(pagy, pagy_id: nil, link_extra: '',
55
- nav_aria_label: nil, nav_i18n_key: nil)
56
- p_id = %( id="#{pagy_id}") if pagy_id
57
- link = pagy_link_proc(pagy, link_extra:)
58
- p_page = pagy.page
59
- p_pages = pagy.pages
60
- style = ' style="vertical-align: middle"'
61
- input = %(<input name="page" type="number" class="browser-default" min="1" max="#{p_pages}" value="#{
62
- p_page}" style="text-align: center; width: #{p_pages.to_s.length + 1}rem;" aria-current="page">)
63
-
64
- html = %(<ul#{p_id} class="pagy-materialize-combo-nav-js pagination chip" role="navigation" #{
65
- nav_aria_label_attr(pagy, nav_aria_label, nav_i18n_key)})
66
- %(#{html} style="padding-right: 0" #{
67
- pagy_data(pagy, :combo, pagy_url_for(pagy, PAGE_TOKEN))}>#{
68
- materialize_prev_html pagy, link, style}<li class="pagy-combo-input">#{
69
- pagy_t 'pagy.combo_nav_js', page_input: input, count: p_page, pages: p_pages}</li>#{
70
- materialize_next_html pagy, link, style}</ul>)
71
- end
72
-
73
- private
74
-
75
- def materialize_prev_html(pagy, link, style = '')
76
- if (p_prev = pagy.prev)
77
- %(<li class="waves-effect prev"#{style}>#{
78
- link.call(p_prev, '<i class="material-icons">chevron_left</i>', prev_aria_label_attr)}</li>)
79
- else
80
- %(<li class="prev disabled"#{style}><a role="link" aria-disabled="true" #{
81
- prev_aria_label_attr}><i class="material-icons">chevron_left</i></a></li>)
82
- end
83
- end
84
-
85
- def materialize_next_html(pagy, link, style = '')
86
- if (p_next = pagy.next)
87
- %(<li class="waves-effect next"#{style}>#{
88
- link.call(p_next, '<i class="material-icons">chevron_right</i>', next_aria_label_attr)}</li>)
89
- else
90
- %(<li class="next disabled"#{style}><a role="link" aria-disabled="true" #{
91
- next_aria_label_attr}><i class="material-icons">chevron_right</i></a></li>)
92
- end
93
- end
94
- end
95
- Frontend.prepend MaterializeExtra
96
- end
@@ -1,51 +0,0 @@
1
- # See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/navs
2
- # frozen_string_literal: true
3
-
4
- require 'pagy/extras/frontend_helpers'
5
-
6
- class Pagy # :nodoc:
7
- # Frontend modules are specially optimized for performance.
8
- # The resulting code may not look very elegant, but produces the best benchmarks
9
- module NavsExtra
10
- # Javascript pagination: it returns a nav and a JSON tag used by the pagy.js file
11
- def pagy_nav_js(pagy, pagy_id: nil, link_extra: '',
12
- nav_aria_label: nil, nav_i18n_key: nil, **vars)
13
- sequels = pagy.sequels(**vars)
14
- p_id = %( id="#{pagy_id}") if pagy_id
15
- link = pagy_link_proc(pagy, link_extra:)
16
- tags = { 'before' => prev_html(pagy, link),
17
- 'link' => %(<span class="page">#{link.call(PAGE_TOKEN, LABEL_TOKEN)}</span>),
18
- 'active' => %(<span class="page active">) +
19
- %(<a role="link" aria-current="page" aria-disabled="true">#{LABEL_TOKEN}</a></span>),
20
- 'gap' => %(<span class="page gap">#{pagy_t 'pagy.gap'}</span>),
21
- 'after' => next_html(pagy, link) }
22
-
23
- %(<nav#{p_id} class="#{'pagy-rjs ' if sequels.size > 1}pagy pagy-nav-js pagination" #{
24
- nav_aria_label_attr(pagy, nav_aria_label, nav_i18n_key)} #{
25
- pagy_data(pagy, :nav, tags, sequels, pagy.label_sequels(sequels))
26
- }></nav>)
27
- end
28
-
29
- # Javascript combo pagination: it returns a nav and a JSON tag used by the pagy.js file
30
- def pagy_combo_nav_js(pagy, pagy_id: nil, link_extra: '',
31
- nav_aria_label: nil, nav_i18n_key: nil)
32
- p_id = %( id="#{pagy_id}") if pagy_id
33
- link = pagy_link_proc(pagy, link_extra:)
34
- p_page = pagy.page
35
- p_pages = pagy.pages
36
- input = %(<input name="page" type="number" min="1" max="#{p_pages}" value="#{p_page}" ) +
37
- %(style="padding: 0; text-align: center; width: #{p_pages.to_s.length + 1}rem;" aria-current="page">)
38
-
39
- %(<nav#{p_id} class="pagy pagy-combo-nav-js pagination" #{
40
- nav_aria_label_attr(pagy, nav_aria_label, nav_i18n_key)} #{
41
- pagy_data(pagy, :combo, pagy_url_for(pagy, PAGE_TOKEN))}>#{
42
- prev_html(pagy, link)
43
- }<span class="pagy-combo-input">#{
44
- pagy_t('pagy.combo_nav_js', page_input: input, count: p_page, pages: p_pages)
45
- }</span>#{
46
- next_html(pagy, link)
47
- }</nav>)
48
- end
49
- end
50
- Frontend.prepend NavsExtra
51
- end
@@ -1,95 +0,0 @@
1
- # See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/semantic
2
- # frozen_string_literal: true
3
-
4
- require 'pagy/extras/frontend_helpers'
5
-
6
- class Pagy # :nodoc:
7
- # Frontend modules are specially optimized for performance.
8
- # The resulting code may not look very elegant, but produces the best benchmarks
9
- module SemanticExtra
10
- # Pagination for semantic: it returns the html with the series of links to the pages
11
- def pagy_semantic_nav(pagy, pagy_id: nil, link_extra: '',
12
- nav_aria_label: nil, nav_i18n_key: nil, **vars)
13
- p_id = %( id="#{pagy_id}") if pagy_id
14
- link = pagy_link_proc(pagy, link_extra:)
15
-
16
- html = +%(<div#{p_id} role="navigation" class="pagy-semantic-nav ui pagination menu" #{
17
- nav_aria_label_attr(pagy, nav_aria_label, nav_i18n_key)}>)
18
- html << semantic_prev_html(pagy, link)
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
- link.call(item, pagy.label_for(item), %(class="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, link)
32
- html << %(</div>)
33
- end
34
-
35
- # Javascript pagination for semantic: it returns a nav and a JSON tag used by the pagy.js file
36
- def pagy_semantic_nav_js(pagy, pagy_id: nil, link_extra: '',
37
- nav_aria_label: nil, nav_i18n_key: nil, **vars)
38
- sequels = pagy.sequels(**vars)
39
- p_id = %( id="#{pagy_id}") if pagy_id
40
- link = pagy_link_proc(pagy, link_extra:)
41
- tags = { 'before' => semantic_prev_html(pagy, link),
42
- 'link' => link.call(PAGE_TOKEN, LABEL_TOKEN, %(class="item")),
43
- 'active' => %(<a role="link" class="item active" aria-current="page" aria-disabled="true">#{LABEL_TOKEN}</a>),
44
- 'gap' => %(<div class="disabled item">#{pagy_t('pagy.gap')}</div>),
45
- 'after' => semantic_next_html(pagy, link) }
46
-
47
- %(<div#{p_id} class="#{'pagy-rjs ' if sequels.size > 1}pagy-semantic-nav-js ui pagination menu" role="navigation" #{
48
- nav_aria_label_attr(pagy, nav_aria_label, nav_i18n_key)} #{
49
- pagy_data(pagy, :nav, tags, sequels, pagy.label_sequels(sequels))}></div>)
50
- end
51
-
52
- # Combo pagination for semantic: it returns a nav and a JSON tag used by the pagy.js file
53
- def pagy_semantic_combo_nav_js(pagy, pagy_id: nil, link_extra: '',
54
- nav_aria_label: nil, nav_i18n_key: nil)
55
- p_id = %( id="#{pagy_id}") if pagy_id
56
- link = pagy_link_proc(pagy, link_extra: %(class="item" #{link_extra}))
57
- p_page = pagy.page
58
- p_pages = pagy.pages
59
- input = %(<input name="page" type="number" min="1" max="#{p_pages}" value="#{
60
- p_page}" style="padding: 0; text-align: center; width: #{
61
- p_pages.to_s.length + 1}rem; margin: 0 0.3rem" aria-current="page">)
62
-
63
- %(<div#{p_id} class="pagy-semantic-combo-nav-js ui compact menu" role="navigation" #{
64
- nav_aria_label_attr(pagy, nav_aria_label, nav_i18n_key)} #{
65
- pagy_data(pagy, :combo, pagy_url_for(pagy, PAGE_TOKEN))}>#{
66
- semantic_prev_html pagy, link
67
- }<div class="pagy-combo-input item">#{
68
- pagy_t 'pagy.combo_nav_js', page_input: input, count: p_page, pages: p_pages
69
- }</div> #{
70
- semantic_next_html pagy, link
71
- }</div>)
72
- end
73
-
74
- private
75
-
76
- def semantic_prev_html(pagy, link)
77
- if (p_prev = pagy.prev)
78
- link.call(p_prev, pagy_t('pagy.prev'), %(#{prev_aria_label_attr} class="item"))
79
- else
80
- +%(<div class="item disabled" role="link" aria-disabled="true" #{
81
- prev_aria_label_attr}>#{pagy_t('pagy.prev')}</div>)
82
- end
83
- end
84
-
85
- def semantic_next_html(pagy, link)
86
- if (p_next = pagy.next)
87
- link.call(p_next, pagy_t('pagy.next'), %(#{next_aria_label_attr} class="item"))
88
- else
89
- +%(<div class="item disabled" role="link" aria-disabled="true" #{
90
- next_aria_label_attr}>#{pagy_t('pagy.next')}</div>)
91
- end
92
- end
93
- end
94
- Frontend.prepend SemanticExtra
95
- end
@@ -1,40 +0,0 @@
1
- # See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/support
2
- # frozen_string_literal: true
3
-
4
- class Pagy # :nodoc:
5
- # Extra support for features like: incremental, auto-incremental and infinite pagination
6
- module SupportExtra
7
- # Return the previous page URL string or nil
8
- def pagy_prev_url(pagy, absolute: false)
9
- pagy_url_for(pagy, pagy.prev, absolute:) if pagy.prev
10
- end
11
-
12
- # Return the next page URL string or nil
13
- def pagy_next_url(pagy, absolute: false)
14
- pagy_url_for(pagy, pagy.next, absolute:) if pagy.next
15
- end
16
-
17
- # Return the HTML string for the enabled/disabled previous page link
18
- def pagy_prev_html(pagy, text: pagy_t('pagy.prev'), link_extra: '')
19
- link = pagy_link_proc(pagy, link_extra:)
20
- prev_html(pagy, link, text:)
21
- end
22
-
23
- # Return the HTML string for the enabled/disabled next page link
24
- def pagy_next_html(pagy, text: pagy_t('pagy.next'), link_extra: '')
25
- link = pagy_link_proc(pagy, link_extra:)
26
- next_html(pagy, link, text:)
27
- end
28
-
29
- # Conditionally return the HTML link tag string for the previous page
30
- def pagy_prev_link_tag(pagy, absolute: false)
31
- %(<link href="#{pagy_url_for(pagy, pagy.prev, absolute:)}" rel="prev"/>) if pagy.prev
32
- end
33
-
34
- # Conditionally return the HTML link tag string for the next page
35
- def pagy_next_link_tag(pagy, absolute: false)
36
- %(<link href="#{pagy_url_for(pagy, pagy.next, absolute:)}" rel="next"/>) if pagy.next
37
- end
38
- end
39
- Frontend.prepend SupportExtra
40
- end
@@ -1,29 +0,0 @@
1
- # See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/trim
2
- # frozen_string_literal: true
3
-
4
- class Pagy # :nodoc:
5
- DEFAULT[:trim_extra] = true # extra enabled by default
6
-
7
- # Remove the page=1 param from the first page link
8
- module TrimExtra
9
- # Override the original pagy_link_proc.
10
- # Call the pagy_trim method if the trim_extra is enabled.
11
- def pagy_link_proc(pagy, link_extra: '')
12
- link_proc = super(pagy, link_extra:)
13
- return link_proc unless pagy.vars[:trim_extra]
14
-
15
- lambda do |page, text = pagy.label_for(page), extra = ''|
16
- link = +link_proc.call(page, text, extra)
17
- return link unless page.to_s == '1'
18
-
19
- pagy_trim(pagy, link)
20
- end
21
- end
22
-
23
- # Remove the the :page_param param from the first page link
24
- def pagy_trim(pagy, link)
25
- link.sub!(/[?&]#{pagy.vars[:page_param]}=1\b(?!&)|\b#{pagy.vars[:page_param]}=1&/, '')
26
- end
27
- end
28
- Frontend.prepend TrimExtra
29
- end
@@ -1,97 +0,0 @@
1
- # See the Pagy documentation: https://ddnexus.github.io/pagy/docs/extras/uikit
2
- # frozen_string_literal: true
3
-
4
- require 'pagy/extras/frontend_helpers'
5
-
6
- class Pagy # :nodoc:
7
- # Frontend modules are specially optimized for performance.
8
- # The resulting code may not look very elegant, but produces the best benchmarks
9
- module UikitExtra
10
- # Pagination for uikit: it returns the html with the series of links to the pages
11
- def pagy_uikit_nav(pagy, pagy_id: nil, link_extra: '',
12
- nav_aria_label: nil, nav_i18n_key: nil, **vars)
13
- p_id = %( id="#{pagy_id}") if pagy_id
14
- link = pagy_link_proc(pagy, link_extra:)
15
-
16
- html = +%(<ul#{p_id} class="pagy-uikit-nav uk-pagination uk-flex-center" role="navigation" #{
17
-
18
- nav_aria_label_attr(pagy, nav_aria_label, nav_i18n_key)}>#{uikit_prev_html(pagy, link)})
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
- %(<li>#{link.call(item)}</li>)
23
- when String
24
- %(<li class="uk-active"><span role="link" aria-current="page" aria-disabled="true">#{
25
- pagy.label_for(item)}</span></li>)
26
- when :gap
27
- %(<li class="uk-disabled"><span>#{pagy_t 'pagy.gap'}</span></li>)
28
- else
29
- raise InternalError, "expected item types in series to be Integer, String or :gap; got #{item.inspect}"
30
- end
31
- end
32
- html << uikit_next_html(pagy, link)
33
- html << %(</ul>)
34
- end
35
-
36
- # Javascript pagination for uikit: it returns a nav and a JSON tag used by the pagy.js file
37
- def pagy_uikit_nav_js(pagy, pagy_id: nil, link_extra: '',
38
- nav_aria_label: nil, nav_i18n_key: nil, **vars)
39
- sequels = pagy.sequels(**vars)
40
- p_id = %( id="#{pagy_id}") if pagy_id
41
- link = pagy_link_proc(pagy, link_extra:)
42
- tags = { 'before' => uikit_prev_html(pagy, link),
43
- 'link' => %(<li>#{link.call(PAGE_TOKEN, LABEL_TOKEN)}</li>),
44
- 'active' => %(<li class="uk-active"><span role="link" aria-current="page" aria-disabled="true">#{
45
- LABEL_TOKEN}</span></li>),
46
- 'gap' => %(<li class="uk-disabled"><span>#{pagy_t 'pagy.gap'}</span></li>),
47
- 'after' => uikit_next_html(pagy, link) }
48
-
49
- %(<ul#{p_id} class="#{'pagy-rjs ' if sequels.size > 1}pagy-uikit-nav-js uk-pagination uk-flex-center" role="navigation" #{
50
- nav_aria_label_attr(pagy, nav_aria_label, nav_i18n_key)} #{
51
- pagy_data(pagy, :nav, tags, sequels, pagy.label_sequels(sequels))}></ul>)
52
- end
53
-
54
- # Javascript combo pagination for uikit: it returns a nav and a JSON tag used by the pagy.js file
55
- def pagy_uikit_combo_nav_js(pagy, pagy_id: nil, link_extra: '',
56
- nav_aria_label: nil, nav_i18n_key: nil)
57
- p_id = %( id="#{pagy_id}") if pagy_id
58
- link = pagy_link_proc(pagy, link_extra:)
59
- p_page = pagy.page
60
- p_pages = pagy.pages
61
- input = %(<input name="page" type="number" min="1" max="#{p_pages}" value="#{
62
- p_page}" style="text-align: center; width: #{p_pages.to_s.length + 1}rem;" aria-current="page">)
63
-
64
- %(<ul#{p_id} class="pagy-uikit-combo-nav-js uk-button-group uk-pagination uk-flex-center" role="navigation" #{
65
- nav_aria_label_attr(pagy, nav_aria_label, nav_i18n_key)} #{
66
- pagy_data(pagy, :combo, pagy_url_for(pagy, PAGE_TOKEN))
67
- }>#{
68
- uikit_prev_html pagy, link
69
- }<li>#{
70
- pagy_t 'pagy.combo_nav_js', page_input: input, count: p_page, pages: p_pages
71
- }</li>#{
72
- uikit_next_html pagy, link
73
- }</ul>)
74
- end
75
-
76
- private
77
-
78
- def uikit_prev_html(pagy, link)
79
- previous_span = %(<span uk-pagination-previous></span>)
80
- if (p_prev = pagy.prev)
81
- %(<li>#{link.call(p_prev, previous_span, prev_aria_label_attr)}</li>)
82
- else
83
- %(<li class="uk-disabled"><span role="link" aria-disabled="true" #{prev_aria_label_attr}>#{previous_span}</a></li>)
84
- end
85
- end
86
-
87
- def uikit_next_html(pagy, link)
88
- next_span = %(<span uk-pagination-next></span>)
89
- if (p_next = pagy.next)
90
- %(<li>#{link.call(p_next, next_span, next_aria_label_attr)}</li>)
91
- else
92
- %(<li class="uk-disabled"><span role="link" aria-disabled="true" #{prev_aria_label_attr}>#{next_span}</span></li>)
93
- end
94
- end
95
- end
96
- Frontend.include UikitExtra
97
- end