pagy 4.2.0 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/config/pagy.rb +30 -23
- data/lib/javascripts/pagy.js +104 -93
- data/lib/locales/bg.yml +2 -2
- data/lib/locales/bs.yml +2 -2
- data/lib/locales/ca.yml +2 -2
- data/lib/locales/cs.yml +2 -2
- data/lib/locales/da.yml +2 -2
- data/lib/locales/de.yml +2 -2
- data/lib/locales/en.yml +2 -2
- data/lib/locales/es.yml +2 -2
- data/lib/locales/fr.yml +2 -2
- data/lib/locales/hr.yml +2 -2
- data/lib/locales/id.yml +2 -2
- data/lib/locales/it.yml +2 -2
- data/lib/locales/ja.yml +2 -2
- data/lib/locales/km.yml +2 -2
- data/lib/locales/ko.yml +2 -2
- data/lib/locales/nb.yml +2 -2
- data/lib/locales/nl.yml +2 -2
- data/lib/locales/pl.yml +2 -2
- data/lib/locales/pt-BR.yml +2 -2
- data/lib/locales/pt.yml +2 -2
- data/lib/locales/ru.yml +2 -2
- data/lib/locales/sr.yml +2 -2
- data/lib/locales/sv-SE.yml +2 -2
- data/lib/locales/sv.yml +2 -2
- data/lib/locales/sw.yml +2 -2
- data/lib/locales/tr.yml +2 -2
- data/lib/locales/zh-CN.yml +2 -2
- data/lib/locales/zh-HK.yml +2 -2
- data/lib/locales/zh-TW.yml +3 -3
- data/lib/pagy.rb +27 -21
- data/lib/pagy/backend.rb +1 -0
- data/lib/pagy/console.rb +21 -0
- data/lib/pagy/deprecation.rb +27 -0
- data/lib/pagy/extras/arel.rb +1 -0
- data/lib/pagy/extras/array.rb +1 -0
- data/lib/pagy/extras/bootstrap.rb +16 -11
- data/lib/pagy/extras/bulma.rb +18 -13
- data/lib/pagy/extras/countless.rb +2 -1
- data/lib/pagy/extras/elasticsearch_rails.rb +1 -0
- data/lib/pagy/extras/foundation.rb +24 -17
- data/lib/pagy/extras/headers.rb +3 -3
- data/lib/pagy/extras/items.rb +18 -32
- data/lib/pagy/extras/materialize.rb +25 -19
- data/lib/pagy/extras/metadata.rb +3 -2
- data/lib/pagy/extras/navs.rb +18 -14
- data/lib/pagy/extras/overflow.rb +2 -2
- data/lib/pagy/extras/searchkick.rb +1 -0
- data/lib/pagy/extras/semantic.rb +24 -19
- data/lib/pagy/extras/shared.rb +4 -9
- data/lib/pagy/extras/standalone.rb +58 -0
- data/lib/pagy/extras/support.rb +12 -8
- data/lib/pagy/extras/trim.rb +8 -7
- data/lib/pagy/extras/uikit.rb +24 -19
- data/lib/pagy/frontend.rb +34 -25
- metadata +6 -5
- data/lib/locales/README.md +0 -35
- data/pagy.gemspec +0 -16
data/lib/locales/ko.yml
CHANGED
@@ -15,6 +15,6 @@ ko:
|
|
15
15
|
single_page: "<b>%{count}</b>개의 %{item_name} 표시됨"
|
16
16
|
multiple_pages: "총 <b>%{count}</b>개의 %{item_name} 중 <b>%{from}-%{to}</b>"
|
17
17
|
|
18
|
-
combo_nav_js: "
|
18
|
+
combo_nav_js: "<label>총 %{pages} 중 %{page_input}</label> 페이지"
|
19
19
|
|
20
|
-
items_selector_js: "
|
20
|
+
items_selector_js: "<label>페이지 당 %{items_input}개 표시%</label>"
|
data/lib/locales/nb.yml
CHANGED
@@ -17,6 +17,6 @@ nb:
|
|
17
17
|
single_page: "Viser <b>%{count}</b> %{item_name}"
|
18
18
|
multiple_pages: "Viser %{item_name} <b>%{from}-%{to}</b> av totalt <b>%{count}</b>"
|
19
19
|
|
20
|
-
combo_nav_js: "Side %{page_input} av %{pages}"
|
20
|
+
combo_nav_js: "<label>Side %{page_input}</label> av %{pages}"
|
21
21
|
|
22
|
-
items_selector_js: "Vis %{items_input} %{item_name} per side"
|
22
|
+
items_selector_js: "<label>Vis %{items_input} %{item_name} per side</label>"
|
data/lib/locales/nl.yml
CHANGED
@@ -17,6 +17,6 @@ nl:
|
|
17
17
|
single_page: "Toont <b>%{count}</b> %{item_name}"
|
18
18
|
multiple_pages: "Toont <b>%{from}-%{to}</b> %{item_name} van <b>%{count}</b> in totaal"
|
19
19
|
|
20
|
-
combo_nav_js: "Pagina %{page_input} van %{pages}"
|
20
|
+
combo_nav_js: "<label>Pagina %{page_input}</label> van %{pages}"
|
21
21
|
|
22
|
-
items_selector_js: "Toont %{items_input} %{item_name} per pagina"
|
22
|
+
items_selector_js: "<label>Toont %{items_input} %{item_name} per pagina</label>"
|
data/lib/locales/pl.yml
CHANGED
@@ -19,6 +19,6 @@ pl:
|
|
19
19
|
single_page: "Wyświetlono <b>%{count}</b> %{item_name}"
|
20
20
|
multiple_pages: "Wyświetlono %{item_name} <b>%{from}-%{to}</b> z wszystkich <b>%{count}</b>"
|
21
21
|
|
22
|
-
combo_nav_js: "Strona %{page_input} z %{pages}"
|
22
|
+
combo_nav_js: "<label>Strona %{page_input}</label> z %{pages}"
|
23
23
|
|
24
|
-
items_selector_js: "Pokaż %{items_input} %{item_name} na stronie"
|
24
|
+
items_selector_js: "<label>Pokaż %{items_input} %{item_name} na stronie</label>"
|
data/lib/locales/pt-BR.yml
CHANGED
@@ -17,6 +17,6 @@ pt-BR:
|
|
17
17
|
single_page: "Mostrando %{count} %{item_name}"
|
18
18
|
multiple_pages: "Mostrando %{item_name} %{from}-%{to} do total de %{count}"
|
19
19
|
|
20
|
-
combo_nav_js: "Página %{page_input} de %{pages}"
|
20
|
+
combo_nav_js: "<label>Página %{page_input}</label> de %{pages}"
|
21
21
|
|
22
|
-
items_selector_js: "Mostrar %{items_input} %{item_name} por página"
|
22
|
+
items_selector_js: "<label>Mostrar %{items_input} %{item_name} por página</label>"
|
data/lib/locales/pt.yml
CHANGED
@@ -17,6 +17,6 @@ pt:
|
|
17
17
|
single_page: "Mostrando %{count} %{item_name}"
|
18
18
|
multiple_pages: "Mostrando %{item_name} %{from}-%{to} de um total de %{count}"
|
19
19
|
|
20
|
-
combo_nav_js: "Página %{page_input} de %{pages}"
|
20
|
+
combo_nav_js: "<label>Página %{page_input}</label> de %{pages}"
|
21
21
|
|
22
|
-
items_selector_js: "Mostrar %{items_input} %{item_name} por página"
|
22
|
+
items_selector_js: "<label>Mostrar %{items_input} %{item_name} por página</label>"
|
data/lib/locales/ru.yml
CHANGED
@@ -19,6 +19,6 @@ ru:
|
|
19
19
|
single_page: "<b>%{count}</b> %{item_name}"
|
20
20
|
multiple_pages: "Всего <b>%{count}</b> %{item_name}, показаны с <b>%{from}</b> по <b>%{to}</b>"
|
21
21
|
|
22
|
-
combo_nav_js: "
|
22
|
+
combo_nav_js: "<label>Страница %{page_input}</label> из %{pages}"
|
23
23
|
|
24
|
-
items_selector_js: "
|
24
|
+
items_selector_js: "<label>Показать %{items_input} %{item_name} на странице</label>"
|
data/lib/locales/sr.yml
CHANGED
@@ -18,6 +18,6 @@ sr:
|
|
18
18
|
single_page: "Приказује се <b>%{count}</b> %{item_name}"
|
19
19
|
multiple_pages: "Приказ %{item_name} <b>%{from}-%{to}</b> од <b>%{count}</b> укупно"
|
20
20
|
|
21
|
-
combo_nav_js: "
|
21
|
+
combo_nav_js: "<label>Страниca %{page_input}</label> од %{pages}"
|
22
22
|
|
23
|
-
items_selector_js: "
|
23
|
+
items_selector_js: "<label>Прикажи %{items_input} %{item_name} по страниcи</label>"
|
data/lib/locales/sv-SE.yml
CHANGED
@@ -18,6 +18,6 @@ sv-SE:
|
|
18
18
|
single_page: "Visar <b>%{count}</b> %{item_name}"
|
19
19
|
multiple_pages: "Visar %{item_name} <b>%{from}-%{to}</b> av <b>%{count}</b> totalt"
|
20
20
|
|
21
|
-
combo_nav_js: "Sida %{page_input} av %{pages}"
|
21
|
+
combo_nav_js: "<label>Sida %{page_input}</label> av %{pages}"
|
22
22
|
|
23
|
-
items_selector_js: "Visa %{items_input} %{item_name} per sida"
|
23
|
+
items_selector_js: "<label>Visa %{items_input} %{item_name} per sida</label>"
|
data/lib/locales/sv.yml
CHANGED
@@ -18,6 +18,6 @@ sv:
|
|
18
18
|
single_page: "Visar <b>%{count}</b> %{item_name}"
|
19
19
|
multiple_pages: "Visar %{item_name} <b>%{from}-%{to}</b> av <b>%{count}</b> totalt"
|
20
20
|
|
21
|
-
combo_nav_js: "Sida %{page_input} av %{pages}"
|
21
|
+
combo_nav_js: "<label>Sida %{page_input}</label> av %{pages}"
|
22
22
|
|
23
|
-
items_selector_js: "Visa %{items_input} %{item_name} per sida"
|
23
|
+
items_selector_js: "<label>Visa %{items_input} %{item_name} per sida</label>"
|
data/lib/locales/sw.yml
CHANGED
@@ -17,6 +17,6 @@ sw:
|
|
17
17
|
single_page: "Inaonyesha %{item_name} <b>%{count}</b>"
|
18
18
|
multiple_pages: "Inaonyesha %{item_name} <b>%{from}-%{to}</b> ya <b>%{count}</b> kwa jumla"
|
19
19
|
|
20
|
-
combo_nav_js: "Kurasa %{page_input} ya %{pages}"
|
20
|
+
combo_nav_js: "<label>Kurasa %{page_input}</label> ya %{pages}"
|
21
21
|
|
22
|
-
items_selector_js: "Onyesha %{items_input} %{item_name} kwa kila ukurasa"
|
22
|
+
items_selector_js: "<label>Onyesha %{items_input} %{item_name} kwa kila ukurasa</label>"
|
data/lib/locales/tr.yml
CHANGED
@@ -15,6 +15,6 @@ tr:
|
|
15
15
|
single_page: "Toplam <b>%{count}</b> %{item_name} gösteriliyor"
|
16
16
|
multiple_pages: "<b>%{count}</b> %{item_name} içerisinden <b>%{from}-%{to}</b> kadarı gösteriliyor"
|
17
17
|
|
18
|
-
combo_nav_js: "Sayfa %{page_input} / %{pages}"
|
18
|
+
combo_nav_js: "<label>Sayfa %{page_input}</label> / %{pages}"
|
19
19
|
|
20
|
-
items_selector_js: "Sayfada %{items_input} %{item_name} göster"
|
20
|
+
items_selector_js: "<label>Sayfada %{items_input} %{item_name} göster</label>"
|
data/lib/locales/zh-CN.yml
CHANGED
@@ -15,6 +15,6 @@ zh-CN:
|
|
15
15
|
single_page: "显示<b>%{count}</b> 项%{item_name}"
|
16
16
|
multiple_pages: "共 <b>%{count}</b> 项%{item_name},显示 <b>%{from}-%{to}</b>"
|
17
17
|
|
18
|
-
combo_nav_js: "
|
18
|
+
combo_nav_js: "<label>第 %{page_input}</label> / %{pages} 页"
|
19
19
|
|
20
|
-
items_selector_js: "
|
20
|
+
items_selector_js: "<label>每页显示 %{items_input} 条%</label>"
|
data/lib/locales/zh-HK.yml
CHANGED
@@ -15,6 +15,6 @@ zh-HK:
|
|
15
15
|
single_page: "顯示 <b>%{count}</b> %{item_name}"
|
16
16
|
multiple_pages: "共 <b>%{count}</b> %{item_name},顯示 <b>%{from}-%{to}</b>"
|
17
17
|
|
18
|
-
combo_nav_js: "
|
18
|
+
combo_nav_js: "<label>第 %{page_input}</label> / %{pages} 頁"
|
19
19
|
|
20
|
-
items_selector_js: "
|
20
|
+
items_selector_js: "<label>每頁顯示 %{items_input} 記錄</label>"
|
data/lib/locales/zh-TW.yml
CHANGED
@@ -10,11 +10,11 @@ zh-TW:
|
|
10
10
|
next: "下一頁 ›"
|
11
11
|
gap: "…"
|
12
12
|
|
13
|
-
combo_nav_js: "第 %{page_input} / %{pages} 頁"
|
14
|
-
|
15
13
|
info:
|
16
14
|
no_items: "沒找到項"
|
17
15
|
single_page: "顯示 <b>%{count}</b> 項%{item_name}"
|
18
16
|
multiple_pages: "共 <b>%{count}</b> 項%{item_name},顯示 <b>%{from}-%{to}</b>"
|
19
17
|
|
20
|
-
|
18
|
+
combo_nav_js: "<label>第 %{page_input}</label> / %{pages} 頁"
|
19
|
+
|
20
|
+
items_selector_js: "<label>每頁顯示 %{items_input} 項%{item_name}"
|
data/lib/pagy.rb
CHANGED
@@ -5,7 +5,7 @@ require 'pathname'
|
|
5
5
|
|
6
6
|
# main class
|
7
7
|
class Pagy
|
8
|
-
VERSION = '4.
|
8
|
+
VERSION = '4.6.0'
|
9
9
|
|
10
10
|
# Root pathname to get the path of Pagy files like templates or dictionaries
|
11
11
|
def self.root
|
@@ -14,7 +14,7 @@ class Pagy
|
|
14
14
|
|
15
15
|
# default vars
|
16
16
|
VARS = { page: 1, items: 20, outset: 0, size: [1, 4, 4, 1], page_param: :page, # rubocop:disable Style/MutableConstant
|
17
|
-
params: {},
|
17
|
+
params: {}, fragment: '', link_extra: '', i18n_key: 'pagy.item_name', cycle: false }
|
18
18
|
|
19
19
|
attr_reader :count, :page, :items, :vars, :pages, :last, :offset, :from, :to, :prev, :next
|
20
20
|
|
@@ -22,20 +22,22 @@ class Pagy
|
|
22
22
|
|
23
23
|
# Merge and validate the options, do some simple arithmetic and set the instance variables
|
24
24
|
def initialize(vars)
|
25
|
-
@vars = VARS.merge( vars.delete_if{|
|
25
|
+
@vars = VARS.merge( vars.delete_if{|k,v| VARS.key?(k) && (v.nil? || v == '') } )
|
26
|
+
@vars[:fragment] = deprecated_var(:anchor, @vars[:anchor], :fragment, @vars[:fragment]) if @vars[:anchor]
|
26
27
|
|
27
28
|
INSTANCE_VARS_MIN.each do |name,min|
|
28
29
|
raise VariableError.new(self), "expected :#{name} >= #{min}; got #{@vars[name].inspect}" \
|
29
30
|
unless @vars[name] && instance_variable_set(:"@#{name}", @vars[name].to_i) >= min
|
30
31
|
end
|
31
32
|
@pages = @last = [(@count.to_f / @items).ceil, 1].max
|
32
|
-
raise OverflowError.new(self), "expected :page in 1..#{@last}; got #{@page.inspect}"
|
33
|
+
raise OverflowError.new(self), "expected :page in 1..#{@last}; got #{@page.inspect}" \
|
34
|
+
if @page > @last
|
33
35
|
|
34
36
|
@offset = @items * (@page - 1) + @outset
|
35
|
-
@items = @count - ((@pages-1) * @items) if @page == @last && @count.positive?
|
37
|
+
@items = @count - ((@pages - 1) * @items) if @page == @last && @count.positive?
|
36
38
|
@from = @count.zero? ? 0 : @offset + 1 - @outset
|
37
39
|
@to = @count.zero? ? 0 : @offset + @items - @outset
|
38
|
-
@prev = (@page-1 unless @page == 1)
|
40
|
+
@prev = (@page - 1 unless @page == 1)
|
39
41
|
@next = @page == @last ? (1 if @vars[:cycle]) : @page + 1
|
40
42
|
end
|
41
43
|
|
@@ -43,28 +45,32 @@ class Pagy
|
|
43
45
|
def series(size=@vars[:size])
|
44
46
|
return [] if size.empty?
|
45
47
|
raise VariableError.new(self), "expected 4 items >= 0 in :size; got #{size.inspect}" \
|
46
|
-
unless size.size == 4 && size.all?{ |num| num
|
47
|
-
|
48
|
+
unless size.size == 4 && size.all?{ |num| !num.negative? rescue false } # rubocop:disable Style/RescueModifier
|
49
|
+
# This algorithm is up to ~5x faster and ~2.3x lighter than the previous one (pagy < 4.3)
|
50
|
+
left_gap_start = 1 + size[0]
|
51
|
+
left_gap_end = @page - size[1] - 1
|
52
|
+
right_gap_start = @page + size[2] + 1
|
53
|
+
right_gap_end = @last - size[3]
|
54
|
+
left_gap_end = right_gap_end if left_gap_end > right_gap_end
|
55
|
+
right_gap_start = left_gap_start if left_gap_start > right_gap_start
|
48
56
|
series = []
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
when left+2 then series.push(left, left+1) # 1 page gap -> fill with missing page
|
58
|
-
else series.push(left, :gap) # n page gap -> add gap
|
59
|
-
end
|
57
|
+
start = 1
|
58
|
+
if (left_gap_end - left_gap_start).positive?
|
59
|
+
series.push(*start..(left_gap_start - 1), :gap)
|
60
|
+
start = left_gap_end + 1
|
61
|
+
end
|
62
|
+
if (right_gap_end - right_gap_start).positive?
|
63
|
+
series.push(*start..(right_gap_start - 1), :gap)
|
64
|
+
start = right_gap_end + 1
|
60
65
|
end
|
61
|
-
series.
|
62
|
-
series[series.index(@page)] = @page.to_s
|
66
|
+
series.push(*start..@last)
|
67
|
+
series[series.index(@page)] = @page.to_s
|
63
68
|
series
|
64
69
|
end
|
65
70
|
|
66
71
|
end
|
67
72
|
|
73
|
+
require 'pagy/deprecation'
|
68
74
|
require 'pagy/backend'
|
69
75
|
require 'pagy/frontend'
|
70
76
|
require 'pagy/exceptions'
|
data/lib/pagy/backend.rb
CHANGED
@@ -19,6 +19,7 @@ class Pagy
|
|
19
19
|
|
20
20
|
# Sub-method called only by #pagy: here for easy customization of variables by overriding
|
21
21
|
def pagy_get_vars(collection, vars)
|
22
|
+
pagy_set_items_from_params(vars) if defined?(UseItemsExtra)
|
22
23
|
vars[:count] ||= (c = collection.count(:all)).is_a?(Hash) ? c.size : c
|
23
24
|
vars[:page] ||= params[ vars[:page_param] || VARS[:page_param] ]
|
24
25
|
vars
|
data/lib/pagy/console.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'pagy' # so you can require just the extra in the console
|
4
|
+
require 'pagy/extras/standalone'
|
5
|
+
|
6
|
+
class Pagy
|
7
|
+
# include Pagy::Console in irb/rails console for a ready to use pagy environment
|
8
|
+
module Console
|
9
|
+
def self.included(main)
|
10
|
+
main.include(Backend)
|
11
|
+
main.include(Frontend)
|
12
|
+
VARS[:url] = 'http://www.example.com/subdir'
|
13
|
+
end
|
14
|
+
|
15
|
+
def pagy_extras(*extras)
|
16
|
+
extras.each {|extra| require "pagy/extras/#{extra}"}
|
17
|
+
puts "Required extras: #{extras.map(&:inspect).join(', ')}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class Pagy
|
3
|
+
class << self
|
4
|
+
|
5
|
+
# deprecated variables
|
6
|
+
def deprecated_var(var, val, new_var, new_val)
|
7
|
+
value = new_val || val
|
8
|
+
Warning.warn %([PAGY WARNING] deprecated use of `#{var}` var will not be supported in 5.0! Use `#{new_var}: #{value.inspect}` instead.)
|
9
|
+
value
|
10
|
+
end
|
11
|
+
|
12
|
+
# deprecated pagy_url_for argument order
|
13
|
+
def deprecated_order(pagy, page)
|
14
|
+
Warning.warn '[PAGY WARNING] inverted use of pagy/page in pagy_url_for will not be supported in 5.0! Use pagy_url_for(pagy, page) instead.'
|
15
|
+
[page, pagy]
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
# deprecated posiitioal arguments
|
20
|
+
def deprecated_arg(arg, val, new_key, new_val)
|
21
|
+
value = new_val || val # we use the new_val if present
|
22
|
+
Warning.warn %([PAGY WARNING] deprecated use of positional `#{arg}` arg will not be supported in 5.0! Use only the keyword arg `#{new_key}: #{value.inspect}` instead.)
|
23
|
+
value
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
data/lib/pagy/extras/arel.rb
CHANGED
data/lib/pagy/extras/array.rb
CHANGED
@@ -14,6 +14,7 @@ class Pagy
|
|
14
14
|
|
15
15
|
# Sub-method called only by #pagy_array: here for easy customization of variables by overriding
|
16
16
|
def pagy_array_get_vars(array, vars)
|
17
|
+
pagy_set_items_from_params(vars) if defined?(UseItemsExtra)
|
17
18
|
vars[:count] ||= array.size
|
18
19
|
vars[:page] ||= params[ vars[:page_param] || VARS[:page_param] ]
|
19
20
|
vars
|
@@ -7,10 +7,11 @@ 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_bootstrap_nav(pagy)
|
11
|
-
|
10
|
+
def pagy_bootstrap_nav(pagy, pagy_id: nil, link_extra: '')
|
11
|
+
p_id = %( id="#{pagy_id}") if pagy_id
|
12
|
+
link = pagy_link_proc(pagy, link_extra: %(class="page-link" #{link_extra}))
|
12
13
|
|
13
|
-
html = +%(<nav class="pagy-bootstrap-nav"
|
14
|
+
html = +%(<nav#{p_id} class="pagy-bootstrap-nav" aria-label="pager"><ul class="pagination">)
|
14
15
|
html << pagy_bootstrap_prev_html(pagy, link)
|
15
16
|
pagy.series.each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
|
16
17
|
html << case item
|
@@ -24,26 +25,30 @@ class Pagy
|
|
24
25
|
end
|
25
26
|
|
26
27
|
# Javascript pagination for bootstrap: it returns a nav and a JSON tag used by the Pagy.nav javascript
|
27
|
-
def pagy_bootstrap_nav_js(pagy,
|
28
|
-
|
28
|
+
def pagy_bootstrap_nav_js(pagy, deprecated_id=nil, pagy_id: nil, link_extra: '', steps: nil)
|
29
|
+
pagy_id = Pagy.deprecated_arg(:id, deprecated_id, :pagy_id, pagy_id) if deprecated_id
|
30
|
+
p_id = %( id="#{pagy_id}") if pagy_id
|
31
|
+
link = pagy_link_proc(pagy, link_extra: %(class="page-link" #{link_extra}))
|
29
32
|
tags = { 'before' => %(<ul class="pagination">#{pagy_bootstrap_prev_html pagy, link}),
|
30
33
|
'link' => %(<li class="page-item">#{mark = link.call(PAGE_PLACEHOLDER)}</li>),
|
31
34
|
'active' => %(<li class="page-item active">#{mark}</li>),
|
32
35
|
'gap' => %(<li class="page-item gap disabled"><a href="#" class="page-link">#{pagy_t 'pagy.nav.gap'}</a></li>),
|
33
36
|
'after' => %(#{pagy_bootstrap_next_html pagy, link}</ul>) }
|
34
37
|
|
35
|
-
html = %(<nav
|
36
|
-
html << pagy_json_tag(pagy, :nav,
|
38
|
+
html = %(<nav#{p_id} class="pagy-njs pagy-bootstrap-nav-js" aria-label="pager"></nav>)
|
39
|
+
html << pagy_json_tag(pagy, :nav, tags, pagy.sequels(steps))
|
37
40
|
end
|
38
41
|
|
39
42
|
# Javascript combo pagination for bootstrap: it returns a nav and a JSON tag used by the Pagy.combo_nav javascript
|
40
|
-
def pagy_bootstrap_combo_nav_js(pagy,
|
41
|
-
|
43
|
+
def pagy_bootstrap_combo_nav_js(pagy, deprecated_id=nil, pagy_id: nil, link_extra: '')
|
44
|
+
pagy_id = Pagy.deprecated_arg(:id, deprecated_id, :pagy_id, pagy_id) if deprecated_id
|
45
|
+
p_id = %( id="#{pagy_id}") if pagy_id
|
46
|
+
link = pagy_link_proc(pagy, link_extra: link_extra)
|
42
47
|
p_page = pagy.page
|
43
48
|
p_pages = pagy.pages
|
44
49
|
input = %(<input type="number" min="1" max="#{p_pages}" value="#{p_page}" class="text-primary" style="padding: 0; border: none; text-align: center; width: #{p_pages.to_s.length+1}rem;">)
|
45
50
|
|
46
|
-
%(<nav
|
51
|
+
%(<nav#{p_id} class="pagy-bootstrap-combo-nav-js pagination" aria-label="pager"><div class="btn-group" role="group">#{
|
47
52
|
if (p_prev = pagy.prev)
|
48
53
|
link.call p_prev, pagy_t('pagy.nav.prev'), 'aria-label="previous" class="prev btn btn-primary"'
|
49
54
|
else
|
@@ -56,7 +61,7 @@ class Pagy
|
|
56
61
|
%(<a class="next btn btn-primary disabled" href="#">#{pagy_t 'pagy.nav.next' }</a>)
|
57
62
|
end
|
58
63
|
}</div></nav>#{
|
59
|
-
pagy_json_tag
|
64
|
+
pagy_json_tag pagy, :combo_nav, p_page, pagy_marked_link(link)
|
60
65
|
})
|
61
66
|
end
|
62
67
|
|
data/lib/pagy/extras/bulma.rb
CHANGED
@@ -7,55 +7,60 @@ 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_bulma_nav(pagy)
|
11
|
-
|
10
|
+
def pagy_bulma_nav(pagy, pagy_id: nil, link_extra: '')
|
11
|
+
p_id = %( id="#{pagy_id}") if pagy_id
|
12
|
+
link = pagy_link_proc(pagy, link_extra: link_extra)
|
12
13
|
|
13
|
-
html = +%(<nav class="pagy-bulma-nav pagination is-centered"
|
14
|
+
html = +%(<nav#{p_id} class="pagy-bulma-nav pagination is-centered" aria-label="pagination">)
|
14
15
|
html << pagy_bulma_prev_next_html(pagy, link)
|
15
16
|
html << %(<ul class="pagination-list">)
|
16
17
|
pagy.series.each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
|
17
18
|
html << case item
|
18
19
|
when Integer then %(<li>#{link.call item, item, %(class="pagination-link" aria-label="goto page #{item}") }</li>) # page link
|
19
20
|
when String then %(<li>#{link.call item, item, %(class="pagination-link is-current" aria-label="page #{item}" aria-current="page")}</li>) # active page
|
20
|
-
when :gap then %(<li><span class="pagination-ellipsis">#{pagy_t
|
21
|
+
when :gap then %(<li><span class="pagination-ellipsis">#{pagy_t 'pagy.nav.gap'}</span></li>) # page gap
|
21
22
|
end
|
22
23
|
end
|
23
24
|
html << %(</ul></nav>)
|
24
25
|
end
|
25
26
|
|
26
|
-
def pagy_bulma_nav_js(pagy,
|
27
|
-
|
27
|
+
def pagy_bulma_nav_js(pagy, deprecated_id=nil, pagy_id: nil, link_extra: '', steps: nil)
|
28
|
+
pagy_id = Pagy.deprecated_arg(:id, deprecated_id, :pagy_id, pagy_id) if deprecated_id
|
29
|
+
p_id = %( id="#{pagy_id}") if pagy_id
|
30
|
+
link = pagy_link_proc(pagy, link_extra: link_extra)
|
28
31
|
tags = { 'before' => %(#{pagy_bulma_prev_next_html(pagy, link)}<ul class="pagination-list">),
|
29
32
|
'link' => %(<li>#{link.call PAGE_PLACEHOLDER, PAGE_PLACEHOLDER, %(class="pagination-link" aria-label="goto page #{PAGE_PLACEHOLDER}")}</li>),
|
30
33
|
'active' => %(<li>#{link.call PAGE_PLACEHOLDER, PAGE_PLACEHOLDER, %(class="pagination-link is-current" aria-current="page" aria-label="page #{PAGE_PLACEHOLDER}")}</li>),
|
31
34
|
'gap' => %(<li><span class="pagination-ellipsis">#{pagy_t 'pagy.nav.gap' }</span></li>),
|
32
35
|
'after' => '</ul>' }
|
33
36
|
|
34
|
-
html = %(<nav
|
35
|
-
html << pagy_json_tag(pagy, :nav,
|
37
|
+
html = %(<nav#{p_id} class="pagy-njs pagy-bulma-nav-js pagination is-centered" aria-label="pagination"></nav>)
|
38
|
+
html << pagy_json_tag(pagy, :nav, tags, pagy.sequels(steps))
|
36
39
|
end
|
37
40
|
|
38
41
|
# Javascript combo pagination for Bulma: it returns a nav and a JSON tag used by the Pagy.combo_nav javascript
|
39
|
-
def pagy_bulma_combo_nav_js(pagy,
|
40
|
-
|
42
|
+
def pagy_bulma_combo_nav_js(pagy, deprecated_id=nil, pagy_id: nil, link_extra: '')
|
43
|
+
pagy_id = Pagy.deprecated_arg(:id, deprecated_id, :pagy_id, pagy_id) if deprecated_id
|
44
|
+
p_id = %( id="#{pagy_id}") if pagy_id
|
45
|
+
link = pagy_link_proc(pagy, link_extra: link_extra)
|
41
46
|
p_page = pagy.page
|
42
47
|
p_pages = pagy.pages
|
43
48
|
input = %(<input class="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; margin:0 0.3rem;">)
|
44
49
|
|
45
|
-
%(<nav
|
50
|
+
%(<nav#{p_id} class="pagy-bulma-combo-nav-js" aria-label="pagination"><div class="field is-grouped is-grouped-centered" role="group">#{
|
46
51
|
if (p_prev = pagy.prev)
|
47
52
|
%(<p class="control">#{link.call p_prev, pagy_t('pagy.nav.prev'), 'class="button" aria-label="previous page"'}</p>)
|
48
53
|
else
|
49
54
|
%(<p class="control"><a class="button" disabled>#{pagy_t 'pagy.nav.prev'}</a></p>)
|
50
55
|
end
|
51
|
-
}<div class="pagy-combo-input control level is-mobile">#{pagy_t
|
56
|
+
}<div class="pagy-combo-input control level is-mobile">#{pagy_t 'pagy.combo_nav_js', page_input: input, count: p_page, pages: p_pages}</div>#{
|
52
57
|
if (p_next = pagy.next)
|
53
58
|
%(<p class="control">#{link.call p_next, pagy_t('pagy.nav.next'), 'class="button" aria-label="next page"'}</p>)
|
54
59
|
else
|
55
60
|
%(<p class="control"><a class="button" disabled>#{pagy_t 'pagy.nav.next'}</a></p>)
|
56
61
|
end
|
57
62
|
}</div></nav>#{
|
58
|
-
pagy_json_tag
|
63
|
+
pagy_json_tag pagy, :combo_nav, p_page, pagy_marked_link(link)
|
59
64
|
})
|
60
65
|
end
|
61
66
|
|