pagy 43.3.3 → 43.4.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 +1 -1
- data/apps/demo.ru +1 -1
- data/apps/keynav+root_key.ru +1 -1
- data/apps/keynav.ru +1 -1
- data/apps/keyset.ru +1 -1
- data/apps/keyset_sequel.ru +1 -1
- data/apps/rails.ru +1 -1
- data/apps/repro.ru +1 -1
- data/config/pagy.rb +19 -11
- data/javascripts/pagy.js +4 -4
- data/javascripts/pagy.min.js +2 -2
- data/javascripts/pagy.mjs +1 -1
- data/lib/pagy/modules/abilities/configurable.rb +13 -6
- data/lib/pagy/tasks/sync.rb +19 -0
- data/lib/pagy.rb +2 -1
- data/sig/pagy.rbs +24 -20
- data/stylesheets/pagy-tailwind.css +6 -2
- data/stylesheets/pagy.css +6 -2
- metadata +2 -2
- data/javascripts/pagy.js.map +0 -11
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2a2007ee3269a26740ee31b344cd498c73b6182df917f50da15c274f5be7db60
|
|
4
|
+
data.tar.gz: 68320cda9d3f3cf89f1cb0a908b18086cdf7a06f61ac7003603d8f10b3491ee2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 114b25042f1010d67c926bb7c0d30220e4dcb4f45997a8b1107533933ac65d6490c5f8af4731937737059514a735cc29d8c0c19c8c2b5c5ceacaa119e0eba317
|
|
7
|
+
data.tar.gz: 18988be581802dcafd424566190ec98c1ae4d2f839df5186229b4185b5fda578e1dfff65fed66d706df11c0655a3b16f6b3323b8b275bf9c1626778792c70315
|
data/apps/calendar.ru
CHANGED
data/apps/demo.ru
CHANGED
data/apps/keynav+root_key.ru
CHANGED
data/apps/keynav.ru
CHANGED
data/apps/keyset.ru
CHANGED
data/apps/keyset_sequel.ru
CHANGED
data/apps/rails.ru
CHANGED
data/apps/repro.ru
CHANGED
data/config/pagy.rb
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# Pagy initializer file (43.
|
|
4
|
-
# See https://ddnexus.github.io/pagy/
|
|
3
|
+
# Pagy initializer file (43.4.0)
|
|
4
|
+
# See https://ddnexus.github.io/pagy/toolbox/configuration/initializer/
|
|
5
|
+
|
|
5
6
|
|
|
6
7
|
############ Global Options ################################################################
|
|
7
|
-
# See https://ddnexus.github.io/pagy/toolbox/options/ for details.
|
|
8
|
+
# See https://ddnexus.github.io/pagy/toolbox/configuration/options/ for details.
|
|
8
9
|
# Add your global options below. They will be applied globally.
|
|
9
10
|
# For example:
|
|
10
11
|
#
|
|
@@ -15,15 +16,22 @@
|
|
|
15
16
|
|
|
16
17
|
Pagy::OPTIONS.freeze
|
|
17
18
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
#
|
|
21
|
-
#
|
|
22
|
-
#
|
|
19
|
+
|
|
20
|
+
############ JS and CSS Resources ##########################################################
|
|
21
|
+
# See https://ddnexus.github.io/pagy/resources/javascript/
|
|
22
|
+
# and https://ddnexus.github.io/pagy/resources/stylesheets/ for more resources and details.
|
|
23
|
+
# Copy and keep the resource files synced in the app. For example:
|
|
24
|
+
#
|
|
25
|
+
# if Rails.env.development?
|
|
26
|
+
# Pagy.sync(:javascript, Rails.root.join('app/javascript'), 'pagy.mjs')
|
|
27
|
+
# Pagy.sync(:stylesheet, Rails.root.join('app/stylesheets'), 'pagy.css')
|
|
28
|
+
# end
|
|
23
29
|
#
|
|
24
|
-
#
|
|
25
|
-
#
|
|
26
|
-
# Pagy.
|
|
30
|
+
# OR Alternative config ONLY for apps with an asset pipeline
|
|
31
|
+
#
|
|
32
|
+
# Rails.application.config.assets.paths << Pagy::ROOT.join(':javascripts')
|
|
33
|
+
# Rails.application.config.assets.paths << Pagy::ROOT.join(':stylesheets')
|
|
34
|
+
|
|
27
35
|
|
|
28
36
|
|
|
29
37
|
############# Overriding Pagy::I18n Lookup #################################################
|
data/javascripts/pagy.js
CHANGED
|
@@ -129,7 +129,7 @@ var pagy_default = (() => {
|
|
|
129
129
|
});
|
|
130
130
|
};
|
|
131
131
|
return {
|
|
132
|
-
version: "43.
|
|
132
|
+
version: "43.4.0",
|
|
133
133
|
init(arg) {
|
|
134
134
|
const target = arg instanceof HTMLElement ? arg : document, elements = target.querySelectorAll("[data-pagy]");
|
|
135
135
|
for (const element of elements) {
|
|
@@ -153,8 +153,8 @@ var pagy_default = (() => {
|
|
|
153
153
|
};
|
|
154
154
|
})();
|
|
155
155
|
|
|
156
|
-
//
|
|
156
|
+
// pagy-shim.ts
|
|
157
157
|
window.Pagy = pagy_default;
|
|
158
158
|
|
|
159
|
-
//# debugId=
|
|
160
|
-
//# sourceMappingURL=pagy.js.map
|
|
159
|
+
//# debugId=19B6B4D5C24D465D64756E2164756E21
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsicGFneS50cyIsICJwYWd5LXNoaW0udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiaW50ZXJmYWNlIFN5bmNEYXRhIHtcbiAgZnJvbT86IG51bWJlclxuICB0bz86ICAgbnVtYmVyXG4gIGtleTogICBzdHJpbmdcbiAgc3RyPzogIHN0cmluZ1xufVxudHlwZSBJbml0QXJncyA9IFtcImtcIiwgIEtleW5hdkFyZ3NdIHwgICAgICAgICAgLy8gc2VyaWVzX25hdltfanNdIHdpdGgga2V5bmF2IGluc3RhbmNlXG4gICAgICAgICAgICAgICAgW1wic25qXCIsIFNlcmllc05hdkpzQXJnc10gfCAgICAvLyBzZXJpZXNfbmF2X2pzXG4gICAgICAgICAgICAgICAgW1wiaW5qXCIsIElucHV0TmF2SnNBcmdzXSB8ICAgICAvLyBpbnB1dF9uYXZfanNcbiAgICAgICAgICAgICAgICBbXCJsdGpcIiwgTGltaXRUYWdKc0FyZ3NdICAgICAgIC8vIGxpbWl0X3RhZ19qc1xudHlwZSBBdWdtZW50S2V5bmF2ID0gKG5hdjpIVE1MRWxlbWVudCwga2V5bmF2QXJnczpLZXluYXZBcmdzKSA9PiBQcm9taXNlPCgocGFnZTogc3RyaW5nKSA9PiBzdHJpbmcpPlxudHlwZSBLZXluYXZBcmdzID0gcmVhZG9ubHkgW3N0b3JhZ2VLZXk6ICBzdHJpbmcgfCBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RLZXk6ICAgICBzdHJpbmcgfCBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VLZXk6ICAgICBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdDogICAgICAgIG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpY2VBcmdzPzogU3BsaWNlQXJnc11cbnR5cGUgU3BsaWNlQXJncyA9IHJlYWRvbmx5IFtzdGFydDogICAgICAgbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUNvdW50OiBudW1iZXIsICAgICAvLyBpdCB3b3VsZCBiZSBvcHRpb25hbCwgYnV0IHRzIGNvbXBsYWluc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW1zOiAgICBDdXRvZmZbXV1cbnR5cGUgQ3V0b2ZmID0gcmVhZG9ubHkgKHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4pW11cbnR5cGUgQXVnbWVudGVkUGFnZSA9IFticm93c2VySWQ6ICAgc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VLZXk6ICBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgcGFnZU51bWJlcjogIG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICBwYWdlczogICAgICAgbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgIHByaW9yQ3V0b2ZmOiBDdXRvZmYgfCBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgIHBhZ2VDdXRvZmY6ICBDdXRvZmYgfCBudWxsXVxudHlwZSBTZXJpZXNOYXZKc0FyZ3MgPSByZWFkb25seSBbTmF2SnNUb2tlbnMsIHBhZ2VUb2tlbjogc3RyaW5nLCBOYXZKc1NlcmllcywgS2V5bmF2QXJncz9dXG50eXBlIE5hdkpzU2VyaWVzID0gcmVhZG9ubHkgW3dpZHRoczogbnVtYmVyW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmllczogKHN0cmluZyB8IG51bWJlcilbXVtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHM6IHN0cmluZ1tdW10gfCBudWxsXVxudHlwZSBJbnB1dE5hdkpzQXJncyA9IHJlYWRvbmx5IFt1cmxUb2tlbjogIHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVRva2VuOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleW5hdkFyZ3M/XVxudHlwZSBMaW1pdFRhZ0pzQXJncyA9IHJlYWRvbmx5IFtmcm9tOiAgICAgICBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybFRva2VuOiAgIHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVRva2VuOiAgc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdFRva2VuOiBzdHJpbmddXG50eXBlIE5hdkpzVG9rZW5zID0gcmVhZG9ubHkgW2JlZm9yZTogIHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yOiAgc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50OiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogICAgIHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXI6ICAgc3RyaW5nXVxuaW50ZXJmYWNlIE5hdkpzRWxlbWVudCBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgcmVuZGVyKCk6IHZvaWRcbn1cblxuLy8gVGhlIHN5bnRheCB1c2VkIGluIHRoaXMgZmlsZSBoYXMgYmVlbiBjYXJlZnVsbHkgY29tcG9zZWQgdG8gbWluaW1pemVcbi8vIHRoZSBwYWd5Lm1pbi5qcyBzaXplIGFuZCBhdm9pZCBwb2xsdXRpb24gaW4gdGhlIHdpbmRvdyBvYmplY3RcbmV4cG9ydCBkZWZhdWx0ICgoKSA9PiB7XG4gIGNvbnN0IHN0b3JhZ2VTdXBwb3J0ID0gJ3Nlc3Npb25TdG9yYWdlJyBpbiB3aW5kb3cgJiYgJ0Jyb2FkY2FzdENoYW5uZWwnIGluIHdpbmRvdztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICBsZXQgcGFneSA9IFwicGFneVwiLCBzdG9yYWdlOiBTdG9yYWdlLCBzeW5jOiBCcm9hZGNhc3RDaGFubmVsLCB0YWJJZDogbnVtYmVyO1xuICBpZiAoc3RvcmFnZVN1cHBvcnQpIHtcbiAgICBzdG9yYWdlID0gc2Vzc2lvblN0b3JhZ2U7IC8vIHNob3J0ZW4gdGhlIGNvbXBpbGVkIHNpemVcbiAgICBzeW5jICAgID0gbmV3IEJyb2FkY2FzdENoYW5uZWwocGFneSk7XG4gICAgdGFiSWQgICA9IERhdGUubm93KCk7XG4gICAgLy8gU3luYyB0aGUgc2Vzc2lvblN0b3JhZ2Uga2V5cyBmb3IgdGhlIGN1dG9mZnMgb3BlbmVkIGluIGEgbmV3IHRhYi93aW5kb3dcbiAgICBzeW5jLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIChlOk1lc3NhZ2VFdmVudDxTeW5jRGF0YT4pID0+IHtcbiAgICAgIGlmIChlLmRhdGEuZnJvbSkgeyAvLyByZXF1ZXN0IGN1dG9mZnNcbiAgICAgICAgY29uc3QgY3V0b2ZmcyA9IHN0b3JhZ2UuZ2V0SXRlbShlLmRhdGEua2V5KTtcbiAgICAgICAgaWYgKGN1dG9mZnMpIHtcbiAgICAgICAgICBzeW5jLnBvc3RNZXNzYWdlKDxTeW5jRGF0YT57dG86IGUuZGF0YS5mcm9tLCBrZXk6IGUuZGF0YS5rZXksIHN0cjogY3V0b2Zmc30pO1xuICAgICAgICB9IC8vIHNlbmQgcmVzcG9uc2VcbiAgICAgIH0gZWxzZSBpZiAoZS5kYXRhLnRvKSB7ICAvLyByZWNlaXZlIGN1dG9mZnNcbiAgICAgICAgaWYgKGUuZGF0YS50byA9PSB0YWJJZCkge1xuICAgICAgICAgIHN0b3JhZ2Uuc2V0SXRlbShlLmRhdGEua2V5LCA8c3RyaW5nPmUuZGF0YS5zdHIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLy8gVGhlIG9ic2VydmVyIGluc3RhbmNlIGZvciByZXNwb25zaXZlIG5hdnNcbiAgY29uc3QgcmpzT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoXG4gICAgICBlbnRyaWVzID0+IGVudHJpZXMuZm9yRWFjaChlID0+IHtcbiAgICAgICAgZS50YXJnZXQucXVlcnlTZWxlY3RvckFsbDxOYXZKc0VsZW1lbnQ+KFwiLnBhZ3ktcmpzXCIpLmZvckVhY2goZWwgPT4gZWwucmVuZGVyKCkpO1xuICAgICAgfSkpO1xuXG4gIC8qIEZ1bGwgc2V0IG9mIEI2NCBmdW5jdGlvbnNcbiAgY29uc3QgQjY0RW5jb2RlICAgICA9ICh1bmljb2RlOnN0cmluZykgPT4gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLihuZXcgVGV4dEVuY29kZXIpLmVuY29kZSh1bmljb2RlKSkpLFxuICAgICAgICBCNjRTYWZlICAgICAgID0gKHVuc2FmZTpzdHJpbmcpICA9PiB1bnNhZmUucmVwbGFjZSgvWysvPV0vZywgKG0pID0+IG0gPT0gXCIrXCIgPyBcIi1cIiA6IG0gPT0gXCIvXCIgPyBcIl9cIiA6IFwiXCIpLFxuICAgICAgICBCNjRTYWZlRW5jb2RlID0gKHVuaWNvZGU6c3RyaW5nKSA9PiBCNjRTYWZlKEI2NEVuY29kZSh1bmljb2RlKSksXG4gICAgICAgIEI2NERlY29kZSAgICAgPSAoYmFzZTY0OnN0cmluZykgID0+IChuZXcgVGV4dERlY29kZXIoKSkuZGVjb2RlKFVpbnQ4QXJyYXkuZnJvbShhdG9iKGJhc2U2NCksIGMgPT4gYy5jaGFyQ29kZUF0KDApKSksXG4gICAgICAgIEI2NFVuc2FmZSAgICAgPSAoc2FmZTpzdHJpbmcpICAgID0+IHNhZmUucmVwbGFjZSgvWy1fXS9nLCAobWF0Y2gpID0+IG1hdGNoID09IFwiLVwiID8gXCIrXCIgOiBcIi9cIiksXG4gICAgICAgIEI2NFNhZmVEZWNvZGUgPSAoYmFzZTY0OnN0cmluZykgID0+IEI2NERlY29kZShCNjRVbnNhZmUoYmFzZTY0KSlcbiAgKi9cbiAgY29uc3QgQjY0U2FmZUVuY29kZSA9ICh1bmljb2RlOnN0cmluZykgPT4gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLihuZXcgVGV4dEVuY29kZXIpLmVuY29kZSh1bmljb2RlKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bKy89XS9nLCAobSkgPT4gbSA9PSBcIitcIiA/IFwiLVwiIDogbSA9PSBcIi9cIiA/IFwiX1wiIDogXCJcIiksXG4gICAgICAgIEI2NERlY29kZSAgICAgPSAoYmFzZTY0OnN0cmluZykgID0+IChuZXcgVGV4dERlY29kZXIoKSkuZGVjb2RlKFVpbnQ4QXJyYXkuZnJvbShhdG9iKGJhc2U2NCksIGMgPT4gYy5jaGFyQ29kZUF0KDApKSk7XG5cbiAgLy8gUmV0dXJuIGEgcmFuZG9tIGtleTogMyBjaGFycyBtYXgsIGJhc2UtMzYgbnVtYmVyIDwgMzYqKjNcbiAgY29uc3QgcmFuZEtleSA9ICgpID0+IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDM2ICoqIDMpLnRvU3RyaW5nKDM2KTtcblxuICAvLyBNYW5hZ2UgdGhlIHBhZ2UgYXVnbWVudGF0aW9uIGZvciBLZXluYXYsIGNhbGxlZCBvbmx5IGlmIHN0b3JhZ2VTdXBwb3J0XG4gIGNvbnN0IGF1Z21lbnRLZXluYXY6IEF1Z21lbnRLZXluYXYgPSBhc3luYyAobmF2LCBbc3RvcmFnZUtleSwgcm9vdEtleSwgcGFnZUtleSwgbGFzdCwgc3BsaWNlQXJnc10pID0+IHtcbiAgICBsZXQgYXVnbWVudFBhZ2U6KHBhZ2U6IHN0cmluZykgPT4gc3RyaW5nO1xuICAgIGNvbnN0IGJyb3dzZXJLZXkgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoLztcXHMrLykgIC8vIGl0IHdvcmtzIGV2ZW4gaWYgbWFsZm9ybWVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQoKHJvdykgPT4gcm93LnN0YXJ0c1dpdGgocGFneSArIFwiPVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LnNwbGl0KFwiPVwiKVsxXSA/PyByYW5kS2V5KCk7XG4gICAgZG9jdW1lbnQuY29va2llID0gcGFneSArIFwiPVwiICsgYnJvd3NlcktleTsgIC8vIFNtYWxsZXIgLm1pbiBzaXplOiBzZXQgdGhlIGNvb2tpZSB3aXRob3V0IGNoZWNraW5nXG4gICAgaWYgKHN0b3JhZ2VLZXkgJiYgIShzdG9yYWdlS2V5IGluIHN0b3JhZ2UpKSB7XG4gICAgICAvLyBTeW5jIHRoZSBzZXNzaW9uZ1N0b3JhZ2UgZnJvbSBvdGhlciB0YWJzL3dpbmRvd3MgKGUuZy4sIG9wZW4gcGFnZSBpbiB0aGUgbmV3IHRhYi93aW5kb3cpXG4gICAgICBzeW5jLnBvc3RNZXNzYWdlKDxTeW5jRGF0YT57IGZyb206IHRhYklkLCBrZXk6IHN0b3JhZ2VLZXkgfSk7XG4gICAgICAvLyBXYWl0IGZvciB0aGUgbGlzdGVuZXIgdG8gY29weSB0aGUgY3V0b2ZmcyBpbiB0aGUgY3VycmVudCBzZXNzaW9uU3RvcmFnZVxuICAgICAgYXdhaXQgbmV3IFByb21pc2U8c3RyaW5nfG51bGw+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoXCJcIiksIDEwMCkpO1xuICAgICAgaWYgKCEoc3RvcmFnZUtleSBpbiBzdG9yYWdlKSkgeyAvLyB0aGUgc3RvcmFnZUtleSBkaWRuJ3QgZ2V0IGNvcGllZDogZmFsbGJhY2sgdG8gY291bnRsZXNzIHBhZ2luYXRpb25cbiAgICAgICAgYXVnbWVudFBhZ2UgPSAocGFnZTogc3RyaW5nKSA9PiBwYWdlICsgJysnICsgbGFzdDtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBJZiBpdCBpcyBub3QgYXNzaWduZWQgaXQgbWVhbnMgaXQgc3VwcG9ydHMga2V5bmF2XG4gICAgaWYgKCFhdWdtZW50UGFnZSkgeyAvLyByZWd1bGFyIGtleW5hdiBwYWdpbmF0aW9uXG4gICAgICBpZiAoIXN0b3JhZ2VLZXkpIHsgZG8geyBzdG9yYWdlS2V5ID0gcmFuZEtleSgpIH0gd2hpbGUgKHN0b3JhZ2VLZXkgaW4gc3RvcmFnZSkgfSAvLyBubyBkdXAga2V5c1xuICAgICAgY29uc3QgZGF0YSA9IHN0b3JhZ2UuZ2V0SXRlbShzdG9yYWdlS2V5KSxcbiAgICAgICAgICBjdXRvZmZzID0gPEN1dG9mZltdPihkYXRhID8gSlNPTi5wYXJzZShkYXRhKSA6IFt1bmRlZmluZWRdKTtcbiAgICAgIGlmIChzcGxpY2VBcmdzKSB7XG4gICAgICAgIGN1dG9mZnMuc3BsaWNlKC4uLnNwbGljZUFyZ3MpO1xuICAgICAgICBzdG9yYWdlLnNldEl0ZW0oc3RvcmFnZUtleSwgSlNPTi5zdHJpbmdpZnkoY3V0b2ZmcykpO1xuICAgICAgfVxuICAgICAgLy8gQXVnbWVudCBmdW5jdGlvblxuICAgICAgYXVnbWVudFBhZ2UgPSAocGFnZTpzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgcGFnZU51bSA9IHBhcnNlSW50KHBhZ2UpO1xuICAgICAgICByZXR1cm4gQjY0U2FmZUVuY29kZShKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIDxBdWdtZW50ZWRQYWdlPlticm93c2VyS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZU51bSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXRvZmZzLmxlbmd0aCwgICAgICAgLy8gcGFnZXMvbGFzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1dG9mZnNbcGFnZU51bSAtIDFdLCAvLyBwcmlvckN1dG9mZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1dG9mZnNbcGFnZU51bV1dKSk7ICAvLyBwYWdlQ3V0b2ZmXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBzZWFyY2ggPSAocm9vdEtleSkgPyBgJHtyb290S2V5fSU1QiR7cGFnZUtleX0lNURgIDogcGFnZUtleTtcbiAgICBjb25zdCByZSAgICAgPSBuZXcgUmVnRXhwKGAoPzw9XFxcXD8uKikoXFxcXGIke3NlYXJjaH09KShcXFxcZCspYCk7XG4gICAgLy8gQXVnbWVudCB0aGUgcGFnZSBwYXJhbSBvZiBlYWNoIGhyZWZcbiAgICBmb3IgKGNvbnN0IGEgb2YgPE5vZGVMaXN0T2Y8SFRNTEFuY2hvckVsZW1lbnQ+Pjx1bmtub3duPm5hdi5xdWVyeVNlbGVjdG9yQWxsKCdhW2hyZWZdJykpIHtcbiAgICAgIGEuaHJlZiA9IGEuaHJlZi5yZXBsYWNlKHJlLCAoX21hdGNoLCBwcmVmaXgsIGRpZ2l0KTogc3RyaW5nID0+IGAke3ByZWZpeH0ke2F1Z21lbnRQYWdlKDxzdHJpbmc+ZGlnaXQpfWApO1xuICAgIH1cbiAgICAvLyBSZXR1cm4gdGhlIGF1Z21lbnQgZnVuY3Rpb24gZm9yIGZ1cnRoZXIgYXVnbWVudGF0aW9uIChpLmUuLCB1cmwgdG9rZW4gaW4gaW5wdXRfbmF2X2pzKVxuICAgIHJldHVybiBhdWdtZW50UGFnZTtcbiAgfTtcblxuICAvLyBCdWlsZCB0aGUgc2VyaWVzX25hdl9qcyBoZWxwZXJcbiAgY29uc3QgYnVpbGROYXZKcyA9IChuYXY6TmF2SnNFbGVtZW50LCBbW2JlZm9yZSwgYW5jaG9yLCBjdXJyZW50LCBnYXAsIGFmdGVyXSwgcGFnZVRva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3aWR0aHMsIHNlcmllcywgbGFiZWxzXSwga2V5bmF2QXJnc106U2VyaWVzTmF2SnNBcmdzKSA9PiB7XG4gICAgY29uc3QgIHBhcmVudCA9IDxIVE1MRWxlbWVudD5uYXYucGFyZW50RWxlbWVudDtcbiAgICBsZXQgbGFzdFdpZHRoID0gLTE7XG4gICAgKG5hdi5yZW5kZXIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHdpZHRocy5maW5kSW5kZXgodyA9PiB3IDwgcGFyZW50LmNsaWVudFdpZHRoKTtcbiAgICAgIGlmICh3aWR0aHNbaW5kZXhdID09PSBsYXN0V2lkdGgpIHsgcmV0dXJuIH0gLy8gbm8gY2hhbmdlOiBhYm9ydFxuXG4gICAgICBsZXQgaHRtbCA9IGJlZm9yZTtcbiAgICAgIHNlcmllc1tpbmRleF0uZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAvLyBBdm9pZCB0aGUgaWYgYmxvY2tzIGFuZCBjaGFpbiB0aGUgcmVzdWx0cyAoc2hvcnRlciBwYWd5Lm1pbi5qcyBhbmQgZWFzaWVyIHJlYWRpbmcpXG4gICAgICAgIGh0bWwgKz0gaXRlbSA9PSBcImdhcFwiID8gZ2FwIDpcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHRoZSBpdGVtIG1heSBiZSBhIG51bWJlciwgYnV0IHRoZSAncmVwbGFjZScgY29udmVydHMgaXQgdG8gc3RyaW5nIChzaG9ydGVyIHBhZ3kubWluLmpzKVxuICAgICAgICAgICAgICAgICh0eXBlb2YgaXRlbSA9PSBcIm51bWJlclwiID8gYW5jaG9yLnJlcGxhY2UocGFnZVRva2VuLCBpdGVtKSA6IGN1cnJlbnQpXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKFwiTDxcIiwgbGFiZWxzPy5baW5kZXhdW2ldID8/IGl0ZW0gKyBcIjxcIik7XG4gICAgICB9KTtcbiAgICAgIGh0bWwgICAgICAgICArPSBhZnRlcjtcbiAgICAgIG5hdi5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgbmF2Lmluc2VydEFkamFjZW50SFRNTChcImFmdGVyYmVnaW5cIiwgaHRtbCk7XG4gICAgICBsYXN0V2lkdGggPSB3aWR0aHNbaW5kZXhdO1xuICAgICAgaWYgKGtleW5hdkFyZ3MgJiYgc3RvcmFnZVN1cHBvcnQpIHsgdm9pZCBhdWdtZW50S2V5bmF2KG5hdiwga2V5bmF2QXJncykgfVxuICAgIH0pKCk7XG4gICAgaWYgKG5hdi5jbGFzc0xpc3QuY29udGFpbnMocGFneSArIFwiLXJqc1wiKSkgeyByanNPYnNlcnZlci5vYnNlcnZlKHBhcmVudCkgfVxuICB9O1xuXG4gIC8vIEluaXQgdGhlIGlucHV0X25hdl9qcyBoZWxwZXJzXG4gIGNvbnN0IGluaXRJbnB1dE5hdkpzID0gYXN5bmMgKG5hdjpIVE1MRWxlbWVudCwgW3VybF90b2tlbiwgcGFnZVRva2VuLCBrZXluYXZBcmdzXTpJbnB1dE5hdkpzQXJncykgPT4ge1xuICAgIGNvbnN0IGF1Z21lbnQgPSBrZXluYXZBcmdzICYmIHN0b3JhZ2VTdXBwb3J0XG4gICAgICAgICAgICAgICAgICAgID8gYXdhaXQgYXVnbWVudEtleW5hdihuYXYsIGtleW5hdkFyZ3MpXG4gICAgICAgICAgICAgICAgICAgIDogKHBhZ2U6IHN0cmluZykgPT4gcGFnZTtcbiAgICBpbml0SW5wdXQobmF2LCBpbnB1dFZhbHVlID0+IHVybF90b2tlbi5yZXBsYWNlKHBhZ2VUb2tlbiwgYXVnbWVudChpbnB1dFZhbHVlKSkpO1xuICB9O1xuXG4gIC8vIEluaXQgdGhlIGxpbWl0X3RhZ19qcyBoZWxwZXJcbiAgY29uc3QgaW5pdExpbWl0VGFnSnMgPSAoc3BhbjpIVE1MU3BhbkVsZW1lbnQsIFtmcm9tLCB1cmxfdG9rZW4sIHBhZ2VfdG9rZW4sIGxpbWl0VG9rZW5dOkxpbWl0VGFnSnNBcmdzKSA9PiB7XG4gICAgaW5pdElucHV0KHNwYW4sIGlucHV0VmFsdWUgPT4ge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGUgcGFnZSBpcyBhIG51bWJlciwgYnV0IHRoZSAncmVwbGFjZScgY29udmVydHMgaXQgdG8gc3RyaW5nIChzaG9ydGVyIHBhZ3kubWluLmpzKVxuICAgICAgcmV0dXJuIHVybF90b2tlbi5yZXBsYWNlKHBhZ2VfdG9rZW4sIE1hdGgubWF4KE1hdGguY2VpbChmcm9tIC8gcGFyc2VJbnQoaW5wdXRWYWx1ZSkpLCAxKSlcbiAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShsaW1pdFRva2VuLCBpbnB1dFZhbHVlKTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBJbml0IHRoZSBpbnB1dCBlbGVtZW50XG4gIGNvbnN0IGluaXRJbnB1dCA9IChlbGVtZW50OkhUTUxFbGVtZW50LCBnZXRVcmw6KHY6c3RyaW5nKSA9PiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBpbnB1dCAgID0gPEhUTUxJbnB1dEVsZW1lbnQ+ZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIiksXG4gICAgICAgICAgbGluayAgICA9IDxIVE1MQW5jaG9yRWxlbWVudD5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJhXCIpO1xuICAgIGxldCAgIGluaXRpYWwgPSBpbnB1dC52YWx1ZTtcbiAgICBjb25zdCBhY3Rpb24gID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC52YWx1ZSA9PT0gaW5pdGlhbCkgeyByZXR1cm4gfSAgLy8gbm90IGNoYW5nZWRcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbbWluLCB2YWwsIG1heF0gPSBbaW5wdXQubWluLCBpbnB1dC52YWx1ZSwgaW5wdXQubWF4XS5tYXAobiA9PiBwYXJzZUludChuKSB8fCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsIDwgbWluIHx8IHZhbCA+IG1heCkgeyAgLy8gcmVzZXQgaW52YWxpZC9vdXQtb2YtcmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gaW5pdGlhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsID0gaW5wdXQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgbGluay5ocmVmID0gZ2V0VXJsKGlucHV0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsICgpID0+IGlucHV0LnNlbGVjdCgpKTtcbiAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNvdXRcIiwgYWN0aW9uKTtcbiAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIiwgZSA9PiB7IGlmIChlLmtleSA9PSBcIkVudGVyXCIpIHsgYWN0aW9uKCkgfSB9KTtcbiAgfTtcblxuICAvLyBQdWJsaWMgaW50ZXJmYWNlXG4gIHJldHVybiB7XG4gICAgdmVyc2lvbjogXCI0My40LjBcIixcblxuICAgIC8vIFNjYW4gZm9yIGVsZW1lbnRzIHdpdGggYSBcImRhdGEtcGFneVwiIGF0dHJpYnV0ZSBhbmQgY2FsbCB0aGVpciBpbml0IGZ1bmN0aW9ucyB3aXRoIHRoZSBkZWNvZGVkIGFyZ3NcbiAgICBpbml0KGFyZz86SFRNTEVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHRhcmdldCAgID0gYXJnIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBhcmcgOiBkb2N1bWVudCxcbiAgICAgICAgICAgIGVsZW1lbnRzID0gdGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1wYWd5XVwiKTtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiA8Tm9kZUxpc3RPZjxIVE1MRWxlbWVudD4+ZWxlbWVudHMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBbaGVscGVySWQsIC4uLmFyZ3NdID0gPEluaXRBcmdzPkpTT04ucGFyc2UoQjY0RGVjb2RlKDxzdHJpbmc+ZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXBhZ3lcIikpKTtcbiAgICAgICAgICBpZiAoaGVscGVySWQgPT0gXCJrXCIpIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igc3ByZWFkIDIgYXJndW1lbnRzLCBub3QgMyBhcyBpdCBjb21wbGFpbnMgYWJvdXRcbiAgICAgICAgICAgIHZvaWQgYXVnbWVudEtleW5hdihlbGVtZW50LCAuLi48S2V5bmF2QXJncz48dW5rbm93bj5hcmdzKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGhlbHBlcklkID09IFwic25qXCIpIHtcbiAgICAgICAgICAgIGJ1aWxkTmF2SnMoPE5hdkpzRWxlbWVudD5lbGVtZW50LCA8U2VyaWVzTmF2SnNBcmdzPjx1bmtub3duPmFyZ3MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaGVscGVySWQgPT0gXCJpbmpcIikge1xuICAgICAgICAgICAgdm9pZCBpbml0SW5wdXROYXZKcyhlbGVtZW50LCA8SW5wdXROYXZKc0FyZ3M+PHVua25vd24+YXJncyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChoZWxwZXJJZCA9PSBcImx0alwiKSB7XG4gICAgICAgICAgICBpbml0TGltaXRUYWdKcyhlbGVtZW50LCA8TGltaXRUYWdKc0FyZ3M+PHVua25vd24+YXJncyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGVsc2UgeyBjb25zb2xlLndhcm4oXCJQYWd5LmluaXQ6ICVvXFxuVW5rbm93biBoZWxwZXJJZCAnJXMnXCIsIGVsZW1lbnQsIGhlbHBlcklkKSB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikgeyBjb25zb2xlLndhcm4oXCJQYWd5LmluaXQ6ICVvXFxuJXNcIiwgZWxlbWVudCwgZXJyKSB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufSkoKTtcbiIsCiAgICAiaW1wb3J0IFBhZ3kgZnJvbSBcIi4vcGFneS50c1wiXG53aW5kb3cuUGFneSA9IFBhZ3lcbiIKICBdLAogICJtYXBwaW5ncyI6ICI7QUFnREEsSUFBZ0Isc0JBQU07QUFBQSxFQUNwQixNQUFNLGlCQUFpQixvQkFBb0IsVUFBVSxzQkFBc0I7QUFBQSxFQUUzRSxJQUFJLE9BQU8sUUFBUSxTQUFrQixNQUF3QjtBQUFBLEVBQzdELElBQUksZ0JBQWdCO0FBQUEsSUFDbEIsVUFBVTtBQUFBLElBQ1YsT0FBVSxJQUFJLGlCQUFpQixJQUFJO0FBQUEsSUFDbkMsUUFBVSxLQUFLLElBQUk7QUFBQSxJQUVuQixLQUFLLGlCQUFpQixXQUFXLENBQUMsTUFBNkI7QUFBQSxNQUM3RCxJQUFJLEVBQUUsS0FBSyxNQUFNO0FBQUEsUUFDZixNQUFNLFVBQVUsUUFBUSxRQUFRLEVBQUUsS0FBSyxHQUFHO0FBQUEsUUFDMUMsSUFBSSxTQUFTO0FBQUEsVUFDWCxLQUFLLFlBQXNCLEVBQUMsSUFBSSxFQUFFLEtBQUssTUFBTSxLQUFLLEVBQUUsS0FBSyxLQUFLLEtBQUssUUFBTyxDQUFDO0FBQUEsUUFDN0U7QUFBQSxNQUNGLEVBQU8sU0FBSSxFQUFFLEtBQUssSUFBSTtBQUFBLFFBQ3BCLElBQUksRUFBRSxLQUFLLE1BQU0sT0FBTztBQUFBLFVBQ3RCLFFB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QUNyQixNQUFNLFNBQVcsZUFBZSxjQUFjLE1BQU0sVUFDOUMsV0FBVyxPQUFPLGlCQUFpQixhQUFhO0FBQUEsTUFDdEQsV0FBVyxXQUFvQyxVQUFVO0FBQUEsUUFDdkQsSUFBSTtBQUFBLFVBQ0YsT0FBTyxhQUFhLFFBQWtCLEtBQUssTUFBTSxVQUFrQixRQUFRLGFBQWEsV0FBVyxDQUFDLENBQUM7QUFBQSxVQUNyRyxJQUFJLFlBQVksS0FBSztBQUFBLFlBRWQsY0FBYyxTQUFTLEdBQXdCLElBQUk7QUFBQSxVQUMxRCxFQUFPLFNBQUksWUFBWSxPQUFPO0FBQUEsWUFDNUIsV0FBeUIsU0FBbUMsSUFBSTtBQUFBLFVBQ2xFLEVBQU8sU0FBSSxZQUFZLE9BQU87QUFBQSxZQUN2QixlQUFlLFNBQWtDLElBQUk7QUFBQSxVQUM1RCxFQUFPLFNBQUksWUFBWSxPQUFPO0FBQUEsWUFDNUIsZUFBZSxTQUFrQyxJQUFJO0FBQUEsVUFDdkQ7QUFBQSxVQUVBLE9BQU8sS0FBSztBQUFBLFVBQUUsUUFBUSxLQUFLO0FBQUEsS0FBcUIsU0FBUyxHQUFHO0FBQUE7QUFBQSxNQUNoRTtBQUFBO0FBQUEsRUFFSjtBQUFBLEdBQ0M7OztBQ3BPSCxPQUFPLE9BQU87IiwKICAiZGVidWdJZCI6ICIxOUI2QjRENUMyNEQ0NjVENjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
|
data/javascripts/pagy.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
%s`,F,H)}}}})();
|
|
1
|
+
window.Pagy=(()=>{let B="sessionStorage"in window&&"BroadcastChannel"in window,L="pagy",Z,O,W;if(B)Z=sessionStorage,O=new BroadcastChannel(L),W=Date.now(),O.addEventListener("message",(q)=>{if(q.data.from){let z=Z.getItem(q.data.key);if(z)O.postMessage({to:q.data.from,key:q.data.key,str:z})}else if(q.data.to){if(q.data.to==W)Z.setItem(q.data.key,q.data.str)}});let V=new ResizeObserver((q)=>q.forEach((z)=>{z.target.querySelectorAll(".pagy-rjs").forEach((C)=>C.render())})),_=(q)=>btoa(String.fromCharCode(...new TextEncoder().encode(q))).replace(/[+/=]/g,(z)=>z=="+"?"-":z=="/"?"_":""),x=(q)=>new TextDecoder().decode(Uint8Array.from(atob(q),(z)=>z.charCodeAt(0))),P=()=>Math.floor(Math.random()*46656).toString(36),J=async(q,[z,C,F,H,G])=>{let Q,X=document.cookie.split(/;\s+/).find((M)=>M.startsWith(L+"="))?.split("=")[1]??P();if(document.cookie=L+"="+X,z&&!(z in Z)){if(O.postMessage({from:W,key:z}),await new Promise((M)=>setTimeout(()=>M(""),100)),!(z in Z))Q=(M)=>M+"+"+H}if(!Q){if(!z)do z=P();while(z in Z);let M=Z.getItem(z),Y=M?JSON.parse(M):[void 0];if(G)Y.splice(...G),Z.setItem(z,JSON.stringify(Y));Q=($)=>{let R=parseInt($);return _(JSON.stringify([X,z,R,Y.length,Y[R-1],Y[R]]))}}let D=C?`${C}%5B${F}%5D`:F,E=new RegExp(`(?<=\\?.*)(\\b${D}=)(\\d+)`);for(let M of q.querySelectorAll("a[href]"))M.href=M.href.replace(E,(Y,$,R)=>`${$}${Q(R)}`);return Q},T=(q,[[z,C,F,H,G],Q,[X,D,E],M])=>{let Y=q.parentElement,$=-1;if((q.render=()=>{let R=X.findIndex((j)=>j<Y.clientWidth);if(X[R]===$)return;let U=z;if(D[R].forEach((j,I)=>{U+=j=="gap"?H:(typeof j=="number"?C.replace(Q,j):F).replace("L<",E?.[R][I]??j+"<")}),U+=G,q.innerHTML="",q.insertAdjacentHTML("afterbegin",U),$=X[R],M&&B)J(q,M)})(),q.classList.contains(L+"-rjs"))V.observe(Y)},w=async(q,[z,C,F])=>{let H=F&&B?await J(q,F):(G)=>G;S(q,(G)=>z.replace(C,H(G)))},A=(q,[z,C,F,H])=>{S(q,(G)=>{return C.replace(F,Math.max(Math.ceil(z/parseInt(G)),1)).replace(H,G)})},S=(q,z)=>{let C=q.querySelector("input"),F=q.querySelector("a"),H=C.value,G=()=>{if(C.value===H)return;let[Q,X,D]=[C.min,C.value,C.max].map((E)=>parseInt(E)||0);if(X<Q||X>D){C.value=H,C.select();return}H=C.value,F.href=z(C.value),F.click()};C.addEventListener("focus",()=>C.select()),C.addEventListener("focusout",G),C.addEventListener("keypress",(Q)=>{if(Q.key=="Enter")G()})};return{version:"43.4.0",init(q){let z=q instanceof HTMLElement?q:document,C=z.querySelectorAll("[data-pagy]");for(let F of C)try{let[H,...G]=JSON.parse(x(F.getAttribute("data-pagy")));if(H=="k")J(F,...G);else if(H=="snj")T(F,G);else if(H=="inj")w(F,G);else if(H=="ltj")A(F,G)}catch(H){console.warn(`Pagy.init: %o
|
|
2
|
+
%s`,F,H)}}}})();
|
data/javascripts/pagy.mjs
CHANGED
|
@@ -128,7 +128,7 @@ export default (() => {
|
|
|
128
128
|
});
|
|
129
129
|
};
|
|
130
130
|
return {
|
|
131
|
-
version: "43.
|
|
131
|
+
version: "43.4.0",
|
|
132
132
|
init(arg) {
|
|
133
133
|
const target = arg instanceof HTMLElement ? arg : document, elements = target.querySelectorAll("[data-pagy]");
|
|
134
134
|
for (const element of elements) {
|
|
@@ -3,12 +3,19 @@
|
|
|
3
3
|
class Pagy
|
|
4
4
|
# Add configuration methods
|
|
5
5
|
module Configurable
|
|
6
|
-
# Sync the pagy javascript targets
|
|
7
|
-
def sync_javascript(
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
# Deprecated: Sync the pagy javascript targets. Use sync(:javascripts, ...) instead.
|
|
7
|
+
def sync_javascript(...)
|
|
8
|
+
warn "[PAGY] 'Pagy.sync_javascript(...) is deprecated: use Pagy.sync(:javascript, ...) instead.'"
|
|
9
|
+
sync(:javascript, ...)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Sync the pagy resource targets.
|
|
13
|
+
def sync(resource, destination, *targets)
|
|
14
|
+
files = ROOT.join("#{resource}s").glob("{#{targets.join(',')}}")
|
|
15
|
+
unknownn = targets - files.map { |f| f.basename.to_s }
|
|
16
|
+
raise InternalError, "Resource not known: #{unknownn.join(', ')}" if unknownn.any?
|
|
17
|
+
|
|
18
|
+
FileUtils.cp(files, destination)
|
|
12
19
|
end
|
|
13
20
|
|
|
14
21
|
# Generate the script and style tags to help development
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'rake'
|
|
4
|
+
require 'rake/tasklib'
|
|
5
|
+
|
|
6
|
+
class Pagy
|
|
7
|
+
class SyncTask < Rake::TaskLib
|
|
8
|
+
def initialize(resource, destination, *targets)
|
|
9
|
+
namespace :pagy do
|
|
10
|
+
namespace :sync do
|
|
11
|
+
desc "Sync #{resource}"
|
|
12
|
+
task(resource) do
|
|
13
|
+
Pagy.sync(resource, destination, *targets)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
data/lib/pagy.rb
CHANGED
|
@@ -10,7 +10,7 @@ require_relative 'pagy/toolbox/helpers/loaders'
|
|
|
10
10
|
# Top superclass: it defines only what's common to all the subclasses
|
|
11
11
|
# noinspection RubyMismatchedArgumentType
|
|
12
12
|
class Pagy
|
|
13
|
-
VERSION = '43.
|
|
13
|
+
VERSION = '43.4.0'
|
|
14
14
|
ROOT = Pathname.new(__dir__).parent.freeze
|
|
15
15
|
DEFAULT = { limit: 20, limit_key: 'limit', page_key: 'page' }.freeze
|
|
16
16
|
PAGE_TOKEN = EscapedValue.new('P ')
|
|
@@ -30,6 +30,7 @@ class Pagy
|
|
|
30
30
|
autoload :Searchkick, path.join('classes/offset/search')
|
|
31
31
|
autoload :TypesenseRails, path.join('classes/offset/search')
|
|
32
32
|
autoload :Keyset, path.join('classes/keyset/keyset')
|
|
33
|
+
autoload :SyncTask, path.join('tasks/sync')
|
|
33
34
|
|
|
34
35
|
OPTIONS = {} # rubocop:disable Style/MutableConstant
|
|
35
36
|
def self.options = OPTIONS
|
data/sig/pagy.rbs
CHANGED
|
@@ -1,24 +1,5 @@
|
|
|
1
1
|
# sig/pagy.rbs
|
|
2
2
|
|
|
3
|
-
module ActiveRecord
|
|
4
|
-
class Base[T]
|
|
5
|
-
end
|
|
6
|
-
class Relation[T]
|
|
7
|
-
end
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
module ActiveSupport
|
|
11
|
-
class TimeWithZone
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
module Sequel
|
|
16
|
-
class Dataset[T]
|
|
17
|
-
end
|
|
18
|
-
class Model[T]
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
3
|
class Pagy
|
|
23
4
|
VERSION: String
|
|
24
5
|
ROOT: Pathname
|
|
@@ -26,8 +7,12 @@ class Pagy
|
|
|
26
7
|
|
|
27
8
|
def self.options: () -> options
|
|
28
9
|
|
|
29
|
-
# Class
|
|
10
|
+
# Class method
|
|
11
|
+
|
|
12
|
+
# @deprecated Use `sync(:javascripts, ...)` instead
|
|
30
13
|
def self.sync_javascript: (String destination, *String targets) -> void
|
|
14
|
+
|
|
15
|
+
def self.sync: (Symbol resource, String destination, *String targets) -> void
|
|
31
16
|
def self.dev_tools: (?wand_scale: Integer) -> String
|
|
32
17
|
def self.translate_with_the_slower_i18n_gem!: () -> void
|
|
33
18
|
|
|
@@ -310,3 +295,22 @@ class Pagy
|
|
|
310
295
|
?cookie: String
|
|
311
296
|
}
|
|
312
297
|
end
|
|
298
|
+
|
|
299
|
+
module ActiveRecord
|
|
300
|
+
class Base[T]
|
|
301
|
+
end
|
|
302
|
+
class Relation[T]
|
|
303
|
+
end
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
module ActiveSupport
|
|
307
|
+
class TimeWithZone
|
|
308
|
+
end
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
module Sequel
|
|
312
|
+
class Dataset[T]
|
|
313
|
+
end
|
|
314
|
+
class Model[T]
|
|
315
|
+
end
|
|
316
|
+
end
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
@layer components {
|
|
6
6
|
.pagy {
|
|
7
|
-
/* PagyWand
|
|
7
|
+
/* PagyWand Generated Variables */
|
|
8
|
+
/* Copy from the PagyWand "CSS Override" field, and paste in YOUR own CSS to override the style */
|
|
8
9
|
--B: 1;
|
|
9
10
|
--H: 0;
|
|
10
11
|
--S: 0;
|
|
@@ -17,8 +18,8 @@
|
|
|
17
18
|
--font-size: 0.875rem;
|
|
18
19
|
--font-weight: 600;
|
|
19
20
|
--line-height: 1.75;
|
|
20
|
-
/* End PagyWand variables */
|
|
21
21
|
|
|
22
|
+
/* Calculated Color Variables */
|
|
22
23
|
--text: hsl(var(--H) var(--S) calc(var(--L) - (25 * var(--B))) / var(--A));
|
|
23
24
|
--text-hover: hsl(var(--H) var(--S) calc(var(--L) - (30 * var(--B))) / var(--A));
|
|
24
25
|
--text-current: hsl(var(--H) var(--S) calc(100 * (var(--B) + 1)) / var(--A));
|
|
@@ -27,10 +28,13 @@
|
|
|
27
28
|
--background-current: hsl(var(--H) var(--S) var(--L) / var(--A));
|
|
28
29
|
--background-input: hsl(var(--H) var(--S) calc(var(--L) + (45 * var(--B))) / var(--A));
|
|
29
30
|
|
|
31
|
+
/* Base Properties */
|
|
30
32
|
@apply flex gap-x-[var(--spacing)] font-[var(--font-weight)]
|
|
31
33
|
text-[length:var(--font-size)] text-[var(--text)]
|
|
32
34
|
leading-[var(--line-height)];
|
|
33
35
|
|
|
36
|
+
/* Element Rules */
|
|
37
|
+
|
|
34
38
|
a:not([role="separator"]) { /* all but gaps */
|
|
35
39
|
@apply block rounded-[var(--rounding)] px-[var(--padding)] py-[calc(var(--padding)/3)] bg-[var(--background)]
|
|
36
40
|
border-solid border-[var(--background-current)] border-[length:var(--border-width)];
|
data/stylesheets/pagy.css
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
.pagy {
|
|
2
|
-
/* PagyWand
|
|
2
|
+
/* PagyWand Generated Variables */
|
|
3
|
+
/* Copy from the PagyWand "CSS Override" field, and paste in YOUR own CSS to override the style */
|
|
3
4
|
--B: 1;
|
|
4
5
|
--H: 0;
|
|
5
6
|
--S: 0;
|
|
@@ -12,8 +13,8 @@
|
|
|
12
13
|
--font-size: 0.875rem;
|
|
13
14
|
--font-weight: 600;
|
|
14
15
|
--line-height: 1.75;
|
|
15
|
-
/* End PagyWand variables */
|
|
16
16
|
|
|
17
|
+
/* Calculated Color Variables */
|
|
17
18
|
--text: hsl(var(--H) var(--S) calc(var(--L) - (25 * var(--B))) / var(--A));
|
|
18
19
|
--text-hover: hsl(var(--H) var(--S) calc(var(--L) - (30 * var(--B))) / var(--A));
|
|
19
20
|
--text-current: hsl(var(--H) var(--S) calc(100 * (var(--B) + 1)) / var(--A));
|
|
@@ -22,6 +23,7 @@
|
|
|
22
23
|
--background-current: hsl(var(--H) var(--S) var(--L) / var(--A));
|
|
23
24
|
--background-input: hsl(var(--H) var(--S) calc(var(--L) + (45 * var(--B))) / var(--A));
|
|
24
25
|
|
|
26
|
+
/* Base Properties */
|
|
25
27
|
color: var(--text);
|
|
26
28
|
font-size: var(--font-size);
|
|
27
29
|
line-height: var(--line-height);
|
|
@@ -29,6 +31,8 @@
|
|
|
29
31
|
display: flex;
|
|
30
32
|
}
|
|
31
33
|
|
|
34
|
+
/* Element Rules */
|
|
35
|
+
|
|
32
36
|
.pagy > :not([hidden]) ~ :not([hidden]) {
|
|
33
37
|
margin-inline-start: var(--spacing);
|
|
34
38
|
}
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pagy
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 43.
|
|
4
|
+
version: 43.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Domizio Demichelis
|
|
@@ -75,7 +75,6 @@ files:
|
|
|
75
75
|
- javascripts/ai_widget.js
|
|
76
76
|
- javascripts/pagy.d.ts
|
|
77
77
|
- javascripts/pagy.js
|
|
78
|
-
- javascripts/pagy.js.map
|
|
79
78
|
- javascripts/pagy.min.js
|
|
80
79
|
- javascripts/pagy.mjs
|
|
81
80
|
- javascripts/wand.js
|
|
@@ -116,6 +115,7 @@ files:
|
|
|
116
115
|
- lib/pagy/modules/i18n/p11n/polish.rb
|
|
117
116
|
- lib/pagy/modules/i18n/p11n/west_slavic.rb
|
|
118
117
|
- lib/pagy/modules/searcher.rb
|
|
118
|
+
- lib/pagy/tasks/sync.rb
|
|
119
119
|
- lib/pagy/toolbox/helpers/anchor_tags.rb
|
|
120
120
|
- lib/pagy/toolbox/helpers/bootstrap/input_nav_js.rb
|
|
121
121
|
- lib/pagy/toolbox/helpers/bootstrap/previous_next_html.rb
|
data/javascripts/pagy.js.map
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["pagy.ts", "../gem/javascripts/pagy-shim.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"interface SyncData {\n from?: number\n to?: number\n key: string\n str?: string\n}\ntype InitArgs = [\"k\", KeynavArgs] | // series_nav[_js] with keynav instance\n [\"snj\", SeriesNavJsArgs] | // series_nav_js\n [\"inj\", InputNavJsArgs] | // input_nav_js\n [\"ltj\", LimitTagJsArgs] // limit_tag_js\ntype AugmentKeynav = (nav:HTMLElement, keynavArgs:KeynavArgs) => Promise<((page: string) => string)>\ntype KeynavArgs = readonly [storageKey: string | null,\n rootKey: string | null,\n pageKey: string,\n last: number,\n spliceArgs?: SpliceArgs]\ntype SpliceArgs = readonly [start: number,\n deleteCount: number, // it would be optional, but ts complains\n ...items: Cutoff[]]\ntype Cutoff = readonly (string | number | boolean)[]\ntype AugmentedPage = [browserId: string,\n storageKey: string,\n pageNumber: number,\n pages: number,\n priorCutoff: Cutoff | null,\n pageCutoff: Cutoff | null]\ntype SeriesNavJsArgs = readonly [NavJsTokens, pageToken: string, NavJsSeries, KeynavArgs?]\ntype NavJsSeries = readonly [widths: number[],\n series: (string | number)[][],\n labels: string[][] | null]\ntype InputNavJsArgs = readonly [urlToken: string,\n pageToken: string,\n KeynavArgs?]\ntype LimitTagJsArgs = readonly [from: number,\n urlToken: string,\n pageToken: string,\n limitToken: string]\ntype NavJsTokens = readonly [before: string,\n anchor: string,\n current: string,\n gap: string,\n after: string]\ninterface NavJsElement extends HTMLElement {\n render(): void\n}\n\n// The syntax used in this file has been carefully composed to minimize\n// the pagy.min.js size and avoid pollution in the window object\nexport default (() => {\n const storageSupport = 'sessionStorage' in window && 'BroadcastChannel' in window;\n // eslint-disable-next-line prefer-const\n let pagy = \"pagy\", storage: Storage, sync: BroadcastChannel, tabId: number;\n if (storageSupport) {\n storage = sessionStorage; // shorten the compiled size\n sync = new BroadcastChannel(pagy);\n tabId = Date.now();\n // Sync the sessionStorage keys for the cutoffs opened in a new tab/window\n sync.addEventListener(\"message\", (e:MessageEvent<SyncData>) => {\n if (e.data.from) { // request cutoffs\n const cutoffs = storage.getItem(e.data.key);\n if (cutoffs) {\n sync.postMessage(<SyncData>{to: e.data.from, key: e.data.key, str: cutoffs});\n } // send response\n } else if (e.data.to) { // receive cutoffs\n if (e.data.to == tabId) {\n storage.setItem(e.data.key, <string>e.data.str);\n }\n }\n });\n }\n // The observer instance for responsive navs\n const rjsObserver = new ResizeObserver(\n entries => entries.forEach(e => {\n e.target.querySelectorAll<NavJsElement>(\".pagy-rjs\").forEach(el => el.render());\n }));\n\n /* Full set of B64 functions\n const B64Encode = (unicode:string) => btoa(String.fromCharCode(...(new TextEncoder).encode(unicode))),\n B64Safe = (unsafe:string) => unsafe.replace(/[+/=]/g, (m) => m == \"+\" ? \"-\" : m == \"/\" ? \"_\" : \"\"),\n B64SafeEncode = (unicode:string) => B64Safe(B64Encode(unicode)),\n B64Decode = (base64:string) => (new TextDecoder()).decode(Uint8Array.from(atob(base64), c => c.charCodeAt(0))),\n B64Unsafe = (safe:string) => safe.replace(/[-_]/g, (match) => match == \"-\" ? \"+\" : \"/\"),\n B64SafeDecode = (base64:string) => B64Decode(B64Unsafe(base64))\n */\n const B64SafeEncode = (unicode:string) => btoa(String.fromCharCode(...(new TextEncoder).encode(unicode)))\n .replace(/[+/=]/g, (m) => m == \"+\" ? \"-\" : m == \"/\" ? \"_\" : \"\"),\n B64Decode = (base64:string) => (new TextDecoder()).decode(Uint8Array.from(atob(base64), c => c.charCodeAt(0)));\n\n // Return a random key: 3 chars max, base-36 number < 36**3\n const randKey = () => Math.floor(Math.random() * 36 ** 3).toString(36);\n\n // Manage the page augmentation for Keynav, called only if storageSupport\n const augmentKeynav: AugmentKeynav = async (nav, [storageKey, rootKey, pageKey, last, spliceArgs]) => {\n let augmentPage:(page: string) => string;\n const browserKey = document.cookie.split(/;\\s+/) // it works even if malformed\n .find((row) => row.startsWith(pagy + \"=\"))\n ?.split(\"=\")[1] ?? randKey();\n document.cookie = pagy + \"=\" + browserKey; // Smaller .min size: set the cookie without checking\n if (storageKey && !(storageKey in storage)) {\n // Sync the sessiongStorage from other tabs/windows (e.g., open page in the new tab/window)\n sync.postMessage(<SyncData>{ from: tabId, key: storageKey });\n // Wait for the listener to copy the cutoffs in the current sessionStorage\n await new Promise<string|null>((resolve) => setTimeout(() => resolve(\"\"), 100));\n if (!(storageKey in storage)) { // the storageKey didn't get copied: fallback to countless pagination\n augmentPage = (page: string) => page + '+' + last;\n }\n }\n // @ts-expect-error If it is not assigned it means it supports keynav\n if (!augmentPage) { // regular keynav pagination\n if (!storageKey) { do { storageKey = randKey() } while (storageKey in storage) } // no dup keys\n const data = storage.getItem(storageKey),\n cutoffs = <Cutoff[]>(data ? JSON.parse(data) : [undefined]);\n if (spliceArgs) {\n cutoffs.splice(...spliceArgs);\n storage.setItem(storageKey, JSON.stringify(cutoffs));\n }\n // Augment function\n augmentPage = (page:string) => {\n const pageNum = parseInt(page);\n return B64SafeEncode(JSON.stringify(\n <AugmentedPage>[browserKey,\n storageKey,\n pageNum,\n cutoffs.length, // pages/last\n cutoffs[pageNum - 1], // priorCutoff\n cutoffs[pageNum]])); // pageCutoff\n };\n }\n const search = (rootKey) ? `${rootKey}%5B${pageKey}%5D` : pageKey;\n const re = new RegExp(`(?<=\\\\?.*)(\\\\b${search}=)(\\\\d+)`);\n // Augment the page param of each href\n for (const a of <NodeListOf<HTMLAnchorElement>><unknown>nav.querySelectorAll('a[href]')) {\n a.href = a.href.replace(re, (_match, prefix, digit): string => `${prefix}${augmentPage(<string>digit)}`);\n }\n // Return the augment function for further augmentation (i.e., url token in input_nav_js)\n return augmentPage;\n };\n\n // Build the series_nav_js helper\n const buildNavJs = (nav:NavJsElement, [[before, anchor, current, gap, after], pageToken,\n [widths, series, labels], keynavArgs]:SeriesNavJsArgs) => {\n const parent = <HTMLElement>nav.parentElement;\n let lastWidth = -1;\n (nav.render = () => {\n const index = widths.findIndex(w => w < parent.clientWidth);\n if (widths[index] === lastWidth) { return } // no change: abort\n\n let html = before;\n series[index].forEach((item, i) => {\n // Avoid the if blocks and chain the results (shorter pagy.min.js and easier reading)\n html += item == \"gap\" ? gap :\n // @ts-expect-error the item may be a number, but the 'replace' converts it to string (shorter pagy.min.js)\n (typeof item == \"number\" ? anchor.replace(pageToken, item) : current)\n .replace(\"L<\", labels?.[index][i] ?? item + \"<\");\n });\n html += after;\n nav.innerHTML = \"\";\n nav.insertAdjacentHTML(\"afterbegin\", html);\n lastWidth = widths[index];\n if (keynavArgs && storageSupport) { void augmentKeynav(nav, keynavArgs) }\n })();\n if (nav.classList.contains(pagy + \"-rjs\")) { rjsObserver.observe(parent) }\n };\n\n // Init the input_nav_js helpers\n const initInputNavJs = async (nav:HTMLElement, [url_token, pageToken, keynavArgs]:InputNavJsArgs) => {\n const augment = keynavArgs && storageSupport\n ? await augmentKeynav(nav, keynavArgs)\n : (page: string) => page;\n initInput(nav, inputValue => url_token.replace(pageToken, augment(inputValue)));\n };\n\n // Init the limit_tag_js helper\n const initLimitTagJs = (span:HTMLSpanElement, [from, url_token, page_token, limitToken]:LimitTagJsArgs) => {\n initInput(span, inputValue => {\n // @ts-expect-error the page is a number, but the 'replace' converts it to string (shorter pagy.min.js)\n return url_token.replace(page_token, Math.max(Math.ceil(from / parseInt(inputValue)), 1))\n .replace(limitToken, inputValue);\n });\n };\n\n // Init the input element\n const initInput = (element:HTMLElement, getUrl:(v:string) => string) => {\n const input = <HTMLInputElement>element.querySelector(\"input\"),\n link = <HTMLAnchorElement>element.querySelector(\"a\");\n let initial = input.value;\n const action = () => {\n if (input.value === initial) { return } // not changed\n const [min, val, max] = [input.min, input.value, input.max].map(n => parseInt(n) || 0);\n if (val < min || val > max) { // reset invalid/out-of-range\n input.value = initial;\n input.select();\n return;\n }\n initial = input.value;\n link.href = getUrl(input.value);\n link.click();\n };\n input.addEventListener(\"focus\", () => input.select());\n input.addEventListener(\"focusout\", action);\n input.addEventListener(\"keypress\", e => { if (e.key == \"Enter\") { action() } });\n };\n\n // Public interface\n return {\n version: \"43.3.3\",\n\n // Scan for elements with a \"data-pagy\" attribute and call their init functions with the decoded args\n init(arg?:HTMLElement) {\n const target = arg instanceof HTMLElement ? arg : document,\n elements = target.querySelectorAll(\"[data-pagy]\");\n for (const element of <NodeListOf<HTMLElement>>elements) {\n try {\n const [helperId, ...args] = <InitArgs>JSON.parse(B64Decode(<string>element.getAttribute(\"data-pagy\")));\n if (helperId == \"k\") {\n // @ts-expect-error spread 2 arguments, not 3 as it complains about\n void augmentKeynav(element, ...<KeynavArgs><unknown>args);\n } else if (helperId == \"snj\") {\n buildNavJs(<NavJsElement>element, <SeriesNavJsArgs><unknown>args);\n } else if (helperId == \"inj\") {\n void initInputNavJs(element, <InputNavJsArgs><unknown>args);\n } else if (helperId == \"ltj\") {\n initLimitTagJs(element, <LimitTagJsArgs><unknown>args);\n }\n // else { console.warn(\"Pagy.init: %o\\nUnknown helperId '%s'\", element, helperId) }\n } catch (err) { console.warn(\"Pagy.init: %o\\n%s\", element, err) }\n }\n }\n };\n})();\n",
|
|
6
|
-
"import Pagy from \"../../src/pagy.ts\"; window.Pagy = Pagy;\n"
|
|
7
|
-
],
|
|
8
|
-
"mappings": "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",
|
|
9
|
-
"debugId": "4205DF9E2954F02464756E2164756E21",
|
|
10
|
-
"names": []
|
|
11
|
-
}
|