pagy 0.13.1 → 0.14.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ab89e95c75050f7175f135b284ebd2eed4b0f781ec20fa789a2eceb90e6d42ab
4
- data.tar.gz: 197af0bd45ea2c70ebf5bf9f9718f6fcceacacd8d1849bf6b1e74aa6b506d278
3
+ metadata.gz: 3ea9f5556f76cbbc137144639af45e161a9caf36bde512201911ed04103c7707
4
+ data.tar.gz: c3a0337dd4d124275e33bab79e2ff30d0f7a56a6a715a602dfc06deef88dda86
5
5
  SHA512:
6
- metadata.gz: aee8ad4bfc15d270c6a81a9362d331464a5fe00c18e99fd8a3f0647fa67762e6bb8abaf269c90b1cfea8130ca1097c3747ced0341a99983ab7b70a06650ed1ca
7
- data.tar.gz: ccd69594044e5e024a9f8151cbe440071c5aaf9021ef6e168a1d1e3d00537d3b53ab2b2bf9168285e273965141860cb8262dd4b4248231f2387de33e6df1b0b4
6
+ metadata.gz: b8be1f7f3369f8ce276d04bf67436e3bd40c3a1f788720f04a9928da63a60a4157fea59344c5bebabb6f7303f8a45d094aa6993c7b87bc1534ac219fa4efa6f0
7
+ data.tar.gz: e676ffa46c89159efe7272b4250e3819762355b3c45e73f4a1ad5e6d378697bfe5048ec27c2fef2a19dd597fd288d3bf7b453c19839c00f8fd4cdfd37eeea87a
data/lib/pagy.rb CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  require 'pathname'
5
5
 
6
- class Pagy ; VERSION = '0.13.1'
6
+ class Pagy ; VERSION = '0.14.0'
7
7
 
8
8
  class OutOfRangeError < StandardError; attr_reader :pagy; def initialize(pagy) @pagy = pagy end; end
9
9
 
@@ -55,5 +55,24 @@ class Pagy
55
55
  html << %(</div></nav><script type="application/json" class="pagy-compact-json">["#{id}", "#{MARKER}", "#{p_page}"]</script>)
56
56
  end
57
57
 
58
+ # Compact pagination for materialize: it returns the html with the series of links to the pages
59
+ # we use a numeric input tag to set the page and the Pagy.compact javascript to navigate
60
+ def pagy_nav_compact_materialize(pagy, id=caller(1,1)[0].hash)
61
+ html, link, p_prev, p_next, p_page, p_pages = +'', pagy_link_proc(pagy), pagy.prev, pagy.next, pagy.page, pagy.pages
62
+
63
+ html << %(<div id="pagy-nav-#{id}" class="pagy-nav-compact-materialize pagination" role="navigation" aria-label="pager">)
64
+ html << link.call(MARKER, '', %(style="display: none;" ))
65
+ html << %(<div class="pagy-compact-chip role="group" style="height: 35px; border-radius: 18px; background: #e4e4e4; display: inline-block;">)
66
+ html << '<ul class="pagination" style="margin: 0px;">'
67
+ li_style = 'style="vertical-align: middle;"'
68
+ html << (p_prev ? %(<li class="waves-effect prev" #{li_style}>#{link.call p_prev, '<i class="material-icons">chevron_left</i>', 'aria-label="previous"'}</li>)
69
+ : %(<li class="prev disabled" #{li_style}><a href="#"><i class="material-icons">chevron_left</i></a></li>))
70
+ input = %(<input type="number" class="browser-default" min="1" max="#{p_pages}" value="#{p_page}" style="padding: 2px; border: none; border-radius: 2px; text-align: center; width: #{p_pages.to_s.length+1}rem;">)
71
+ html << %(<div class="pagy-compact-input btn-flat" style="cursor: default; padding: 0px">#{pagy_t('pagy.compact.page')} #{input} #{pagy_t('pagy.compact.of')} #{p_pages}</div>)
72
+ html << (p_next ? %(<li class="waves-effect next" #{li_style}>#{link.call p_next, '<i class="material-icons">chevron_right</i>', 'aria-label="next"'}</li>)
73
+ : %(<li class="next disabled" #{li_style}><a href="#"><i class="material-icons">chevron_right</i></a></li>))
74
+ html << %(</ul></div><script type="application/json" class="pagy-compact-json">["#{id}", "#{MARKER}", "#{p_page}"]</script>)
75
+ end
76
+
58
77
  end
59
78
  end
@@ -21,17 +21,21 @@
21
21
  # See https://ddnexus.github.io/pagy/extras/compact
22
22
  # require 'pagy/extras/compact'
23
23
 
24
- # Items: Handle the page :items passed with the params
24
+ # Items: Allow the client to request a custom number of items per page with a ready to use selector UI
25
25
  # See https://ddnexus.github.io/pagy/extras/items
26
26
  # require 'pagy/extras/items'
27
27
  # Pagy::VARS[:items_param] = :items # default
28
28
  # Pagy::VARS[:max_items] = 100 # default
29
29
 
30
+ # Materialize: Nav helper for Materialize pagination
31
+ # See https://ddnexus.github.io/pagy/extras/materialize
32
+ # require 'pagy/extras/materialize'
33
+
30
34
  # Out Of Range: Allow for easy handling of out of range pages
31
35
  # See https://ddnexus.github.io/pagy/extras/out_of_range
32
- # Pagy::VARS[:out_of_range_mode] = :last_page # default (other options :empty_page and :exception )
36
+ # Pagy::VARS[:out_of_range_mode] = :last_page # default (other options: :empty_page and :exception)
33
37
 
34
- # Responsive: On resize, the number of page links will adapt in real-time to the available window or container width
38
+ # Responsive: On resize, the number of page links will adapt in real-time to the available window/container width
35
39
  # See https://ddnexus.github.io/pagy/extras/responsive
36
40
  # require 'pagy/extras/responsive'
37
41
  # See https://ddnexus.github.io/pagy/extras/responsive#breakpoints
@@ -0,0 +1,25 @@
1
+ # See the Pagy documentation: https://ddnexus.github.io/pagy/extras/materialize
2
+ # frozen_string_literal: true
3
+
4
+ class Pagy
5
+ # Add nav helper for materialize pagination
6
+ module Frontend
7
+
8
+ # Pagination for materialize: it returns the html with the series of links to the pages
9
+ def pagy_nav_materialize(pagy)
10
+ html, link, p_prev, p_next = +'', pagy_link_proc(pagy), pagy.prev, pagy.next
11
+ html << (p_prev ? %(<li class="waves-effect prev">#{link.call p_prev, '<i class="material-icons">chevron_left</i>', 'aria-label="previous"'}</li>)
12
+ : %(<li class="prev disabled"><a href="#"><i class="material-icons">chevron_left</i></a></li>))
13
+ pagy.series.each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
14
+ html << if item.is_a?(Integer); %(<li class="waves-effect">#{link.call item}</li>) # page link
15
+ elsif item.is_a?(String) ; %(<li class="active">#{link.call item}</li>) # active page
16
+ elsif item == :gap ; %(<li class="gap disabled"><a href="#">#{pagy_t('pagy.nav.gap')}</a></li>) # page gap
17
+ end
18
+ end
19
+ html << (p_next ? %(<li class="waves-effect next">#{link.call p_next, '<i class="material-icons">chevron_right</i>', 'aria-label="next"'}</li>)
20
+ : %(<li class="next disabled"><a href="#"><i class="material-icons">chevron_right</i></a></li>))
21
+ %(<div class="pagy-nav-materialize pagination" role="navigation" aria-label="pager"><ul class="pagination">#{html}</ul></div>)
22
+ end
23
+
24
+ end
25
+ end
@@ -1,3 +1,6 @@
1
+ # See the Pagy documentation: https://ddnexus.github.io/pagy/extras/out_of_range
2
+ # frozen_string_literal: true
3
+
1
4
  class Pagy
2
5
 
3
6
  VARS[:out_of_range_mode] = :last_page
@@ -92,5 +92,26 @@ class Pagy
92
92
  %(<nav id="pagy-nav-#{id}" class="pagy-nav-bulma pagination is-centered" role="navigation" aria-label="pagination"></nav>#{script})
93
93
  end
94
94
 
95
+ # Responsive pagination for Materialize: it returns the html with the series of links to the pages
96
+ # rendered by the Pagy.responsive javascript
97
+ def pagy_nav_responsive_materialize(pagy, id=caller(1,1)[0].hash)
98
+ tags, link, p_prev, p_next, responsive = {}, pagy_link_proc(pagy), pagy.prev, pagy.next, pagy.responsive
99
+
100
+ tags['before'] = +'<ul class="pagination">'
101
+ tags['before'] << (p_prev ? %(<li class="waves-effect prev">#{link.call p_prev, '<i class="material-icons">chevron_left</i>', 'aria-label="previous"'}</li>)
102
+ : %(<li class="prev disabled"><a href="#"><i class="material-icons">chevron_left</i></a></li>))
103
+ responsive[:items].each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
104
+ tags[item.to_s] = if item.is_a?(Integer); %(<li class="waves-effect">#{link.call item}</li>) # page link
105
+ elsif item.is_a?(String) ; %(<li class="active">#{link.call item}</li>) # active page
106
+ elsif item == :gap ; %(<li class="gap disabled"><a href="#">#{pagy_t('pagy.nav.gap')}</a></li>) # page gap
107
+ end
108
+ end
109
+ tags['after'] = +(p_next ? %(<li class="waves-effect next">#{link.call p_next, '<i class="material-icons">chevron_right</i>', 'aria-label="next"'}</li>)
110
+ : %(<li class="next disabled"><a href="#"><i class="material-icons">chevron_right</i></a></li>))
111
+ tags['after'] << '</ul>'
112
+ script = %(<script type="application/json" class="pagy-responsive-json">["#{id}", #{tags.to_json}, #{responsive[:widths].to_json}, #{responsive[:series].to_json}]</script>)
113
+ %(<div id="pagy-nav-#{id}" class="pagy-nav-responsive-materialize pagination" role="navigation" aria-label="pager"></div>#{script})
114
+ end
115
+
95
116
  end
96
117
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pagy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.1
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Domizio Demichelis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-14 00:00:00.000000000 Z
11
+ date: 2018-07-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: 'Agnostic pagination in plain ruby: it works with any framework, ORM
14
14
  and DB type, with all kinds of collections, even pre-paginated, scopes, Arrays,
@@ -33,6 +33,7 @@ files:
33
33
  - lib/pagy/extras/initializer_example.rb
34
34
  - lib/pagy/extras/items.rb
35
35
  - lib/pagy/extras/javascripts/pagy.js
36
+ - lib/pagy/extras/materialize.rb
36
37
  - lib/pagy/extras/out_of_range.rb
37
38
  - lib/pagy/extras/responsive.rb
38
39
  - lib/pagy/extras/templates/nav.html.erb