pagy 5.7.0 → 5.7.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dff2343464e636499952ed82e91f9691f8855630a77d6bcfffee985ae7ff443f
4
- data.tar.gz: 6659996eb14375576d033ab5da3faaead938e9145b67fba2e625aa2b91a3a4a1
3
+ metadata.gz: ffee9e2ec41fcebb3b4e4abdaf1cb8e275020175cd8a7c654be1ff1f3c3f8a82
4
+ data.tar.gz: 5ab1e068ad52d7b1a4dea955e10e0b6fcf9ffdf1424ddc9f955a7471d713853d
5
5
  SHA512:
6
- metadata.gz: b404bb256a2070c382f536a007972cce2fcfad6a22010221194a043dba3fee525a86c00a85ea7b2a8f93da5882f8651752b7dd6f2a99a5a5038094445c5c7e79
7
- data.tar.gz: 8c5263db5dd2d2cec869236fd37bcdfed67dc68c643fba2c520677829c6adc22dbd5eba88e36ba3014b2dd71466f9f102b1c5b88a3cf99a2c56add4b4f88cd17
6
+ metadata.gz: f260102ec456d5b151d066576d5890d6bccb6510386cad6aa3566d9fec3b997f74ecc0cb8f2bc7127664f525c2c907cfa87050814366e14203aecd51ea0a4299
7
+ data.tar.gz: 18d1e9028eedef735f1d17e01d13bbbff97edefe74660e2422b8be67c1c3a90057adc9c9ad1417f63b4bd7ce5b9003647e4dd2a10fe7ab6322f3dd168d28d524
data/lib/config/pagy.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Pagy initializer file (5.7.0)
3
+ # Pagy initializer file (5.7.4)
4
4
  # Customize only what you really need and notice that the core Pagy works also without any of the following lines.
5
5
  # Should you just cherry pick part of this file, please maintain the require-order of the extras
6
6
 
