pagy 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1bc238e37f6ae65c1581b464c1ac3b2d3d96a1168aea4d05e6f4c093a6d2a574
4
- data.tar.gz: a3cbe116d1279fce48a91ba0c78b1a59d22445fe37f17aff5660305c9b5dc0d2
3
+ metadata.gz: 388922f4fd6c86c42945097ef08078bfe351e8b61a380ef68c58c583509ee4ae
4
+ data.tar.gz: 775b71455d808039150ac6285a15c8fd9574609df2a43399f465d71fed853cff
5
5
  SHA512:
6
- metadata.gz: a6c0979f616fd8cac7c20ef6f6242ddd8a1a1099fa6b2cf0b3678b180705bc2e74e8e25e29d761a0f497c99aa3120783661f73044dc35bea701ea97c637526c1
7
- data.tar.gz: db8389ae56438687fb038915e4a7406d263797f05718fe22bad9b67ec3002f7befd7f21777a09d62023ed1fc1fa74ee50dc82619b685f79419fb9abcafd3e137
6
+ metadata.gz: a98e301538f52ebd068f137ff5bf7850ab713a28e8636b399753b8a70022d076885e3ac93216c7da255fb3d4269f8bd3c48990243e27db31ccc08f841af750b2
7
+ data.tar.gz: d22e17a6910d0e1dbc31f184a69a9dae63a25932c7d29d2f9dc1d291d9ed5fe58c641bba96ae9feea2e312cd06e478643705688916d8b26c3395937a7fe0442c
@@ -8,69 +8,74 @@
8
8
 
9
9
  # Backend Extras
10
10
 
11
- # Array: Paginate arrays efficiently, avoiding expensive array-wrapping and without overriding
11
+ # Array extra: Paginate arrays efficiently, avoiding expensive array-wrapping and without overriding
12
12
  # See https://ddnexus.github.io/pagy/extras/array
13
13
  # require 'pagy/extras/array'
14
14
 
15
- # Countless: Paginate without any count, saving one query per rendering
15
+ # Countless extra: Paginate without any count, saving one query per rendering
16
16
  # See https://ddnexus.github.io/pagy/extras/countless
17
17
  # require 'pagy/extras/countless'
18
+ # Pagy::VARS[:cycle] = false # default
18
19
 
19
- # Elasticsearch Rails: Paginate `ElasticsearchRails::Results` objects efficiently, avoiding expensive object-wrapping and without overriding.
20
+ # Elasticsearch Rails extra: Paginate `ElasticsearchRails::Results` objects efficiently, avoiding expensive object-wrapping and without overriding.
20
21
  # See https://ddnexus.github.io/pagy/extras/elasticsearch_rails
21
22
  # require 'pagy/extras/elasticsearch_rails'
22
23
 
23
- # Searchkick: Paginate `Searchkick::Results` objects efficiently, avoiding expensive object-wrapping and without overriding.
24
+ # Searchkick extra: Paginate `Searchkick::Results` objects efficiently, avoiding expensive object-wrapping and without overriding.
24
25
  # See https://ddnexus.github.io/pagy/extras/searchkick
25
26
  # require 'pagy/extras/searchkick'
26
27
 
27
28
 
28
29
  # Frontend Extras
29
30
 
30
- # Navs: Add responsive and compact generic/unstyled nav helpers
31
- # Notice: the other frontend extras add their own framework-styled versions,
32
- # so require this extra only if you need the plain unstyled version
33
- # See https://ddnexus.github.io/pagy/extras/navs
34
- # require 'pagy/extras/navs'
35
-
36
- # Bootstrap: Nav, responsive and compact helpers and templates for Bootstrap pagination
31
+ # Bootstrap extra: Add nav, responsive and compact helpers and templates for Bootstrap pagination
37
32
  # See https://ddnexus.github.io/pagy/extras/bootstrap
38
33
  # require 'pagy/extras/bootstrap'
39
34
 
40
- # Bulma: Nav, responsive and compact helpers and templates for Bulma pagination
35
+ # Bulma extra: Add nav, responsive and compact helpers and templates for Bulma pagination
41
36
  # See https://ddnexus.github.io/pagy/extras/bulma
42
37
  # require 'pagy/extras/bulma'
43
38
 
44
- # Foundation: Nav, responsive and compact helpers and templates for Foundation pagination
39
+ # Foundation extra: Add nav, responsive and compact helpers and templates for Foundation pagination
45
40
  # See https://ddnexus.github.io/pagy/extras/foundation
46
41
  # require 'pagy/extras/foundation'
47
42
 
48
- # Materialize: Nav, responsive and compact helpers for Materialize pagination
43
+ # Materialize extra: Nav, responsive and compact helpers for Materialize pagination
49
44
  # See https://ddnexus.github.io/pagy/extras/materialize
50
45
  # require 'pagy/extras/materialize'
51
46
 
52
- # Semantic: Nav, responsive and compact helpers for Semantic UI pagination
47
+ # Plain extra: Add responsive and compact nav plain helpers
48
+ # Notice: the other frontend extras add their own framework-styled versions,
49
+ # so require this extra only if you need the plain unstyled version
50
+ # See https://ddnexus.github.io/pagy/extras/plain
51
+ # require 'pagy/extras/plain'
52
+
53
+ # Semantic extra: Nav, responsive and compact helpers for Semantic UI pagination
53
54
  # See https://ddnexus.github.io/pagy/extras/semantic
54
55
  # require 'pagy/extras/semantic'
55
56
 
56
57
  # Breakpoints var used by the responsive nav helpers
57
- # See https://ddnexus.github.io/pagy/extras/navs#breakpoints
58
+ # See https://ddnexus.github.io/pagy/extras/plain#breakpoints
58
59
  # Pagy::VARS[:breakpoints] = { 0 => [1,2,2,1], 350 => [2,3,3,2], 550 => [3,4,4,3] } # example of width/size pairs
59
60
 
60
61
 
61
62
  # Feature Extras
62
63
 
63
- # Items: Allow the client to request a custom number of items per page with an optional selector UI
64
+ # Support extra: Extra support for features like: incremental, infinite, auto-scroll pagination
65
+ # See https://ddnexus.github.io/pagy/extras/support
66
+ # require 'pagy/extras/support'
67
+
68
+ # Items extra: Allow the client to request a custom number of items per page with an optional selector UI
64
69
  # See https://ddnexus.github.io/pagy/extras/items
65
70
  # require 'pagy/extras/items'
66
71
  # Pagy::VARS[:items_param] = :items # default
67
72
  # Pagy::VARS[:max_items] = 100 # default
68
73
 
69
- # Overflow: Allow for easy handling of overflowing pages
74
+ # Overflow extra: Allow for easy handling of overflowing pages
70
75
  # See https://ddnexus.github.io/pagy/extras/overflow
71
76
  # Pagy::VARS[:overflow] = :last_page # default (other options: :empty_page and :exception)
72
77
 
73
- # Trim: Remove the page=1 param from links
78
+ # Trim extra: Remove the page=1 param from links
74
79
  # See https://ddnexus.github.io/pagy/extras/trim
75
80
  # require 'pagy/extras/trim'
76
81
 
@@ -106,7 +111,7 @@
106
111
 
107
112
  # I18n
108
113
 
109
- # I18n: faster internal pagy implementation (does not use the I18n gem)
114
+ # I18n faster internal pagy implementation (does not use the I18n gem)
110
115
  # Use only for single language apps that don't need dynamic translation between multiple languages
111
116
  # See https://ddnexus.github.io/pagy/api/frontend#i18n
112
117
  # Notice: Do not use any of the following lines if you use the i18n extra below
@@ -114,7 +119,7 @@
114
119
  # Pagy::Frontend::I18N.load(file:'path/to/dictionary.yml', language:'en') # load a custom 'en' file
115
120
  # Pagy::Frontend::I18N[:plural] = -> (count) {(['zero', 'one'][count] || 'other')} # default
116
121
 
117
- # I18n: Use the `I18n` gem instead of the pagy implementation
122
+ # I18n extra: Use the `I18n` gem instead of the pagy implementation
118
123
  # (slower but allows dynamic translation between multiple languages)
119
124
  # See https://ddnexus.github.io/pagy/extras/i18n
120
125
  # require 'pagy/extras/i18n'
@@ -14,28 +14,28 @@ Pagy.addInputEventListeners = function(input, handler){
14
14
  };
15
15
 
16
16
  Pagy.compact = function(id, marker, page, trim){
17
- var pagyNav = document.getElementById('pagy-nav-'+id),
18
- input = pagyNav.getElementsByTagName('input')[0],
19
- link = pagyNav.getElementsByTagName('a')[0],
20
- linkP1 = pagyNav.getElementsByTagName('a')[1],
21
- go = function(){
22
- if (page !== input.value) {
23
- if (trim === true && input.value === '1') { linkP1.click() }
24
- else {
25
- var href = link.getAttribute('href').replace(marker, input.value);
26
- link.setAttribute('href', href);
27
- link.click();
28
- }
29
- }
30
- };
17
+ var pagyEl = document.getElementById(id),
18
+ input = pagyEl.getElementsByTagName('input')[0],
19
+ link = pagyEl.getElementsByTagName('a')[0],
20
+ linkP1 = pagyEl.getElementsByTagName('a')[1],
21
+ go = function(){
22
+ if (page !== input.value) {
23
+ if (trim === true && input.value === '1') { linkP1.click() }
24
+ else {
25
+ var href = link.getAttribute('href').replace(marker, input.value);
26
+ link.setAttribute('href', href);
27
+ link.click();
28
+ }
29
+ }
30
+ };
31
31
  Pagy.addInputEventListeners(input, go);
32
32
  };
33
33
 
