pagy 8.4.0 → 9.0.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/apps/calendar.ru +682 -2137
- data/apps/demo.ru +17 -13
- data/apps/keyset_ar.ru +236 -0
- data/apps/keyset_s.ru +238 -0
- data/apps/rails.ru +19 -15
- data/apps/repro.ru +17 -14
- data/apps/tmp/calendar.sqlite3 +0 -0
- data/apps/tmp/calendar.sqlite3-shm +0 -0
- data/apps/tmp/calendar.sqlite3-wal +0 -0
- data/apps/tmp/local_secret.txt +1 -0
- data/apps/tmp/pagy-keyset-ar.sqlite3 +0 -0
- data/apps/tmp/pagy-keyset-ar.sqlite3-shm +0 -0
- data/apps/tmp/pagy-keyset-ar.sqlite3-wal +0 -0
- data/apps/tmp/pagy-keyset-s.sqlite3 +0 -0
- data/bin/pagy +17 -12
- data/config/pagy.rb +32 -33
- data/javascripts/pagy-module.js +94 -107
- data/javascripts/pagy.js +4 -1
- data/javascripts/pagy.min.js +4 -0
- data/javascripts/pagy.min.js.map +10 -0
- data/javascripts/pagy.mjs +100 -0
- data/lib/optimist.rb +1 -1
- data/lib/pagy/b64.rb +33 -0
- data/lib/pagy/backend.rb +21 -17
- data/lib/pagy/calendar/day.rb +4 -3
- data/lib/pagy/calendar/month.rb +4 -3
- data/lib/pagy/calendar/quarter.rb +4 -3
- data/lib/pagy/calendar/unit.rb +103 -0
- data/lib/pagy/calendar/week.rb +3 -3
- data/lib/pagy/calendar/year.rb +4 -3
- data/lib/pagy/calendar.rb +54 -97
- data/lib/pagy/countless.rb +15 -16
- data/lib/pagy/extras/arel.rb +8 -10
- data/lib/pagy/extras/array.rb +4 -6
- data/lib/pagy/extras/bootstrap.rb +5 -5
- data/lib/pagy/extras/bulma.rb +10 -7
- data/lib/pagy/extras/calendar.rb +34 -5
- data/lib/pagy/extras/countless.rb +6 -13
- data/lib/pagy/extras/elasticsearch_rails.rb +15 -15
- data/lib/pagy/extras/gearbox.rb +26 -26
- data/lib/pagy/extras/headers.rb +25 -24
- data/lib/pagy/extras/i18n.rb +1 -1
- data/lib/pagy/extras/js_tools.rb +9 -9
- data/lib/pagy/extras/jsonapi.rb +26 -16
- data/lib/pagy/extras/keyset.rb +26 -0
- data/lib/pagy/extras/limit.rb +63 -0
- data/lib/pagy/extras/meilisearch.rb +11 -11
- data/lib/pagy/extras/metadata.rb +6 -2
- data/lib/pagy/extras/overflow.rb +9 -8
- data/lib/pagy/extras/pagy.rb +16 -16
- data/lib/pagy/extras/searchkick.rb +11 -11
- data/lib/pagy/extras/size.rb +40 -0
- data/lib/pagy/extras/standalone.rb +6 -6
- data/lib/pagy/extras/trim.rb +3 -3
- data/lib/pagy/frontend.rb +38 -36
- data/lib/pagy/i18n.rb +1 -1
- data/lib/pagy/keyset/active_record.rb +38 -0
- data/lib/pagy/keyset/sequel.rb +51 -0
- data/lib/pagy/keyset.rb +99 -0
- data/lib/pagy/url_helpers.rb +5 -5
- data/lib/pagy.rb +92 -94
- data/locales/ar.yml +9 -10
- data/locales/be.yml +2 -2
- data/locales/bg.yml +2 -2
- data/locales/bs.yml +2 -2
- data/locales/ca.yml +5 -7
- data/locales/ckb.yml +2 -2
- data/locales/cs.yml +2 -2
- data/locales/da.yml +2 -2
- data/locales/de.yml +2 -2
- data/locales/en.yml +2 -2
- data/locales/es.yml +2 -2
- data/locales/fr.yml +2 -2
- data/locales/hr.yml +2 -2
- data/locales/id.yml +2 -2
- data/locales/it.yml +2 -2
- data/locales/ja.yml +2 -2
- data/locales/km.yml +2 -2
- data/locales/ko.yml +2 -2
- data/locales/nb.yml +2 -2
- data/locales/nl.yml +2 -2
- data/locales/nn.yml +2 -2
- data/locales/pl.yml +2 -2
- data/locales/pt-BR.yml +2 -2
- data/locales/pt.yml +2 -2
- data/locales/ru.yml +2 -2
- data/locales/sr.yml +2 -2
- data/locales/sv-SE.yml +2 -2
- data/locales/sv.yml +2 -2
- data/locales/sw.yml +2 -2
- data/locales/ta.yml +2 -2
- data/locales/tr.yml +2 -2
- data/locales/uk.yml +2 -2
- data/locales/vi.yml +2 -2
- data/locales/zh-CN.yml +2 -2
- data/locales/zh-HK.yml +2 -2
- data/locales/zh-TW.yml +2 -2
- data/pkg/pagy-9.0.0.gem +0 -0
- metadata +27 -17
- data/javascripts/pagy-dev.js +0 -114
- data/lib/pagy/calendar/helper.rb +0 -65
- data/lib/pagy/extras/foundation.rb +0 -95
- data/lib/pagy/extras/items.rb +0 -64
- data/lib/pagy/extras/materialize.rb +0 -100
- data/lib/pagy/extras/semantic.rb +0 -94
- data/lib/pagy/extras/uikit.rb +0 -98
- /data/javascripts/{pagy-module.d.ts → pagy.d.ts} +0 -0
data/locales/pl.yml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# :polish pluralization (see https://github.com/ddnexus/pagy/blob/master/lib/pagy/i18n.rb)
|
|
1
|
+
# :polish pluralization (see https://github.com/ddnexus/pagy/blob/master/gem/lib/pagy/i18n.rb)
|
|
2
2
|
pl:
|
|
3
3
|
pagy:
|
|
4
4
|
aria_label:
|
|
@@ -22,4 +22,4 @@ pl:
|
|
|
22
22
|
single_page: "Wyświetlono %{count} %{item_name}"
|
|
23
23
|
multiple_pages: "Wyświetlono %{item_name} %{from}-%{to} z wszystkich %{count}"
|
|
24
24
|
combo_nav_js: "Strona %{page_input} z %{pages}"
|
|
25
|
-
|
|
25
|
+
limit_selector_js: "Pokaż %{limit_input} %{item_name} na stronie"
|
data/locales/pt-BR.yml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# :one_other pluralization (see https://github.com/ddnexus/pagy/blob/master/lib/pagy/i18n.rb)
|
|
1
|
+
# :one_other pluralization (see https://github.com/ddnexus/pagy/blob/master/gem/lib/pagy/i18n.rb)
|
|
2
2
|
pt-BR:
|
|
3
3
|
pagy:
|
|
4
4
|
aria_label:
|
|
@@ -18,4 +18,4 @@ pt-BR:
|
|
|
18
18
|
single_page: "Mostrando %{count} %{item_name}"
|
|
19
19
|
multiple_pages: "Mostrando %{item_name} %{from}-%{to} do total de %{count}"
|
|
20
20
|
combo_nav_js: "Página %{page_input} de %{pages}"
|
|
21
|
-
|
|
21
|
+
limit_selector_js: "Mostrar %{limit_input} %{item_name} por página"
|
data/locales/pt.yml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# :one_other pluralization (see https://github.com/ddnexus/pagy/blob/master/lib/pagy/i18n.rb)
|
|
1
|
+
# :one_other pluralization (see https://github.com/ddnexus/pagy/blob/master/gem/lib/pagy/i18n.rb)
|
|
2
2
|
pt:
|
|
3
3
|
pagy:
|
|
4
4
|
aria_label:
|
|
@@ -18,4 +18,4 @@ pt:
|
|
|
18
18
|
single_page: "Mostrando %{count} %{item_name}"
|
|
19
19
|
multiple_pages: "Mostrando %{item_name} %{from}-%{to} de um total de %{count}"
|
|
20
20
|
combo_nav_js: "Página %{page_input} de %{pages}"
|
|
21
|
-
|
|
21
|
+
limit_selector_js: "Mostrar %{limit_input} %{item_name} por página"
|
data/locales/ru.yml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# :east_slavic pluralization (see https://github.com/ddnexus/pagy/blob/master/lib/pagy/i18n.rb)
|
|
1
|
+
# :east_slavic pluralization (see https://github.com/ddnexus/pagy/blob/master/gem/lib/pagy/i18n.rb)
|
|
2
2
|
ru:
|
|
3
3
|
pagy:
|
|
4
4
|
aria_label:
|
|
@@ -22,4 +22,4 @@ ru:
|
|
|
22
22
|
single_page: "%{count} %{item_name}"
|
|
23
23
|
multiple_pages: "Всего %{count} %{item_name}, показаны с %{from} по %{to}"
|
|
24
24
|
combo_nav_js: "Страница %{page_input} из %{pages}"
|
|
25
|
-
|
|
25
|
+
limit_selector_js: "Показать %{limit_input} %{item_name} на странице"
|
data/locales/sr.yml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# :east_slavic pluralization (see https://github.com/ddnexus/pagy/blob/master/lib/pagy/i18n.rb)
|
|
1
|
+
# :east_slavic pluralization (see https://github.com/ddnexus/pagy/blob/master/gem/lib/pagy/i18n.rb)
|
|
2
2
|
sr:
|
|
3
3
|
pagy:
|
|
4
4
|
aria_label:
|
|
@@ -22,4 +22,4 @@ sr:
|
|
|
22
22
|
single_page: "Приказује се %{count} %{item_name}"
|
|
23
23
|
multiple_pages: "Приказ %{item_name} %{from}-%{to} од %{count} укупно"
|
|
24
24
|
combo_nav_js: "Страниca %{page_input} од %{pages}"
|
|
25
|
-
|
|
25
|
+
limit_selector_js: "Прикажи %{limit_input} %{item_name} по страниcи"
|
data/locales/sv-SE.yml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# :one_other pluralization (see https://github.com/ddnexus/pagy/blob/master/lib/pagy/i18n.rb)
|
|
1
|
+
# :one_other pluralization (see https://github.com/ddnexus/pagy/blob/master/gem/lib/pagy/i18n.rb)
|
|
2
2
|
sv-SE:
|
|
3
3
|
pagy:
|
|
4
4
|
aria_label:
|
|
@@ -18,4 +18,4 @@ sv-SE:
|
|
|
18
18
|
single_page: "Visar %{count} %{item_name}"
|
|
19
19
|
multiple_pages: "Visar %{item_name} %{from}-%{to} av %{count} totalt"
|
|
20
20
|
combo_nav_js: "Sida %{page_input} av %{pages}"
|
|
21
|
-
|
|
21
|
+
limit_selector_js: "Visa %{limit_input} %{item_name} per sida"
|
data/locales/sv.yml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# :one_other pluralization (see https://github.com/ddnexus/pagy/blob/master/lib/pagy/i18n.rb)
|
|
1
|
+
# :one_other pluralization (see https://github.com/ddnexus/pagy/blob/master/gem/lib/pagy/i18n.rb)
|
|
2
2
|
sv:
|
|
3
3
|
pagy:
|
|
4
4
|
aria_label:
|
|
@@ -18,4 +18,4 @@ sv:
|
|
|
18
18
|
single_page: "Visar %{count} %{item_name}"
|
|
19
19
|
multiple_pages: "Visar %{item_name} %{from}-%{to} av %{count} totalt"
|
|
20
20
|
combo_nav_js: "Sida %{page_input} av %{pages}"
|
|
21
|
-
|
|
21
|
+
limit_selector_js: "Visa %{limit_input} %{item_name} per sida"
|
data/locales/sw.yml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# :one_other pluralization (see https://github.com/ddnexus/pagy/blob/master/lib/pagy/i18n.rb)
|
|
1
|
+
# :one_other pluralization (see https://github.com/ddnexus/pagy/blob/master/gem/lib/pagy/i18n.rb)
|
|
2
2
|
sw:
|
|
3
3
|
pagy:
|
|
4
4
|
# please add a comment in the https://github.com/ddnexus/pagy/issues/603
|
|
@@ -20,4 +20,4 @@ sw:
|
|
|
20
20
|
single_page: "Inaonyesha %{item_name} %{count}"
|
|
21
21
|
multiple_pages: "Inaonyesha %{item_name} %{from}-%{to} ya %{count} kwa jumla"
|
|
22
22
|
combo_nav_js: "Kurasa %{page_input} ya %{pages}"
|
|
23
|
-
|
|
23
|
+
limit_selector_js: "Onyesha %{limit_input} %{item_name} kwa kila ukurasa"
|
data/locales/ta.yml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# :one_other pluralization (see https://github.com/ddnexus/pagy/blob/master/lib/pagy/i18n.rb)
|
|
1
|
+
# :one_other pluralization (see https://github.com/ddnexus/pagy/blob/master/gem/lib/pagy/i18n.rb)
|
|
2
2
|
ta:
|
|
3
3
|
pagy:
|
|
4
4
|
aria_label:
|
|
@@ -20,4 +20,4 @@ ta:
|
|
|
20
20
|
single_page: "%{count} %{item_name} காட்டப்படுகின்றது"
|
|
21
21
|
multiple_pages: "மொத்தம் %{count} %{item_name}, காட்டப்படுபவை %{from}-%{to}"
|
|
22
22
|
combo_nav_js: "%{pages}-இல் %{page_input}-வது பக்கம்"
|
|
23
|
-
|
|
23
|
+
limit_selector_js: "ஒரு பக்கத்திற்கு %{limit_input} %{item_name} காட்டு"
|
data/locales/tr.yml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# :other pluralization (see https://github.com/ddnexus/pagy/blob/master/lib/pagy/i18n.rb)
|
|
1
|
+
# :other pluralization (see https://github.com/ddnexus/pagy/blob/master/gem/lib/pagy/i18n.rb)
|
|
2
2
|
tr:
|
|
3
3
|
pagy:
|
|
4
4
|
aria_label:
|
|
@@ -16,4 +16,4 @@ tr:
|
|
|
16
16
|
single_page: "Toplam %{count} %{item_name} gösteriliyor"
|
|
17
17
|
multiple_pages: "%{count} %{item_name} içerisinden %{from}-%{to} kadarı gösteriliyor"
|
|
18
18
|
combo_nav_js: "Sayfa %{page_input} / %{pages}"
|
|
19
|
-
|
|
19
|
+
limit_selector_js: "Sayfada %{limit_input} %{item_name} göster"
|
data/locales/uk.yml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# :east_slavic pluralization (see https://github.com/ddnexus/pagy/blob/master/lib/pagy/i18n.rb)
|
|
1
|
+
# :east_slavic pluralization (see https://github.com/ddnexus/pagy/blob/master/gem/lib/pagy/i18n.rb)
|
|
2
2
|
uk:
|
|
3
3
|
pagy:
|
|
4
4
|
aria_label:
|
|
@@ -22,4 +22,4 @@ uk:
|
|
|
22
22
|
single_page: "%{count} %{item_name}"
|
|
23
23
|
multiple_pages: "Загалом %{count} %{item_name}, показані з %{from} по %{to}"
|
|
24
24
|
combo_nav_js: "Сторінка %{page_input} з %{pages}"
|
|
25
|
-
|
|
25
|
+
limit_selector_js: "Показати %{limit_input} %{item_name} на сторінці"
|
data/locales/vi.yml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# :other pluralization (see https://github.com/ddnexus/pagy/blob/master/lib/pagy/i18n.rb)
|
|
1
|
+
# :other pluralization (see https://github.com/ddnexus/pagy/blob/master/gem/lib/pagy/i18n.rb)
|
|
2
2
|
vi:
|
|
3
3
|
pagy:
|
|
4
4
|
aria_label:
|
|
@@ -14,4 +14,4 @@ vi:
|
|
|
14
14
|
single_page: "%{count} %{item_name}"
|
|
15
15
|
multiple_pages: "Đang hiển thị %{from}-%{to} trong tổng số %{count} %{item_name}"
|
|
16
16
|
combo_nav_js: "Trang %{page_input} trên %{pages}"
|
|
17
|
-
|
|
17
|
+
limit_selector_js: "Hiển thị %{limit_input} %{item_name} mỗi trang"
|
data/locales/zh-CN.yml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# :other pluralization (see https://github.com/ddnexus/pagy/blob/master/lib/pagy/i18n.rb)
|
|
1
|
+
# :other pluralization (see https://github.com/ddnexus/pagy/blob/master/gem/lib/pagy/i18n.rb)
|
|
2
2
|
zh-CN:
|
|
3
3
|
pagy:
|
|
4
4
|
aria_label:
|
|
@@ -16,4 +16,4 @@ zh-CN:
|
|
|
16
16
|
single_page: "显示%{count} 项%{item_name}"
|
|
17
17
|
multiple_pages: "共 %{count} 项%{item_name},显示 %{from}-%{to}"
|
|
18
18
|
combo_nav_js: "第 %{page_input} / %{pages} 页"
|
|
19
|
-
|
|
19
|
+
limit_selector_js: "每页显示 %{limit_input} 条%"
|
data/locales/zh-HK.yml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# :other pluralization (see https://github.com/ddnexus/pagy/blob/master/lib/pagy/i18n.rb)
|
|
1
|
+
# :other pluralization (see https://github.com/ddnexus/pagy/blob/master/gem/lib/pagy/i18n.rb)
|
|
2
2
|
zh-HK:
|
|
3
3
|
pagy:
|
|
4
4
|
aria_label:
|
|
@@ -16,4 +16,4 @@ zh-HK:
|
|
|
16
16
|
single_page: "顯示 %{count} %{item_name}"
|
|
17
17
|
multiple_pages: "共 %{count} %{item_name},顯示 %{from}-%{to}"
|
|
18
18
|
combo_nav_js: "第 %{page_input} / %{pages} 頁"
|
|
19
|
-
|
|
19
|
+
limit_selector_js: "每頁顯示 %{limit_input} 記錄"
|
data/locales/zh-TW.yml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# :other pluralization (see https://github.com/ddnexus/pagy/blob/master/lib/pagy/i18n.rb)
|
|
1
|
+
# :other pluralization (see https://github.com/ddnexus/pagy/blob/master/gem/lib/pagy/i18n.rb)
|
|
2
2
|
zh-TW:
|
|
3
3
|
pagy:
|
|
4
4
|
aria_label:
|
|
@@ -16,4 +16,4 @@ zh-TW:
|
|
|
16
16
|
single_page: "顯示 %{count} 項%{item_name}"
|
|
17
17
|
multiple_pages: "共 %{count} 項%{item_name},顯示 %{from}-%{to}"
|
|
18
18
|
combo_nav_js: "第 %{page_input} / %{pages} 頁"
|
|
19
|
-
|
|
19
|
+
limit_selector_js: "每頁顯示 %{limit_input} 項%{item_name}"
|
data/pkg/pagy-9.0.0.gem
ADDED
|
Binary file
|
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:
|
|
4
|
+
version: 9.0.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: 2024-
|
|
11
|
+
date: 2024-07-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: Agnostic pagination in plain ruby. It does it all. Better.
|
|
14
14
|
email:
|
|
@@ -21,22 +21,35 @@ files:
|
|
|
21
21
|
- LICENSE.txt
|
|
22
22
|
- apps/calendar.ru
|
|
23
23
|
- apps/demo.ru
|
|
24
|
+
- apps/keyset_ar.ru
|
|
25
|
+
- apps/keyset_s.ru
|
|
24
26
|
- apps/rails.ru
|
|
25
27
|
- apps/repro.ru
|
|
28
|
+
- apps/tmp/calendar.sqlite3
|
|
29
|
+
- apps/tmp/calendar.sqlite3-shm
|
|
30
|
+
- apps/tmp/calendar.sqlite3-wal
|
|
31
|
+
- apps/tmp/local_secret.txt
|
|
32
|
+
- apps/tmp/pagy-keyset-ar.sqlite3
|
|
33
|
+
- apps/tmp/pagy-keyset-ar.sqlite3-shm
|
|
34
|
+
- apps/tmp/pagy-keyset-ar.sqlite3-wal
|
|
35
|
+
- apps/tmp/pagy-keyset-s.sqlite3
|
|
26
36
|
- bin/pagy
|
|
27
37
|
- config/pagy.rb
|
|
28
|
-
- javascripts/pagy-dev.js
|
|
29
|
-
- javascripts/pagy-module.d.ts
|
|
30
38
|
- javascripts/pagy-module.js
|
|
39
|
+
- javascripts/pagy.d.ts
|
|
31
40
|
- javascripts/pagy.js
|
|
41
|
+
- javascripts/pagy.min.js
|
|
42
|
+
- javascripts/pagy.min.js.map
|
|
43
|
+
- javascripts/pagy.mjs
|
|
32
44
|
- lib/optimist.rb
|
|
33
45
|
- lib/pagy.rb
|
|
46
|
+
- lib/pagy/b64.rb
|
|
34
47
|
- lib/pagy/backend.rb
|
|
35
48
|
- lib/pagy/calendar.rb
|
|
36
49
|
- lib/pagy/calendar/day.rb
|
|
37
|
-
- lib/pagy/calendar/helper.rb
|
|
38
50
|
- lib/pagy/calendar/month.rb
|
|
39
51
|
- lib/pagy/calendar/quarter.rb
|
|
52
|
+
- lib/pagy/calendar/unit.rb
|
|
40
53
|
- lib/pagy/calendar/week.rb
|
|
41
54
|
- lib/pagy/calendar/year.rb
|
|
42
55
|
- lib/pagy/console.rb
|
|
@@ -49,25 +62,26 @@ files:
|
|
|
49
62
|
- lib/pagy/extras/calendar.rb
|
|
50
63
|
- lib/pagy/extras/countless.rb
|
|
51
64
|
- lib/pagy/extras/elasticsearch_rails.rb
|
|
52
|
-
- lib/pagy/extras/foundation.rb
|
|
53
65
|
- lib/pagy/extras/gearbox.rb
|
|
54
66
|
- lib/pagy/extras/headers.rb
|
|
55
67
|
- lib/pagy/extras/i18n.rb
|
|
56
|
-
- lib/pagy/extras/items.rb
|
|
57
68
|
- lib/pagy/extras/js_tools.rb
|
|
58
69
|
- lib/pagy/extras/jsonapi.rb
|
|
59
|
-
- lib/pagy/extras/
|
|
70
|
+
- lib/pagy/extras/keyset.rb
|
|
71
|
+
- lib/pagy/extras/limit.rb
|
|
60
72
|
- lib/pagy/extras/meilisearch.rb
|
|
61
73
|
- lib/pagy/extras/metadata.rb
|
|
62
74
|
- lib/pagy/extras/overflow.rb
|
|
63
75
|
- lib/pagy/extras/pagy.rb
|
|
64
76
|
- lib/pagy/extras/searchkick.rb
|
|
65
|
-
- lib/pagy/extras/
|
|
77
|
+
- lib/pagy/extras/size.rb
|
|
66
78
|
- lib/pagy/extras/standalone.rb
|
|
67
79
|
- lib/pagy/extras/trim.rb
|
|
68
|
-
- lib/pagy/extras/uikit.rb
|
|
69
80
|
- lib/pagy/frontend.rb
|
|
70
81
|
- lib/pagy/i18n.rb
|
|
82
|
+
- lib/pagy/keyset.rb
|
|
83
|
+
- lib/pagy/keyset/active_record.rb
|
|
84
|
+
- lib/pagy/keyset/sequel.rb
|
|
71
85
|
- lib/pagy/url_helpers.rb
|
|
72
86
|
- locales/ar.yml
|
|
73
87
|
- locales/be.yml
|
|
@@ -105,6 +119,7 @@ files:
|
|
|
105
119
|
- locales/zh-CN.yml
|
|
106
120
|
- locales/zh-HK.yml
|
|
107
121
|
- locales/zh-TW.yml
|
|
122
|
+
- pkg/pagy-9.0.0.gem
|
|
108
123
|
- stylesheets/pagy.css
|
|
109
124
|
- stylesheets/pagy.scss
|
|
110
125
|
- stylesheets/pagy.tailwind.css
|
|
@@ -118,12 +133,7 @@ metadata:
|
|
|
118
133
|
bug_tracker_uri: https://github.com/ddnexus/pagy/issues
|
|
119
134
|
changelog_uri: https://github.com/ddnexus/pagy/blob/master/CHANGELOG.md
|
|
120
135
|
support: https://github.com/ddnexus/pagy/discussions/categories/q-a
|
|
121
|
-
post_install_message:
|
|
122
|
-
*********************** PAGY WARNING! ***********************
|
|
123
|
-
The foundation, materialize, semantic and uikit CSS extras
|
|
124
|
-
have been discontinued and will be removed in v9
|
|
125
|
-
https://github.com/ddnexus/pagy/discussions/672
|
|
126
|
-
*************************************************************
|
|
136
|
+
post_install_message:
|
|
127
137
|
rdoc_options: []
|
|
128
138
|
require_paths:
|
|
129
139
|
- lib
|
|
@@ -138,7 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
138
148
|
- !ruby/object:Gem::Version
|
|
139
149
|
version: '0'
|
|
140
150
|
requirements: []
|
|
141
|
-
rubygems_version: 3.5.
|
|
151
|
+
rubygems_version: 3.5.11
|
|
142
152
|
signing_key:
|
|
143
153
|
specification_version: 4
|
|
144
154
|
summary: The best pagination ruby gem
|
data/javascripts/pagy-dev.js
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
window.Pagy = (() => {
|
|
3
|
-
// The observer instance for responsive navs
|
|
4
|
-
const rjsObserver = new ResizeObserver(entries => entries.forEach(e => e.target.querySelectorAll(".pagy-rjs").forEach(el => el.pagyRender())));
|
|
5
|
-
// Init the *_nav_js helpers
|
|
6
|
-
const initNav = (el, [tokens, sequels, labelSequels, trimParam]) => {
|
|
7
|
-
const container = el.parentElement ?? el;
|
|
8
|
-
const widths = Object.keys(sequels).map(w => parseInt(w)).sort((a, b) => b - a);
|
|
9
|
-
let lastWidth = -1;
|
|
10
|
-
const fillIn = (a, page, label) => a.replace(/__pagy_page__/g, page).replace(/__pagy_label__/g, label);
|
|
11
|
-
(el.pagyRender = function () {
|
|
12
|
-
const width = widths.find(w => w < container.clientWidth) || 0;
|
|
13
|
-
if (width === lastWidth) {
|
|
14
|
-
return;
|
|
15
|
-
} // no change: abort
|
|
16
|
-
let html = tokens.before; // already trimmed in html
|
|
17
|
-
const series = sequels[width.toString()];
|
|
18
|
-
const labels = labelSequels?.[width.toString()] ?? series.map(l => l.toString());
|
|
19
|
-
for (const i in series) {
|
|
20
|
-
const item = series[i];
|
|
21
|
-
const label = labels[i];
|
|
22
|
-
let filled;
|
|
23
|
-
if (typeof item === "number") {
|
|
24
|
-
filled = fillIn(tokens.a, item.toString(), label);
|
|
25
|
-
}
|
|
26
|
-
else if (item === "gap") {
|
|
27
|
-
filled = tokens.gap;
|
|
28
|
-
}
|
|
29
|
-
else { // active page
|
|
30
|
-
filled = fillIn(tokens.current, item, label);
|
|
31
|
-
}
|
|
32
|
-
html += (typeof trimParam === "string" && item == 1) ? trim(filled, trimParam) : filled;
|
|
33
|
-
}
|
|
34
|
-
html += tokens.after; // eslint-disable-line align-assignments/align-assignments
|
|
35
|
-
el.innerHTML = "";
|
|
36
|
-
el.insertAdjacentHTML("afterbegin", html);
|
|
37
|
-
lastWidth = width;
|
|
38
|
-
})();
|
|
39
|
-
if (el.classList.contains("pagy-rjs")) {
|
|
40
|
-
rjsObserver.observe(container);
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
// Init the *_combo_nav_js helpers
|
|
44
|
-
const initCombo = (el, [url_token, trimParam]) => initInput(el, inputValue => [inputValue, url_token.replace(/__pagy_page__/, inputValue)], trimParam);
|
|
45
|
-
// Init the items_selector_js helper
|
|
46
|
-
const initSelector = (el, [from, url_token, trimParam]) => {
|
|
47
|
-
initInput(el, inputValue => {
|
|
48
|
-
const page = Math.max(Math.ceil(from / parseInt(inputValue)), 1).toString();
|
|
49
|
-
const url = url_token.replace(/__pagy_page__/, page).replace(/__pagy_items__/, inputValue);
|
|
50
|
-
return [page, url];
|
|
51
|
-
}, trimParam);
|
|
52
|
-
};
|
|
53
|
-
// Init the input element
|
|
54
|
-
const initInput = (el, getVars, trimParam) => {
|
|
55
|
-
const input = el.querySelector("input");
|
|
56
|
-
const link = el.querySelector("a");
|
|
57
|
-
const initial = input.value;
|
|
58
|
-
const action = function () {
|
|
59
|
-
if (input.value === initial) {
|
|
60
|
-
return;
|
|
61
|
-
} // not changed
|
|
62
|
-
const [min, val, max] = [input.min, input.value, input.max].map(n => parseInt(n) || 0);
|
|
63
|
-
if (val < min || val > max) { // reset invalid/out-of-range
|
|
64
|
-
input.value = initial;
|
|
65
|
-
input.select();
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
let [page, url] = getVars(input.value); // eslint-disable-line prefer-const
|
|
69
|
-
if (typeof trimParam === "string" && page === "1") {
|
|
70
|
-
url = trim(url, trimParam);
|
|
71
|
-
}
|
|
72
|
-
link.href = url;
|
|
73
|
-
link.click();
|
|
74
|
-
};
|
|
75
|
-
["change", "focus"].forEach(e => input.addEventListener(e, input.select)); // auto-select
|
|
76
|
-
input.addEventListener("focusout", action); // trigger action
|
|
77
|
-
input.addEventListener("keypress", e => { if (e.key === "Enter") {
|
|
78
|
-
action();
|
|
79
|
-
} }); // trigger action
|
|
80
|
-
};
|
|
81
|
-
// Trim the ${page-param}=1 params in links
|
|
82
|
-
const trim = (a, param) => a.replace(new RegExp(`[?&]${param}=1\\b(?!&)|\\b${param}=1&`), "");
|
|
83
|
-
// Public interface
|
|
84
|
-
return {
|
|
85
|
-
version: "8.4.0",
|
|
86
|
-
// Scan for elements with a "data-pagy" attribute and call their init functions with the decoded args
|
|
87
|
-
init(arg) {
|
|
88
|
-
const target = arg instanceof Element ? arg : document;
|
|
89
|
-
const elements = target.querySelectorAll("[data-pagy]");
|
|
90
|
-
for (const el of elements) {
|
|
91
|
-
try {
|
|
92
|
-
const uint8array = Uint8Array.from(atob(el.getAttribute("data-pagy")), c => c.charCodeAt(0));
|
|
93
|
-
const [keyword, ...args] = JSON.parse((new TextDecoder()).decode(uint8array)); // base64-utf8 -> JSON -> Array
|
|
94
|
-
if (keyword === "nav") {
|
|
95
|
-
initNav(el, args);
|
|
96
|
-
}
|
|
97
|
-
else if (keyword === "combo") {
|
|
98
|
-
initCombo(el, args);
|
|
99
|
-
}
|
|
100
|
-
else if (keyword === "selector") {
|
|
101
|
-
initSelector(el, args);
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
console.warn("Skipped Pagy.init() for: %o\nUnknown keyword '%s'", el, keyword);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
catch (err) {
|
|
108
|
-
console.warn("Skipped Pagy.init() for: %o\n%s", el, err);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
};
|
|
113
|
-
})();
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBhZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQWtCQSxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRTtJQUNmLDRDQUE0QztJQUM1QyxNQUFNLFdBQVcsR0FBRyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUNOLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFhLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FDM0UsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFeEUsNEJBQTRCO0lBQzVCLE1BQU0sT0FBTyxHQUFHLENBQUMsRUFBYSxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFTLEVBQUUsRUFBRTtRQUNsRixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztRQUN6QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoRixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuQixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQVEsRUFBRSxJQUFXLEVBQUUsS0FBWSxFQUFTLEVBQUUsQ0FDMUQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEUsQ0FBQyxFQUFFLENB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TyxHQUFHLEVBQUUsQ0FBQztvQkFBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQTtnQkFBQyxDQUFDO1lBQzlFLENBQUM7UUFDTCxDQUFDO0tBQ0osQ0FBQztBQUNOLENBQUMsQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIE5hdkFyZ3MgPSByZWFkb25seSBbVG9rZW5zLCBTZXF1ZWxzLCBudWxsIHwgTGFiZWxTZXF1ZWxzLCBzdHJpbmc/XVxudHlwZSBDb21ib0FyZ3MgPSByZWFkb25seSBbc3RyaW5nLCBzdHJpbmc/XVxudHlwZSBTZWxlY3RvckFyZ3MgPSByZWFkb25seSBbbnVtYmVyLCBzdHJpbmcsIHN0cmluZz9dXG5cbmludGVyZmFjZSBUb2tlbnMge1xuICAgIHJlYWRvbmx5IGJlZm9yZTpzdHJpbmdcbiAgICByZWFkb25seSBhOnN0cmluZ1xuICAgIHJlYWRvbmx5IGN1cnJlbnQ6c3RyaW5nXG4gICAgcmVhZG9ubHkgZ2FwOnN0cmluZ1xuICAgIHJlYWRvbmx5IGFmdGVyOnN0cmluZ1xufVxuXG5pbnRlcmZhY2UgU2VxdWVscyB7cmVhZG9ubHkgW3dpZHRoOnN0cmluZ106KHN0cmluZyB8IG51bWJlcilbXX1cblxuaW50ZXJmYWNlIExhYmVsU2VxdWVscyB7cmVhZG9ubHkgW3dpZHRoOnN0cmluZ106c3RyaW5nW119XG5cbmludGVyZmFjZSBOYXZFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7cGFneVJlbmRlcigpOnZvaWR9XG5cbmNvbnN0IFBhZ3kgPSAoKCkgPT4ge1xuICAgIC8vIFRoZSBvYnNlcnZlciBpbnN0YW5jZSBmb3IgcmVzcG9uc2l2ZSBuYXZzXG4gICAgY29uc3QgcmpzT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoZW50cmllcyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goZSA9PiBlLnRhcmdldC5xdWVyeVNlbGVjdG9yQWxsPE5hdkVsZW1lbnQ+KFwiLnBhZ3ktcmpzXCIpLmZvckVhY2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbCA9PiBlbC5wYWd5UmVuZGVyKCkpKSk7XG5cbiAgICAvLyBJbml0IHRoZSAqX25hdl9qcyBoZWxwZXJzXG4gICAgY29uc3QgaW5pdE5hdiA9IChlbDpOYXZFbGVtZW50LCBbdG9rZW5zLCBzZXF1ZWxzLCBsYWJlbFNlcXVlbHMsIHRyaW1QYXJhbV06TmF2QXJncykgPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBlbC5wYXJlbnRFbGVtZW50ID8/IGVsO1xuICAgICAgICBjb25zdCB3aWR0aHMgPSBPYmplY3Qua2V5cyhzZXF1ZWxzKS5tYXAodyA9PiBwYXJzZUludCh3KSkuc29ydCgoYSwgYikgPT4gYiAtIGEpO1xuICAgICAgICBsZXQgbGFzdFdpZHRoID0gLTE7XG4gICAgICAgIGNvbnN0IGZpbGxJbiA9IChhOnN0cmluZywgcGFnZTpzdHJpbmcsIGxhYmVsOnN0cmluZyk6c3RyaW5nID0+XG4gICAgICAgICAgICBhLnJlcGxhY2UoL19fcGFneV9wYWdlX18vZywgcGFnZSkucmVwbGFjZSgvX19wYWd5X2xhYmVsX18vZywgbGFiZWwpO1xuICAgICAgICAoZWwucGFneVJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gd2lkdGhzLmZpbmQodyA9PiB3IDwgY29udGFpbmVyLmNsaWVudFdpZHRoKSB8fCAwO1xuICAgICAgICAgICAgaWYgKHdpZHRoID09PSBsYXN0V2lkdGgpIHsgcmV0dXJuIH0gLy8gbm8gY2hhbmdlOiBhYm9ydFxuICAgICAgICAgICAgbGV0IGh0bWwgPSB0b2tlbnMuYmVmb3JlOyAgLy8gYWxyZWFkeSB0cmltbWVkIGluIGh0bWxcbiAgICAgICAgICAgIGNvbnN0IHNlcmllcyA9IHNlcXVlbHNbd2lkdGgudG9TdHJpbmcoKV07XG4gICAgICAgICAgICBjb25zdCBsYWJlbHMgPSBsYWJlbFNlcXVlbHM/Llt3aWR0aC50b1N0cmluZygpXSA/PyBzZXJpZXMubWFwKGwgPT4gbC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaSBpbiBzZXJpZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gc2VyaWVzW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gbGFiZWxzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBmaWxsZWQ7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGxlZCA9IGZpbGxJbih0b2tlbnMuYSwgaXRlbS50b1N0cmluZygpLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtID09PSBcImdhcFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGxlZCA9IHRva2Vucy5nYXA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gYWN0aXZlIHBhZ2VcbiAgICAgICAgICAgICAgICAgICAgZmlsbGVkID0gZmlsbEluKHRva2Vucy5jdXJyZW50LCBpdGVtLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGh0bWwgKz0gKHR5cGVvZiB0cmltUGFyYW0gPT09IFwic3RyaW5nXCIgJiYgaXRlbSA9PSAxKSA/IHRyaW0oZmlsbGVkLCB0cmltUGFyYW0pIDogZmlsbGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaHRtbCArPSB0b2tlbnMuYWZ0ZXI7ICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBhbGlnbi1hc3NpZ25tZW50cy9hbGlnbi1hc3NpZ25tZW50c1xuICAgICAgICAgICAgZWwuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIGVsLmluc2VydEFkamFjZW50SFRNTChcImFmdGVyYmVnaW5cIiwgaHRtbCk7XG4gICAgICAgICAgICBsYXN0V2lkdGggPSB3aWR0aDtcbiAgICAgICAgfSkoKTtcbiAgICAgICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhcInBhZ3ktcmpzXCIpKSB7IHJqc09ic2VydmVyLm9ic2VydmUoY29udGFpbmVyKSB9XG4gICAgfTtcblxuICAgIC8vIEluaXQgdGhlICpfY29tYm9fbmF2X2pzIGhlbHBlcnNcbiAgICBjb25zdCBpbml0Q29tYm8gPSAoZWw6RWxlbWVudCwgW3VybF90b2tlbiwgdHJpbVBhcmFtXTpDb21ib0FyZ3MpID0+XG4gICAgICAgIGluaXRJbnB1dChlbCwgaW5wdXRWYWx1ZSA9PiBbaW5wdXRWYWx1ZSwgdXJsX3Rva2VuLnJlcGxhY2UoL19fcGFneV9wYWdlX18vLCBpbnB1dFZhbHVlKV0sIHRyaW1QYXJhbSk7XG5cbiAgICAvLyBJbml0IHRoZSBpdGVtc19zZWxlY3Rvcl9qcyBoZWxwZXJcbiAgICBjb25zdCBpbml0U2VsZWN0b3IgPSAoZWw6RWxlbWVudCwgW2Zyb20sIHVybF90b2tlbiwgdHJpbVBhcmFtXTpTZWxlY3RvckFyZ3MpID0+IHtcbiAgICAgICAgaW5pdElucHV0KGVsLCBpbnB1dFZhbHVlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBNYXRoLm1heChNYXRoLmNlaWwoZnJvbSAvIHBhcnNlSW50KGlucHV0VmFsdWUpKSwgMSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHVybF90b2tlbi5yZXBsYWNlKC9fX3BhZ3lfcGFnZV9fLywgcGFnZSkucmVwbGFjZSgvX19wYWd5X2l0ZW1zX18vLCBpbnB1dFZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBbcGFnZSwgdXJsXTtcbiAgICAgICAgfSwgdHJpbVBhcmFtKTtcbiAgICB9O1xuXG4gICAgLy8gSW5pdCB0aGUgaW5wdXQgZWxlbWVudFxuICAgIGNvbnN0IGluaXRJbnB1dCA9IChlbDpFbGVtZW50LCBnZXRWYXJzOih2OnN0cmluZykgPT4gW3N0cmluZywgc3RyaW5nXSwgdHJpbVBhcmFtPzpzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBlbC5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIikgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgY29uc3QgbGluayA9IGVsLnF1ZXJ5U2VsZWN0b3IoXCJhXCIpIGFzIEhUTUxBbmNob3JFbGVtZW50O1xuICAgICAgICBjb25zdCBpbml0aWFsID0gaW5wdXQudmFsdWU7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC52YWx1ZSA9PT0gaW5pdGlhbCkgeyByZXR1cm4gfSAgLy8gbm90IGNoYW5nZWRcbiAgICAgICAgICAgIGNvbnN0IFttaW4sIHZhbCwgbWF4XSA9IFtpbnB1dC5taW4sIGlucHV0LnZhbHVlLCBpbnB1dC5tYXhdLm1hcChuID0+IHBhcnNlSW50KG4pIHx8IDApO1xuICAgICAgICAgICAgaWYgKHZhbCA8IG1pbiB8fCB2YWwgPiBtYXgpIHsgIC8vIHJlc2V0IGludmFsaWQvb3V0LW9mLXJhbmdlXG4gICAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSBpbml0aWFsO1xuICAgICAgICAgICAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBbcGFnZSwgdXJsXSA9IGdldFZhcnMoaW5wdXQudmFsdWUpOyAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRyaW1QYXJhbSA9PT0gXCJzdHJpbmdcIiAmJiBwYWdlID09PSBcIjFcIikgeyB1cmwgPSB0cmltKHVybCwgdHJpbVBhcmFtKSB9XG4gICAgICAgICAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgICAgICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICAgIH07XG4gICAgICAgIFtcImNoYW5nZVwiLCBcImZvY3VzXCJdLmZvckVhY2goZSA9PiBpbnB1dC5hZGRFdmVudExpc3RlbmVyKGUsIGlucHV0LnNlbGVjdCkpOyAgICAgICAgLy8gYXV0by1zZWxlY3RcbiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3Vzb3V0XCIsIGFjdGlvbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJpZ2dlciBhY3Rpb25cbiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXByZXNzXCIsIGUgPT4geyBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikgeyBhY3Rpb24oKSB9IH0pOyAvLyB0cmlnZ2VyIGFjdGlvblxuICAgIH07XG5cbiAgICAvLyBUcmltIHRoZSAke3BhZ2UtcGFyYW19PTEgcGFyYW1zIGluIGxpbmtzXG4gICAgY29uc3QgdHJpbSA9IChhOnN0cmluZywgcGFyYW06c3RyaW5nKSA9PlxuICAgICAgICBhLnJlcGxhY2UobmV3IFJlZ0V4cChgWz8mXSR7cGFyYW19PTFcXFxcYig/ISYpfFxcXFxiJHtwYXJhbX09MSZgKSwgXCJcIik7XG5cbiAgICAvLyBQdWJsaWMgaW50ZXJmYWNlXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmVyc2lvbjogXCI4LjQuMFwiLFxuXG4gICAgICAgIC8vIFNjYW4gZm9yIGVsZW1lbnRzIHdpdGggYSBcImRhdGEtcGFneVwiIGF0dHJpYnV0ZSBhbmQgY2FsbCB0aGVpciBpbml0IGZ1bmN0aW9ucyB3aXRoIHRoZSBkZWNvZGVkIGFyZ3NcbiAgICAgICAgaW5pdChhcmc/OkVsZW1lbnQgfCBuZXZlcikge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYXJnIGluc3RhbmNlb2YgRWxlbWVudCA/IGFyZyA6IGRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSB0YXJnZXQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLXBhZ3ldXCIpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbCBvZiBlbGVtZW50cykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4YXJyYXkgPSBVaW50OEFycmF5LmZyb20oYXRvYihlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXBhZ3lcIikgYXMgc3RyaW5nKSwgYyA9PiBjLmNoYXJDb2RlQXQoMCkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBba2V5d29yZCwgLi4uYXJnc10gPSBKU09OLnBhcnNlKChuZXcgVGV4dERlY29kZXIoKSkuZGVjb2RlKHVpbnQ4YXJyYXkpKTsgLy8gYmFzZTY0LXV0ZjggLT4gSlNPTiAtPiBBcnJheVxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5d29yZCA9PT0gXCJuYXZcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdE5hdihlbCBhcyBOYXZFbGVtZW50LCBhcmdzIGFzIE5hdkFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleXdvcmQgPT09IFwiY29tYm9cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdENvbWJvKGVsLCBhcmdzIGFzIENvbWJvQXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5d29yZCA9PT0gXCJzZWxlY3RvclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0U2VsZWN0b3IoZWwsIGFyZ3MgYXMgU2VsZWN0b3JBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlNraXBwZWQgUGFneS5pbml0KCkgZm9yOiAlb1xcblVua25vd24ga2V5d29yZCAnJXMnXCIsIGVsLCBrZXl3b3JkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgeyBjb25zb2xlLndhcm4oXCJTa2lwcGVkIFBhZ3kuaW5pdCgpIGZvcjogJW9cXG4lc1wiLCBlbCwgZXJyKSB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufSkoKTtcbiJdfQ==
|
data/lib/pagy/calendar/helper.rb
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class Pagy # :nodoc:
|
|
4
|
-
class Calendar # :nodoc:
|
|
5
|
-
# Initializes the calendar objects, reducing complexity in the extra
|
|
6
|
-
# The returned calendar is a simple hash of units/objects
|
|
7
|
-
class Helper < Hash
|
|
8
|
-
class << self
|
|
9
|
-
private
|
|
10
|
-
|
|
11
|
-
def init(conf, period, params)
|
|
12
|
-
new.send(:init, conf, period, params)
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
private
|
|
17
|
-
|
|
18
|
-
# Create the calendar
|
|
19
|
-
def init(conf, period, params)
|
|
20
|
-
@conf = Marshal.load(Marshal.dump(conf)) # store a copy
|
|
21
|
-
@units = Calendar::UNITS & @conf.keys # get the units in time length desc order
|
|
22
|
-
raise ArgumentError, 'no calendar unit found in pagy_calendar @configuration' if @units.empty?
|
|
23
|
-
|
|
24
|
-
@period = period
|
|
25
|
-
@params = params
|
|
26
|
-
@page_param = conf[:pagy][:page_param] || DEFAULT[:page_param]
|
|
27
|
-
@units.each do |unit| # set all the :page_param vars for later deletion
|
|
28
|
-
unit_page_param = :"#{unit}_#{@page_param}"
|
|
29
|
-
conf[unit][:page_param] = unit_page_param
|
|
30
|
-
conf[unit][:page] = @params[unit_page_param]
|
|
31
|
-
end
|
|
32
|
-
calendar = {}
|
|
33
|
-
object = nil
|
|
34
|
-
@units.each_with_index do |unit, index|
|
|
35
|
-
params_to_delete = @units[(index + 1), @units.size].map { |sub| conf[sub][:page_param] } + [@page_param]
|
|
36
|
-
conf[unit][:params] = lambda { |up| up.except(*params_to_delete.map(&:to_s)) } # rubocop:disable Style/Lambda
|
|
37
|
-
conf[unit][:period] = object&.send(:active_period) || @period
|
|
38
|
-
calendar[unit] = object = Calendar.send(:create, unit, conf[unit])
|
|
39
|
-
end
|
|
40
|
-
[replace(calendar), object.from, object.to]
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# Return the calendar object at time
|
|
44
|
-
def calendar_at(time, **opts)
|
|
45
|
-
conf = Marshal.load(Marshal.dump(@conf))
|
|
46
|
-
page_params = {}
|
|
47
|
-
@units.inject(nil) do |object, unit|
|
|
48
|
-
conf[unit][:period] = object&.send(:active_period) || @period
|
|
49
|
-
conf[unit][:page] = page_params[:"#{unit}_#{@page_param}"] \
|
|
50
|
-
= Calendar.send(:create, unit, conf[unit]).send(:page_at, time, **opts)
|
|
51
|
-
conf[unit][:params] ||= {}
|
|
52
|
-
conf[unit][:params].merge!(page_params)
|
|
53
|
-
Calendar.send(:create, unit, conf[unit])
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
public
|
|
58
|
-
|
|
59
|
-
# Return the current time of the smallest time unit shown
|
|
60
|
-
def showtime
|
|
61
|
-
self[@units.last].from
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
end
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
warn '[PAGY WARNING] The foundation extra has been discontinued and it will be removed in v9 ' \
|
|
4
|
-
'(https://github.com/ddnexus/pagy/discussions/672#discussioncomment-9212328)'
|
|
5
|
-
|
|
6
|
-
require_relative 'js_tools'
|
|
7
|
-
|
|
8
|
-
class Pagy # :nodoc:
|
|
9
|
-
# Frontend modules are specially optimized for performance.
|
|
10
|
-
# The resulting code may not look very elegant, but produces the best benchmarks
|
|
11
|
-
module FoundationExtra
|
|
12
|
-
# Pagination for Foundation: it returns the html with the series of links to the pages
|
|
13
|
-
def pagy_foundation_nav(pagy, id: nil, aria_label: nil, **vars)
|
|
14
|
-
id = %( id="#{id}") if id
|
|
15
|
-
a = pagy_anchor(pagy)
|
|
16
|
-
|
|
17
|
-
html = +%(<nav#{id} class="pagy-foundation-nav" #{
|
|
18
|
-
nav_aria_label(pagy, aria_label:)}><ul class="pagination"> #{
|
|
19
|
-
foundation_prev_html(pagy, a)})
|
|
20
|
-
pagy.series(**vars).each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
|
|
21
|
-
html << case item
|
|
22
|
-
when Integer
|
|
23
|
-
%(<li>#{a.(item)}</li>)
|
|
24
|
-
when String
|
|
25
|
-
%(<li class="current" role="link" aria-current="page" aria-disabled="true">#{pagy.label_for(item)}</li>)
|
|
26
|
-
when :gap
|
|
27
|
-
%(<li class="ellipsis gap"></li>)
|
|
28
|
-
else
|
|
29
|
-
raise InternalError, "expected item types in series to be Integer, String or :gap; got #{item.inspect}"
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
html << %(#{foundation_next_html(pagy, a)}</ul></nav>)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
# Javascript pagination for foundation: it returns a nav with a data-pagy attribute used by the pagy.js file
|
|
36
|
-
def pagy_foundation_nav_js(pagy, id: nil, aria_label: nil, **vars)
|
|
37
|
-
sequels = pagy.sequels(**vars)
|
|
38
|
-
id = %( id="#{id}") if id
|
|
39
|
-
a = pagy_anchor(pagy)
|
|
40
|
-
tokens = { 'before' => %(<ul class="pagination">#{foundation_prev_html pagy, a}),
|
|
41
|
-
'a' => %(<li>#{a.(PAGE_TOKEN, LABEL_TOKEN)}</li>),
|
|
42
|
-
'current' => %(<li class="current" role="link" aria-current="page" aria-disabled="true">#{LABEL_TOKEN}</li>),
|
|
43
|
-
'gap' => %(<li class="ellipsis gap"></li>),
|
|
44
|
-
'after' => %(#{foundation_next_html pagy, a}</ul>) }
|
|
45
|
-
|
|
46
|
-
%(<nav#{id} class="#{'pagy-rjs ' if sequels.size > 1}pagy-foundation-nav-js" #{
|
|
47
|
-
nav_aria_label(pagy, aria_label:)} #{
|
|
48
|
-
pagy_data(pagy, :nav, tokens, sequels, pagy.label_sequels(sequels))
|
|
49
|
-
}></nav>)
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# Javascript combo pagination for Foundation: it returns a nav with a data-pagy attribute used by the pagy.js file
|
|
53
|
-
def pagy_foundation_combo_nav_js(pagy, id: nil, aria_label: nil)
|
|
54
|
-
id = %( id="#{id}") if id
|
|
55
|
-
a = pagy_anchor(pagy)
|
|
56
|
-
pages = pagy.pages
|
|
57
|
-
|
|
58
|
-
page_input = %(<input name="page" type="number" min="1" max="#{pages}" value="#{pagy.page}" aria-current="page" ) <<
|
|
59
|
-
%(style="text-align: center; width: #{pages.to_s.length + 1}rem; ) <<
|
|
60
|
-
%(height: 1.5rem; padding: .5rem; margin: 0 .4rem; font-size: .875rem;" class="current">#{JSTools::A_TAG})
|
|
61
|
-
|
|
62
|
-
%(<nav#{id} class="pagy-foundation-combo-nav-js" #{
|
|
63
|
-
nav_aria_label(pagy, aria_label:)} #{
|
|
64
|
-
pagy_data(pagy, :combo, pagy_url_for(pagy, PAGE_TOKEN))
|
|
65
|
-
}><ul class="pagination">#{
|
|
66
|
-
foundation_prev_html(pagy, a)
|
|
67
|
-
}<li style="padding: 0 .3rem"><label style="display: flex; align-items: center; white-space: nowrap">#{
|
|
68
|
-
pagy_t('pagy.combo_nav_js', page_input:, pages:)
|
|
69
|
-
}</label></li>#{
|
|
70
|
-
foundation_next_html(pagy, a)
|
|
71
|
-
}</ul></nav>)
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
private
|
|
75
|
-
|
|
76
|
-
def foundation_prev_html(pagy, a)
|
|
77
|
-
if (p_prev = pagy.prev)
|
|
78
|
-
%(<li class="prev">#{a.(p_prev, pagy_t('pagy.prev'), aria_label: pagy_t('pagy.aria_label.prev'))}</li>)
|
|
79
|
-
else
|
|
80
|
-
%(<li class="prev disabled" role="link" aria-disabled="true" aria-label="#{
|
|
81
|
-
pagy_t('pagy.aria_label.prev')}">#{pagy_t('pagy.prev')}</li>)
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def foundation_next_html(pagy, a)
|
|
86
|
-
if (p_next = pagy.next)
|
|
87
|
-
%(<li class="next">#{a.(p_next, pagy_t('pagy.next'), aria_label: pagy_t('pagy.aria_label.next'))}</li>)
|
|
88
|
-
else
|
|
89
|
-
%(<li class="next disabled" role="link" aria-disabled="true" aria-label="#{
|
|
90
|
-
pagy_t('pagy.aria_label.next')}">#{pagy_t('pagy.next')}</li>)
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
Frontend.prepend FoundationExtra
|
|
95
|
-
end
|