@@ -0,0 +1,119 @@
1
+ /* Generated from 'src/pagy.ts' with TypeScript Version 4.5.4 */
2
+ "use strict";
3
+ const Pagy = {
4
+ version: "5.7.4",
5
+ // Scan for "data-pagy-json" elements, parse their JSON content and call their init functions
6
+ init(arg) {
7
+ const target = arg instanceof Element ? arg : document;
8
+ const elements = target.querySelectorAll("[data-pagy-json]");
9
+ const warn = (el, err) => console.warn("Pagy.init() skipped element: %o\n%s", el, err);
10
+ for (const element of elements) {
11
+ const json = element.getAttribute("data-pagy-json");
12
+ try {
13
+ const [keyword, ...args] = JSON.parse(json);
14
+ if (keyword === "nav") {
15
+ Pagy.initNav(element, args);
16
+ }
17
+ else if (keyword === "combo") {
18
+ Pagy.initCombo(element, args);
19
+ }
20
+ else if (keyword === "selector") {
21
+ Pagy.initSelector(element, args);
22
+ }
23
+ else {
24
+ warn(element, `Illegal PagyJSON keyword: expected "nav"|"combo"|"selector", got "${keyword}"`);
25
+ }
26
+ }
27
+ catch (err) {
28
+ warn(element, err);
29
+ }
30
+ }
31
+ },
32
+ // Init the *_nav_js helpers
33
+ initNav(el, [tags, sequels, labelSequels, trimParam]) {
34
+ const container = el.parentElement ?? el;
35
+ const widths = Object.getOwnPropertyNames(sequels).map(w => parseInt(w)).sort((a, b) => b - a);
36
+ let lastWidth = -1;
37
+ const fillIn = (link, page, label) => link.replace(/__pagy_page__/g, page).replace(/__pagy_label__/g, label);
38
+ (el.pagyRender = function () {
39
+ const width = widths.find(w => w < container.clientWidth) || 0;
40
+ if (width === lastWidth) {
41
+ return;
42
+ } // no change: abort
43
+ let html = tags.before;
44
+ const series = sequels[width.toString()];
45
+ const labels = labelSequels?.[width.toString()] ?? series.map(l => l.toString());
46
+ for (const i in series) {
47
+ const item = series[i];
48
+ const label = labels[i];
49
+ if (typeof trimParam === "string" && item === 1) {
50
+ html += Pagy.trim(fillIn(tags.link, item.toString(), label), trimParam);
51
+ }
52
+ else if (typeof item === "number") {
53
+ html += fillIn(tags.link, item.toString(), label);
54
+ }
55
+ else if (item === "gap") {
56
+ html += tags.gap;
57
+ }
58
+ else { // active page
59
+ html += fillIn(tags.active, item, label);
60
+ }
61
+ }
62
+ html += tags.after; // eslint-disable-line align-assignments/align-assignments
63
+ el.innerHTML = "";
64
+ el.insertAdjacentHTML("afterbegin", html);
65
+ lastWidth = width;
66
+ })();
67
+ if (el.classList.contains("pagy-rjs")) {
68
+ Pagy.rjsObserver.observe(container);
69
+ }
70
+ },
71
+ // The observer instance for responsive navs
72
+ rjsObserver: new ResizeObserver(entries => {
73
+ entries.filter(e => e.contentBoxSize)
74
+ .forEach(e => e.target.querySelectorAll(".pagy-rjs")
75
+ .forEach(rjs => rjs.pagyRender()));
76
+ }),
77
+ // Init the *_combo_nav_js helpers
78
+ initCombo(el, [link, trimParam]) {
79
+ Pagy.initInput(el, inputValue => [inputValue, link.replace(/__pagy_page__/, inputValue)], trimParam);
80
+ },
81
+ // Init the items_selector_js helper
82
+ initSelector(el, [from, link, trimParam]) {
83
+ Pagy.initInput(el, inputValue => {
84
+ const page = Math.max(Math.ceil(from / parseInt(inputValue)), 1).toString();
85
+ const html = link.replace(/__pagy_page__/, page).replace(/__pagy_items__/, inputValue);
86
+ return [page, html];
87
+ }, trimParam);
88
+ },
89
+ // Init the input element
90
+ initInput(el, getVars, trimParam) {
91
+ const input = el.querySelector("input");
92
+ const initial = input.value;
93
+ const action = function () {
94
+ if (input.value === initial) {
95
+ return;
96
+ } // not changed
97
+ const [min, val, max] = [input.min, input.value, input.max].map(n => parseInt(n) || 0);
98
+ if (val < min || val > max) { // reset invalid/out-of-range
99
+ input.value = initial;
100
+ input.select();
101
+ return;
102
+ }
103
+ let [page, html] = getVars(input.value); // eslint-disable-line prefer-const
104
+ if (typeof trimParam === "string" && page === "1") {
105
+ html = Pagy.trim(html, trimParam);
106
+ }
107
+ el.insertAdjacentHTML("afterbegin", html);
108
+ el.querySelector("a").click();
109
+ };
110
+ ["change", "focus"].forEach(e => input.addEventListener(e, input.select)); // auto-select
111
+ input.addEventListener("focusout", action); // trigger action
112
+ input.addEventListener("keypress", e => { if (e.key === "Enter") {
113
+ action();
114
+ } }); // trigger action
115
+ },
116
+ // Trim the ${page-param}=1 params in links
117
+ trim: (link, param) => link.replace(new RegExp(`[?&]${param}=1\\b(?!&)|\\b${param}=1&`), "")
118
+ };
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBhZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQWdCQSxNQUFNLElBQUksR0FBRztJQUNULE9BQU8sRUFBRSxPQUFPO0lBRWhCLDZGQUE2RjtJQUM3RixJQUFJLENBQUMsR0FBa0I7UUFDbkIsTUFBTSxNQUFNLEdBQUssR0FBRyxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDekQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDN0QsTUFBTSxJQUFJLEdBQU8sQ0FBQyxFQUFVLEVBQUUsR0FBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzRyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRTtZQUM1QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFXLENBQUM7WUFDOUQsSUFBSTtnQkFDQSxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQWEsQ0FBQztnQkFDeEQsSUFBSSxPQUFPLEtBQUssS0FBSyxFQUFFO29CQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQXFCLEVBQUUsSUFBZSxDQUFDLENBQUM7aUJBQ3hEO3FCQUFNLElBQUksT0FBTyxLQUFLLE9BQU8sRUFBRTtvQkFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBaUIsQ0FBQyxDQUFDO2lCQUM5QztxQkFBTSxJQUFJLE9BQU8sS0FBSyxVQUFVLEVBQUU7b0JBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLElBQW9CLENBQUMsQ0FBQztpQkFDcEQ7cUJBQU07b0JBQ0gsSUFBSSxD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LENBQUcsbUNBQW1DO1lBQzlFLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUU7Z0JBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFBO2FBQUU7WUFDeEYsRUFBRSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6QyxFQUFFLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBdUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6RCxDQUFDLENBQUM7UUFDRixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQVEsY0FBYztRQUNoRyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQXVDLGlCQUFpQjtRQUNuRyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU8sRUFBRTtZQUFFLE1BQU0sRUFBRSxDQUFBO1NBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQjtJQUN2RyxDQUFDO0lBRUQsMkNBQTJDO0lBQzNDLElBQUksRUFBRSxDQUFDLElBQVcsRUFBRSxLQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLGlCQUFpQixLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztDQUM3RyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQXJncyB0eXBlcyBhbmQgaW50ZXJmYWNlcyBmcm9tIGRhdGEtcGFneS1qc29uXG50eXBlIFBhZ3lKU09OICAgICA9IHJlYWRvbmx5IFtcIm5hdlwiLCAuLi5OYXZBcmdzXSB8IFtcImNvbWJvXCIsIC4uLkNvbWJvQXJnc10gfCBbXCJzZWxlY3RvclwiLCAuLi5TZWxlY3RvckFyZ3NdXG50eXBlIE5hdkFyZ3MgICAgICA9IHJlYWRvbmx5IFtUYWdzLCBTZXF1ZWxzLCBudWxsfExhYmVsU2VxdWVscywgc3RyaW5nP11cbnR5cGUgQ29tYm9BcmdzICAgID0gcmVhZG9ubHkgW3N0cmluZywgc3RyaW5nP11cbnR5cGUgU2VsZWN0b3JBcmdzID0gcmVhZG9ubHkgW251bWJlciwgc3RyaW5nLCBzdHJpbmc/XVxuaW50ZXJmYWNlIFRhZ3Mge1xuICAgIHJlYWRvbmx5IGJlZm9yZTogc3RyaW5nXG4gICAgcmVhZG9ubHkgbGluazogICBzdHJpbmdcbiAgICByZWFkb25seSBhY3RpdmU6IHN0cmluZ1xuICAgIHJlYWRvbmx5IGdhcDogICAgc3RyaW5nXG4gICAgcmVhZG9ubHkgYWZ0ZXI6ICBzdHJpbmdcbn1cbmludGVyZmFjZSBTZXF1ZWxzICAgICAgeyByZWFkb25seSBbd2lkdGg6c3RyaW5nXTogKHN0cmluZ3xudW1iZXJ8XCJnYXBcIilbXSB9XG5pbnRlcmZhY2UgTGFiZWxTZXF1ZWxzIHsgcmVhZG9ubHkgW3dpZHRoOnN0cmluZ106IHN0cmluZ1tdIH1cbmludGVyZmFjZSBOYXZFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7IHBhZ3lSZW5kZXIoKTogdm9pZCB9XG5cbmNvbnN0IFBhZ3kgPSB7XG4gICAgdmVyc2lvbjogXCI1LjcuNFwiLFxuXG4gICAgLy8gU2NhbiBmb3IgXCJkYXRhLXBhZ3ktanNvblwiIGVsZW1lbnRzLCBwYXJzZSB0aGVpciBKU09OIGNvbnRlbnQgYW5kIGNhbGwgdGhlaXIgaW5pdCBmdW5jdGlvbnNcbiAgICBpbml0KGFyZz86RWxlbWVudHxuZXZlcikge1xuICAgICAgICBjb25zdCB0YXJnZXQgICA9IGFyZyBpbnN0YW5jZW9mIEVsZW1lbnQgPyBhcmcgOiBkb2N1bWVudDtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSB0YXJnZXQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLXBhZ3ktanNvbl1cIik7XG4gICAgICAgIGNvbnN0IHdhcm4gICAgID0gKGVsOkVsZW1lbnQsIGVycjp1bmtub3duKSA9PiBjb25zb2xlLndhcm4oXCJQYWd5LmluaXQoKSBza2lwcGVkIGVsZW1lbnQ6ICVvXFxuJXNcIiwgZWwsIGVycik7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3QganNvbiA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1wYWd5LWpzb25cIikgYXMgc3RyaW5nO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBba2V5d29yZCwgLi4uYXJnc10gPSBKU09OLnBhcnNlKGpzb24pIGFzIFBhZ3lKU09OO1xuICAgICAgICAgICAgICAgIGlmIChrZXl3b3JkID09PSBcIm5hdlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIFBhZ3kuaW5pdE5hdihlbGVtZW50IGFzIE5hdkVsZW1lbnQsIGFyZ3MgYXMgTmF2QXJncyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXl3b3JkID09PSBcImNvbWJvXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgUGFneS5pbml0Q29tYm8oZWxlbWVudCwgYXJncyBhcyBDb21ib0FyZ3MpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5d29yZCA9PT0gXCJzZWxlY3RvclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIFBhZ3kuaW5pdFNlbGVjdG9yKGVsZW1lbnQsIGFyZ3MgYXMgU2VsZWN0b3JBcmdzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB3YXJuKGVsZW1lbnQsIGBJbGxlZ2FsIFBhZ3lKU09OIGtleXdvcmQ6IGV4cGVjdGVkIFwibmF2XCJ8XCJjb21ib1wifFwic2VsZWN0b3JcIiwgZ290IFwiJHtrZXl3b3JkfVwiYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7IHdhcm4oZWxlbWVudCwgZXJyKSB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gSW5pdCB0aGUgKl9uYXZfanMgaGVscGVyc1xuICAgIGluaXROYXYoZWw6TmF2RWxlbWVudCwgW3RhZ3MsIHNlcXVlbHMsIGxhYmVsU2VxdWVscywgdHJpbVBhcmFtXTpOYXZBcmdzKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGVsLnBhcmVudEVsZW1lbnQgPz8gZWw7XG4gICAgICAgIGNvbnN0IHdpZHRocyAgICA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNlcXVlbHMpLm1hcCh3ID0+IHBhcnNlSW50KHcpKS5zb3J0KChhLCBiKSA9PiBiIC0gYSk7XG4gICAgICAgIGxldCBsYXN0V2lkdGggICA9IC0xO1xuICAgICAgICBjb25zdCBmaWxsSW4gICAgPSAobGluazpzdHJpbmcsIHBhZ2U6c3RyaW5nLCBsYWJlbDpzdHJpbmcpOnN0cmluZyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluay5yZXBsYWNlKC9fX3BhZ3lfcGFnZV9fL2csIHBhZ2UpLnJlcGxhY2UoL19fcGFneV9sYWJlbF9fL2csIGxhYmVsKTtcbiAgICAgICAgKGVsLnBhZ3lSZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gd2lkdGhzLmZpbmQodyA9PiB3IDwgY29udGFpbmVyLmNsaWVudFdpZHRoKSB8fCAwO1xuICAgICAgICAgICAgaWYgKHdpZHRoID09PSBsYXN0V2lkdGgpIHsgcmV0dXJuIH0gLy8gbm8gY2hhbmdlOiBhYm9ydFxuICAgICAgICAgICAgbGV0IGh0bWwgICAgID0gdGFncy5iZWZvcmU7XG4gICAgICAgICAgICBjb25zdCBzZXJpZXMgPSBzZXF1ZWxzW3dpZHRoLnRvU3RyaW5nKCldO1xuICAgICAgICAgICAgY29uc3QgbGFiZWxzID0gbGFiZWxTZXF1ZWxzPy5bd2lkdGgudG9TdHJpbmcoKV0gPz8gc2VyaWVzLm1hcChsID0+IGwudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGkgaW4gc2VyaWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSAgPSBzZXJpZXNbaV07XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBsYWJlbHNbaV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0cmltUGFyYW0gPT09IFwic3RyaW5nXCIgJiYgaXRlbSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBodG1sICs9IFBhZ3kudHJpbShmaWxsSW4odGFncy5saW5rLCBpdGVtLnRvU3RyaW5nKCksIGxhYmVsKSwgdHJpbVBhcmFtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gZmlsbEluKHRhZ3MubGluaywgaXRlbS50b1N0cmluZygpLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtID09PSBcImdhcFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gdGFncy5nYXA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gYWN0aXZlIHBhZ2VcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSBmaWxsSW4odGFncy5hY3RpdmUsIGl0ZW0sIGxhYmVsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBodG1sICs9IHRhZ3MuYWZ0ZXI7ICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBhbGlnbi1hc3NpZ25tZW50cy9hbGlnbi1hc3NpZ25tZW50c1xuICAgICAgICAgICAgZWwuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIGVsLmluc2VydEFkamFjZW50SFRNTChcImFmdGVyYmVnaW5cIiwgaHRtbCk7XG4gICAgICAgICAgICBsYXN0V2lkdGggPSB3aWR0aDtcbiAgICAgICAgfSkoKTtcbiAgICAgICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhcInBhZ3ktcmpzXCIpKSB7IFBhZ3kucmpzT2JzZXJ2ZXIub2JzZXJ2ZShjb250YWluZXIpIH1cbiAgICB9LFxuXG4gICAgLy8gVGhlIG9ic2VydmVyIGluc3RhbmNlIGZvciByZXNwb25zaXZlIG5hdnNcbiAgICByanNPYnNlcnZlcjogbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4ge1xuICAgICAgICBlbnRyaWVzLmZpbHRlcihlID0+IGUuY29udGVudEJveFNpemUpXG4gICAgICAgICAgICAgICAuZm9yRWFjaChlID0+IGUudGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGw8TmF2RWxlbWVudD4oXCIucGFneS1yanNcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChyanMgPT4gcmpzLnBhZ3lSZW5kZXIoKSkpO1xuICAgIH0pLFxuXG4gICAgLy8gSW5pdCB0aGUgKl9jb21ib19uYXZfanMgaGVscGVyc1xuICAgIGluaXRDb21ibyhlbDpFbGVtZW50LCBbbGluaywgdHJpbVBhcmFtXTpDb21ib0FyZ3MpIHtcbiAgICAgICAgUGFneS5pbml0SW5wdXQoZWwsIGlucHV0VmFsdWUgPT4gW2lucHV0VmFsdWUsIGxpbmsucmVwbGFjZSgvX19wYWd5X3BhZ2VfXy8sIGlucHV0VmFsdWUpXSwgdHJpbVBhcmFtKTtcbiAgICB9LFxuXG4gICAgLy8gSW5pdCB0aGUgaXRlbXNfc2VsZWN0b3JfanMgaGVscGVyXG4gICAgaW5pdFNlbGVjdG9yKGVsOkVsZW1lbnQsIFtmcm9tLCBsaW5rLCB0cmltUGFyYW1dOlNlbGVjdG9yQXJncykge1xuICAgICAgICBQYWd5LmluaXRJbnB1dChlbCwgaW5wdXRWYWx1ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYWdlID0gTWF0aC5tYXgoTWF0aC5jZWlsKGZyb20gLyBwYXJzZUludChpbnB1dFZhbHVlKSksIDEpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCBodG1sID0gbGluay5yZXBsYWNlKC9fX3BhZ3lfcGFnZV9fLywgcGFnZSkucmVwbGFjZSgvX19wYWd5X2l0ZW1zX18vLCBpbnB1dFZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBbcGFnZSwgaHRtbF07XG4gICAgICAgIH0sIHRyaW1QYXJhbSk7XG4gICAgfSxcblxuICAgIC8vIEluaXQgdGhlIGlucHV0IGVsZW1lbnRcbiAgICBpbml0SW5wdXQoZWw6RWxlbWVudCwgZ2V0VmFyczoodjpzdHJpbmcpPT5bc3RyaW5nLCBzdHJpbmddLCB0cmltUGFyYW0/OnN0cmluZykge1xuICAgICAgICBjb25zdCBpbnB1dCAgID0gZWwucXVlcnlTZWxlY3RvcihcImlucHV0XCIpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGluaXRpYWwgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgY29uc3QgYWN0aW9uICA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LnZhbHVlID09PSBpbml0aWFsKSB7IHJldHVybiB9ICAvLyBub3QgY2hhbmdlZFxuICAgICAgICAgICAgY29uc3QgW21pbiwgdmFsLCBtYXhdID0gW2lucHV0Lm1pbiwgaW5wdXQudmFsdWUsIGlucHV0Lm1heF0ubWFwKG4gPT4gcGFyc2VJbnQobikgfHwgMCk7XG4gICAgICAgICAgICBpZiAodmFsIDwgbWluIHx8IHZhbCA+IG1heCkgeyAgLy8gcmVzZXQgaW52YWxpZC9vdXQtb2YtcmFuZ2VcbiAgICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IGluaXRpYWw7XG4gICAgICAgICAgICAgICAgaW5wdXQuc2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IFtwYWdlLCBodG1sXSA9IGdldFZhcnMoaW5wdXQudmFsdWUpOyAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRyaW1QYXJhbSA9PT0gXCJzdHJpbmdcIiAmJiBwYWdlID09PSBcIjFcIikgeyBodG1sID0gUGFneS50cmltKGh0bWwsIHRyaW1QYXJhbSkgfVxuICAgICAgICAgICAgZWwuaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYWZ0ZXJiZWdpblwiLCBodG1sKTtcbiAgICAgICAgICAgIChlbC5xdWVyeVNlbGVjdG9yKFwiYVwiKSBhcyBIVE1MQW5jaG9yRWxlbWVudCkuY2xpY2soKTtcbiAgICAgICAgfTtcbiAgICAgICAgW1wiY2hhbmdlXCIsIFwiZm9jdXNcIl0uZm9yRWFjaChlID0+IGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoZSwgaW5wdXQuc2VsZWN0KSk7ICAgICAgICAvLyBhdXRvLXNlbGVjdFxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNvdXRcIiwgYWN0aW9uKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyIGFjdGlvblxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIiwgZSA9PiB7IGlmIChlLmtleSA9PT0gXCJFbnRlclwiKSB7IGFjdGlvbigpIH0gfSk7IC8vIHRyaWdnZXIgYWN0aW9uXG4gICAgfSxcblxuICAgIC8vIFRyaW0gdGhlICR7cGFnZS1wYXJhbX09MSBwYXJhbXMgaW4gbGlua3NcbiAgICB0cmltOiAobGluazpzdHJpbmcsIHBhcmFtOnN0cmluZykgPT4gbGluay5yZXBsYWNlKG5ldyBSZWdFeHAoYFs/Jl0ke3BhcmFtfT0xXFxcXGIoPyEmKXxcXFxcYiR7cGFyYW19PTEmYCksIFwiXCIpXG59O1xuIl19
@@ -0,0 +1,30 @@
1
+ declare type NavArgs = readonly [Tags, Sequels, null | LabelSequels, string?];
2
+ declare type ComboArgs = readonly [string, string?];
3
+ declare type SelectorArgs = readonly [number, string, string?];
4
+ interface Tags {
5
+ readonly before: string;
6
+ readonly link: string;
7
+ readonly active: string;
8
+ readonly gap: string;
9
+ readonly after: string;
10
+ }
11
+ interface Sequels {
12
+ readonly [width: string]: (string | number | "gap")[];
13
+ }
14
+ interface LabelSequels {
15
+ readonly [width: string]: string[];
16
+ }
17
+ interface NavElement extends Element {
18
+ pagyRender(): void;
19
+ }
20
+ declare const Pagy: {
21
+ version: string;
22
+ init(arg?: Element | never): void;
23
+ initNav(el: NavElement, [tags, sequels, labelSequels, trimParam]: NavArgs): void;
24
+ rjsObserver: ResizeObserver;
25
+ initCombo(el: Element, [link, trimParam]: ComboArgs): void;
26
+ initSelector(el: Element, [from, link, trimParam]: SelectorArgs): void;
27
+ initInput(el: Element, getVars: (v: string) => [string, string], trimParam?: string): void;
28
+ trim: (link: string, param: string) => string;
29
+ };
30
+ export default Pagy;
@@ -0,0 +1,118 @@
1
+ /* Generated from 'src/pagy.ts' with TypeScript Version 4.5.4 */
2
+ const Pagy = {
3
+ version: "5.7.4",
4
+ // Scan for "data-pagy-json" elements, parse their JSON content and call their init functions
5
+ init(arg) {
6
+ const target = arg instanceof Element ? arg : document;
7
+ const elements = target.querySelectorAll("[data-pagy-json]");
8
+ const warn = (el, err) => console.warn("Pagy.init() skipped element: %o\n%s", el, err);
9
+ for (const element of elements) {
10
+ const json = element.getAttribute("data-pagy-json");
11
+ try {
12
+ const [keyword, ...args] = JSON.parse(json);
13
+ if (keyword === "nav") {
14
+ Pagy.initNav(element, args);
15
+ }
16
+ else if (keyword === "combo") {
17
+ Pagy.initCombo(element, args);
18
+ }
19
+ else if (keyword === "selector") {
20
+ Pagy.initSelector(element, args);
21
+ }
22
+ else {
23
+ warn(element, `Illegal PagyJSON keyword: expected "nav"|"combo"|"selector", got "${keyword}"`);
24
+ }
25
+ }
26
+ catch (err) {
27
+ warn(element, err);
28
+ }
29
+ }
30
+ },
31
+ // Init the *_nav_js helpers
32
+ initNav(el, [tags, sequels, labelSequels, trimParam]) {
33
+ const container = el.parentElement ?? el;
34
+ const widths = Object.getOwnPropertyNames(sequels).map(w => parseInt(w)).sort((a, b) => b - a);
35
+ let lastWidth = -1;
36
+ const fillIn = (link, page, label) => link.replace(/__pagy_page__/g, page).replace(/__pagy_label__/g, label);
37
+ (el.pagyRender = function () {
38
+ const width = widths.find(w => w < container.clientWidth) || 0;
39
+ if (width === lastWidth) {
40
+ return;
41
+ } // no change: abort
42
+ let html = tags.before;
43
+ const series = sequels[width.toString()];
44
+ const labels = labelSequels?.[width.toString()] ?? series.map(l => l.toString());
45
+ for (const i in series) {
46
+ const item = series[i];
47
+ const label = labels[i];
48
+ if (typeof trimParam === "string" && item === 1) {
49
+ html += Pagy.trim(fillIn(tags.link, item.toString(), label), trimParam);
50
+ }
51
+ else if (typeof item === "number") {
52
+ html += fillIn(tags.link, item.toString(), label);
53
+ }
54
+ else if (item === "gap") {
55
+ html += tags.gap;
56
+ }
57
+ else { // active page
58
+ html += fillIn(tags.active, item, label);
59
+ }
60
+ }
61
+ html += tags.after; // eslint-disable-line align-assignments/align-assignments
62
+ el.innerHTML = "";
63
+ el.insertAdjacentHTML("afterbegin", html);
64
+ lastWidth = width;
65
+ })();
66
+ if (el.classList.contains("pagy-rjs")) {
67
+ Pagy.rjsObserver.observe(container);
68
+ }
69
+ },
70
+ // The observer instance for responsive navs
71
+ rjsObserver: new ResizeObserver(entries => {
72
+ entries.filter(e => e.contentBoxSize)
73
+ .forEach(e => e.target.querySelectorAll(".pagy-rjs")
74
+ .forEach(rjs => rjs.pagyRender()));
75
+ }),
76
+ // Init the *_combo_nav_js helpers
77
+ initCombo(el, [link, trimParam]) {
78
+ Pagy.initInput(el, inputValue => [inputValue, link.replace(/__pagy_page__/, inputValue)], trimParam);
79
+ },
80
+ // Init the items_selector_js helper
81
+ initSelector(el, [from, link, trimParam]) {
82
+ Pagy.initInput(el, inputValue => {
83
+ const page = Math.max(Math.ceil(from / parseInt(inputValue)), 1).toString();
84
+ const html = link.replace(/__pagy_page__/, page).replace(/__pagy_items__/, inputValue);
85
+ return [page, html];
86
+ }, trimParam);
87
+ },
88
+ // Init the input element
89
+ initInput(el, getVars, trimParam) {
90
+ const input = el.querySelector("input");
91
+ const initial = input.value;
92
+ const action = function () {
93
+ if (input.value === initial) {
94
+ return;
95
+ } // not changed
96
+ const [min, val, max] = [input.min, input.value, input.max].map(n => parseInt(n) || 0);
97
+ if (val < min || val > max) { // reset invalid/out-of-range
98
+ input.value = initial;
99
+ input.select();
100
+ return;
101
+ }
102
+ let [page, html] = getVars(input.value); // eslint-disable-line prefer-const
103
+ if (typeof trimParam === "string" && page === "1") {
104
+ html = Pagy.trim(html, trimParam);
105
+ }
106
+ el.insertAdjacentHTML("afterbegin", html);
107
+ el.querySelector("a").click();
108
+ };
109
+ ["change", "focus"].forEach(e => input.addEventListener(e, input.select)); // auto-select
110
+ input.addEventListener("focusout", action); // trigger action
111
+ input.addEventListener("keypress", e => { if (e.key === "Enter") {
112
+ action();
113
+ } }); // trigger action
114
+ },
115
+ // Trim the ${page-param}=1 params in links
116
+ trim: (link, param) => link.replace(new RegExp(`[?&]${param}=1\\b(?!&)|\\b${param}=1&`), "")
117
+ };
118
+ export default Pagy;
@@ -1,3 +1 @@
1
- "use strict";function _slicedToArray(a,b){return _arrayWithHoles(a)||_iterableToArrayLimit(a,b)||_unsupportedIterableToArray(a,b)||_nonIterableRest()}function _iterableToArrayLimit(a,b){var c=null==a?null:"undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(null!=c){var d,e,f=[],g=!0,h=!1;try{for(c=c.call(a);!(g=(d=c.next()).done)&&(f.push(d.value),!(b&&f.length===b));g=!0);}catch(a){h=!0,e=a}finally{try{g||null==c["return"]||c["return"]()}finally{if(h)throw e}}return f}}function _toArray(a){return _arrayWithHoles(a)||_iterableToArray(a)||_unsupportedIterableToArray(a)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArray(a){if("undefined"!=typeof Symbol&&null!=a[Symbol.iterator]||null!=a["@@iterator"])return Array.from(a)}function _arrayWithHoles(a){if(Array.isArray(a))return a}function _createForOfIteratorHelper(a,b){var c="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(!c){if(Array.isArray(a)||(c=_unsupportedIterableToArray(a))||b&&a&&"number"==typeof a.length){c&&(a=c);var d=0,e=function(){};return{s:e,n:function n(){return d>=a.length?{done:!0}:{done:!1,value:a[d++]}},e:function e(a){throw a},f:e}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var f,g=!0,h=!1;return{s:function s(){c=c.call(a)},n:function n(){var a=c.next();return g=a.done,a},e:function e(a){h=!0,f=a},f:function f(){try{g||null==c["return"]||c["return"]()}finally{if(h)throw f}}}}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}var Pagy={version:"5.7.0",init:function init(a){var b,c=a instanceof Element?a:document,d=c.querySelectorAll("[data-pagy-json]"),e=function(a,b){return console.warn("Pagy.init() skipped element: %o\n%s",a,b)},f=_createForOfIteratorHelper(d);try{for(f.s();!(b=f.n()).done;){var g=b.value,h=g.getAttribute("data-pagy-json");try{var i=JSON.parse(h),j=_toArray(i),k=j[0],l=j.slice(1);"nav"===k?Pagy.initNav(g,l):"combo_nav"===k?Pagy.initComboNav(g,l):"items_selector"===k?Pagy.initItemsSelector(g,l):e(g,"Illegal PagyJSON keyword: expected \"nav\"|\"combo_nav\"|\"items_selector\" got \"".concat(k,"\""))}catch(a){e(g,a)}}}catch(a){f.e(a)}finally{f.f()}},initNav:function initNav(a,b){var c=_slicedToArray(b,4),d=c[0],e=c[1],f=c[2],g=c[3],h=a.parentElement||a,j=Object.getOwnPropertyNames(e).map(function(a){return parseInt(a)}).sort(function(c,a){return a-c}),k=-1,l=function(a,b,c){return a.replace(/__pagy_page__/g,b).replace(/__pagy_label__/g,c)};(a.pagyRender=function(){var b=j.find(function(a){return a<h.clientWidth})||0;if(b!==k){var c=d.before,m=e[b.toString()],n=null===f?m.map(function(a){return a.toString()}):f[b.toString()];for(var q in m){var o=m[q],p=n[q];if("string"==typeof g&&1===o){var i=l(d.link,o.toString(),p);c+=Pagy.trim(i,g)}else c+="number"==typeof o?l(d.link,o.toString(),p):"gap"===o?d.gap:l(d.active,o,p)}c+=d.after,a.innerHTML="",a.insertAdjacentHTML("afterbegin",c),k=b}})(),a.classList.contains("pagy-rjs")&&Pagy.rjsObserver.observe(h)},rjsObserver:new ResizeObserver(function(a){a.filter(function(a){return a.contentBoxSize}).forEach(function(a){return a.target.querySelectorAll(".pagy-rjs").forEach(function(a){return a.pagyRender()})})}),initComboNav:function initComboNav(a,b){var c=_slicedToArray(b,2),d=c[0],e=c[1],f=a.querySelector("input"),g=f.value;Pagy.initInput(f,function(){if(Pagy.validValueFor(f,g)){var b=d.replace(/__pagy_page__/,f.value);Pagy.finalizeAction(a,b,f.value,e)}})},initItemsSelector:function initItemsSelector(a,b){var c=_slicedToArray(b,3),d=c[0],e=c[1],f=c[2],g=a.querySelector("input"),h=g.value;Pagy.initInput(g,function(){var b=Math.max,c=Math.ceil;if(Pagy.validValueFor(g,h)){var i=b(c(d/parseInt(g.value)),1).toString(),j=e.replace(/__pagy_page__/,i).replace(/__pagy_items__/,g.value);Pagy.finalizeAction(a,j,i,f)}})},initInput:function initInput(a,b){["change","focus"].forEach(function(b){return a.addEventListener(b,a.select)}),a.addEventListener("focusout",b),a.addEventListener("keypress",function(a){"Enter"===a.key&&b()})},validValueFor:function validValueFor(a,b){if(a.value===b)return!1;var c=[a.min,a.value,a.max].map(function(a){return parseInt(a)||0}),d=_slicedToArray(c,3),e=d[0],f=d[1],g=d[2];return!!(f>=e&&f<=g)||(a.value=b,a.select(),!1)},finalizeAction:function finalizeAction(a,b,c,d){"string"==typeof d&&"1"===c&&(b=Pagy.trim(b,d)),a.insertAdjacentHTML("afterbegin",b),a.querySelector("a").click()},trim:function trim(a,b){return a.replace(new RegExp("[?&]".concat(b,"=1\\b(?!&)|\\b").concat(b,"=1&")),"")}};
2
-
3
- //# sourceMappingURL=pagy.js.map
1
+ !function(){function t(t){if(Array.isArray(t))return t}function n(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}function e(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function r(r,i){return t(r)||n(r)||e()}var i={version:"5.7.4",init:function(r){var a,o=(r instanceof Element?r:document).querySelectorAll("[data-pagy-json]"),c=function(t,n){return console.warn("Pagy.init() skipped element: %o\n%s",t,n)},u=!0,l=!1,f=void 0;try{for(var p,s=o[Symbol.iterator]();!(u=(p=s.next()).done);u=!0){var v=p.value,g=v.getAttribute("data-pagy-json");try{var y=t(a=JSON.parse(g))||n(a)||e(),d=y[0],m=y.slice(1);"nav"===d?i.initNav(v,m):"combo"===d?i.initCombo(v,m):"selector"===d?i.initSelector(v,m):c(v,'Illegal PagyJSON keyword: expected "nav"|"combo"|"selector", got "'.concat(d,'"'))}catch(t){c(v,t)}}}catch(t){l=!0,f=t}finally{try{u||null==s.return||s.return()}finally{if(l)throw f}}},initNav:function(t,n){var e,a=r(n),o=a[0],c=a[1],u=a[2],l=a[3],f=null!==(e=t.parentElement)&&void 0!==e?e:t,p=Object.getOwnPropertyNames(c).map((function(t){return parseInt(t)})).sort((function(t,n){return n-t})),s=-1,v=function(t,n,e){return t.replace(/__pagy_page__/g,n).replace(/__pagy_label__/g,e)};(t.pagyRender=function(){var n=p.find((function(t){return t<f.clientWidth}))||0;if(n!==s){var e,r=o.before,a=c[n.toString()],g=null!==(e=null==u?void 0:u[n.toString()])&&void 0!==e?e:a.map((function(t){return t.toString()}));for(var y in a){var d=a[y],m=g[y];r+="string"==typeof l&&1===d?i.trim(v(o.link,d.toString(),m),l):"number"==typeof d?v(o.link,d.toString(),m):"gap"===d?o.gap:v(o.active,d,m)}r+=o.after,t.innerHTML="",t.insertAdjacentHTML("afterbegin",r),s=n}})(),t.classList.contains("pagy-rjs")&&i.rjsObserver.observe(f)},rjsObserver:new ResizeObserver((function(t){t.filter((function(t){return t.contentBoxSize})).forEach((function(t){return t.target.querySelectorAll(".pagy-rjs").forEach((function(t){return t.pagyRender()}))}))})),initCombo:function(t,n){var e=r(n),a=e[0],o=e[1];i.initInput(t,(function(t){return[t,a.replace(/__pagy_page__/,t)]}),o)},initSelector:function(t,n){var e=r(n),a=e[0],o=e[1],c=e[2];i.initInput(t,(function(t){var n=Math.max(Math.ceil(a/parseInt(t)),1).toString();return[n,o.replace(/__pagy_page__/,n).replace(/__pagy_items__/,t)]}),c)},initInput:function(t,n,e){var a=t.querySelector("input"),o=a.value,c=function(){if(a.value!==o){var c=r([a.min,a.value,a.max].map((function(t){return parseInt(t)||0}))),u=c[0],l=c[1],f=c[2];if(l<u||l>f)return a.value=o,void a.select();var p=r(n(a.value)),s=p[0],v=p[1];"string"==typeof e&&"1"===s&&(v=i.trim(v,e)),t.insertAdjacentHTML("afterbegin",v),t.querySelector("a").click()}};["change","focus"].forEach((function(t){return a.addEventListener(t,a.select)})),a.addEventListener("focusout",c),a.addEventListener("keypress",(function(t){"Enter"===t.key&&c()}))},trim:function(t,n){return t.replace(new RegExp("[?&]".concat(n,"=1\\b(?!&)|\\b").concat(n,"=1&")),"")}},a=i;window.Pagy=a}();
@@ -29,7 +29,7 @@ class Pagy # :nodoc:
29
29
  html << %(</ul></nav>)
30
30
  end
31
31
 
32
- # Javascript pagination for bootstrap: it returns a nav and a JSON tag used by the Pagy.nav javascript
32
+ # Javascript pagination for bootstrap: it returns a nav and a JSON tag used by the pagy.js file
33
33
  def pagy_bootstrap_nav_js(pagy, pagy_id: nil, link_extra: '', **vars)
34
34
  sequels = pagy.sequels(**vars)
35
35
  p_id = %( id="#{pagy_id}") if pagy_id
@@ -44,7 +44,7 @@ class Pagy # :nodoc:
44
44
  pagy_json_attr(pagy, :nav, tags, sequels, pagy.label_sequels(sequels))}></nav>)
45
45
  end
46
46
 
47
- # Javascript combo pagination for bootstrap: it returns a nav and a JSON tag used by the Pagy.combo_nav javascript
47
+ # Javascript combo pagination for bootstrap: it returns a nav and a JSON tag used by the pagy.js file
48
48
  def pagy_bootstrap_combo_nav_js(pagy, pagy_id: nil, link_extra: '')
49
49
  p_id = %( id="#{pagy_id}") if pagy_id
50
50
  link = pagy_link_proc(pagy, link_extra: link_extra)
@@ -55,7 +55,7 @@ class Pagy # :nodoc:
55
55
  p_pages.to_s.length + 1}rem;">)
56
56
 
57
57
  %(<nav#{p_id} class="pagy-bootstrap-combo-nav-js pagination" aria-label="pager"><div class="btn-group" role="group" #{
58
- pagy_json_attr pagy, :combo_nav, pagy_marked_link(link)}>#{
58
+ pagy_json_attr pagy, :combo, pagy_marked_link(link)}>#{
59
59
  if (p_prev = pagy.prev)
60
60
  link.call p_prev, pagy_t('pagy.nav.prev'), 'aria-label="previous" class="prev btn btn-primary"'
61
61
  else
@@ -7,7 +7,7 @@ class Pagy # :nodoc:
7
7
  # Frontend modules are specially optimized for performance.
8
8
  # The resulting code may not look very elegant, but produces the best benchmarks
9
9
  module BulmaExtra
10
- # Pagination for Bulma: it returns the html with the series of links to the pages
10
+ # Pagination for bulma: it returns the html with the series of links to the pages
11
11
  def pagy_bulma_nav(pagy, pagy_id: nil, link_extra: '', **vars)
12
12
  p_id = %( id="#{pagy_id}") if pagy_id
13
13
  link = pagy_link_proc(pagy, link_extra: link_extra)
@@ -30,6 +30,7 @@ class Pagy # :nodoc:
30
30
  html << %(</ul></nav>)
31
31
  end
32
32
 
33
+ # Javascript pagination for bulma: it returns a nav and a JSON tag used by the Pagy.nav javascript
33
34
  def pagy_bulma_nav_js(pagy, pagy_id: nil, link_extra: '', **vars)
34
35
  sequels = pagy.sequels(**vars)
35
36
  p_id = %( id="#{pagy_id}") if pagy_id
@@ -47,7 +48,7 @@ class Pagy # :nodoc:
47
48
  pagy_json_attr(pagy, :nav, tags, sequels, pagy.label_sequels(sequels))}></nav>)
48
49
  end
49
50
 
50
- # Javascript combo pagination for Bulma: it returns a nav and a JSON tag used by the Pagy.combo_nav javascript
51
+ # Javascript combo pagination for bulma: it returns a nav and a JSON tag used by the pagy.js file
51
52
  def pagy_bulma_combo_nav_js(pagy, pagy_id: nil, link_extra: '')
52
53
  p_id = %( id="#{pagy_id}") if pagy_id
53
54
  link = pagy_link_proc(pagy, link_extra: link_extra)
@@ -58,7 +59,7 @@ class Pagy # :nodoc:
58
59
 
59
60
  html = %(<nav#{p_id} class="pagy-bulma-combo-nav-js" aria-label="pagination">)
60
61
  %(#{html}<div class="field is-grouped is-grouped-centered" role="group" #{
61
- pagy_json_attr pagy, :combo_nav, pagy_marked_link(link)}>#{
62
+ pagy_json_attr pagy, :combo, pagy_marked_link(link)}>#{
62
63
  if (p_prev = pagy.prev)
63
64
  %(<p class="control">#{link.call p_prev, pagy_t('pagy.nav.prev'), 'class="button" aria-label="previous page"'}</p>)
64
65
  else
@@ -26,7 +26,7 @@ class Pagy # :nodoc:
26
26
  html << %(</ul></nav>)
27
27
  end
28
28
 
29
- # Javascript pagination for foundation: it returns a nav and a JSON tag used by the Pagy.nav javascript
29
+ # Javascript pagination for foundation: it returns a nav and a JSON tag used by the pagy.js file
30
30
  def pagy_foundation_nav_js(pagy, pagy_id: nil, link_extra: '', **vars)
31
31
  sequels = pagy.sequels(**vars)
32
32
  p_id = %( id="#{pagy_id}") if pagy_id
@@ -41,7 +41,7 @@ class Pagy # :nodoc:
41
41
  pagy_json_attr(pagy, :nav, tags, sequels, pagy.label_sequels(sequels))}></nav>)
42
42
  end
43
43
 
44
- # Javascript combo pagination for Foundation: it returns a nav and a JSON tag used by the Pagy.combo_nav javascript
44
+ # Javascript combo pagination for Foundation: it returns a nav and a JSON tag used by the pagy.js file
45
45
  def pagy_foundation_combo_nav_js(pagy, pagy_id: nil, link_extra: '')
46
46
  p_id = %( id="#{pagy_id}") if pagy_id
47
47
  link = pagy_link_proc(pagy, link_extra: link_extra)
@@ -52,7 +52,7 @@ class Pagy # :nodoc:
52
52
  p_pages.to_s.length + 1}rem; padding: 0 0.3rem; margin: 0 0.3rem;">)
53
53
 
54
54
  %(<nav#{p_id} class="pagy-foundation-combo-nav-js" aria-label="Pagination"><div class="input-group" #{
55
- pagy_json_attr pagy, :combo_nav, pagy_marked_link(link)}>#{
55
+ pagy_json_attr pagy, :combo, pagy_marked_link(link)}>#{
56
56
  if (p_prev = pagy.prev)
57
57
  link.call p_prev, pagy_t('pagy.nav.prev'),
58
58
  'style="margin-bottom: 0" aria-label="previous" class="prev button primary"'
@@ -39,7 +39,7 @@ class Pagy # :nodoc:
39
39
  link = pagy_marked_link(pagy_link_proc(pagy, link_extra: link_extra))
40
40
  p_vars[:items] = p_items # restore the items
41
41
 
42
- html = +%(<span#{p_id} class="pagy-items-selector-js" #{pagy_json_attr pagy, :items_selector, pagy.from, link}>)
42
+ html = +%(<span#{p_id} class="pagy-items-selector-js" #{pagy_json_attr pagy, :selector, pagy.from, link}>)
43
43
  input = %(<input type="number" min="1" max="#{p_vars[:max_items]}" value="#{
44
44
  p_items}" style="padding: 0; text-align: center; width: #{p_items.to_s.length + 1}rem;">)
45
45
  html << pagy_t('pagy.items_selector_js', item_name: item_name || pagy_t(i18n_key || p_vars[:i18n_key], count: p_items),
@@ -26,7 +26,7 @@ class Pagy # :nodoc:
26
26
  html << %(</ul></div>)
27
27
  end
28
28
 
29
- # Javascript pagination for materialize: it returns a nav and a JSON tag used by the Pagy.nav javascript
29
+ # Javascript pagination for materialize: it returns a nav and a JSON tag used by the pagy.js file
30
30
  def pagy_materialize_nav_js(pagy, pagy_id: nil, link_extra: '', **vars)
31
31
  sequels = pagy.sequels(**vars)
32
32
  p_id = %( id="#{pagy_id}") if pagy_id
@@ -42,7 +42,7 @@ class Pagy # :nodoc:
42
42
  pagy_json_attr(pagy, :nav, tags, sequels, pagy.label_sequels(sequels))}></div>)
43
43
  end
44
44
 
45
- # Javascript combo pagination for materialize: it returns a nav and a JSON tag used by the Pagy.combo_nav javascript
45
+ # Javascript combo pagination for materialize: it returns a nav and a JSON tag used by the pagy.js file
46
46
  def pagy_materialize_combo_nav_js(pagy, pagy_id: nil, link_extra: '')
47
47
  p_id = %( id="#{pagy_id}") if pagy_id
48
48
  link = pagy_link_proc(pagy, link_extra: link_extra)
@@ -54,7 +54,7 @@ class Pagy # :nodoc:
54
54
 
55
55
  html = %(<ul#{p_id} class="pagy-materialize-combo-nav-js pagination chip" role="navigation")
56
56
  %(#{html} aria-label="pager" style="padding-right: 0" #{
57
- pagy_json_attr pagy, :combo_nav, pagy_marked_link(link)}>#{
57
+ pagy_json_attr pagy, :combo, pagy_marked_link(link)}>#{
58
58
  pagy_materialize_prev_html pagy, link, style}<li class="pagy-combo-input">#{
59
59
  pagy_t 'pagy.combo_nav_js', page_input: input, count: p_page, pages: p_pages}</li>#{
60
60
  pagy_materialize_next_html pagy, link, style}</ul>)
@@ -7,7 +7,7 @@ class Pagy # :nodoc:
7
7
  # Frontend modules are specially optimized for performance.
8
8
  # The resulting code may not look very elegant, but produces the best benchmarks
9
9
  module NavsExtra
10
- # Javascript pagination: it returns a nav and a JSON tag used by the Pagy.nav javascript
10
+ # Javascript pagination: it returns a nav and a JSON tag used by the pagy.js file
11
11
  def pagy_nav_js(pagy, pagy_id: nil, link_extra: '', **vars)
12
12
  sequels = pagy.sequels(**vars)
13
13
  p_id = %( id="#{pagy_id}") if pagy_id
@@ -22,7 +22,7 @@ class Pagy # :nodoc:
22
22
  pagy_json_attr(pagy, :nav, tags, sequels, pagy.label_sequels(sequels))}></nav>)
23
23
  end
24
24
 
25
- # Javascript combo pagination: it returns a nav and a JSON tag used by the Pagy.combo_nav javascript
25
+ # Javascript combo pagination: it returns a nav and a JSON tag used by the pagy.js file
26
26
  def pagy_combo_nav_js(pagy, pagy_id: nil, link_extra: '')
27
27
  p_id = %( id="#{pagy_id}") if pagy_id
28
28
  link = pagy_link_proc(pagy, link_extra: link_extra)
@@ -32,7 +32,7 @@ class Pagy # :nodoc:
32
32
  p_page}" style="padding: 0; text-align: center; width: #{p_pages.to_s.length + 1}rem;">)
33
33
 
34
34
  %(<nav#{p_id} class="pagy-combo-nav-js pagination" aria-label="pager" #{
35
- pagy_json_attr pagy, :combo_nav, pagy_marked_link(link)}>#{
35
+ pagy_json_attr pagy, :combo, pagy_marked_link(link)}>#{
36
36
  pagy_nav_prev_html pagy, link
37
37
  }<span class="pagy-combo-input" style="margin: 0 0.6rem;">#{
38
38
  pagy_t 'pagy.combo_nav_js', page_input: input, count: p_page, pages: p_pages
@@ -26,7 +26,7 @@ class Pagy # :nodoc:
26
26
  html << %(</div>)
27
27
  end
28
28
 
29
- # Javascript pagination for semantic: it returns a nav and a JSON tag used by the Pagy.nav javascript
29
+ # Javascript pagination for semantic: it returns a nav and a JSON tag used by the pagy.js file
30
30
  def pagy_semantic_nav_js(pagy, pagy_id: nil, link_extra: '', **vars)
31
31
  sequels = pagy.sequels(**vars)
32
32
  p_id = %( id="#{pagy_id}") if pagy_id
@@ -41,7 +41,7 @@ class Pagy # :nodoc:
41
41
  pagy_json_attr(pagy, :nav, tags, sequels, pagy.label_sequels(sequels))}></div>)
42
42
  end
43
43
 
44
- # Combo pagination for semantic: it returns a nav and a JSON tag used by the Pagy.combo_nav javascript
44
+ # Combo pagination for semantic: it returns a nav and a JSON tag used by the pagy.js file
45
45
  def pagy_semantic_combo_nav_js(pagy, pagy_id: nil, link_extra: '')
46
46
  p_id = %( id="#{pagy_id}") if pagy_id
47
47
  link = pagy_link_proc(pagy, link_extra: %(class="item" #{link_extra}))
@@ -51,7 +51,7 @@ class Pagy # :nodoc:
51
51
  p_page}" style="padding: 0; text-align: center; width: #{p_pages.to_s.length + 1}rem; margin: 0 0.3rem">)
52
52
 
53
53
  %(<div#{p_id} class="pagy-semantic-combo-nav-js ui compact menu" role="navigation" #{
54
- pagy_json_attr pagy, :combo_nav, pagy_marked_link(link)}>#{
54
+ pagy_json_attr pagy, :combo, pagy_marked_link(link)}>#{
55
55
  pagy_semantic_prev_html pagy, link
56
56
  }<div class="pagy-combo-input item">#{
57
57
  pagy_t 'pagy.combo_nav_js', page_input: input, count: p_page, pages: p_pages
@@ -25,7 +25,7 @@ class Pagy # :nodoc:
25
25
  html << %(</ul>)
26
26
  end
27
27
 
28
- # Javascript pagination for uikit: it returns a nav and a JSON tag used by the Pagy.nav javascript
28
+ # Javascript pagination for uikit: it returns a nav and a JSON tag used by the pagy.js file
29
29
  def pagy_uikit_nav_js(pagy, pagy_id: nil, link_extra: '', **vars)
30
30
  sequels = pagy.sequels(**vars)
31
31
  p_id = %( id="#{pagy_id}") if pagy_id
@@ -40,7 +40,7 @@ class Pagy # :nodoc:
40
40
  pagy_json_attr(pagy, :nav, tags, sequels, pagy.label_sequels(sequels))}></ul>)
41
41
  end
42
42
 
43
- # Javascript combo pagination for uikit: it returns a nav and a JSON tag used by the Pagy.combo_nav javascript
43
+ # Javascript combo pagination for uikit: it returns a nav and a JSON tag used by the pagy.js file
44
44
  def pagy_uikit_combo_nav_js(pagy, pagy_id: nil, link_extra: '')
45
45
  p_id = %( id="#{pagy_id}") if pagy_id
46
46
  link = pagy_link_proc(pagy, link_extra: link_extra)
@@ -50,7 +50,7 @@ class Pagy # :nodoc:
50
50
  p_page}" style="text-align: center; width: #{p_pages.to_s.length + 1}rem;">)
51
51
 
52
52
  %(<ul#{p_id} class="pagy-uikit-combo-nav-js uk-button-group uk-pagination uk-flex-center" #{
53
- pagy_json_attr pagy, :combo_nav, pagy_marked_link(link)
53
+ pagy_json_attr pagy, :combo, pagy_marked_link(link)
54
54
  }>#{
55
55
  pagy_uikit_prev_html pagy, link
56
56
  }<li>#{
data/lib/pagy.rb CHANGED
@@ -5,7 +5,7 @@ require 'pathname'
5
5
 
6
6
  # Core class
7
7
  class Pagy
8
- VERSION = '5.7.0'
8
+ VERSION = '5.7.4'
9
9
 
10
10
  # Root pathname to get the path of Pagy files like templates or dictionaries
11
11
  def self.root
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: 5.7.0
4
+ version: 5.7.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Domizio Demichelis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-07 00:00:00.000000000 Z
11
+ date: 2022-01-13 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Agnostic pagination in plain ruby. It does it all. Better.
14
14
  email:
@@ -19,8 +19,10 @@ extra_rdoc_files: []
19
19
  files:
20
20
  - LICENSE.txt
21
21
  - lib/config/pagy.rb
22
+ - lib/javascripts/pagy-dev.js
23
+ - lib/javascripts/pagy-module.d.ts
24
+ - lib/javascripts/pagy-module.js
22
25
  - lib/javascripts/pagy.js
23
- - lib/javascripts/pagy.js.map
24
26
  - lib/locales/ar.yml
25
27
  - lib/locales/bg.yml
26
28
  - lib/locales/bs.yml
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/pagy.ts"],"names":[],"mappings":"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","file":"pagy.js","sourcesContent":["// This file is the source that generates pagy.js, polyfilled with the `@babel/preset-env` `\"useBuiltIns\": \"entry\"`.\n// You can generate a custom targeted javascript file for the browsers you need by changing that settings in package.json,\n// then compile it with `npm run compile -w src`.\n\n// Args types and interfaces from data-pagy-json\ntype PagyJSON = readonly [\"nav\", ...NavArgs] | [\"combo_nav\", ...ComboNavArgs] | [\"items_selector\", ...ItemsSelectorArgs]\ntype NavArgs = readonly [NavTags, NavSequels, null|NavLabelSequels, string?]\ntype ComboNavArgs = readonly [string, string?]\ntype ItemsSelectorArgs = readonly [number, string, string?]\n\ninterface NavTags {\n readonly before: string\n readonly link: string\n readonly active: string\n readonly gap: string\n readonly after: string\n}\ninterface NavSequels { readonly [width:string]: (string|number|\"gap\")[] }\ninterface NavLabelSequels { readonly [width:string]: string[] }\ninterface Element { pagyRender(): void }\n\n// The Pagy object\nconst Pagy = {\n version: \"5.7.0\",\n\n // Scan for \"data-pagy-json\" elements, parse their JSON content and call their init functions\n init(arg?:Element|never) {\n const target = arg instanceof Element ? arg : document;\n const elements = target.querySelectorAll(\"[data-pagy-json]\");\n const warn = (el:Element, err:unknown) => console.warn(\"Pagy.init() skipped element: %o\\n%s\", el, err);\n for (const element of elements) {\n const json = element.getAttribute(\"data-pagy-json\") as string;\n try {\n const [keyword, ...args] = JSON.parse(json) as PagyJSON;\n if (keyword === \"nav\") {\n Pagy.initNav(element, args as NavArgs);\n } else if (keyword === \"combo_nav\") {\n Pagy.initComboNav(element, args as ComboNavArgs);\n } else if (keyword === \"items_selector\") {\n Pagy.initItemsSelector(element, args as ItemsSelectorArgs);\n } else {\n warn(element, `Illegal PagyJSON keyword: expected \"nav\"|\"combo_nav\"|\"items_selector\" got \"${keyword}\"`);\n }\n } catch (err) { warn(element, err) }\n }\n },\n\n // Init the *_nav_js helpers\n initNav(el:Element, [tags, sequels, labelSequels, trimParam]:NavArgs) {\n const container = el.parentElement || el;\n const widths = Object.getOwnPropertyNames(sequels).map(w => parseInt(w)).sort((a, b) => b - a);\n let lastWidth = -1;\n const fillIn = (string:string, item:string, label:string):string =>\n string.replace(/__pagy_page__/g, item).replace(/__pagy_label__/g, label);\n (el.pagyRender = function () {\n const width = widths.find(w => w < container.clientWidth) || 0;\n if (width === lastWidth) { return } // no change: abort\n let html = tags.before;\n const series = sequels[width.toString()];\n const labels = labelSequels === null ? series.map(l => l.toString()) : labelSequels[width.toString()];\n for (const i in series) {\n const item = series[i];\n const label = labels[i];\n if (typeof trimParam === \"string\" && item === 1) {\n const link = fillIn(tags.link, item.toString(), label);\n html += Pagy.trim(link, trimParam);\n } else if (typeof item === \"number\") {\n html += fillIn(tags.link, item.toString(), label);\n } else if (item === \"gap\") {\n html += tags.gap;\n } else { // active page\n html += fillIn(tags.active, item, label);\n }\n }\n html += tags.after;\n el.innerHTML = \"\";\n el.insertAdjacentHTML(\"afterbegin\", html);\n lastWidth = width;\n })();\n if (el.classList.contains(\"pagy-rjs\")) { Pagy.rjsObserver.observe(container) }\n },\n\n // The observer instance for responsive navs\n rjsObserver: new ResizeObserver(entries => {\n entries.filter(e => e.contentBoxSize)\n .forEach(e => e.target.querySelectorAll(\".pagy-rjs\")\n .forEach(rjs => rjs.pagyRender()));\n }),\n\n // Init the *_combo_nav_js helpers\n initComboNav(el:Element, [link, trimParam]:ComboNavArgs) {\n const input = el.querySelector(\"input\") as HTMLInputElement;\n const initial = input.value;\n Pagy.initInput(input, () => {\n if (!Pagy.validValueFor(input, initial)) { return } // abort action\n const html = link.replace(/__pagy_page__/, input.value);\n Pagy.finalizeAction(el, html, input.value, trimParam);\n });\n },\n\n // Init the pagy_items_selector_js helper\n initItemsSelector(el:Element, [from, link, trimParam]:ItemsSelectorArgs) {\n const input = el.querySelector(\"input\") as HTMLInputElement;\n const initial = input.value;\n Pagy.initInput(input, () => {\n if (!Pagy.validValueFor(input, initial)) { return } // abort action\n const page = Math.max(Math.ceil(from / parseInt(input.value)), 1).toString();\n const html = link.replace(/__pagy_page__/, page).replace(/__pagy_items__/, input.value);\n Pagy.finalizeAction(el, html, page, trimParam);\n });\n },\n\n // Init input field\n initInput(input:HTMLInputElement, action:() => void) {\n [\"change\", \"focus\"].forEach(e => input.addEventListener(e, input.select)); // auto-select\n input.addEventListener(\"focusout\", action); // trigger action\n input.addEventListener(\"keypress\", e => { if (e.key === \"Enter\") { action() } }); // trigger action\n },\n\n // Check for valid value or reset it\n validValueFor(input:HTMLInputElement, initial:string):boolean {\n if (input.value === initial) { return false } // not changed\n const [min, val, max] = [input.min, input.value, input.max].map(n => parseInt(n) || 0);\n if (val >= min && val <= max) { return true } // in range\n input.value = initial; // reset invalid/out-of-range\n input.select();\n return false;\n },\n\n // Finalize the input action\n finalizeAction(el:Element, html:string, page:string, trimParam?:string) {\n if (typeof trimParam === \"string\" && page === \"1\") { html = Pagy.trim(html, trimParam) }\n el.insertAdjacentHTML(\"afterbegin\", html);\n (el.querySelector(\"a\") as HTMLAnchorElement).click();\n },\n\n // Trim the ${page-param}=1 params in links\n trim: (link:string, param:string) => link.replace(new RegExp(`[?&]${param}=1\\\\b(?!&)|\\\\b${param}=1&`), \"\")\n};\n"]}