pagy 0.4.0 → 0.4.1

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: '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