34
34
  Pagy.items = function(id, marker, from){
35
- var pagyNav = document.getElementById('pagy-items-'+id),
36
- input = pagyNav.getElementsByTagName('input')[0],
35
+ var pagyEl = document.getElementById(id),
36
+ input = pagyEl.getElementsByTagName('input')[0],
37
37
  current = input.value,
38
- link = pagyNav.getElementsByTagName('a')[0],
38
+ link = pagyEl.getElementsByTagName('a')[0],
39
39
  go = function(){
40
40
  var items = input.value;
41
41
  if (current !== items) {
@@ -49,18 +49,18 @@ Pagy.items = function(id, marker, from){
49
49
  };
50
50
 
51
51
  Pagy.responsive = function(id, tags, widths, series){
52
- var pagyNav = document.getElementById('pagy-nav-'+id),
53
- pagyParent = pagyNav.parentElement,
52
+ var pagyEl = document.getElementById(id),
53
+ pagyParent = pagyEl.parentElement,
54
54
  lastWidth = undefined,
55
55
  render = function(){
56
56
  var parentWidth = parseInt(pagyParent.clientWidth),
57
57
  width = widths.find(function(w){return parentWidth > w});
58
58
  if (width !== lastWidth) {
59
- while (pagyNav.firstChild) { pagyNav.removeChild(pagyNav.firstChild) }
59
+ while (pagyEl.firstChild) { pagyEl.removeChild(pagyEl.firstChild) }
60
60
  var html = tags['before'];
61
61
  series[width].forEach(function(item){html += tags[item]});
62
62
  html += tags['after'];
63
- pagyNav.insertAdjacentHTML('beforeend', html);
63
+ pagyEl.insertAdjacentHTML('beforeend', html);
64
64
  lastWidth = width;
65
65
  }
66
66
  }.bind(this);
@@ -73,6 +73,12 @@ Pagy.init = function(){
73
73
  // we need to explicitly remove the window listeners because turbolinks persists the window object
74
74
  Pagy.windowListeners.forEach(function(l){window.removeEventListener('resize', l, true)});
75
75
  Pagy.windowListeners = [];
76
+ var json = document.getElementsByClassName('pagy-json');
77
+ for (var i = 0, len = json.length; i < len; i++) {
78
+ var args = JSON.parse(json[i].innerHTML);
79
+ Pagy[args.shift()].apply(null, args);
80
+ }
81
+ // Support for legacy overridden helpers. It will be removed in 2.0
76
82
  ['compact', 'items', 'responsive'].forEach(function(name){
77
83
  var json = document.getElementsByClassName("pagy-"+name+"-json");
78
84
  for (var i = 0, len = json.length; i < len; i++) {
@@ -80,3 +86,7 @@ Pagy.init = function(){
80
86
  }
81
87
  })
82
88
  };
89
+
90
+ function PagyInit(){}
91
+
92
+ Pagy.applyInit = function(name, payload){ PagyInit[name].apply(null, [payload]) };
@@ -3,7 +3,7 @@
3
3
 
4
4
  require 'pathname'
5
5
 
6
- class Pagy ; VERSION = '1.1.0'
6
+ class Pagy ; VERSION = '1.2.0'
7
7
 
8
8
  class OverflowError < StandardError; attr_reader :pagy; def initialize(pagy) @pagy = pagy end; end
9
9
 
@@ -11,7 +11,7 @@ class Pagy ; VERSION = '1.1.0'
11
11
  def self.root; Pathname.new(__FILE__).dirname end
12
12
 
13
13
  # default vars
14
- VARS = { page:1, items:20, outset:0, size:[1,4,4,1], page_param: :page, params:{}, anchor:'', link_extra:'', item_path:'pagy.info.item_name' }
14
+ VARS = { page:1, items:20, outset:0, size:[1,4,4,1], page_param: :page, params:{}, anchor:'', link_extra:'', item_path:'pagy.info.item_name', cycle: false }
15
15
 
16
16
  attr_reader :count, :page, :items, :vars, :pages, :last, :offset, :from, :to, :prev, :next
17
17
 
@@ -29,7 +29,7 @@ class Pagy ; VERSION = '1.1.0'
29
29
  @from = @count == 0 ? 0 : @offset+1 - @outset # page begins from item
30
30
  @to = @count == 0 ? 0 : @offset + @items - @outset # page ends to item
31
31
  @prev = (@page-1 unless @page == 1) # nil if no prev page
32
- @next = (@page+1 unless @page == @last) # nil if no next page
32
+ @next = @page == @last ? (1 if @vars[:cycle]) : @page+1 # nil if no next page, 1 if :cycle
33
33
  end
34
34
 
35
35
  # Return the array of page numbers and :gap items e.g. [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
@@ -23,6 +23,7 @@ class Pagy
23
23
  @to = items == 0 ? 0 : @offset + @items - @outset # page ends to item
24
24
  @prev = (@page-1 unless @page == 1) # nil if no prev page
25
25
  @next = (@page+1 unless @page == @last) # nil if no next page
26
+ @next = (@page == @last ? (1 if @vars[:cycle]) : @page+1) # nil if no next page
26
27
  self
27
28
  end
28
29
 
@@ -7,7 +7,7 @@ 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_nav_bootstrap(pagy)
10
+ def pagy_bootstrap_nav(pagy)
11
11
  html, link, p_prev, p_next = +'', pagy_link_proc(pagy, 'class="page-link"'), pagy.prev, pagy.next
12
12
 
13
13
  html << (p_prev ? %(<li class="page-item prev">#{link.call p_prev, pagy_t('pagy.nav.prev'), 'aria-label="previous"'}</li>)
@@ -20,15 +20,16 @@ class Pagy
20
20
  end
21
21
  html << (p_next ? %(<li class="page-item next">#{link.call p_next, pagy_t('pagy.nav.next'), 'aria-label="next"'}</li>)
22
22
  : %(<li class="page-item next disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.next')}</a></li>))
23
- %(<nav class="pagy-nav-bootstrap pagination" role="navigation" aria-label="pager"><ul class="pagination">#{html}</ul></nav>)
23
+ %(<nav class="pagy-nav-bootstrap pagy-bootstrap-nav pagination" role="navigation" aria-label="pager"><ul class="pagination">#{html}</ul></nav>)
24
24
  end
25
+ Pagy.deprecate self, :pagy_nav_bootstrap, :pagy_bootstrap_nav
25
26
 
26
27
  # Compact pagination for bootstrap: it returns the html with the series of links to the pages
27
28
  # we use a numeric input tag to set the page and the Pagy.compact javascript to navigate
28
- def pagy_nav_compact_bootstrap(pagy, id=caller(1,1)[0].hash)
29
+ def pagy_bootstrap_compact_nav(pagy, id=caller(1,1)[0].hash.to_s)
29
30
  html, link, p_prev, p_next, p_page, p_pages = +'', pagy_link_proc(pagy), pagy.prev, pagy.next, pagy.page, pagy.pages
30
31
 
31
- html << %(<nav id="pagy-nav-#{id}" class="pagy-nav-compact-bootstrap pagination" role="navigation" aria-label="pager">)
32
+ html << %(<nav id="#{id}" class="pagy-nav-compact-bootstrap pagy-bootstrap-compact-nav pagination" role="navigation" aria-label="pager">)
32
33
  html << link.call(MARKER, '', %(style="display: none;" ))
33
34
  (html << link.call(1, '', %(style="display: none;" ))) if defined?(TRIM)
34
35
  html << %(<div class="btn-group" role="group">)
@@ -38,12 +39,13 @@ class Pagy
38
39
  html << %(<div class="pagy-compact-input btn btn-primary disabled">#{pagy_t('pagy.compact', page_input: input, count: p_page, pages: p_pages)}</div>)
39
40
  html << (p_next ? link.call(p_next, pagy_t('pagy.nav.next'), 'aria-label="next" class="next btn btn-primary"')
40
41
  : %(<a class="next btn btn-primary disabled" href="#">#{pagy_t('pagy.nav.next')}</a>))
41
- html << %(</div></nav><script type="application/json" class="pagy-compact-json">["#{id}", "#{MARKER}", "#{p_page}", #{!!defined?(TRIM)}]</script>)
42
+ html << %(</div></nav>#{pagy_json_tag(:compact, id, MARKER, p_page, !!defined?(TRIM))})
42
43
  end
44
+ Pagy.deprecate self, :pagy_nav_compact_bootstrap, :pagy_bootstrap_compact_nav
43
45
 
44
46
  # Responsive pagination for bootstrap: it returns the html with the series of links to the pages
45
47
  # rendered by the Pagy.responsive javascript
46
- def pagy_nav_responsive_bootstrap(pagy, id=caller(1,1)[0].hash)
48
+ def pagy_bootstrap_responsive_nav(pagy, id=caller(1,1)[0].hash.to_s)
47
49
  tags, link, p_prev, p_next, responsive = {}, pagy_link_proc(pagy, 'class="page-link"'), pagy.prev, pagy.next, pagy.responsive
48
50
 
49
51
  tags['before'] = +'<ul class="pagination">'
@@ -58,9 +60,10 @@ class Pagy
58
60
  tags['after'] = +(p_next ? %(<li class="page-item next">#{link.call p_next, pagy_t('pagy.nav.next'), 'aria-label="next"'}</li>)
59
61
  : %(<li class="page-item next disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.next')}</a></li>))
60
62
  tags['after'] << '</ul>'
61
- script = %(<script type="application/json" class="pagy-responsive-json">["#{id}", #{tags.to_json}, #{responsive[:widths].to_json}, #{responsive[:series].to_json}]</script>)
62
- %(<nav id="pagy-nav-#{id}" class="pagy-nav-responsive-bootstrap pagination" role="navigation" aria-label="pager"></nav>#{script})
63
+ script = pagy_json_tag(:responsive, id, tags, responsive[:widths], responsive[:series])
64
+ %(<nav id="#{id}" class="pagy-nav-responsive-bootstrap pagy-bootstrap-responsive-nav pagination" role="navigation" aria-label="pager"></nav>#{script})
63
65
  end
66
+ Pagy.deprecate self, :pagy_nav_responsive_bootstrap, :pagy_bootstrap_responsive_nav
64
67
 
65
68
  end
66
69
  end
@@ -7,7 +7,7 @@ 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_nav_bulma(pagy)
10
+ def pagy_bulma_nav(pagy)
11
11
  html, link, p_prev, p_next = +'', pagy_link_proc(pagy), pagy.prev, pagy.next
12
12
 
13
13
  html << (p_prev ? link.call(p_prev, pagy_t('pagy.nav.prev'), 'class="pagination-previous" aria-label="previous page"')
@@ -22,15 +22,16 @@ class Pagy
22
22
  end
23
23
  end
24
24
  html << '</ul>'
25
- %(<nav class="pagy-nav-bulma pagination is-centered" role="navigation" aria-label="pagination">#{html}</nav>)
25
+ %(<nav class="pagy-nav-bulma pagy-bulma-nav pagination is-centered" role="navigation" aria-label="pagination">#{html}</nav>)
26
26
  end
27
+ Pagy.deprecate self, :pagy_nav_bulma, :pagy_bulma_nav
27
28
 
28
29
  # Compact pagination for Bulma: it returns the html with the series of links to the pages
29
30
  # we use a numeric input tag to set the page and the Pagy.compact javascript to navigate
30
- def pagy_nav_compact_bulma(pagy, id=caller(1,1)[0].hash)
31
+ def pagy_bulma_compact_nav(pagy, id=caller(1,1)[0].hash.to_s)
31
32
  html, link, p_prev, p_next, p_page, p_pages = +'', pagy_link_proc(pagy), pagy.prev, pagy.next, pagy.page, pagy.pages
32
33
 
33
- html << %(<nav id="pagy-nav-#{id}" class="pagy-nav-compact-bulma" role="navigation" aria-label="pagination">)
34
+ html << %(<nav id="#{id}" class="pagy-nav-compact-bulma pagy-bulma-compact-nav" role="navigation" aria-label="pagination">)
34
35
  html << link.call(MARKER, '', 'style="display: none;"')
35
36
  (html << link.call(1, '', %(style="display: none;"))) if defined?(TRIM)
36
37
  html << %(<div class="field is-grouped is-grouped-centered" role="group">)
@@ -40,12 +41,13 @@ class Pagy
40
41
  html << %(<div class="pagy-compact-input control level is-mobile">#{pagy_t('pagy.compact', page_input: input, count: p_page, pages: p_pages)}</div>)
41
42
  html << (p_next ? %(<p class="control">#{link.call(p_next, pagy_t('pagy.nav.next'), 'class="button" aria-label="next page"')}</p>)
42
43
  : %(<p class="control"><a class="button" disabled>#{pagy_t('pagy.nav.next')}</a></p>))
43
- html << %(</div></nav><script type="application/json" class="pagy-compact-json">["#{id}", "#{MARKER}", "#{p_page}", #{!!defined?(TRIM)}]</script>)
44
+ html << %(</div></nav>#{pagy_json_tag(:compact, id, MARKER, p_page, !!defined?(TRIM))})
44
45
  end
46
+ Pagy.deprecate self, :pagy_nav_compact_bulma, :pagy_bulma_compact_nav
45
47
 
46
48
  # Responsive pagination for Bulma: it returns the html with the series of links to the pages
47
49
  # rendered by the Pagy.responsive javascript
48
- def pagy_nav_responsive_bulma(pagy, id=caller(1,1)[0].hash)
50
+ def pagy_bulma_responsive_nav(pagy, id=caller(1,1)[0].hash.to_s)
49
51
  tags, link, p_prev, p_next, responsive = {}, pagy_link_proc(pagy), pagy.prev, pagy.next, pagy.responsive
50
52
 
51
53
  tags['before'] = +(p_prev ? link.call(p_prev, pagy_t('pagy.nav.prev'), 'class="pagination-previous" aria-label="previous page"')
@@ -60,9 +62,10 @@ class Pagy
60
62
  end
61
63
  end
62
64
  tags['after'] = '</ul>'
63
- script = %(<script type="application/json" class="pagy-responsive-json">["#{id}", #{tags.to_json}, #{responsive[:widths].to_json}, #{responsive[:series].to_json}]</script>)
64
- %(<nav id="pagy-nav-#{id}" class="pagy-nav-bulma pagination is-centered" role="navigation" aria-label="pagination"></nav>#{script})
65
+ script = pagy_json_tag(:responsive, id, tags, responsive[:widths], responsive[:series])
66
+ %(<nav id="#{id}" class="pagy-nav-responsive-bulma pagy-bulma-responsive-nav pagination is-centered" role="navigation" aria-label="pagination"></nav>#{script})
65
67
  end
68
+ Pagy.deprecate self, :pagy_nav_responsive_bulma, :pagy_bulma_responsive_nav
66
69
 
67
70
  end
68
71
  end
@@ -7,7 +7,7 @@ class Pagy
7
7
  module Frontend
8
8
 
9
9
  # Pagination for Foundation: it returns the html with the series of links to the pages
10
- def pagy_nav_foundation(pagy)
10
+ def pagy_foundation_nav(pagy)
11
11
  html, link, p_prev, p_next = +'', pagy_link_proc(pagy), pagy.prev, pagy.next
12
12
 
13
13
  html << (p_prev ? %(<li class="prev">#{link.call p_prev, pagy_t('pagy.nav.prev'), 'aria-label="previous"'}</li>)
@@ -20,15 +20,16 @@ class Pagy
20
20
  end
21
21
  html << (p_next ? %(<li class="next">#{link.call p_next, pagy_t('pagy.nav.next'), 'aria-label="next"'}</li>)
22
22
  : %(<li class="next disabled">#{pagy_t('pagy.nav.next')}</li>))
23
- %(<nav class="pagy-nav-foundation" role="navigation" aria-label="Pagination"><ul class="pagination">#{html}</ul></nav>)
23
+ %(<nav class="pagy-nav-foundation pagy-foundation-nav" role="navigation" aria-label="Pagination"><ul class="pagination">#{html}</ul></nav>)
24
24
  end
25
+ Pagy.deprecate self, :pagy_nav_foundation, :pagy_foundation_nav
25
26
 
26
27
  # Compact pagination for Foundation: it returns the html with the series of links to the pages
27
28
  # we use a numeric input tag to set the page and the Pagy.compact javascript to navigate
28
- def pagy_nav_compact_foundation(pagy, id=caller(1,1)[0].hash)
29
+ def pagy_foundation_compact_nav(pagy, id=caller(1,1)[0].hash.to_s)
29
30
  html, link, p_prev, p_next, p_page, p_pages = +'', pagy_link_proc(pagy), pagy.prev, pagy.next, pagy.page, pagy.pages
30
31
 
31
- html << %(<nav id="pagy-nav-#{id}" class="pagy-nav-compact-foundation" role="navigation" aria-label="Pagination">)
32
+ html << %(<nav id="#{id}" class="pagy-nav-compact-foundation pagy-foundation-compact-nav" role="navigation" aria-label="Pagination">)
32
33
  html << link.call(MARKER, '', %(style="display: none;" ))
33
34
  (html << link.call(1, '', %(style="display: none;" ))) if defined?(TRIM)
34
35
  html << %(<div class="input-group">)
@@ -38,12 +39,13 @@ class Pagy
38
39
  html << %(<span class="input-group-label">#{pagy_t('pagy.compact', page_input: input, count: p_page, pages: p_pages)}</span>)
39
40
  html << (p_next ? link.call(p_next, pagy_t('pagy.nav.next'), 'style="margin-bottom: 0px;" aria-label="next" class="next button primary"')
40
41
  : %(<a style="margin-bottom: 0px;" class="next button primary disabled" href="#">#{pagy_t('pagy.nav.next')}</a>))
41
- html << %(</div></nav><script type="application/json" class="pagy-compact-json">["#{id}", "#{MARKER}", "#{p_page}", #{!!defined?(TRIM)}]</script>)
42
+ html << %(</div></nav>#{pagy_json_tag(:compact, id, MARKER, p_page, !!defined?(TRIM))})
42
43
  end
44
+ Pagy.deprecate self, :pagy_nav_compact_foundation, :pagy_foundation_compact_nav
43
45
 
44
46
  # Responsive pagination for Foundation: it returns the html with the series of links to the pages
45
47
  # rendered by the Pagy.responsive javascript
46
- def pagy_nav_responsive_foundation(pagy, id=caller(1,1)[0].hash)
48
+ def pagy_foundation_responsive_nav(pagy, id=caller(1,1)[0].hash.to_s)
47
49
  tags, link, p_prev, p_next, responsive = {}, pagy_link_proc(pagy), pagy.prev, pagy.next, pagy.responsive
48
50
 
49
51
  tags['before'] = +'<ul class="pagination">'
@@ -58,9 +60,10 @@ class Pagy
58
60
  tags['after'] = +(p_next ? %(<li class="next">#{link.call p_next, pagy_t('pagy.nav.next'), 'aria-label="next"'}</li>)
59
61
  : %(<li class="next disabled">#{pagy_t('pagy.nav.next')}</li>))
60
62
  tags['after'] << '</ul>'
61
- script = %(<script type="application/json" class="pagy-responsive-json">["#{id}", #{tags.to_json}, #{responsive[:widths].to_json}, #{responsive[:series].to_json}]</script>)
62
- %(<nav id="pagy-nav-#{id}" class="pagy-nav-responsive-foundation" aria-label="Pagination"></nav>#{script})
63
+ script = pagy_json_tag(:responsive, id, tags, responsive[:widths], responsive[:series])
64
+ %(<nav id="#{id}" class="pagy-nav-responsive-foundation pagy-foundation-responsive-nav" aria-label="Pagination"></nav>#{script})
63
65
  end
66
+ Pagy.deprecate self, :pagy_nav_responsive_foundation, :pagy_foundation_responsive_nav
64
67
 
65
68
  end
66
69
  end
@@ -1,6 +1,8 @@
1
1
  # See the Pagy documentation: https://ddnexus.github.io/pagy/extras/items
2
2
  # frozen_string_literal: true
3
3
 
4
+ require 'pagy/extras/shared'
5
+
4
6
  class Pagy
5
7
 
6
8
  # Default variables for this extra
@@ -44,14 +46,14 @@ class Pagy
44
46
  alias_method :pagy_url_for, :pagy_url_for_with_items
45
47
 
46
48
  # Return the items selector HTML. For example "Show [20] items per page"
47
- def pagy_items_selector(pagy, id=caller(1,1)[0].hash)
49
+ def pagy_items_selector(pagy, id=caller(1,1)[0].hash.to_s)
48
50
  pagy = pagy.clone; p_vars = pagy.vars; p_items = p_vars[:items]; p_vars[:items] = "#{MARKER}-items-"
49
51
 
50
- html = +%(<span id="pagy-items-#{id}">)
52
+ html = +%(<span id="#{id}">)
51
53
  html << %(<a href="#{pagy_url_for("#{MARKER}-page-", pagy)}"></a>)
52
54
  input = %(<input type="number" min="1" max="#{p_vars[:max_items]}" value="#{p_items}" style="padding: 0; text-align: center; width: #{p_items.to_s.length+1}rem;">)
53
55
  html << %(#{pagy_t('pagy.items', items_input: input, count: p_items)})
54
- html << %(</span><script type="application/json" class="pagy-items-json">["#{id}", "#{MARKER}", #{pagy.from}]</script>)
56
+ html << %(</span>#{pagy_json_tag(:items, id, MARKER, pagy.from)})
55
57
  end
56
58
 
57
59
  end
@@ -7,7 +7,7 @@ class Pagy
7
7
  module Frontend
8
8
 
9
9
  # Pagination for materialize: it returns the html with the series of links to the pages
10
- def pagy_nav_materialize(pagy)
10
+ def pagy_materialize_nav(pagy)
11
11
  html, link, p_prev, p_next = +'', pagy_link_proc(pagy), pagy.prev, pagy.next
12
12
  html << (p_prev ? %(<li class="waves-effect prev">#{link.call p_prev, '<i class="material-icons">chevron_left</i>', 'aria-label="previous"'}</li>)
13
13
  : %(<li class="prev disabled"><a href="#"><i class="material-icons">chevron_left</i></a></li>))
@@ -19,15 +19,16 @@ class Pagy
19
19
  end
20
20
  html << (p_next ? %(<li class="waves-effect next">#{link.call p_next, '<i class="material-icons">chevron_right</i>', 'aria-label="next"'}</li>)
21
21
  : %(<li class="next disabled"><a href="#"><i class="material-icons">chevron_right</i></a></li>))
22
- %(<div class="pagy-nav-materialize pagination" role="navigation" aria-label="pager"><ul class="pagination">#{html}</ul></div>)
22
+ %(<div class="pagy-nav-materialize pagy-materialize-nav pagination" role="navigation" aria-label="pager"><ul class="pagination">#{html}</ul></div>)
23
23
  end
24
+ Pagy.deprecate self, :pagy_nav_materialize, :pagy_materialize_nav
24
25
 
25
26
  # Compact pagination for materialize: it returns the html with the series of links to the pages
26
27
  # we use a numeric input tag to set the page and the Pagy.compact javascript to navigate
27
- def pagy_nav_compact_materialize(pagy, id=caller(1,1)[0].hash)
28
+ def pagy_materialize_compact_nav(pagy, id=caller(1,1)[0].hash.to_s)
28
29
  html, link, p_prev, p_next, p_page, p_pages = +'', pagy_link_proc(pagy), pagy.prev, pagy.next, pagy.page, pagy.pages
29
30
 
30
- html << %(<div id="pagy-nav-#{id}" class="pagy-nav-compact-materialize pagination" role="navigation" aria-label="pager">)
31
+ html << %(<div id="#{id}" class="pagy-nav-compact-materialize pagy-materialize-compact-nav pagination" role="navigation" aria-label="pager">)
31
32
  html << link.call(MARKER, '', %(style="display: none;" ))
32
33
  (html << link.call(1, '', %(style="display: none;" ))) if defined?(TRIM)
33
34
  html << %(<div class="pagy-compact-chip role="group" style="height: 35px; border-radius: 18px; background: #e4e4e4; display: inline-block;">)
@@ -39,12 +40,13 @@ class Pagy
39
40
  html << %(<div class="pagy-compact-input btn-flat" style="cursor: default; padding: 0px">#{pagy_t('pagy.compact', page_input: input, count: p_page, pages: p_pages)}</div>)
40
41
  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>)
41
42
  : %(<li class="next disabled" #{li_style}><a href="#"><i class="material-icons">chevron_right</i></a></li>))
42
- html << %(</ul></div><script type="application/json" class="pagy-compact-json">["#{id}", "#{MARKER}", "#{p_page}", #{!!defined?(TRIM)}]</script>)
43
+ html << %(</ul></div>#{pagy_json_tag(:compact, id, MARKER, p_page, !!defined?(TRIM))})
43
44
  end
45
+ Pagy.deprecate self, :pagy_nav_compact_materialize, :pagy_materialize_compact_nav
44
46
 
45
47
  # Responsive pagination for Materialize: it returns the html with the series of links to the pages
46
48
  # rendered by the Pagy.responsive javascript
47
- def pagy_nav_responsive_materialize(pagy, id=caller(1,1)[0].hash)
49
+ def pagy_materialize_responsive_nav(pagy, id=caller(1,1)[0].hash.to_s)
48
50
  tags, link, p_prev, p_next, responsive = {}, pagy_link_proc(pagy), pagy.prev, pagy.next, pagy.responsive
49
51
 
50
52
  tags['before'] = +'<ul class="pagination">'
@@ -59,9 +61,10 @@ class Pagy
59
61
  tags['after'] = +(p_next ? %(<li class="waves-effect next">#{link.call p_next, '<i class="material-icons">chevron_right</i>', 'aria-label="next"'}</li>)
60
62
  : %(<li class="next disabled"><a href="#"><i class="material-icons">chevron_right</i></a></li>))
61
63
  tags['after'] << '</ul>'
62
- script = %(<script type="application/json" class="pagy-responsive-json">["#{id}", #{tags.to_json}, #{responsive[:widths].to_json}, #{responsive[:series].to_json}]</script>)
63
- %(<div id="pagy-nav-#{id}" class="pagy-nav-responsive-materialize pagination" role="navigation" aria-label="pager"></div>#{script})
64
+ script = pagy_json_tag(:responsive, id, tags, responsive[:widths], responsive[:series])
65
+ %(<div id="#{id}" class="pagy-nav-responsive-materialize pagy-materialize-responsive-nav pagination" role="navigation" aria-label="pager"></div>#{script})
64
66
  end
67
+ Pagy.deprecate self, :pagy_nav_responsive_materialize, :pagy_materialize_responsive_nav
65
68
 
66
69
  end
67
70
  end
@@ -1,46 +1,4 @@
1
- # See the Pagy documentation: https://ddnexus.github.io/pagy/extras/navs
2
- # frozen_string_literal: true
1
+ Warning.warn %(WARNING: The "navs" extra is deprecated and will be removed in 2.0; please require "pagy/extras/plain" instead.\n)
3
2
 
4
- require 'pagy/extras/shared'
3
+ require 'pagy/extras/plain'
5
4
 
6
- class Pagy
7
- module Frontend
8
-
9
- # Generic compact pagination: it returns the html with the series of links to the pages
10
- # we use a numeric input tag to set the page and the Pagy.compact javascript to navigate
11
- def pagy_nav_compact(pagy, id=caller(1,1)[0].hash)
12
- html, link, p_prev, p_next, p_page, p_pages = +'', pagy_link_proc(pagy), pagy.prev, pagy.next, pagy.page, pagy.pages
13
-
14
- html << %(<nav id="pagy-nav-#{id}" class="pagy-nav-compact pagination" role="navigation" aria-label="pager">)
15
- html << link.call(MARKER, '', %(style="display: none;" ))
16
- (html << link.call(1, '', %(style="display: none;" ))) if defined?(TRIM)
17
- html << (p_prev ? %(<span class="page prev">#{link.call p_prev, pagy_t('pagy.nav.prev'), 'aria-label="previous"'}</span> )
18
- : %(<span class="page prev disabled">#{pagy_t('pagy.nav.prev')}</span> ))
19
- 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;">)
20
- html << %(<span class="pagy-compact-input" style="margin: 0 0.6rem;">#{pagy_t('pagy.compact', page_input: input, count: p_page, pages: p_pages)}</span> )
21
- html << (p_next ? %(<span class="page next">#{link.call p_next, pagy_t('pagy.nav.next'), 'aria-label="next"'}</span>)
22
- : %(<span class="page next disabled">#{pagy_t('pagy.nav.next')}</span>))
23
- html << %(</nav><script type="application/json" class="pagy-compact-json">["#{id}", "#{MARKER}", "#{p_page}", #{!!defined?(TRIM)}]</script>)
24
- end
25
-
26
- # Generic responsive pagination: it returns the html with the series of links to the pages
27
- # rendered by the Pagy.responsive javascript
28
- def pagy_nav_responsive(pagy, id=caller(1,1)[0].hash)
29
- tags, link, p_prev, p_next, responsive = {}, pagy_link_proc(pagy), pagy.prev, pagy.next, pagy.responsive
30
-
31
- tags['before'] = (p_prev ? %(<span class="page prev">#{link.call p_prev, pagy_t('pagy.nav.prev'), 'aria-label="previous"'}</span> )
32
- : %(<span class="page prev disabled">#{pagy_t('pagy.nav.prev')}</span> ))
33
- responsive[:items].each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
34
- tags[item.to_s] = if item.is_a?(Integer); %(<span class="page">#{link.call item}</span> ) # page link
35
- elsif item.is_a?(String) ; %(<span class="page active">#{item}</span> ) # current page
36
- elsif item == :gap ; %(<span class="page gap">#{pagy_t('pagy.nav.gap')}</span> ) # page gap
37
- end
38
- end
39
- tags['after'] = (p_next ? %(<span class="page next">#{link.call p_next, pagy_t('pagy.nav.next'), 'aria-label="next"'}</span>)
40
- : %(<span class="page next disabled">#{pagy_t('pagy.nav.next')}</span>))
41
- script = %(<script type="application/json" class="pagy-responsive-json">["#{id}", #{tags.to_json}, #{responsive[:widths].to_json}, #{responsive[:series].to_json}]</script>)
42
- %(<nav id="pagy-nav-#{id}" class="pagy-nav-responsive pagination" role="navigation" aria-label="pager"></nav>#{script})
43
- end
44
-
45
- end
46
- end
@@ -0,0 +1,51 @@
1
+ # See the Pagy documentation: https://ddnexus.github.io/pagy/extras/plain
2
+ # frozen_string_literal: true
3
+
4
+ require 'pagy/extras/shared'
5
+
6
+ class Pagy
7
+ module Frontend
8
+
9
+ # added alias for symmetry
10
+ alias :pagy_plain_nav :pagy_nav
11
+
12
+ # Plain compact pagination: it returns the html with the series of links to the pages
13
+ # we use a numeric input tag to set the page and the Pagy.compact javascript to navigate
14
+ def pagy_plain_compact_nav(pagy, id=caller(1,1)[0].hash.to_s)
15
+ html, link, p_prev, p_next, p_page, p_pages = +'', pagy_link_proc(pagy), pagy.prev, pagy.next, pagy.page, pagy.pages
16
+
17
+ html << %(<nav id="#{id}" class="pagy-nav-compact pagy-plain-compact-nav pagination" role="navigation" aria-label="pager">)
18
+ html << link.call(MARKER, '', %(style="display: none;" ))
19
+ (html << link.call(1, '', %(style="display: none;" ))) if defined?(TRIM)
20
+ html << (p_prev ? %(<span class="page prev">#{link.call p_prev, pagy_t('pagy.nav.prev'), 'aria-label="previous"'}</span> )
21
+ : %(<span class="page prev disabled">#{pagy_t('pagy.nav.prev')}</span> ))
22
+ 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;">)
23
+ html << %(<span class="pagy-compact-input" style="margin: 0 0.6rem;">#{pagy_t('pagy.compact', page_input: input, count: p_page, pages: p_pages)}</span> )
24
+ html << (p_next ? %(<span class="page next">#{link.call p_next, pagy_t('pagy.nav.next'), 'aria-label="next"'}</span>)
25
+ : %(<span class="page next disabled">#{pagy_t('pagy.nav.next')}</span>))
26
+ html << %(</nav>#{pagy_json_tag(:compact, id, MARKER, p_page, !!defined?(TRIM))})
27
+ end
28
+ Pagy.deprecate self, :pagy_nav_compact, :pagy_plain_compact_nav
29
+
30
+ # Plain responsive pagination: it returns the html with the series of links to the pages
31
+ # rendered by the Pagy.responsive javascript
32
+ def pagy_plain_responsive_nav(pagy, id=caller(1,1)[0].hash.to_s)
33
+ tags, link, p_prev, p_next, responsive = {}, pagy_link_proc(pagy), pagy.prev, pagy.next, pagy.responsive
34
+
35
+ tags['before'] = (p_prev ? %(<span class="page prev">#{link.call p_prev, pagy_t('pagy.nav.prev'), 'aria-label="previous"'}</span> )
36
+ : %(<span class="page prev disabled">#{pagy_t('pagy.nav.prev')}</span> ))
37
+ responsive[:items].each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
38
+ tags[item.to_s] = if item.is_a?(Integer); %(<span class="page">#{link.call item}</span> ) # page link
39
+ elsif item.is_a?(String) ; %(<span class="page active">#{item}</span> ) # current page
40
+ elsif item == :gap ; %(<span class="page gap">#{pagy_t('pagy.nav.gap')}</span> ) # page gap
41
+ end
42
+ end
43
+ tags['after'] = (p_next ? %(<span class="page next">#{link.call p_next, pagy_t('pagy.nav.next'), 'aria-label="next"'}</span>)
44
+ : %(<span class="page next disabled">#{pagy_t('pagy.nav.next')}</span>))
45
+ script = pagy_json_tag(:responsive, id, tags, responsive[:widths], responsive[:series])
46
+ %(<nav id="#{id}" class="pagy-nav-responsive pagy-plain-responsive-nav pagination" role="navigation" aria-label="pager"></nav>#{script})
47
+ end
48
+ Pagy.deprecate self, :pagy_nav_responsive, :pagy_plain_responsive_nav
49
+
50
+ end
51
+ end
@@ -7,7 +7,7 @@ class Pagy
7
7
  module Frontend
8
8
 
9
9
  # Pagination for semantic-ui: it returns the html with the series of links to the pages
10
- def pagy_nav_semantic(pagy)
10
+ def pagy_semantic_nav(pagy)
11
11
  html, link, p_prev, p_next = +'', pagy_link_proc(pagy, 'class="item"'), pagy.prev, pagy.next
12
12
 
13
13
  html << (p_prev ? %(#{link.call p_prev, '<i class="left small chevron icon"></i>', 'aria-label="previous"'})
@@ -20,15 +20,16 @@ class Pagy
20
20
  end
21
21
  html << (p_next ? %(#{link.call p_next, '<i class="right small chevron icon"></i>', 'aria-label="next"'})
22
22
  : %(<div class="item disabled"><i class="right small chevron icon"></i></div>))
23
- %(<div class="ui pagination menu" aria-label="pager">#{html}</div>)
23
+ %(<div class="pagy-nav-semantic pagy-semantic-nav ui pagination menu" aria-label="pager">#{html}</div>)
24
24
  end
25
+ Pagy.deprecate self, :pagy_nav_semantic, :pagy_semantic_nav
25
26
 
26
27
  # Compact pagination for semantic: it returns the html with the series of links to the pages
27
28
  # we use a numeric input tag to set the page and the Pagy.compact javascript to navigate
28
- def pagy_nav_compact_semantic(pagy, id=caller(1,1)[0].hash)
29
+ def pagy_semantic_compact_nav(pagy, id=caller(1,1)[0].hash.to_s)
29
30
  html, link, p_prev, p_next, p_page, p_pages = +'', pagy_link_proc(pagy, 'class="item"'), pagy.prev, pagy.next, pagy.page, pagy.pages
30
31
 
31
- html << %(<div id="pagy-nav-#{id}" class="pagy-nav-compact-semantic ui compact menu" role="navigation" aria-label="pager">)
32
+ html << %(<div id="#{id}" class="pagy-nav-compact-semantic pagy-semantic-compact-nav ui compact menu" role="navigation" aria-label="pager">)
32
33
  html << link.call(MARKER, '', %(style="display: none;" ))
33
34
  (html << link.call(1, '', %(style="display: none;" ))) if defined?(TRIM)
34
35
  html << (p_prev ? %(#{link.call p_prev, '<i class="left small chevron icon"></i>', 'aria-label="previous"'})
@@ -37,12 +38,13 @@ class Pagy
37
38
  html << %(<div class="pagy-compact-input item">#{pagy_t('pagy.compact', page_input: input, count: p_page, pages: p_pages)}</div> )
38
39
  html << (p_next ? %(#{link.call p_next, '<i class="right small chevron icon"></i>', 'aria-label="next"'})
39
40
  : %(<div class="item disabled"><i class="right small chevron icon"></i></div>))
40
- html << %(</div><script type="application/json" class="pagy-compact-json">["#{id}", "#{MARKER}", "#{p_page}", #{!!defined?(TRIM)}]</script>)
41
+ html << %(</div>#{pagy_json_tag(:compact, id, MARKER, p_page, !!defined?(TRIM))})
41
42
  end
43
+ Pagy.deprecate self, :pagy_nav_compact_semantic, :pagy_semantic_compact_nav
42
44
 
43
45
  # Responsive pagination for semantic: it returns the html with the series of links to the pages
44
46
  # rendered by the Pagy.responsive javascript
45
- def pagy_nav_responsive_semantic(pagy, id=caller(1,1)[0].hash)
47
+ def pagy_semantic_responsive_nav(pagy, id=caller(1,1)[0].hash.to_s)
46
48
  tags, link, p_prev, p_next, responsive = {}, pagy_link_proc(pagy, 'class="item"'), pagy.prev, pagy.next, pagy.responsive
47
49
 
48
50
  tags['before'] = (p_prev ? %(#{link.call p_prev, '<i class="left small chevron icon"></i>', 'aria-label="previous"'})
@@ -55,9 +57,10 @@ class Pagy
55
57
  end
56
58
  tags['after'] = (p_next ? %(#{link.call p_next, '<i class="right small chevron icon"></i>', 'aria-label="next"'})
57
59
  : %(<div class="item disabled"><i class="right small chevron icon"></i></div>))
58
- script = %(<script type="application/json" class="pagy-responsive-json">["#{id}", #{tags.to_json}, #{responsive[:widths].to_json}, #{responsive[:series].to_json}]</script>)
59
- %(<div id="pagy-nav-#{id}" class="pagy-nav-responsive-semantic ui pagination menu" role="navigation" aria-label="pager"></div>#{script})
60
+ script = pagy_json_tag(:responsive, id, tags, responsive[:widths], responsive[:series])
61
+ %(<div id="#{id}" class="pagy-nav-responsive-semantic pagy-semantic-responsive-nav ui pagination menu" role="navigation" aria-label="pager"></div>#{script})
60
62
  end
63
+ Pagy.deprecate self, :pagy_nav_responsive_semantic, :pagy_semantic_responsive_nav
61
64
 
62
65
  end
63
66
  end
@@ -27,4 +27,19 @@ class Pagy
27
27
  end
28
28
  end
29
29
 
30
+ def self.deprecate(mod, old_meth, new_meth)
31
+ mod.send(:define_method, old_meth) do |pagy, id=caller(1,1)[0].hash.to_s|
32
+ Warning.warn "WARNING: The ##{old_meth} pagy helper method is deprecated and will be removed in 2.0; please use ##{new_meth} instead. More info at https://github.com/ddnexus/pagy/blob/master/DEPRECATIONS.md\n"
33
+ mod.instance_method(new_meth).arity == 1 ? send(new_meth, pagy) : send(new_meth, pagy, id)
34
+ end
35
+ end
36
+
37
+ module Frontend
38
+
39
+ def pagy_json_tag(*args)
40
+ %(<script type="application/json" class="pagy-json">#{args.to_json}</script>)
41
+ end
42
+
43
+ end
44
+
30
45
  end
@@ -0,0 +1,54 @@
1
+ # See the Pagy documentation: https://ddnexus.github.io/pagy/extras/support
2
+ # frozen_string_literal: true
3
+
4
+ require 'pagy/extras/shared'
5
+
6
+ class Pagy
7
+
8
+ def to_h
9
+ { count: @count,
10
+ page: @page,
11
+ items: @items,
12
+ pages: @pages,
13
+ last: @last,
14
+ offset: @offset,
15
+ from: @from,
16
+ to: @to,
17
+ prev: @prev,
18
+ next: @next,
19
+ vars: @vars,
20
+ series: series }
21
+ end
22
+
23
+ module Frontend
24
+
25
+ def pagy_prev_url(pagy)
26
+ pagy_url_for(pagy.prev, pagy) if pagy.prev
27
+ end
28
+
29
+ def pagy_next_url(pagy)
30
+ pagy_url_for(pagy.next, pagy) if pagy.next
31
+ end
32
+
33
+ def pagy_prev_link(pagy, text = pagy_t('pagy.nav.prev'), link_extra = '')
34
+ pagy.prev ? %(<span class="page prev"><a href="#{pagy_prev_url(pagy)}" rel="next" aria-label="next" #{pagy.vars[:link_extra]} #{link_extra}>#{text}</a></span>)
35
+ : %(<span class="page prev disabled">#{text}</span>)
36
+ end
37
+
38
+ def pagy_next_link(pagy, text = pagy_t('pagy.nav.next'), link_extra = '')
39
+ pagy.next ? %(<span class="page next"><a href="#{pagy_next_url(pagy)}" rel="next" aria-label="next" #{pagy.vars[:link_extra]} #{link_extra}>#{text}</a></span>)
40
+ : %(<span class="page next disabled">#{text}</span>)
41
+ end
42
+
43
+ def pagy_serialized(pagy)
44
+ pagy.to_h.merge(prev_url: pagy_prev_url(pagy), next_url: pagy_next_url(pagy))
45
+ end
46
+
47
+ # Multi purpose JSON tag for custom javascript initialization
48
+ def pagy_apply_init_tag(pagy, function, payload=pagy_serialized(pagy))
49
+ pagy_json_tag(:applyInit, function, payload)
50
+ end
51
+
52
+ end
53
+
54
+ end
@@ -6,7 +6,7 @@
6
6
  Usage: link.call( page_number [, text [, extra_attributes_string ]])
7
7
  -%>
8
8
  <% link = pagy_link_proc(pagy, 'class="page-link"') -%>
9
- <%# -%><nav aria-label="pager" class="pagy-nav-bootstrap pagination" role="navigation">
9
+ <%# -%><nav aria-label="pager" class="pagy-nav-bootstrap pagy-bootstrap-nav pagination" role="navigation">
10
10
  <%# -%> <ul class="pagination">
11
11
  <% if pagy.prev -%> <li class="page-item prev"><%== link.call(pagy.prev, pagy_t('pagy.nav.prev'), 'aria-label="previous"') %></li>
12
12
  <% else -%> <li class="page-item prev disabled"><a href="#" class="page-link"><%== pagy_t('pagy.nav.prev') %></a></li>
@@ -6,7 +6,7 @@
6
6
 
7
7
  - link = pagy_link_proc(pagy, 'class="page-link"')
8
8
 
9
- %nav.pagy-nav-bootstrap.pagination{"aria-label" => "pager", :role => "navigation"}
9
+ %nav.pagy-nav-bootstrap.pagy-bootstrap-nav.pagination{"aria-label" => "pager", :role => "navigation"}
10
10
 
11
11
  %ul.pagination
12
12
 
@@ -6,7 +6,7 @@
6
6
 
7
7
  - link = pagy_link_proc(pagy, 'class="page-link"')
8
8
 
9
- nav.pagy-nav-bootstrap.pagination role="navigation" aria-label="pager"
9
+ nav.pagy-nav-bootstrap.pagy-bootstrap-nav.pagination role="navigation" aria-label="pager"
10
10
 
11
11
  ul.pagination
12
12
 
@@ -6,7 +6,7 @@
6
6
  Usage: link.call( page_number [, text [, extra_attributes_string ]])
7
7
  -%>
8
8
  <% link = pagy_link_proc(pagy) -%>
9
- <%# -%><nav class="pagy-nav-bulma pagination is-centered" role="navigation" aria-label="pagination">
9
+ <%# -%><nav class="pagy-nav-bulma pagy-bulma-nav pagination is-centered" role="navigation" aria-label="pagination">
10
10
  <% if pagy.prev -%> <%== link.call(pagy.prev, pagy_t('pagy.nav.prev'), 'class="pagination-previous" aria-label="previous page"') %>
11
11
  <% else -%> <a class="pagination-previous" disabled><%== pagy_t('pagy.nav.prev') %></a>
12
12
  <% end -%>
@@ -6,7 +6,7 @@
6
6
 
7
7
  - link = pagy_link_proc(pagy)
8
8
 
9
- %nav.pagy-nav-bulma.pagination.is-centered{:role => "navigation", "aria-label" => "pagination"}
9
+ %nav.pagy-nav-bulma.pagy-bulma_nav.pagination.is-centered{:role => "navigation", "aria-label" => "pagination"}
10
10
 
11
11
  - if pagy.prev
12
12
  != link.call(pagy.prev, pagy_t('pagy.nav.prev'), 'class="pagination-previous" aria-label="previous page"')
@@ -6,7 +6,7 @@
6
6
 
7
7
  - link = pagy_link_proc(pagy)
8
8
 
9
- nav.pagy-nav-bulma.pagination.is-centered role="navigation" aria-label="pagination"
9
+ nav.pagy-nav-bulma.pagy-bulma-nav.pagination.is-centered role="navigation" aria-label="pagination"
10
10
 
11
11
  - if pagy.prev
12
12
  == link.call(pagy.prev, pagy_t('pagy.nav.prev'), 'class="pagination-previous" aria-label="previous page"')
@@ -6,7 +6,7 @@
6
6
  Usage: link.call( page_number [, text [, extra_attributes_string ]])
7
7
  -%>
8
8
  <% link = pagy_link_proc(pagy) -%>
9
- <%# -%><nav class="pagy-nav-foundation" role="navigation" aria-label="Pagination">
9
+ <%# -%><nav class="pagy-nav-foundation pagy-foundation-nav" role="navigation" aria-label="Pagination">
10
10
  <%# -%> <ul class="pagination">
11
11
  <% if pagy.prev -%> <li class="prev"><%== link.call(pagy.prev, pagy_t('pagy.nav.prev'), 'aria-label="previous"') %></li>
12
12
  <% else -%> <li class="prev disabled"><%== pagy_t('pagy.nav.prev') %></li>
@@ -6,7 +6,7 @@
6
6
 
7
7
  - link = pagy_link_proc(pagy)
8
8
 
9
- %nav.pagy-nav-foundation{"role" => "navigation", "aria-label" => "Pagination"}
9
+ %nav.pagy-nav-foundation.pagy-foundation-nav{"role" => "navigation", "aria-label" => "Pagination"}
10
10
 
11
11
  %ul.pagination
12
12
 
@@ -6,7 +6,7 @@
6
6
 
7
7
  - link = pagy_link_proc(pagy)
8
8
 
9
- nav.pagy-nav-foundation role="navigation" aria-label="Pagination"
9
+ nav.pagy-nav-foundation.pagy-foundation-nav role="navigation" aria-label="Pagination"
10
10
 
11
11
  ul.pagination
12
12
 
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: 1.1.0
4
+ version: 1.2.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-11-20 00:00:00.000000000 Z
11
+ date: 2018-12-03 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,
@@ -48,23 +48,25 @@ files:
48
48
  - lib/pagy/extras/materialize.rb
49
49
  - lib/pagy/extras/navs.rb
50
50
  - lib/pagy/extras/overflow.rb
51
+ - lib/pagy/extras/plain.rb
51
52
  - lib/pagy/extras/searchkick.rb
52
53
  - lib/pagy/extras/semantic.rb
53
54
  - lib/pagy/extras/shared.rb
55
+ - lib/pagy/extras/support.rb
54
56
  - lib/pagy/extras/trim.rb
55
57
  - lib/pagy/frontend.rb
58
+ - lib/templates/bootstrap_nav.html.erb
59
+ - lib/templates/bootstrap_nav.html.haml
60
+ - lib/templates/bootstrap_nav.html.slim
61
+ - lib/templates/bulma_nav.html.erb
62
+ - lib/templates/bulma_nav.html.haml
63
+ - lib/templates/bulma_nav.html.slim
64
+ - lib/templates/foundation_nav.html.erb
65
+ - lib/templates/foundation_nav.html.haml
66
+ - lib/templates/foundation_nav.html.slim
56
67
  - lib/templates/nav.html.erb
57
68
  - lib/templates/nav.html.haml
58
69
  - lib/templates/nav.html.slim
59
- - lib/templates/nav_bootstrap.html.erb
60
- - lib/templates/nav_bootstrap.html.haml
61
- - lib/templates/nav_bootstrap.html.slim
62
- - lib/templates/nav_bulma.html.erb
63
- - lib/templates/nav_bulma.html.haml
64
- - lib/templates/nav_bulma.html.slim
65
- - lib/templates/nav_foundation.html.erb
66
- - lib/templates/nav_foundation.html.haml
67
- - lib/templates/nav_foundation.html.slim
68
70
  - pagy.gemspec
69
71
  homepage: https://github.com/ddnexus/pagy
70
72
  licenses: