pagy 0.4.0 → 0.4.1

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: '0479a6de6806589108454c59ca39a6446ee0d339c5b111c19eddb69fcd9a4285'
4
- data.tar.gz: 26bf5f952a06f4f874ec489adb337207b1b7664a3be70f95440656b55dcbb189
3
+ metadata.gz: 45ce91ee38e0d07518e33c4f2a16cc19c65c2848193ad545fbec38ebee5be5d9
4
+ data.tar.gz: b340e01c042fbefd0874c88395a5c9a93e020dc422725d700a21ea996287b907
5
5
  SHA512:
6
- metadata.gz: d7cee6202f84b11adff3f04edffb9a367bb881f391a9f7635e191ebef9231d10d94628f98ef11cdda279a79808003e90689d47881158ea26443319745dac470e
7
- data.tar.gz: 410ce77476e24ec9f8069b4723824f69ec1f8966ddcc0e2989a79acfc56def0a53ef7b20383c393fbdaad32d93c503d7136b819d8503587a242c387fd062d73a
6
+ metadata.gz: e3639fa6a75f4204277281c49e0579dc02304a3e11d32029508b81e624dba6a494ad90af1440d15db884e84015282e61bd2e3497c7cb2354197dda95e037f452
7
+ data.tar.gz: b406ef5bad8f0bd50d2065ffce5c04673ad0858eb293337bdaa03057aa80abef014550279db963a27e757e1393de13fa7f77e8a350bb7a8c04d00c4784afe8c3
@@ -18,7 +18,7 @@ en:
18
18
  zero: "No %{item_name} found"
19
19
  one: "Displaying <b>1</b> %{item_name}"
20
20
  other: "Displaying <b>all %{count}</b> %{item_name}"
21
- multiple_pages: "Displaying %{item_name} <b>%{from}-%{to}</b> of <b>%{count}</b>"
21
+ multiple_pages: "Displaying %{item_name} <b>%{from}-%{to}</b> of <b>%{count}</b> in total"
22
22
  item:
23
23
  zero: "items"
24
24
  one: "item"
@@ -7,7 +7,7 @@ require 'ostruct'
7
7
  # Notice that it doesn't actually do any pagination, nor navigation... that is
8
8
  # done with a few helpers in the Pagy::Backend and Pagy::Frontend modules.
9
9
 
10
- class Pagy ; VERSION = '0.4.0'
10
+ class Pagy ; VERSION = '0.4.1'
11
11
 
12
12
  autoload :Backend, 'pagy/backend'
13
13
  autoload :Frontend, 'pagy/frontend'
@@ -37,7 +37,7 @@ class Pagy ; VERSION = '0.4.0'
37
37
  instance_variable_set(:"@#{k}", @opts.delete(k)) # set all the metrics variables
38
38
  end
39
39
  @pages = @last = [(@count.to_f / @limit).ceil, 1].max # cardinal and ordinal meanings
40
- (1..@last).cover?(@page) || raise(OutOfRangeError, "expected :page in 1..#{last}; got #{@page.inspect}")
40
+ (1..@last).cover?(@page) || raise(OutOfRangeError, "expected :page in 1..#{@last}; got #{@page.inspect}")
41
41
  @offset += @limit * (@page - 1) # initial offset + offset for pagination
42
42
  @limit = @count % @limit if @page == @last # adjust limit for last page (for pre-limit(ed) collection)
43
43
  @from = @count.zero? ? 0 : @offset+1 # page begins from item
@@ -46,15 +46,15 @@ class Pagy ; VERSION = '0.4.0'
46
46
  @next = (@page+1 unless @page == @last) # nil if no next page
47
47
  @series = [] # e.g. [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
48
48
  all = (0..@last+1) # page range with boundaries
49
- arund = ([@page-@before, 1].max .. [@page+@after, @last].min).to_a # before..after pages
50
- row = (all.first(@initial+1) | arund | all.last(@final+1)).sort # pages with boundaries
49
+ around = ([@page-@before, 1].max .. [@page+@after, @last].min).to_a # before..after pages
50
+ row = (all.first(@initial+1) | around | all.last(@final+1)).sort # row of pages with boundaries
51
51
  row.each_cons(2) do |a, b| # loop in consecutive pairs
52
52
  if a+1 == b; @series.push(a) # no gap -> no additions
53
- elsif a+2 == b; @series.push(a, a+1) # 1 page gap -> fill with next page
54
- else @series.push(a, :gap) # larger gap -> add :gap
55
- end # skip the right boundary (last+1)
53
+ elsif a+2 == b; @series.push(a, a+1) # 1 page gap -> fill with missing page
54
+ else @series.push(a, :gap) # n page gap -> add :gap
55
+ end # skip the end-boundary (last+1)
56
56
  end
57
- @series.shift # remove the left boundary (0)
57
+ @series.shift # remove the start-boundary (0)
58
58
  @series[@series.index(@page)] = @page.to_s # convert the current page to String
59
59
  end
60
60
 
@@ -4,11 +4,11 @@ class Pagy
4
4
  # #pagy method, but it does not add any functionality on its own.
5
5
  #
6
6
  # Using the module allows you to have a predefined method and a few sub-methods
7
- # (i.e. methods called only by the predefine method) handy if you need to override
7
+ # (i.e. methods called only by the predefined method) handy if you need to override
8
8
  # some aspect of the predefined #pagy method.
9
9
  #
10
10
  # However, you can just explicitly write your own pagy method in just a couple of
11
- # lines of code, specially if you need to override two or more methods. For example:
11
+ # lines, specially if you need to override two or more methods. For example:
12
12
  #
13
13
  # def pagy(scope, opts={})
14
14
  # pagy = Pagy.new scope.count, page: params[:page], **opts
@@ -5,82 +5,53 @@ class Pagy
5
5
  # in order to fit its behavior with your app needs (e.g.: removing and adding some param or
6
6
  # allowing fancy routes, etc.)
7
7
  #
8
- # All the code has been optimized for speed and low memory usage.
9
- # In particular there are a couple of very specialized methods (pagy_t and pagy_link_proc)
10
- # that can be used in place of the equivalent (but general-purpose) framework helpers,
11
- # in order to dramatically boost speed and reduce memory usage.
12
- #
13
- # For example if you use the rails link_to in order to link each page in the pagination bar,
14
- # you will call 10 or 20 times the same method that has to do a lot of things again and again
15
- # just to get you (almost) the same string repeated with just the page number replaced.
16
- # Since pagination is a very specialized process, it is possible to do the same by using
17
- # a one-line proc that uses just one single string interpolation. Compared to the general-purpose
18
- # link_to method, the pagy_link_proc benchmark gives a 20 times faster score and 12 times less memory.
19
- #
20
- # Notice: The code in this module may not look very pretty (as most code dealing with many long strings),
21
- # but its performance makes it very sexy! ;)
22
-
8
+ # All the code here has been optimized for performance: it may not look very pretty
9
+ # (as most code dealing with many long strings), but its performance makes it very sexy! ;)
23
10
  module Frontend
24
11
 
25
- # Notice: Each long tag-string of the nav methods is written on one single line with a long
26
- # interpolation in the middle for performance and... (hard to believe) readability reasons.
27
- #
28
- # Performance:
29
- # using the '%' method like in the following example:
30
- #
31
- # case item
32
- # when Integer; '<span class="page">%s</span>' % link.call(item)
33
- # when String ; '<span class="page active">%s</span>' % item
34
- # when :gap ; '<span class="page gap">%s</span>' % pagy_t('pagy.nav.gap')
35
- # end
36
- #
37
- # would look a lot better but the benchmark really sucks! :/
38
- #
39
- # Readability:
40
- # If you disable soft-wrapping in your editor, you can focus on the very simple ruby logic
41
- # unfolding at the beginning of the lines, without any string-distraction.
42
- # For the strings: each tag-string has only one interpolation, so at the end they are
43
- # simple to deal with, even if they look a bit ugly.
44
-
45
12
  # Generic pagination: it returns the html with the series of links to the pages
46
13
  def pagy_nav(pagy, opts=nil)
47
- pagy.opts.merge!(opts) if opts ; link = pagy_link_proc(pagy) ; tags = [] # init all vars
14
+ opts = opts ? pagy.opts.merge(opts) : pagy.opts
15
+ link = pagy_link_proc(pagy)
16
+ tags = []
48
17
 
49
18
  tags << (pagy.prev ? %(<span class="page prev">#{link.call pagy.prev, pagy_t('pagy.nav.prev'.freeze), 'aria-label="previous"'.freeze}</span>)
50
19
  : %(<span class="page prev disabled">#{pagy_t('pagy.nav.prev'.freeze)}</span>))
51
20
  pagy.series.each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
52
21
  tags << case item
53
- when Integer; %(<span class="page">#{link.call item}</span>) # page link
22
+ when Integer; %(<span class="page">#{link.call item}</span>) # page link
54
23
  when String ; %(<span class="page active">#{item}</span>) # current page
55
24
  when :gap ; %(<span class="page gap">#{pagy_t('pagy.nav.gap'.freeze)}</span>) # page gap
56
25
  end
57
26
  end
58
27
  tags << (pagy.next ? %(<span class="page next">#{link.call pagy.next, pagy_t('pagy.nav.next'.freeze), 'aria-label="next"'.freeze}</span>)
59
28
  : %(<span class="page next disabled">#{pagy_t('pagy.nav.next'.freeze)}</span>))
60
- %(<nav class="#{pagy.opts[:class]||'pagination'.freeze}" role="navigation" aria-label="pager">#{tags.join(pagy.opts[:separator]||' '.freeze)}</nav>)
29
+ %(<nav class="#{opts[:class]||'pagination'.freeze}" role="navigation" aria-label="pager">#{tags.join(opts[:separator]||' '.freeze)}</nav>)
61
30
  end
62
31
 
63
32
 
64
33
  # Pagination for bootstrap: it returns the html with the series of links to the pages
65
34
  def pagy_nav_bootstrap(pagy, opts=nil)
66
- pagy.opts.merge!(opts) if opts ; link = pagy_link_proc(pagy) ; tags = [] # init all vars
35
+ opts = opts ? pagy.opts.merge(opts) : pagy.opts
36
+ link = pagy_link_proc(pagy, 'class="page-link"'.freeze)
37
+ tags = []
67
38
 
68
- tags << (pagy.prev ? %(<li class="page-item prev">#{link.call pagy.prev, pagy_t('pagy.nav.prev'.freeze), 'class="page-link" aria-label="previous"'.freeze}</li>)
39
+ tags << (pagy.prev ? %(<li class="page-item prev">#{link.call pagy.prev, pagy_t('pagy.nav.prev'.freeze), 'aria-label="previous"'.freeze}</li>)
69
40
  : %(<li class="page-item prev disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.prev'.freeze)}</a></li>))
70
41
  pagy.series.each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
71
42
  tags << case item
72
- when Integer; %(<li class="page-item">#{link.call item, item, 'class="page-link"'.freeze}</li>) # page link
73
- when String ; %(<li class="page-item active">#{link.call item, item, 'class="page-link"'.freeze}</li>) # active page
43
+ when Integer; %(<li class="page-item">#{link.call item}</li>) # page link
44
+ when String ; %(<li class="page-item active">#{link.call item}</li>) # active page
74
45
  when :gap ; %(<li class="page-item gap disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.gap'.freeze)}</a></li>) # page gap
75
46
  end
76
47
  end
77
- tags << (pagy.next ? %(<li class="page-item next">#{link.call pagy.next, pagy_t('pagy.nav.next'.freeze), 'class="page-link" aria-label="next"'.freeze}</li>)
48
+ tags << (pagy.next ? %(<li class="page-item next">#{link.call pagy.next, pagy_t('pagy.nav.next'.freeze), 'aria-label="next"'.freeze}</li>)
78
49
  : %(<li class="page-item next disabled"><a href="#" class="page-link">#{pagy_t('pagy.nav.next'.freeze)}</a></li>))
79
- %(<nav class="#{pagy.opts[:class]||'pagination'.freeze}" role="navigation" aria-label="pager"><ul class="pagination">#{tags.join}</ul></nav>)
50
+ %(<nav class="#{opts[:class]||'pagination'.freeze}" role="navigation" aria-label="pager"><ul class="pagination">#{tags.join}</ul></nav>)
80
51
  end
81
52
 
82
53
 
83
- # return examples: "Displaying items 41-60 of 324" or "Displaying Products 41-60 of 324"
54
+ # return examples: "Displaying items 41-60 of 324 in total" or "Displaying Products 41-60 of 324 in total"
84
55
  def pagy_info(pagy, vars=nil)
85
56
  name = vars && vars[:item_name] || pagy_t(pagy.opts[:i18n_key] || 'pagy.info.item'.freeze, count: pagy.count)
86
57
  name = pagy_t('pagy.info.item'.freeze, count: pagy.count) if name.start_with?('translation missing:'.freeze)
@@ -100,7 +71,7 @@ class Pagy
100
71
  # not needed (for example when your application is a single-locale app, e.g. only 'en', or only 'fr'...).
101
72
  #
102
73
  # It implements only the very basic functionality of the I18n.t method
103
- # but it is a lot faster, it uses less memory and it's still good enough for the limited Pagy's needs.
74
+ # but it's still good enough for the limited Pagy's needs and it is faster.
104
75
  #
105
76
  # You can still use this method with a pluralization different than English
106
77
  # (i.e. not 'zero', 'one', 'other' plurals). In that case you should define the
@@ -111,14 +82,14 @@ class Pagy
111
82
  # and add your translations to the I18n usual locales files
112
83
 
113
84
  hash = YAML.load_file Opts.i18n_file || Pagy.root.join('locales', 'pagy.yml')
114
- DATA = hash[hash.keys.first].freeze
85
+ I18N = hash[hash.keys.first].freeze
115
86
 
116
87
  # Similar to I18n.t for interpolation and pluralization, with the following constraints:
117
88
  # - the path/keys option is supported only in dot-separated string or symbol format
118
89
  # - the :scope and :default options are not supported
119
90
  # - no exception are raised: the errors are returned as translated strings
120
91
  def pagy_t(path, vars={})
121
- value = DATA.dig(*path.to_s.split('.'.freeze))
92
+ value = I18N.dig(*path.to_s.split('.'.freeze))
122
93
  if value.is_a?(Hash)
123
94
  vars.has_key?(:count) or return value
124
95
  plural = (Opts.i18n_plurals ||= -> (c) {c==0 && 'zero' || c==1 && 'one' || 'other'}).call(vars[:count])
@@ -129,26 +100,63 @@ class Pagy
129
100
  sprintf value, Hash.new{|h,k| "%{#{k}}"}.merge!(vars) # interpolation
130
101
  end
131
102
 
132
- # This method returns a very efficient proc to produce the page links.
133
- # The proc is somewhat similar to link_to, but it works a lot faster
134
- # with a simple one-string-only interpolation.
135
- # The proc also adds the eventual :link_extra string option to the link tag
103
+ # NOTICE: This method is used internally, so you need to know about it only if you
104
+ # are going to override a *_nav helper or a template AND changing the link tags.
105
+ #
106
+ # You call this method in order to get a proc that you will call to produce the page links.
107
+ # The reasaon it is a 2 step process instead of a single method call is performance.
108
+ #
109
+ # Call the method to get the proc (once):
110
+ # link = pagy_link_proc( pagy [, extra_attributes_string ])
111
+ #
112
+ # Call the proc to get the links (multiple times):
113
+ # link.call( page_number [, label [, extra_attributes_string ]])
114
+ #
115
+ # You can pass extra attribute strings to get inserted in the link tags at many different levels.
116
+ # Depending by the scope you want your attributes to be added, (from wide to narrow) you can:
117
+ #
118
+ # 1. For all pagy objects: set the global option :link_extra:
119
+ #
120
+ # Pagy::Opts.extra_link = 'data-remote="true"'
121
+ # link.call(page_number=2)
122
+ # #=> <a href="...?page=2" data-remote="true">2</a>
123
+ #
124
+ # 2. For one pagy object: pass a :link_extra option to a pagy constructor (Pagy.new or pagy controller method):
125
+ #
126
+ # @pagy, @records = pagy(my_scope, extra_link: 'data-remote="true"')
127
+ # link.call(page_number)
128
+ # #=> <a href="...?page=2" data-remote="true">2</a>
129
+ #
130
+ # 3. For one pagy_nav render: pass a :link_extra option to a *_nav method:
131
+ #
132
+ # pagy_nav(@pagy, extra_link: 'data-remote="true"') #
133
+ # link.call(page_number)
134
+ # #=> <a href="...?page=2" data-remote="true">2</a>
135
+ #
136
+ # 4. For all the calls to the returned pagy_link_proc: pass an extra attributes string when you get the proc:
137
+ #
138
+ # link = pagy_link_proc(pagy, 'class="page-link"')
139
+ # link.call(page_number)
140
+ # #=> <a href="...?page=2" data-remote="true" class="page-link">2</a>
141
+ #
142
+ # 5. For a single link.call: pass an extra attributes string when you call the proc:
136
143
  #
137
- # Notice: all the rendering methods in this module use only strings for fast performance,
138
- # so use the :link_extra option to add string-formatted attributes like for example:
139
- # :link_extra => 'data-remote="true" class="special"'
144
+ # link.call(page_number, 'aria-label="my-label"')
145
+ # #=> <a href="...?page=2" data-remote="true" class="page-link" aria-label="my-label">2</a>
140
146
  #
141
- # This method calls the (possibly overridden and slow) pagy_url_for only once to get the url
142
- # with the MARKER in place of the page number, then it splits the beginning tag-string at the MARKER
143
- # and defines a proc that interpolates the two fragments around the real page number with the rest of the tag.
144
- # Tricky but very fast!
147
+ # WARNING: since we use only strings for performance, the attribute strings get concatenated, not merged!
148
+ # Be careful not to pass the same attribute at different levels multiple times. That would generate a duplicated
149
+ # attribute which is illegal html (although handled by all mayor browsers by ignoring all the duplicates but the first)
145
150
 
146
151
  MARKER = "-pagy-#{'pagy'.hash}-".freeze
147
152
 
148
- def pagy_link_proc(pagy)
149
- rel = { pagy.prev=>' rel="prev"'.freeze, pagy.next=>' rel="next"'.freeze }
150
- a, b = %(<a href="#{pagy_url_for(MARKER)}" #{pagy.opts[:link_extra]}).split(MARKER)
151
- -> (n, name=n.to_s, extra=''.freeze) { "#{a}#{n}#{b}#{rel[n]||''.freeze} #{extra}>#{name}</a>"}
153
+ def pagy_link_proc(pagy, lx=''.freeze) # link extra
154
+ p_prev, p_next, p_lx = pagy.prev, pagy.next, pagy.opts[:link_extra]
155
+ a, b = %(<a href="#{pagy_url_for(MARKER)}"#{p_lx ? %( #{p_lx}) : ''.freeze}#{lx.empty? ? lx : %( #{lx})}).split(MARKER)
156
+ -> (n, text=n, x=''.freeze) { "#{a}#{n}#{b}#{ if n == p_prev; ' rel="prev"'.freeze
157
+ elsif n == p_next; ' rel="next"'.freeze
158
+ else ''.freeze
159
+ end }#{x.empty? ? x : %( #{x})}>#{text}</a>" }
152
160
  end
153
161
 
154
162
  end
@@ -2,39 +2,31 @@
2
2
  This template is i18n-ready: if you don't use i18n, then you can replace the pagy_t
3
3
  calls with the actual strings ("&lsaquo; Prev", "Next &rsaquo;", "&hellip;").
4
4
 
5
- This template uses the pagy_link_proc helper for high speed (+20x) and low memory (-12x).
6
- Usage: link.call(page_number[, label[,extra_attributes_string]])
5
+ The link variable is set to a proc that returns the link tag.
6
+ Usage: link.call( page_number [, text [, extra_attributes_string ]])
7
7
  -%>
8
- <% link = pagy_link_proc(pagy) %>
9
-
8
+ <% link = pagy_link_proc(pagy, 'class="page-link"') -%>
10
9
  <nav aria-label="pager" class="pagination" role="navigation">
11
10
  <ul class="pagination">
12
-
13
11
  <% if pagy.prev -%>
14
- <li class="page-item prev"><%== link.call(pagy.prev, pagy_t('pagy.nav.prev'), 'class="page-link" aria-label="previous"') %></li>
12
+ <li class="page-item prev"><%== link.call(pagy.prev, pagy_t('pagy.nav.prev'), 'aria-label="previous"') %></li>
15
13
  <% else -%>
16
14
  <li class="page-item prev disabled"><a href="#" class="page-link"><%== pagy_t('pagy.nav.prev') %></a></li>
17
15
  <% end -%>
18
-
19
16
  <% pagy.series.each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36] -%>
20
17
  <% case item
21
18
  when Integer # page link -%>
22
- <li class="page-item"><%== link.call(item, item, 'class="page-link"') %></li>
23
-
19
+ <li class="page-item"><%== link.call(item) %></li>
24
20
  <% when String # current page -%>
25
- <li class="page-item active"><%== link.call(item, item, 'class="page-link"') %></li>
26
-
21
+ <li class="page-item active"><%== link.call(item) %></li>
27
22
  <% when :gap # page gap -%>
28
23
  <li class="page-item disabled gap"><a href="#" class="page-link"><%== pagy_t('pagy.nav.gap') %></a></li>
29
-
30
24
  <% end -%>
31
25
  <% end -%>
32
-
33
26
  <% if pagy.next -%>
34
- <li class="page-item next"><%== link.call(pagy.next, pagy_t('pagy.nav.next'), 'class="page-link" aria-label="next"') %></li>
27
+ <li class="page-item next"><%== link.call(pagy.next, pagy_t('pagy.nav.next'), 'aria-label="next"') %></li>
35
28
  <% else -%>
36
29
  <li class="page-item next disabled"><a href="#" class="page-link"><%== pagy_t('pagy.nav.next') %></a></li>
37
30
  <% end -%>
38
-
39
31
  </ul>
40
32
  </nav>
@@ -1,17 +1,17 @@
1
1
  -# This template is i18n-ready: if you don't use i18n, then you can replace the pagy_t
2
2
  -# calls with the actual strings ("&lsaquo; Prev", "Next &rsaquo;", "&hellip;").
3
3
 
4
- -# This template uses the pagy_link_proc helper for high speed (+20x) and low memory (-12x).
5
- -# Usage: link.call(page_number[, label[,extra_attributes_string]])
4
+ -# The link variable is set to a proc that returns the link tag.
5
+ -# Usage: link.call( page_number [, text [, extra_attributes_string ]])
6
6
 
7
- - link = pagy_link_proc(pagy)
7
+ - link = pagy_link_proc(pagy, 'class="page-link"')
8
8
 
9
9
  %nav.pagination{"aria-label" => "pager", :role => "navigation"}
10
10
 
11
11
  %ul.pagination
12
12
 
13
13
  - if pagy.prev
14
- %li.page-item.prev!= link.call(pagy.prev, pagy_t('pagy.nav.prev'), 'class="page-link" aria-label="previous"')
14
+ %li.page-item.prev!= link.call(pagy.prev, pagy_t('pagy.nav.prev'), 'aria-label="previous"')
15
15
  - else
16
16
  %li.page-item.prev.disabled
17
17
  %a.page-link{:href => '#'}!= pagy_t('pagy.nav.prev')
@@ -19,17 +19,17 @@
19
19
  - pagy.series.each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
20
20
  - case item
21
21
  - when Integer # page link
22
- %li.page-item!= link.call(item, item, 'class="page-link"')
22
+ %li.page-item!= link.call(item)
23
23
 
24
24
  - when String # current page
25
- %li.page-item.active!= link.call(item, item, 'class="page-link"')
25
+ %li.page-item.active!= link.call(item)
26
26
 
27
27
  - when :gap # page gap
28
28
  %li.page-item.disabled.gap
29
29
  %a.page-link{:href => "#"}!= pagy_t('pagy.nav.gap')
30
30
 
31
31
  - if pagy.next
32
- %li.page-item.next!= link.call(pagy.next, pagy_t('pagy.nav.next'), 'class="page-link" aria-label="next"')
32
+ %li.page-item.next!= link.call(pagy.next, pagy_t('pagy.nav.next'), 'aria-label="next"')
33
33
  - else
34
34
  %li.page-item.next.disabled
35
35
  %a.page-link{:href => '#'}!= pagy_t('pagy.nav.next')
@@ -1,17 +1,17 @@
1
1
  / This template is i18n-ready: if you don't use i18n, then you can replace the pagy_t
2
2
  / calls with the actual strings ("&lsaquo; Prev", "Next &rsaquo;", "&hellip;").
3
3
 
4
- / This template uses the pagy_link_proc helper for high speed (+20x) and low memory (-12x).
5
- / Usage: link.call(page_number[, label[,extra_attributes_string]])
4
+ / The link variable is set to a proc that returns the link tag.
5
+ / Usage: link.call( page_number [, text [, extra_attributes_string ]])
6
6
 
7
- - link = pagy_link_proc(pagy)
7
+ - link = pagy_link_proc(pagy, 'class="page-link"')
8
8
 
9
9
  nav.pagination role="navigation" aria-label="pager"
10
10
 
11
11
  ul.pagination
12
12
 
13
13
  - if pagy.prev
14
- li.page-item.prev == link.call(pagy.prev, pagy_t('pagy.nav.prev'), 'class="page-link" aria-label="previous"')
14
+ li.page-item.prev == link.call(pagy.prev, pagy_t('pagy.nav.prev'), 'aria-label="previous"')
15
15
  - else
16
16
  li.page-item.prev.disabled
17
17
  a.page-link href="#" == pagy_t('pagy.nav.prev')
@@ -20,17 +20,17 @@ nav.pagination role="navigation" aria-label="pager"
20
20
  - case item
21
21
 
22
22
  - when Integer # page link
23
- li.page-item == link.call(item, item, 'class="page-link"')
23
+ li.page-item == link.call(item)
24
24
 
25
25
  - when String # current page
26
- li.page-item.active == link.call(item, item, 'class="page-link"')
26
+ li.page-item.active == link.call(item)
27
27
 
28
28
  - when :gap # page gap
29
29
  li.page-item.disabled.gap
30
30
  a.page-link href="#" == pagy_t('pagy.nav.gap')
31
31
 
32
32
  - if pagy.next
33
- li.page-item.next == link.call(pagy.next, pagy_t('pagy.nav.next'), 'class="page-link" aria-label="next"')
33
+ li.page-item.next == link.call(pagy.next, pagy_t('pagy.nav.next'), 'aria-label="next"')
34
34
  - else
35
35
  li.page-item.next.disabled
36
36
  a.page-link href="#" == pagy_t('pagy.nav.next')
@@ -2,38 +2,29 @@
2
2
  This template is i18n-ready: if you don't use i18n, then you can replace the pagy_t
3
3
  calls with the actual strings ("&lsaquo; Prev", "Next &rsaquo;", "&hellip;").
4
4
 
5
- This template uses the pagy_link_proc helper for high speed (+20x) and low memory (-12x).
6
- Usage: link.call(page_number[, label[,extra_attributes_string]])
7
- -%>
5
+ The link variable is set to a proc that returns the link tag.
6
+ Usage: link.call( page_number [, text [, extra_attributes_string ]])
7
+ -%>
8
8
  <% link = pagy_link_proc(pagy) -%>
9
-
10
9
  <nav aria-label="pager" class="pagination" role="navigation">
11
-
12
10
  <% if pagy.prev -%>
13
11
  <span class="page prev"><%== link.call(pagy.prev, pagy_t('pagy.nav.prev'), 'aria-label="previous"') %></span>
14
12
  <% else -%>
15
13
  <span class="page prev disabled"><%== pagy_t('pagy.nav.prev') %></span>
16
14
  <% end -%>
17
-
18
15
  <% pagy.series.each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36] -%>
19
16
  <% case item
20
-
21
17
  when Integer # page link -%>
22
18
  <span class="page"><%== link.call(item) %></span>
23
-
24
19
  <% when String # current page -%>
25
20
  <span class="page current"><%= item %></span>
26
-
27
21
  <% when :gap # page gap -%>
28
22
  <span class="page gap"><%== pagy_t('pagy.nav.gap') %></span>
29
-
30
23
  <% end -%>
31
24
  <% end -%>
32
-
33
25
  <% if pagy.next -%>
34
26
  <span class="page next"><%== link.call(pagy.next, pagy_t('pagy.nav.next'), 'aria-label="next"') %></span>
35
27
  <% else -%>
36
28
  <span class="page next disabled"><%== pagy_t('pagy.nav.next') %></span>
37
29
  <% end -%>
38
-
39
30
  </nav>
@@ -1,8 +1,8 @@
1
1
  -# This template is i18n-ready: if you don't use i18n, then you can replace the pagy_t
2
2
  -# calls with the actual strings ("&lsaquo; Prev", "Next &rsaquo;", "&hellip;").
3
3
 
4
- -# This template uses the pagy_link_proc helper for high speed (+20x) and low memory (-12x).
5
- -# Usage: link.call(page_number[, label[,extra_attributes_string]])
4
+ -# The link variable is set to a proc that returns the link tag.
5
+ -# Usage: link.call( page_number [, text [, extra_attributes_string ]])
6
6
 
7
7
  - link = pagy_link_proc(pagy)
8
8
 
@@ -1,8 +1,8 @@
1
1
  / This template is i18n-ready: if you don't use i18n, then you can replace the pagy_t
2
2
  / calls with the actual strings ("&lsaquo; Prev", "Next &rsaquo;", "&hellip;").
3
3
 
4
- / This template uses the pagy_link_proc helper for high speed (+20x) and low memory (-12x).
5
- / Usage: link.call(page_number[, label[,extra_attributes_string]])
4
+ / The link variable is set to a proc that returns the link tag.
5
+ / Usage: link.call( page_number [, text [, extra_attributes_string ]])
6
6
 
7
7
  - link = pagy_link_proc(pagy)
8
8
 
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.4.0
4
+ version: 0.4.1
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-02-15 00:00:00.000000000 Z
11
+ date: 2018-02-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler