pagy 0.8.5 → 0.8.6

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: 3fc9db27e943b125adb609fb4423f98e52361825f6271e915e2a36db6433089d
4
- data.tar.gz: 2972025004eb3d76ca89d1b9d34d612c832269932de001e3d6a4e37a80309e62
3
+ metadata.gz: 8e60b4173be015ffca66290f5a3cf17ac3a310300384661aa5e2fa247ce58f68
4
+ data.tar.gz: 358cdc2134cc73f7f289de33cb02c821158797ee8dd21e88e05cf690085e0143
5
5
  SHA512:
6
- metadata.gz: bd152a0736163ccd8c1aec249fb191dfb7ca311cb253e006d27b5c3b4d789aef09b5d0618f825fdac46785dc28e4869288419038866fa42c5dd4b1246fdf9bc7
7
- data.tar.gz: dbfb1f93c06b5e5f2a9bf40c7d0e1c4a04845df97c3e2f526d541d53f563bf85b5c7b0fcd51322fa5444e4de6938f82b460d96d47d46d666cdf287e397c71a79
6
+ metadata.gz: c7b4d97d281802fe983e2a748524cad6971bf9df58baa0cf34f1e35a0647ace2644b50b56e76727b2fe231043ed8a34cbc84bf206350596e81fe95c15b3a6e2f
7
+ data.tar.gz: '083afad91cdb22b2a6e036c25c5fca9cfe147747c3a348b86a9d471c165417f06a3622b88e3b25160fe893b25e533ac2c468434744d1e0f0f677ee274df87ff7'
@@ -6,18 +6,18 @@ class Pagy
6
6
 
7
7
  # Pagination for bootstrap: it returns the html with the series of links to the pages
8
8
  def pagy_nav_bootstrap(pagy)
9
- tags = ''; link = pagy_link_proc(pagy, 'class="page-link"'.freeze)
9
+ tags, link, p_prev, p_next = '', pagy_link_proc(pagy, 'class="page-link"'.freeze), pagy.prev, pagy.next
10
10
 
11
- tags << (pagy.prev ? %(<li class="page-item prev">#{link.call pagy.prev, pagy_t('pagy.nav.prev'.freeze), 'aria-label="previous"'.freeze}</li>)
12
- : %(<li class="page-item prev disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.prev'.freeze)}</a></li>))
11
+ tags << (p_prev ? %(<li class="page-item prev">#{link.call p_prev, pagy_t('pagy.nav.prev'.freeze), 'aria-label="previous"'.freeze}</li>)
12
+ : %(<li class="page-item prev disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.prev'.freeze)}</a></li>))
13
13
  pagy.series.each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
14
14
  tags << if item.is_a?(Integer); %(<li class="page-item">#{link.call item}</li>) # page link
15
15
  elsif item.is_a?(String) ; %(<li class="page-item active">#{link.call item}</li>) # active page
16
16
  elsif item == :gap ; %(<li class="page-item gap disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.gap'.freeze)}</a></li>) # page gap
17
17
  end
18
18
  end
19
- tags << (pagy.next ? %(<li class="page-item next">#{link.call pagy.next, pagy_t('pagy.nav.next'.freeze), 'aria-label="next"'.freeze}</li>)
20
- : %(<li class="page-item next disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.next'.freeze)}</a></li>))
19
+ tags << (p_next ? %(<li class="page-item next">#{link.call p_next, pagy_t('pagy.nav.next'.freeze), 'aria-label="next"'.freeze}</li>)
20
+ : %(<li class="page-item next disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.next'.freeze)}</a></li>))
21
21
  %(<nav class="pagy-nav-boostrap pagination" role="navigation" aria-label="pager"><ul class="pagination">#{tags}</ul></nav>)
22
22
  end
23
23
 
@@ -7,43 +7,43 @@ class Pagy
7
7
  # Generic compact pagination: it returns the html with the series of links to the pages
8
8
  # we use a numeric input tag to set the page and the PagyCompact javascript to navigate
9
9
  def pagy_nav_compact(pagy, id=caller(1,1)[0].hash)
10
- tags = ''; link = pagy_link_proc(pagy)
10
+ tags, link, p_prev, p_next, p_page, p_pages = '', pagy_link_proc(pagy), pagy.prev, pagy.next, pagy.page, pagy.pages
11
11
 
12
12
  tags << %(<nav id="pagy-nav-#{id}" class="pagy-nav-compact pagination" role="navigation" aria-label="pager">)
13
13
 
14
14
  tags << link.call(MARKER, '', %(style="display: none;" ))
15
- tags << (pagy.prev ? %(<span class="page prev">#{link.call pagy.prev, pagy_t('pagy.nav.prev'.freeze), 'aria-label="previous"'.freeze}</span> )
16
- : %(<span class="page prev disabled">#{pagy_t('pagy.nav.prev'.freeze)}</span> ))
15
+ tags << (p_prev ? %(<span class="page prev">#{link.call p_prev, pagy_t('pagy.nav.prev'.freeze), 'aria-label="previous"'.freeze}</span> )
16
+ : %(<span class="page prev disabled">#{pagy_t('pagy.nav.prev'.freeze)}</span> ))
17
17
 
18
- input = %(<input type="number" min="1" max="#{pagy.last}" value="#{pagy.page}" style="padding: 0; text-align: center; width: #{pagy.pages.to_s.length+1}rem;">)
19
- tags << %(<span class="pagy-compact-input" style="margin: 0 0.6rem;">#{pagy_t('pagy.compact.page'.freeze)} #{input} #{pagy_t('pagy.compact.of'.freeze)} #{pagy.pages}</span> )
18
+ input = %(<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;">)
19
+ tags << %(<span class="pagy-compact-input" style="margin: 0 0.6rem;">#{pagy_t('pagy.compact.page'.freeze)} #{input} #{pagy_t('pagy.compact.of'.freeze)} #{p_pages}</span> )
20
20
 
21
- tags << (pagy.next ? %(<span class="page next">#{link.call pagy.next, pagy_t('pagy.nav.next'.freeze), 'aria-label="next"'.freeze}</span>)
22
- : %(<span class="page next disabled">#{pagy_t('pagy.nav.next'.freeze)}</span>))
21
+ tags << (p_next ? %(<span class="page next">#{link.call p_next, pagy_t('pagy.nav.next'.freeze), 'aria-label="next"'.freeze}</span>)
22
+ : %(<span class="page next disabled">#{pagy_t('pagy.nav.next'.freeze)}</span>))
23
23
 
24
- tags << %(</nav><script>PagyCompact('#{id}', '#{MARKER}', '#{pagy.page}');</script>)
24
+ tags << %(</nav><script>PagyCompact('#{id}', '#{MARKER}', '#{p_page}');</script>)
25
25
  end
26
26
 
27
27
  # Compact pagination for bootstrap: it returns the html with the series of links to the pages
28
28
  # we use a numeric input tag to set the page and the PagyCompact javascript to navigate
29
29
  def pagy_nav_bootstrap_compact(pagy, id=caller(1,1)[0].hash)
30
- tags = ''; link = pagy_link_proc(pagy)
30
+ tags, link, p_prev, p_next, p_page, p_pages = '', pagy_link_proc(pagy), pagy.prev, pagy.next, pagy.page, pagy.pages
31
31
 
32
32
  tags << %(<nav id="pagy-nav-#{id}" class="pagy-nav-bootstrap-compact pagination" role="navigation" aria-label="pager">)
33
33
 
34
34
  tags << link.call(MARKER, '', %(style="display: none;" ))
35
35
 
36
36
  tags << %(<div class="btn-group" role="group">)
37
- tags << (pagy.prev ? link.call(pagy.prev, pagy_t('pagy.nav.prev'.freeze), 'aria-label="previous" class="prev btn btn-primary"'.freeze)
38
- : %(<a class="prev btn btn-primary disabled" href="#">#{pagy_t('pagy.nav.prev'.freeze)}</a>))
37
+ tags << (p_prev ? link.call(p_prev, pagy_t('pagy.nav.prev'.freeze), 'aria-label="previous" class="prev btn btn-primary"'.freeze)
38
+ : %(<a class="prev btn btn-primary disabled" href="#">#{pagy_t('pagy.nav.prev'.freeze)}</a>))
39
39
 
40
- input = %(<input type="number" min="1" max="#{pagy.last}" value="#{pagy.page}" style="padding: 0; border: none; text-align: center; width: #{pagy.pages.to_s.length+1}rem;">)
41
- tags << %(<div class="pagy-compact-input btn btn-primary disabled">#{pagy_t('pagy.compact.page'.freeze)} #{input} #{pagy_t('pagy.compact.of'.freeze)} #{pagy.pages}</div>)
40
+ input = %(<input type="number" min="1" max="#{p_pages}" value="#{p_page}" style="padding: 0; border: none; text-align: center; width: #{p_pages.to_s.length+1}rem;">)
41
+ tags << %(<div class="pagy-compact-input btn btn-primary disabled">#{pagy_t('pagy.compact.page'.freeze)} #{input} #{pagy_t('pagy.compact.of'.freeze)} #{p_pages}</div>)
42
42
 
43
- tags << (pagy.next ? link.call(pagy.next, pagy_t('pagy.nav.next'.freeze), 'aria-label="next" class="next btn btn-primary"'.freeze)
44
- : %(<a class="next btn btn-primary disabled" href="#">#{pagy_t('pagy.nav.next'.freeze)}</a>))
43
+ tags << (p_next ? link.call(p_next, pagy_t('pagy.nav.next'.freeze), 'aria-label="next" class="next btn btn-primary"'.freeze)
44
+ : %(<a class="next btn btn-primary disabled" href="#">#{pagy_t('pagy.nav.next'.freeze)}</a>))
45
45
 
46
- tags << %(</div></nav><script>PagyCompact('#{id}', '#{MARKER}', '#{pagy.page}');</script>)
46
+ tags << %(</div></nav><script>PagyCompact('#{id}', '#{MARKER}', '#{p_page}');</script>)
47
47
  end
48
48
 
49
49
  end
@@ -33,18 +33,18 @@ class Pagy
33
33
  # Generic responsive pagination: it returns the html with the series of links to the pages
34
34
  # we build the tags as a json object string and render them with the PagyResponsive javascript
35
35
  def pagy_nav_responsive(pagy, id=caller(1,1)[0].hash)
36
- tags = '{'; link = pagy_link_proc(pagy); responsive = pagy.responsive
36
+ tags, link, p_prev, p_next, responsive = '{', pagy_link_proc(pagy), pagy.prev, pagy.next, pagy.responsive
37
37
 
38
- tags << (pagy.prev ? %('prev':'<span class="page prev">#{link.call pagy.prev, pagy_t('pagy.nav.prev'.freeze), 'aria-label="previous"'.freeze}</span> ',)
39
- : %('prev':'<span class="page prev disabled">#{pagy_t('pagy.nav.prev'.freeze)}</span> ',))
38
+ tags << (p_prev ? %('prev':'<span class="page prev">#{link.call p_prev, pagy_t('pagy.nav.prev'.freeze), 'aria-label="previous"'.freeze}</span> ',)
39
+ : %('prev':'<span class="page prev disabled">#{pagy_t('pagy.nav.prev'.freeze)}</span> ',))
40
40
  responsive[:items].each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
41
41
  tags << if item.is_a?(Integer); %('#{item}':'<span class="page">#{link.call item}</span> ',) # page link
42
42
  elsif item.is_a?(String) ; %('#{item}':'<span class="page active">#{item}</span> ',) # current page
43
43
  elsif item == :gap ; %('#{item}':'<span class="page gap">#{pagy_t('pagy.nav.gap'.freeze)}</span> ',) # page gap
44
44
  end
45
45
  end
46
- tags << (pagy.next ? %('next':'<span class="page next">#{link.call pagy.next, pagy_t('pagy.nav.next'.freeze), 'aria-label="next"'.freeze}</span>'})
47
- : %('next':'<span class="page next disabled">#{pagy_t('pagy.nav.next'.freeze)}</span>'}))
46
+ tags << (p_next ? %('next':'<span class="page next">#{link.call p_next, pagy_t('pagy.nav.next'.freeze), 'aria-label="next"'.freeze}</span>'})
47
+ : %('next':'<span class="page next disabled">#{pagy_t('pagy.nav.next'.freeze)}</span>'}))
48
48
  script = %(<script>PagyResponsive('#{id}', #{tags}, #{responsive[:widths].to_json}, #{responsive[:series].to_json});</script>)
49
49
  %(<nav id="pagy-nav-#{id}" class="pagy-nav-responsive pagination" role="navigation" aria-label="pager"></nav>#{script})
50
50
  end
@@ -53,18 +53,18 @@ class Pagy
53
53
  # Responsive pagination for bootstrap: it returns the html with the series of links to the pages
54
54
  # we build the tags as a json object string and render them with the PagyResponsive javascript
55
55
  def pagy_nav_bootstrap_responsive(pagy, id=caller(1,1)[0].hash)
56
- tags = '{'; link = pagy_link_proc(pagy, 'class="page-link"'.freeze); responsive = pagy.responsive
56
+ tags, link, p_prev, p_next, responsive = '{', pagy_link_proc(pagy, 'class="page-link"'.freeze), pagy.prev, pagy.next, pagy.responsive
57
57
 
58
- tags << (pagy.prev ? %('prev':'<li class="page-item prev">#{link.call pagy.prev, pagy_t('pagy.nav.prev'.freeze), 'aria-label="previous"'.freeze}</li>',)
59
- : %('prev':'<li class="page-item prev disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.prev'.freeze)}</a></li>',))
58
+ tags << (p_prev ? %('prev':'<li class="page-item prev">#{link.call p_prev, pagy_t('pagy.nav.prev'.freeze), 'aria-label="previous"'.freeze}</li>',)
59
+ : %('prev':'<li class="page-item prev disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.prev'.freeze)}</a></li>',))
60
60
  responsive[:items].each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
61
61
  tags << if item.is_a?(Integer); %('#{item}':'<li class="page-item">#{link.call item}</li>',) # page link
62
62
  elsif item.is_a?(String) ; %('#{item}':'<li class="page-item active">#{link.call item}</li>',) # active page
63
63
  elsif item == :gap ; %('#{item}':'<li class="page-item gap disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.gap'.freeze)}</a></li>',) # page gap
64
64
  end
65
65
  end
66
- tags << (pagy.next ? %('next':'<li class="page-item next">#{link.call pagy.next, pagy_t('pagy.nav.next'.freeze), 'aria-label="next"'.freeze}</li>'})
67
- : %('next':'<li class="page-item next disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.next'.freeze)}</a></li>'}))
66
+ tags << (p_next ? %('next':'<li class="page-item next">#{link.call p_next, pagy_t('pagy.nav.next'.freeze), 'aria-label="next"'.freeze}</li>'})
67
+ : %('next':'<li class="page-item next disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.next'.freeze)}</a></li>'}))
68
68
  script = %(<script>PagyResponsive('#{id}', #{tags}, #{responsive[:widths].to_json}, #{responsive[:series].to_json});</script>)
69
69
  %(<nav id="pagy-nav-#{id}" class="pagy-nav-bootstrap-responsive pagination" role="navigation" aria-label="pager"><ul class="pagination"></ul></nav>#{script})
70
70
  end
data/lib/pagy/frontend.rb CHANGED
@@ -10,18 +10,18 @@ class Pagy
10
10
 
11
11
  # Generic pagination: it returns the html with the series of links to the pages
12
12
  def pagy_nav(pagy)
13
- tags = ''; link = pagy_link_proc(pagy)
13
+ tags, link, p_prev, p_next = '', pagy_link_proc(pagy), pagy.prev, pagy.next
14
14
 
15
- tags << (pagy.prev ? %(<span class="page prev">#{link.call pagy.prev, pagy_t('pagy.nav.prev'.freeze), 'aria-label="previous"'.freeze}</span> )
16
- : %(<span class="page prev disabled">#{pagy_t('pagy.nav.prev'.freeze)}</span> ))
15
+ tags << (p_prev ? %(<span class="page prev">#{link.call p_prev, pagy_t('pagy.nav.prev'.freeze), 'aria-label="previous"'.freeze}</span> )
16
+ : %(<span class="page prev disabled">#{pagy_t('pagy.nav.prev'.freeze)}</span> ))
17
17
  pagy.series.each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
18
18
  tags << if item.is_a?(Integer); %(<span class="page">#{link.call item}</span> ) # page link
19
19
  elsif item.is_a?(String) ; %(<span class="page active">#{item}</span> ) # current page
20
20
  elsif item == :gap ; %(<span class="page gap">#{pagy_t('pagy.nav.gap'.freeze)}</span> ) # page gap
21
21
  end
22
22
  end
23
- tags << (pagy.next ? %(<span class="page next">#{link.call pagy.next, pagy_t('pagy.nav.next'.freeze), 'aria-label="next"'.freeze}</span>)
24
- : %(<span class="page next disabled">#{pagy_t('pagy.nav.next'.freeze)}</span>))
23
+ tags << (p_next ? %(<span class="page next">#{link.call p_next, pagy_t('pagy.nav.next'.freeze), 'aria-label="next"'.freeze}</span>)
24
+ : %(<span class="page next disabled">#{pagy_t('pagy.nav.next'.freeze)}</span>))
25
25
  %(<nav class="pagy-nav pagination" role="navigation" aria-label="pager">#{tags}</nav>)
26
26
  end
27
27
 
@@ -36,8 +36,8 @@ class Pagy
36
36
 
37
37
  # this works with all Rack-based frameworks (Sinatra, Padrino, Rails, ...)
38
38
  def pagy_url_for(page, pagy)
39
- params = request.GET.merge(pagy.vars[:page_param] => page).merge!(pagy.vars[:params])
40
- "#{request.path}?#{Rack::Utils.build_nested_query(pagy_get_params(params))}#{pagy.vars[:anchor]}"
39
+ p_vars = pagy.vars; params = request.GET.merge(p_vars[:page_param] => page, **p_vars[:params])
40
+ "#{request.path}?#{Rack::Utils.build_nested_query(pagy_get_params(params))}#{p_vars[:anchor]}"
41
41
  end
42
42
 
43
43
 
@@ -57,15 +57,15 @@ class Pagy
57
57
  end
58
58
 
59
59
  # Pagy::Frontend::I18N constant
60
- zero_one = [:zero, :one]; I18N = { plurals: -> (c) {(zero_one[c] || :other).to_s.freeze}, data: {}}
61
- def I18N.load_file(file) I18N[:data].replace(YAML.load_file(file).first[1]) end
62
- I18N[:data] = I18N.load_file(Pagy.root.join('locales', 'pagy.yml'))
60
+ I18N_DATA = YAML.load_file(Pagy.root.join('locales', 'pagy.yml')).first[1]
61
+ zero_one = ['zero'.freeze, 'one'.freeze]; I18N = { plurals: -> (c) {zero_one[c] || 'other'.freeze}}
62
+ def I18N.load_file(file) I18N_DATA.replace(YAML.load_file(file).first[1]) end
63
63
 
64
64
  # Similar to I18n.t for interpolation and pluralization but without translation
65
65
  # Use only for single-language apps: it is specialized for pagy and 5x faster than I18n.t
66
66
  # See also https://ddnexus.github.io/pagy/extras/i18n to use the standard I18n gem instead
67
67
  def pagy_t(path, vars={})
68
- value = I18N[:data].dig(*path.to_s.split('.'.freeze)) or return %(translation missing: "#{path}")
68
+ value = I18N_DATA.dig(*path.to_s.split('.'.freeze)) or return %(translation missing: "#{path}")
69
69
  if value.is_a?(Hash)
70
70
  vars.key?(:count) or return value
71
71
  plural = I18N[:plurals].call(vars[:count])
data/lib/pagy.rb CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'pathname'
4
4
 
5
- class Pagy ; VERSION = '0.8.5'
5
+ class Pagy ; VERSION = '0.8.6'
6
6
 
7
7
  class OutOfRangeError < StandardError; end
8
8
 
@@ -16,7 +16,7 @@ class Pagy ; VERSION = '0.8.5'
16
16
 
17
17
  # merge and validate the options, do some simple aritmetic and set the instance variables
18
18
  def initialize(vars)
19
- @vars = VARS.merge(vars.delete_if{|_,v| v.nil? || v == '' }) # default vars + cleaned instance vars
19
+ @vars = VARS.merge(vars.delete_if{|_,v| v.nil? || v == ''.freeze }) # default vars + cleaned instance vars
20
20
  { count:0, items:1, outset:0, page:1 }.each do |k,min| # validate core variables
21
21
  (@vars[k] && instance_variable_set(:"@#{k}", @vars.delete(k).to_i) >= min) \
22
22
  or raise(ArgumentError, "expected :#{k} >= #{min}; got #{instance_variable_get(:"@#{k}").inspect}")
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.8.5
4
+ version: 0.8.6
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-06-03 00:00:00.000000000 Z
11
+ date: 2018-06-05 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,