pagy 7.0.11 → 8.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/gem/apps/calendar.ru +2196 -0
- data/gem/apps/demo.ru +452 -0
- data/gem/apps/rails.ru +205 -0
- data/gem/apps/repro.ru +168 -0
- data/gem/bin/pagy +83 -0
- data/{lib → gem}/config/pagy.rb +6 -17
- data/{lib → gem}/javascripts/pagy-dev.js +10 -10
- data/{lib → gem}/javascripts/pagy-module.js +9 -9
- data/gem/javascripts/pagy.js +1 -0
- data/gem/lib/optimist.rb +1022 -0
- data/gem/lib/pagy/extras/bootstrap.rb +97 -0
- data/gem/lib/pagy/extras/bulma.rb +89 -0
- data/gem/lib/pagy/extras/foundation.rb +93 -0
- data/{lib → gem/lib}/pagy/extras/items.rb +21 -18
- data/{lib/pagy/extras/frontend_helpers.rb → gem/lib/pagy/extras/js_tools.rb} +1 -1
- data/gem/lib/pagy/extras/materialize.rb +97 -0
- data/gem/lib/pagy/extras/pagy.rb +82 -0
- data/gem/lib/pagy/extras/semantic.rb +91 -0
- data/gem/lib/pagy/extras/trim.rb +29 -0
- data/gem/lib/pagy/extras/uikit.rb +96 -0
- data/gem/lib/pagy/frontend.rb +97 -0
- data/{lib → gem/lib}/pagy/url_helpers.rb +1 -2
- data/{lib → gem/lib}/pagy.rb +12 -11
- data/{lib → gem}/locales/ar.yml +2 -2
- data/{lib → gem}/locales/be.yml +4 -4
- data/{lib → gem}/locales/bg.yml +4 -4
- data/{lib → gem}/locales/bs.yml +4 -4
- data/{lib → gem}/locales/ca.yml +4 -4
- data/gem/locales/ckb.yml +18 -0
- data/{lib → gem}/locales/cs.yml +4 -4
- data/{lib → gem}/locales/da.yml +4 -4
- data/{lib → gem}/locales/de.yml +4 -4
- data/{lib → gem}/locales/en.yml +4 -4
- data/{lib → gem}/locales/es.yml +2 -2
- data/{lib → gem}/locales/fr.yml +4 -4
- data/{lib → gem}/locales/hr.yml +4 -4
- data/{lib → gem}/locales/id.yml +4 -4
- data/{lib → gem}/locales/it.yml +4 -4
- data/{lib → gem}/locales/ja.yml +4 -4
- data/{lib → gem}/locales/km.yml +4 -4
- data/{lib → gem}/locales/ko.yml +4 -4
- data/{lib → gem}/locales/nb.yml +4 -4
- data/{lib → gem}/locales/nl.yml +4 -4
- data/{lib → gem}/locales/nn.yml +4 -4
- data/{lib → gem}/locales/pl.yml +4 -4
- data/{lib → gem}/locales/pt-BR.yml +2 -2
- data/{lib → gem}/locales/pt.yml +2 -2
- data/{lib → gem}/locales/ru.yml +4 -4
- data/{lib → gem}/locales/sr.yml +4 -4
- data/{lib → gem}/locales/sv-SE.yml +4 -4
- data/{lib → gem}/locales/sv.yml +4 -4
- data/{lib → gem}/locales/sw.yml +4 -4
- data/{lib → gem}/locales/ta.yml +4 -4
- data/{lib → gem}/locales/tr.yml +4 -4
- data/{lib → gem}/locales/uk.yml +4 -4
- data/{lib → gem}/locales/vi.yml +4 -4
- data/{lib → gem}/locales/zh-CN.yml +4 -4
- data/{lib → gem}/locales/zh-HK.yml +4 -4
- data/{lib → gem}/locales/zh-TW.yml +4 -4
- data/{lib → gem}/stylesheets/pagy.css +19 -34
- data/{lib → gem}/stylesheets/pagy.scss +17 -19
- data/gem/stylesheets/pagy.tailwind.css +21 -0
- metadata +103 -90
- data/lib/javascripts/pagy.js +0 -1
- data/lib/locales/ckb.yml +0 -18
- data/lib/pagy/extras/bootstrap.rb +0 -108
- data/lib/pagy/extras/bulma.rb +0 -105
- data/lib/pagy/extras/foundation.rb +0 -105
- data/lib/pagy/extras/materialize.rb +0 -96
- data/lib/pagy/extras/navs.rb +0 -51
- data/lib/pagy/extras/semantic.rb +0 -95
- data/lib/pagy/extras/support.rb +0 -40
- data/lib/pagy/extras/trim.rb +0 -29
- data/lib/pagy/extras/uikit.rb +0 -97
- data/lib/pagy/frontend.rb +0 -114
- data/lib/stylesheets/pagy.tailwind.scss +0 -24
- /data/{lib → gem}/javascripts/pagy-module.d.ts +0 -0
- /data/{lib → gem/lib}/pagy/backend.rb +0 -0
- /data/{lib → gem/lib}/pagy/calendar/day.rb +0 -0
- /data/{lib → gem/lib}/pagy/calendar/helper.rb +0 -0
- /data/{lib → gem/lib}/pagy/calendar/month.rb +0 -0
- /data/{lib → gem/lib}/pagy/calendar/quarter.rb +0 -0
- /data/{lib → gem/lib}/pagy/calendar/week.rb +0 -0
- /data/{lib → gem/lib}/pagy/calendar/year.rb +0 -0
- /data/{lib → gem/lib}/pagy/calendar.rb +0 -0
- /data/{lib → gem/lib}/pagy/console.rb +0 -0
- /data/{lib → gem/lib}/pagy/countless.rb +0 -0
- /data/{lib → gem/lib}/pagy/exceptions.rb +0 -0
- /data/{lib → gem/lib}/pagy/extras/arel.rb +0 -0
- /data/{lib → gem/lib}/pagy/extras/array.rb +0 -0
- /data/{lib → gem/lib}/pagy/extras/calendar.rb +0 -0
- /data/{lib → gem/lib}/pagy/extras/countless.rb +0 -0
- /data/{lib → gem/lib}/pagy/extras/elasticsearch_rails.rb +0 -0
- /data/{lib → gem/lib}/pagy/extras/gearbox.rb +0 -0
- /data/{lib → gem/lib}/pagy/extras/headers.rb +0 -0
- /data/{lib → gem/lib}/pagy/extras/i18n.rb +0 -0
- /data/{lib → gem/lib}/pagy/extras/jsonapi.rb +0 -0
- /data/{lib → gem/lib}/pagy/extras/meilisearch.rb +0 -0
- /data/{lib → gem/lib}/pagy/extras/metadata.rb +0 -0
- /data/{lib → gem/lib}/pagy/extras/overflow.rb +0 -0
- /data/{lib → gem/lib}/pagy/extras/searchkick.rb +0 -0
- /data/{lib → gem/lib}/pagy/extras/standalone.rb +0 -0
- /data/{lib → gem/lib}/pagy/i18n.rb +0 -0
data/lib/pagy/frontend.rb
DELETED
@@ -1,114 +0,0 @@
|
|
1
|
-
# See Pagy::Frontend API documentation: https://ddnexus.github.io/pagy/docs/api/frontend
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require 'pagy/url_helpers'
|
5
|
-
require 'pagy/i18n'
|
6
|
-
|
7
|
-
class Pagy
|
8
|
-
# Used for search and replace, hardcoded also in the pagy.js file
|
9
|
-
PAGE_TOKEN = '__pagy_page__'
|
10
|
-
LABEL_TOKEN = '__pagy_label__'
|
11
|
-
|
12
|
-
# Frontend modules are specially optimized for performance.
|
13
|
-
# The resulting code may not look very elegant, but produces the best benchmarks
|
14
|
-
module Frontend
|
15
|
-
include UrlHelpers
|
16
|
-
|
17
|
-
# Generic pagination: it returns the html with the series of links to the pages
|
18
|
-
def pagy_nav(pagy, pagy_id: nil, link_extra: '',
|
19
|
-
nav_aria_label: nil, nav_i18n_key: nil, **vars)
|
20
|
-
p_id = %( id="#{pagy_id}") if pagy_id
|
21
|
-
link = pagy_link_proc(pagy, link_extra:)
|
22
|
-
|
23
|
-
html = +%(<nav#{p_id} class="pagy pagy-nav pagination" #{nav_aria_label_attr(pagy, nav_aria_label, nav_i18n_key)}>)
|
24
|
-
html << prev_html(pagy, link)
|
25
|
-
pagy.series(**vars).each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
|
26
|
-
html << case item
|
27
|
-
when Integer
|
28
|
-
%(<span class="page">#{link.call(item)}</span>)
|
29
|
-
when String
|
30
|
-
%(<span class="page active">) +
|
31
|
-
%(<a role="link" aria-disabled="true" aria-current="page">#{pagy.label_for(item)}</a></span>)
|
32
|
-
when :gap
|
33
|
-
%(<span class="page gap">#{pagy_t('pagy.gap')}</span>)
|
34
|
-
else
|
35
|
-
raise InternalError, "expected item types in series to be Integer, String or :gap; got #{item.inspect}"
|
36
|
-
end
|
37
|
-
end
|
38
|
-
html << %(#{next_html(pagy, link)}</nav>)
|
39
|
-
end
|
40
|
-
|
41
|
-
# Return examples: "Displaying items 41-60 of 324 in total" or "Displaying Products 41-60 of 324 in total"
|
42
|
-
def pagy_info(pagy, pagy_id: nil, item_name: nil, item_i18n_key: nil)
|
43
|
-
p_id = %( id="#{pagy_id}") if pagy_id
|
44
|
-
p_count = pagy.count
|
45
|
-
key = if p_count.zero? then 'pagy.info.no_items'
|
46
|
-
elsif pagy.pages == 1 then 'pagy.info.single_page'
|
47
|
-
else 'pagy.info.multiple_pages' # rubocop:disable Lint/ElseLayout
|
48
|
-
end
|
49
|
-
|
50
|
-
%(<span#{p_id} class="pagy-info">#{
|
51
|
-
pagy_t key, item_name: item_name || pagy_t(item_i18n_key || pagy.vars[:item_i18n_key], count: p_count),
|
52
|
-
count: p_count, from: pagy.from, to: pagy.to
|
53
|
-
}</span>)
|
54
|
-
end
|
55
|
-
|
56
|
-
# Return a performance optimized lambda to generate the HTML links
|
57
|
-
# Benchmarked on a 20 link nav: it is ~22x faster and uses ~18x less memory than rails' link_to
|
58
|
-
def pagy_link_proc(pagy, link_extra: '')
|
59
|
-
p_prev = pagy.prev
|
60
|
-
p_next = pagy.next
|
61
|
-
p_page = pagy.page.to_s
|
62
|
-
left, right = %(<a href="#{pagy_url_for(pagy, PAGE_TOKEN)}" #{
|
63
|
-
pagy.vars[:link_extra]} #{link_extra}).split(PAGE_TOKEN, 2)
|
64
|
-
# lambda used by all the helpers
|
65
|
-
lambda do |page, text = pagy.label_for(page), extra_attrs = ''|
|
66
|
-
%(#{left}#{page}#{right}#{ case page
|
67
|
-
when p_prev then ' rel="prev"'
|
68
|
-
when p_next then ' rel="next"'
|
69
|
-
when p_page then ' aria-disabled="true" aria-current="page"'
|
70
|
-
else ''
|
71
|
-
end } #{extra_attrs}>#{text}</a>)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
# Similar to I18n.t: just ~18x faster using ~10x less memory
|
76
|
-
# (@pagy_locale explicitly initialized in order to avoid warning)
|
77
|
-
def pagy_t(key, opts = {})
|
78
|
-
Pagy::I18n.translate(@pagy_locale ||= nil, key, opts)
|
79
|
-
end
|
80
|
-
|
81
|
-
private
|
82
|
-
|
83
|
-
def nav_aria_label_attr(pagy, nav_aria_label, nav_i18n_key, count: pagy.pages)
|
84
|
-
nav_aria_label ||= pagy_t(nav_i18n_key || pagy.vars[:nav_i18n_key], count:)
|
85
|
-
%(aria-label="#{nav_aria_label}")
|
86
|
-
end
|
87
|
-
|
88
|
-
def prev_aria_label_attr
|
89
|
-
%(aria-label="#{pagy_t('pagy.aria_label.prev')}")
|
90
|
-
end
|
91
|
-
|
92
|
-
def next_aria_label_attr
|
93
|
-
%(aria-label="#{pagy_t('pagy.aria_label.next')}")
|
94
|
-
end
|
95
|
-
|
96
|
-
def prev_html(pagy, link, text: pagy_t('pagy.prev'))
|
97
|
-
if (p_prev = pagy.prev)
|
98
|
-
%(<span class="page prev">#{link.call(p_prev, text, prev_aria_label_attr)}</span>)
|
99
|
-
else
|
100
|
-
%(<span class="page prev disabled"><a role="link" aria-disabled="true" #{
|
101
|
-
prev_aria_label_attr}>#{text}</a></span>)
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
def next_html(pagy, link, text: pagy_t('pagy.next'))
|
106
|
-
if (p_next = pagy.next)
|
107
|
-
%(<span class="page next">#{link.call(p_next, text, next_aria_label_attr)}</span>)
|
108
|
-
else
|
109
|
-
%(<span class="page next disabled"><a role="link" aria-disabled="true" #{
|
110
|
-
next_aria_label_attr}>#{text}</a></span>)
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
.pagy {
|
2
|
-
@apply flex space-x-1 font-semibold text-sm text-gray-500;
|
3
|
-
.page {
|
4
|
-
a {
|
5
|
-
@apply block rounded-lg px-3 py-1 bg-gray-200;
|
6
|
-
&:hover {
|
7
|
-
@apply bg-gray-300;
|
8
|
-
}
|
9
|
-
}
|
10
|
-
&.active a {
|
11
|
-
@apply text-white bg-gray-400 cursor-default;
|
12
|
-
}
|
13
|
-
&.disabled a {
|
14
|
-
@apply text-gray-300 bg-gray-100 cursor-default;
|
15
|
-
}
|
16
|
-
&.gap { } /* if you need to customize it */
|
17
|
-
}
|
18
|
-
.pagy-combo-input, &.pagy-items-selector-js {
|
19
|
-
@apply inline-block whitespace-nowrap bg-gray-200 rounded-lg px-3 py-0.5;
|
20
|
-
input {
|
21
|
-
@apply bg-gray-100 border-none rounded-md;
|
22
|
-
}
|
23
|
-
}
|
24
|
-
}
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|