pagy 5.10.1 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/config/pagy.rb +4 -3
- data/lib/javascripts/pagy-dev.js +2 -2
- data/lib/javascripts/pagy-module.js +1 -1
- data/lib/javascripts/pagy.js +1 -1
- data/lib/locales/de.yml +1 -1
- data/lib/locales/ko.yml +1 -1
- data/lib/locales/nn.yml +22 -0
- data/lib/pagy/calendar/day.rb +12 -2
- data/lib/pagy/calendar/helper.rb +61 -0
- data/lib/pagy/calendar/month.rb +5 -1
- data/lib/pagy/calendar/quarter.rb +5 -1
- data/lib/pagy/calendar/week.rb +12 -7
- data/lib/pagy/calendar/year.rb +5 -1
- data/lib/pagy/calendar.rb +17 -7
- data/lib/pagy/countless.rb +1 -1
- data/lib/pagy/extras/bootstrap.rb +3 -3
- data/lib/pagy/extras/calendar.rb +9 -26
- data/lib/pagy/extras/elasticsearch_rails.rb +1 -10
- data/lib/pagy/extras/materialize.rb +3 -3
- data/lib/pagy/extras/meilisearch.rb +14 -20
- data/lib/pagy/extras/navs.rb +2 -2
- data/lib/pagy/extras/searchkick.rb +2 -10
- data/lib/pagy/extras/standalone.rb +4 -3
- data/lib/pagy/frontend.rb +1 -1
- data/lib/pagy/url_helpers.rb +4 -19
- data/lib/pagy.rb +16 -4
- data/lib/templates/bootstrap_nav.html.erb +1 -1
- data/lib/templates/bootstrap_nav.html.haml +1 -1
- data/lib/templates/bootstrap_nav.html.slim +1 -1
- data/lib/templates/nav.html.erb +1 -1
- data/lib/templates/nav.html.haml +1 -1
- data/lib/templates/nav.html.slim +1 -1
- metadata +7 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 445ffb4fc0af5e397872edbaddd6ecee7e3815243b367000c70beb7a344ea95c
|
4
|
+
data.tar.gz: a968e0aa93a07c5ab101499284851be9080907f80435ac1e4d3e223e271e14eb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f16a561a6b5bec95ea89de6c23d114e3f01deddfb67689c54d8a5d469e9ddc40bae870daa4dcc433e68ebe4609d14cc53106da36a25e7077bdbeb098ecc350a8
|
7
|
+
data.tar.gz: dc4af89758e166dfac07d8dc0484a801e05c6dec15684c2957b8a943301999fd56ddff80459a7ceccfdf95707ec19f334c9c08297678431f5aee8ce09bc0da64
|
data/lib/config/pagy.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Pagy initializer file (
|
3
|
+
# Pagy initializer file (6.0.0)
|
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
|
|
@@ -28,6 +28,7 @@
|
|
28
28
|
# Pagy::DEFAULT[:link_extra] = 'data-remote="true"' # example
|
29
29
|
# Pagy::DEFAULT[:i18n_key] = 'pagy.item_name' # default
|
30
30
|
# Pagy::DEFAULT[:cycle] = true # example
|
31
|
+
# Pagy::DEFAULT[:request_path] = "/foo" # example
|
31
32
|
|
32
33
|
|
33
34
|
# Extras
|
@@ -100,8 +101,8 @@
|
|
100
101
|
|
101
102
|
# Metadata extra: Provides the pagination metadata to Javascript frameworks like Vue.js, react.js, etc.
|
102
103
|
# See https://ddnexus.github.io/pagy/extras/metadata
|
103
|
-
# you must require the
|
104
|
-
# require 'pagy/extras/
|
104
|
+
# you must require the frontend helpers internal extra (BEFORE the metadata extra) ONLY if you need also the :sequels
|
105
|
+
# require 'pagy/extras/frontend_helpers'
|
105
106
|
# require 'pagy/extras/metadata'
|
106
107
|
# For performance reasons, you should explicitly set ONLY the metadata you use in the frontend
|
107
108
|
# Pagy::DEFAULT[:metadata] = %i[scaffold_url page prev next last] # example
|
data/lib/javascripts/pagy-dev.js
CHANGED
@@ -82,7 +82,7 @@ window.Pagy = (() => {
|
|
82
82
|
const trim = (link, param) => link.replace(new RegExp(`(\\?|&)${param}=1\\b(?!&)|\\b${param}=1&`), "");
|
83
83
|
// Public interface
|
84
84
|
return {
|
85
|
-
version: "
|
85
|
+
version: "6.0.0",
|
86
86
|
// Scan for elements with a "data-pagy" attribute and call their init functions with the decoded args
|
87
87
|
init(arg) {
|
88
88
|
const target = arg instanceof Element ? arg : document;
|
@@ -111,4 +111,4 @@ window.Pagy = (() => {
|
|
111
111
|
}
|
112
112
|
};
|
113
113
|
})();
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBhZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQWNBLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFO0lBQ2YsNENBQTRDO0lBQzVDLE1BQU0sV0FBVyxHQUFHLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQzdDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFhLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU3Ryw0QkFBNEI7SUFDNUIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxFQUFhLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLENBQVMsRUFBRSxFQUFFO1FBQ2hGLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxHQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25GLElBQUksU0FBUyxHQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLE1BQU0sTUFBTSxHQUFNLENBQUMsSUFBVyxFQUFFLElBQVcsRUFBRSxLQUFZLEVBQVMsRUFBRSxDQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3RixDQUFDLEVBQUUsQ0FB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ICAgICA9IHJlYWRvbmx5IFtUYWdzLCBTZXF1ZWxzLCBudWxsfExhYmVsU2VxdWVscywgc3RyaW5nP11cbnR5cGUgQ29tYm9BcmdzICAgID0gcmVhZG9ubHkgW3N0cmluZywgc3RyaW5nP11cbnR5cGUgU2VsZWN0b3JBcmdzID0gcmVhZG9ubHkgW251bWJlciwgc3RyaW5nLCBzdHJpbmc/XVxuaW50ZXJmYWNlIFRhZ3Mge1xuICAgIHJlYWRvbmx5IGJlZm9yZTogc3RyaW5nXG4gICAgcmVhZG9ubHkgbGluazogICBzdHJpbmdcbiAgICByZWFkb25seSBhY3RpdmU6IHN0cmluZ1xuICAgIHJlYWRvbmx5IGdhcDogICAgc3RyaW5nXG4gICAgcmVhZG9ubHkgYWZ0ZXI6ICBzdHJpbmdcbn1cbmludGVyZmFjZSBTZXF1ZWxzICAgICAgeyByZWFkb25seSBbd2lkdGg6c3RyaW5nXTogKHN0cmluZ3xudW1iZXIpW10gfVxuaW50ZXJmYWNlIExhYmVsU2VxdWVscyB7IHJlYWRvbmx5IFt3aWR0aDpzdHJpbmddOiBzdHJpbmdbXSB9XG5pbnRlcmZhY2UgTmF2RWxlbWVudCBleHRlbmRzIEVsZW1lbnQgeyBwYWd5UmVuZGVyKCk6IHZvaWQgfVxuXG5jb25zdCBQYWd5ID0gKCgpID0+IHtcbiAgICAvLyBUaGUgb2JzZXJ2ZXIgaW5zdGFuY2UgZm9yIHJlc3BvbnNpdmUgbmF2c1xuICAgIGNvbnN0IHJqc09ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT5cbiAgICAgICAgZW50cmllcy5mb3JFYWNoKGUgPT4gZS50YXJnZXQucXVlcnlTZWxlY3RvckFsbDxOYXZFbGVtZW50PihcIi5wYWd5LXJqc1wiKS5mb3JFYWNoKGVsID0+IGVsLnBhZ3lSZW5kZXIoKSkpKTtcblxuICAgIC8vIEluaXQgdGhlICpfbmF2X2pzIGhlbHBlcnNcbiAgICBjb25zdCBpbml0TmF2ID0gKGVsOk5hdkVsZW1lbnQsIFt0YWdzLCBzZXF1ZWxzLCBsYWJlbFNlcXVlbHMsIHRyaW1QYXJhbV06TmF2QXJncykgPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBlbC5wYXJlbnRFbGVtZW50ID8/IGVsO1xuICAgICAgICBjb25zdCB3aWR0aHMgICAgPSBPYmplY3Qua2V5cyhzZXF1ZWxzKS5tYXAodyA9PiBwYXJzZUludCh3KSkuc29ydCgoYSwgYikgPT4gYiAtIGEpO1xuICAgICAgICBsZXQgbGFzdFdpZHRoICAgPSAtMTtcbiAgICAgICAgY29uc3QgZmlsbEluICAgID0gKGxpbms6c3RyaW5nLCBwYWdlOnN0cmluZywgbGFiZWw6c3RyaW5nKTpzdHJpbmcgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsucmVwbGFjZSgvX19wYWd5X3BhZ2VfXy9nLCBwYWdlKS5yZXBsYWNlKC9fX3BhZ3lfbGFiZWxfXy9nLCBsYWJlbCk7XG4gICAgICAgIChlbC5wYWd5UmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHdpZHRocy5maW5kKHcgPT4gdyA8IGNvbnRhaW5lci5jbGllbnRXaWR0aCkgfHwgMDtcbiAgICAgICAgICAgIGlmICh3aWR0aCA9PT0gbGFzdFdpZHRoKSB7IHJldHVybiB9IC8vIG5vIGNoYW5nZTogYWJvcnRcbiAgICAgICAgICAgIGxldCBodG1sICAgICA9IHRhZ3MuYmVmb3JlO1xuICAgICAgICAgICAgY29uc3Qgc2VyaWVzID0gc2VxdWVsc1t3aWR0aC50b1N0cmluZygpXTtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVscyA9IGxhYmVsU2VxdWVscz8uW3dpZHRoLnRvU3RyaW5nKCldID8/IHNlcmllcy5tYXAobCA9PiBsLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpIGluIHNlcmllcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gID0gc2VyaWVzW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gbGFiZWxzW2ldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdHJpbVBhcmFtID09PSBcInN0cmluZ1wiICYmIGl0ZW0gPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSB0cmltKGZpbGxJbih0YWdzLmxpbmssIGl0ZW0udG9TdHJpbmcoKSwgbGFiZWwpLCB0cmltUGFyYW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSBmaWxsSW4odGFncy5saW5rLCBpdGVtLnRvU3RyaW5nKCksIGxhYmVsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gPT09IFwiZ2FwXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSB0YWdzLmdhcDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBhY3RpdmUgcGFnZVxuICAgICAgICAgICAgICAgICAgICBodG1sICs9IGZpbGxJbih0YWdzLmFjdGl2ZSwgaXRlbSwgbGFiZWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGh0bWwgKz0gdGFncy5hZnRlcjsgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGFsaWduLWFzc2lnbm1lbnRzL2FsaWduLWFzc2lnbm1lbnRzXG4gICAgICAgICAgICBlbC5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgZWwuaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYWZ0ZXJiZWdpblwiLCBodG1sKTtcbiAgICAgICAgICAgIGxhc3RXaWR0aCA9IHdpZHRoO1xuICAgICAgICB9KSgpO1xuICAgICAgICBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKFwicGFneS1yanNcIikpIHsgcmpzT2JzZXJ2ZXIub2JzZXJ2ZShjb250YWluZXIpIH1cbiAgICB9O1xuXG4gICAgLy8gSW5pdCB0aGUgKl9jb21ib19uYXZfanMgaGVscGVyc1xuICAgIGNvbnN0IGluaXRDb21ibyA9IChlbDpFbGVtZW50LCBbbGluaywgdHJpbVBhcmFtXTpDb21ib0FyZ3MpID0+XG4gICAgICAgIGluaXRJbnB1dChlbCwgaW5wdXRWYWx1ZSA9PiBbaW5wdXRWYWx1ZSwgbGluay5yZXBsYWNlKC9fX3BhZ3lfcGFnZV9fLywgaW5wdXRWYWx1ZSldLCB0cmltUGFyYW0pO1xuXG4gICAgICAgIC8vIEluaXQgdGhlIGl0ZW1zX3NlbGVjdG9yX2pzIGhlbHBlclxuICAgIGNvbnN0IGluaXRTZWxlY3RvciA9IChlbDpFbGVtZW50LCBbZnJvbSwgbGluaywgdHJpbVBhcmFtXTpTZWxlY3RvckFyZ3MpID0+IHtcbiAgICAgICAgaW5pdElucHV0KGVsLCBpbnB1dFZhbHVlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBNYXRoLm1heChNYXRoLmNlaWwoZnJvbSAvIHBhcnNlSW50KGlucHV0VmFsdWUpKSwgMSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBsaW5rLnJlcGxhY2UoL19fcGFneV9wYWdlX18vLCBwYWdlKS5yZXBsYWNlKC9fX3BhZ3lfaXRlbXNfXy8sIGlucHV0VmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIFtwYWdlLCBodG1sXTtcbiAgICAgICAgfSwgdHJpbVBhcmFtKTtcbiAgICB9O1xuXG4gICAgLy8gSW5pdCB0aGUgaW5wdXQgZWxlbWVudFxuICAgIGNvbnN0IGluaXRJbnB1dCA9IChlbDpFbGVtZW50LCBnZXRWYXJzOih2OnN0cmluZyk9PltzdHJpbmcsIHN0cmluZ10sIHRyaW1QYXJhbT86c3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ICAgPSBlbC5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIikgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgY29uc3QgaW5pdGlhbCA9IGlucHV0LnZhbHVlO1xuICAgICAgICBjb25zdCBhY3Rpb24gID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQudmFsdWUgPT09IGluaXRpYWwpIHsgcmV0dXJuIH0gIC8vIG5vdCBjaGFuZ2VkXG4gICAgICAgICAgICBjb25zdCBbbWluLCB2YWwsIG1heF0gPSBbaW5wdXQubWluLCBpbnB1dC52YWx1ZSwgaW5wdXQubWF4XS5tYXAobiA9PiBwYXJzZUludChuKSB8fCAwKTtcbiAgICAgICAgICAgIGlmICh2YWwgPCBtaW4gfHwgdmFsID4gbWF4KSB7ICAvLyByZXNldCBpbnZhbGlkL291dC1vZi1yYW5nZVxuICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gaW5pdGlhbDtcbiAgICAgICAgICAgICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgW3BhZ2UsIGh0bWxdID0gZ2V0VmFycyhpbnB1dC52YWx1ZSk7ICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItY29uc3RcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdHJpbVBhcmFtID09PSBcInN0cmluZ1wiICYmIHBhZ2UgPT09IFwiMVwiKSB7IGh0bWwgPSB0cmltKGh0bWwsIHRyaW1QYXJhbSkgfVxuICAgICAgICAgICAgZWwuaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYWZ0ZXJiZWdpblwiLCBodG1sKTtcbiAgICAgICAgICAgIChlbC5xdWVyeVNlbGVjdG9yKFwiYVwiKSBhcyBIVE1MQW5jaG9yRWxlbWVudCkuY2xpY2soKTtcbiAgICAgICAgfTtcbiAgICAgICAgW1wiY2hhbmdlXCIsIFwiZm9jdXNcIl0uZm9yRWFjaChlID0+IGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoZSwgaW5wdXQuc2VsZWN0KSk7ICAgICAgICAvLyBhdXRvLXNlbGVjdFxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNvdXRcIiwgYWN0aW9uKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyIGFjdGlvblxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIiwgZSA9PiB7IGlmIChlLmtleSA9PT0gXCJFbnRlclwiKSB7IGFjdGlvbigpIH0gfSk7IC8vIHRyaWdnZXIgYWN0aW9uXG4gICAgfTtcblxuICAgIC8vIFRyaW0gdGhlICR7cGFnZS1wYXJhbX09MSBwYXJhbXMgaW4gbGlua3NcbiAgICBjb25zdCB0cmltID0gKGxpbms6c3RyaW5nLCBwYXJhbTpzdHJpbmcpID0+XG4gICAgICAgIGxpbmsucmVwbGFjZShuZXcgUmVnRXhwKGAoXFxcXD98JmFtcDspJHtwYXJhbX09MVxcXFxiKD8hJmFtcDspfFxcXFxiJHtwYXJhbX09MSZhbXA7YCksIFwiXCIpO1xuXG4gICAgLy8gUHVibGljIGludGVyZmFjZVxuICAgIHJldHVybiB7XG4gICAgICAgIHZlcnNpb246IFwiNS4xMC4xXCIsXG5cbiAgICAgICAgLy8gU2NhbiBmb3IgZWxlbWVudHMgd2l0aCBhIFwiZGF0YS1wYWd5XCIgYXR0cmlidXRlIGFuZCBjYWxsIHRoZWlyIGluaXQgZnVuY3Rpb25zIHdpdGggdGhlIGRlY29kZWQgYXJnc1xuICAgICAgICBpbml0KGFyZz86RWxlbWVudHxuZXZlcikge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ICAgPSBhcmcgaW5zdGFuY2VvZiBFbGVtZW50ID8gYXJnIDogZG9jdW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IHRhcmdldC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtcGFneV1cIik7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsIG9mIGVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhhcnJheSAgICAgICAgID0gVWludDhBcnJheS5mcm9tKGF0b2IoZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1wYWd5XCIpIGFzIHN0cmluZyksIGMgPT4gYy5jaGFyQ29kZUF0KDApKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgW2tleXdvcmQsIC4uLmFyZ3NdID0gSlNPTi5wYXJzZSgobmV3IFRleHREZWNvZGVyKCkpLmRlY29kZSh1aW50OGFycmF5KSk7IC8vIGJhc2U2NC11dGY4IC0+IEpTT04gLT4gQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleXdvcmQgPT09IFwibmF2XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXROYXYoZWwgYXMgTmF2RWxlbWVudCwgYXJncyBhcyBOYXZBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXl3b3JkID09PSBcImNvbWJvXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRDb21ibyhlbCwgYXJncyBhcyBDb21ib0FyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleXdvcmQgPT09IFwic2VsZWN0b3JcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdFNlbGVjdG9yKGVsLCBhcmdzIGFzIFNlbGVjdG9yQXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJTa2lwcGVkIFBhZ3kuaW5pdCgpIGZvcjogJW9cXG5Vbmtub3duIGtleXdvcmQgJyVzJ1wiLCBlbCwga2V5d29yZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsgY29uc29sZS53YXJuKFwiU2tpcHBlZCBQYWd5LmluaXQoKSBmb3I6ICVvXFxuJXNcIiwgZWwsIGVycikgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn0pKCk7XG4iXX0=
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBhZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQWNBLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFO0lBQ2YsNENBQTRDO0lBQzVDLE1BQU0sV0FBVyxHQUFHLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQzdDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFhLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU3Ryw0QkFBNEI7SUFDNUIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxFQUFhLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLENBQVMsRUFBRSxFQUFFO1FBQ2hGLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxHQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25GLElBQUksU0FBUyxHQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLE1BQU0sTUFBTSxHQUFNLENBQUMsSUFBVyxFQUFFLElBQVcsRUFBRSxLQUFZLEVBQVMsRUFBRSxDQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3RixDQUFDLEVBQUUsQ0FB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ICAgICA9IHJlYWRvbmx5IFtUYWdzLCBTZXF1ZWxzLCBudWxsfExhYmVsU2VxdWVscywgc3RyaW5nP11cbnR5cGUgQ29tYm9BcmdzICAgID0gcmVhZG9ubHkgW3N0cmluZywgc3RyaW5nP11cbnR5cGUgU2VsZWN0b3JBcmdzID0gcmVhZG9ubHkgW251bWJlciwgc3RyaW5nLCBzdHJpbmc/XVxuaW50ZXJmYWNlIFRhZ3Mge1xuICAgIHJlYWRvbmx5IGJlZm9yZTogc3RyaW5nXG4gICAgcmVhZG9ubHkgbGluazogICBzdHJpbmdcbiAgICByZWFkb25seSBhY3RpdmU6IHN0cmluZ1xuICAgIHJlYWRvbmx5IGdhcDogICAgc3RyaW5nXG4gICAgcmVhZG9ubHkgYWZ0ZXI6ICBzdHJpbmdcbn1cbmludGVyZmFjZSBTZXF1ZWxzICAgICAgeyByZWFkb25seSBbd2lkdGg6c3RyaW5nXTogKHN0cmluZ3xudW1iZXIpW10gfVxuaW50ZXJmYWNlIExhYmVsU2VxdWVscyB7IHJlYWRvbmx5IFt3aWR0aDpzdHJpbmddOiBzdHJpbmdbXSB9XG5pbnRlcmZhY2UgTmF2RWxlbWVudCBleHRlbmRzIEVsZW1lbnQgeyBwYWd5UmVuZGVyKCk6IHZvaWQgfVxuXG5jb25zdCBQYWd5ID0gKCgpID0+IHtcbiAgICAvLyBUaGUgb2JzZXJ2ZXIgaW5zdGFuY2UgZm9yIHJlc3BvbnNpdmUgbmF2c1xuICAgIGNvbnN0IHJqc09ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT5cbiAgICAgICAgZW50cmllcy5mb3JFYWNoKGUgPT4gZS50YXJnZXQucXVlcnlTZWxlY3RvckFsbDxOYXZFbGVtZW50PihcIi5wYWd5LXJqc1wiKS5mb3JFYWNoKGVsID0+IGVsLnBhZ3lSZW5kZXIoKSkpKTtcblxuICAgIC8vIEluaXQgdGhlICpfbmF2X2pzIGhlbHBlcnNcbiAgICBjb25zdCBpbml0TmF2ID0gKGVsOk5hdkVsZW1lbnQsIFt0YWdzLCBzZXF1ZWxzLCBsYWJlbFNlcXVlbHMsIHRyaW1QYXJhbV06TmF2QXJncykgPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBlbC5wYXJlbnRFbGVtZW50ID8/IGVsO1xuICAgICAgICBjb25zdCB3aWR0aHMgICAgPSBPYmplY3Qua2V5cyhzZXF1ZWxzKS5tYXAodyA9PiBwYXJzZUludCh3KSkuc29ydCgoYSwgYikgPT4gYiAtIGEpO1xuICAgICAgICBsZXQgbGFzdFdpZHRoICAgPSAtMTtcbiAgICAgICAgY29uc3QgZmlsbEluICAgID0gKGxpbms6c3RyaW5nLCBwYWdlOnN0cmluZywgbGFiZWw6c3RyaW5nKTpzdHJpbmcgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsucmVwbGFjZSgvX19wYWd5X3BhZ2VfXy9nLCBwYWdlKS5yZXBsYWNlKC9fX3BhZ3lfbGFiZWxfXy9nLCBsYWJlbCk7XG4gICAgICAgIChlbC5wYWd5UmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHdpZHRocy5maW5kKHcgPT4gdyA8IGNvbnRhaW5lci5jbGllbnRXaWR0aCkgfHwgMDtcbiAgICAgICAgICAgIGlmICh3aWR0aCA9PT0gbGFzdFdpZHRoKSB7IHJldHVybiB9IC8vIG5vIGNoYW5nZTogYWJvcnRcbiAgICAgICAgICAgIGxldCBodG1sICAgICA9IHRhZ3MuYmVmb3JlO1xuICAgICAgICAgICAgY29uc3Qgc2VyaWVzID0gc2VxdWVsc1t3aWR0aC50b1N0cmluZygpXTtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVscyA9IGxhYmVsU2VxdWVscz8uW3dpZHRoLnRvU3RyaW5nKCldID8/IHNlcmllcy5tYXAobCA9PiBsLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpIGluIHNlcmllcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gID0gc2VyaWVzW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gbGFiZWxzW2ldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdHJpbVBhcmFtID09PSBcInN0cmluZ1wiICYmIGl0ZW0gPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSB0cmltKGZpbGxJbih0YWdzLmxpbmssIGl0ZW0udG9TdHJpbmcoKSwgbGFiZWwpLCB0cmltUGFyYW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSBmaWxsSW4odGFncy5saW5rLCBpdGVtLnRvU3RyaW5nKCksIGxhYmVsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gPT09IFwiZ2FwXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSB0YWdzLmdhcDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBhY3RpdmUgcGFnZVxuICAgICAgICAgICAgICAgICAgICBodG1sICs9IGZpbGxJbih0YWdzLmFjdGl2ZSwgaXRlbSwgbGFiZWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGh0bWwgKz0gdGFncy5hZnRlcjsgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGFsaWduLWFzc2lnbm1lbnRzL2FsaWduLWFzc2lnbm1lbnRzXG4gICAgICAgICAgICBlbC5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgZWwuaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYWZ0ZXJiZWdpblwiLCBodG1sKTtcbiAgICAgICAgICAgIGxhc3RXaWR0aCA9IHdpZHRoO1xuICAgICAgICB9KSgpO1xuICAgICAgICBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKFwicGFneS1yanNcIikpIHsgcmpzT2JzZXJ2ZXIub2JzZXJ2ZShjb250YWluZXIpIH1cbiAgICB9O1xuXG4gICAgLy8gSW5pdCB0aGUgKl9jb21ib19uYXZfanMgaGVscGVyc1xuICAgIGNvbnN0IGluaXRDb21ibyA9IChlbDpFbGVtZW50LCBbbGluaywgdHJpbVBhcmFtXTpDb21ib0FyZ3MpID0+XG4gICAgICAgIGluaXRJbnB1dChlbCwgaW5wdXRWYWx1ZSA9PiBbaW5wdXRWYWx1ZSwgbGluay5yZXBsYWNlKC9fX3BhZ3lfcGFnZV9fLywgaW5wdXRWYWx1ZSldLCB0cmltUGFyYW0pO1xuXG4gICAgICAgIC8vIEluaXQgdGhlIGl0ZW1zX3NlbGVjdG9yX2pzIGhlbHBlclxuICAgIGNvbnN0IGluaXRTZWxlY3RvciA9IChlbDpFbGVtZW50LCBbZnJvbSwgbGluaywgdHJpbVBhcmFtXTpTZWxlY3RvckFyZ3MpID0+IHtcbiAgICAgICAgaW5pdElucHV0KGVsLCBpbnB1dFZhbHVlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBNYXRoLm1heChNYXRoLmNlaWwoZnJvbSAvIHBhcnNlSW50KGlucHV0VmFsdWUpKSwgMSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBsaW5rLnJlcGxhY2UoL19fcGFneV9wYWdlX18vLCBwYWdlKS5yZXBsYWNlKC9fX3BhZ3lfaXRlbXNfXy8sIGlucHV0VmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIFtwYWdlLCBodG1sXTtcbiAgICAgICAgfSwgdHJpbVBhcmFtKTtcbiAgICB9O1xuXG4gICAgLy8gSW5pdCB0aGUgaW5wdXQgZWxlbWVudFxuICAgIGNvbnN0IGluaXRJbnB1dCA9IChlbDpFbGVtZW50LCBnZXRWYXJzOih2OnN0cmluZyk9PltzdHJpbmcsIHN0cmluZ10sIHRyaW1QYXJhbT86c3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ICAgPSBlbC5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIikgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgY29uc3QgaW5pdGlhbCA9IGlucHV0LnZhbHVlO1xuICAgICAgICBjb25zdCBhY3Rpb24gID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQudmFsdWUgPT09IGluaXRpYWwpIHsgcmV0dXJuIH0gIC8vIG5vdCBjaGFuZ2VkXG4gICAgICAgICAgICBjb25zdCBbbWluLCB2YWwsIG1heF0gPSBbaW5wdXQubWluLCBpbnB1dC52YWx1ZSwgaW5wdXQubWF4XS5tYXAobiA9PiBwYXJzZUludChuKSB8fCAwKTtcbiAgICAgICAgICAgIGlmICh2YWwgPCBtaW4gfHwgdmFsID4gbWF4KSB7ICAvLyByZXNldCBpbnZhbGlkL291dC1vZi1yYW5nZVxuICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gaW5pdGlhbDtcbiAgICAgICAgICAgICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgW3BhZ2UsIGh0bWxdID0gZ2V0VmFycyhpbnB1dC52YWx1ZSk7ICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItY29uc3RcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdHJpbVBhcmFtID09PSBcInN0cmluZ1wiICYmIHBhZ2UgPT09IFwiMVwiKSB7IGh0bWwgPSB0cmltKGh0bWwsIHRyaW1QYXJhbSkgfVxuICAgICAgICAgICAgZWwuaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYWZ0ZXJiZWdpblwiLCBodG1sKTtcbiAgICAgICAgICAgIChlbC5xdWVyeVNlbGVjdG9yKFwiYVwiKSBhcyBIVE1MQW5jaG9yRWxlbWVudCkuY2xpY2soKTtcbiAgICAgICAgfTtcbiAgICAgICAgW1wiY2hhbmdlXCIsIFwiZm9jdXNcIl0uZm9yRWFjaChlID0+IGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoZSwgaW5wdXQuc2VsZWN0KSk7ICAgICAgICAvLyBhdXRvLXNlbGVjdFxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNvdXRcIiwgYWN0aW9uKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyIGFjdGlvblxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIiwgZSA9PiB7IGlmIChlLmtleSA9PT0gXCJFbnRlclwiKSB7IGFjdGlvbigpIH0gfSk7IC8vIHRyaWdnZXIgYWN0aW9uXG4gICAgfTtcblxuICAgIC8vIFRyaW0gdGhlICR7cGFnZS1wYXJhbX09MSBwYXJhbXMgaW4gbGlua3NcbiAgICBjb25zdCB0cmltID0gKGxpbms6c3RyaW5nLCBwYXJhbTpzdHJpbmcpID0+XG4gICAgICAgIGxpbmsucmVwbGFjZShuZXcgUmVnRXhwKGAoXFxcXD98JmFtcDspJHtwYXJhbX09MVxcXFxiKD8hJmFtcDspfFxcXFxiJHtwYXJhbX09MSZhbXA7YCksIFwiXCIpO1xuXG4gICAgLy8gUHVibGljIGludGVyZmFjZVxuICAgIHJldHVybiB7XG4gICAgICAgIHZlcnNpb246IFwiNi4wLjBcIixcblxuICAgICAgICAvLyBTY2FuIGZvciBlbGVtZW50cyB3aXRoIGEgXCJkYXRhLXBhZ3lcIiBhdHRyaWJ1dGUgYW5kIGNhbGwgdGhlaXIgaW5pdCBmdW5jdGlvbnMgd2l0aCB0aGUgZGVjb2RlZCBhcmdzXG4gICAgICAgIGluaXQoYXJnPzpFbGVtZW50fG5ldmVyKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgICA9IGFyZyBpbnN0YW5jZW9mIEVsZW1lbnQgPyBhcmcgOiBkb2N1bWVudDtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1wYWd5XVwiKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWwgb2YgZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OGFycmF5ICAgICAgICAgPSBVaW50OEFycmF5LmZyb20oYXRvYihlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXBhZ3lcIikgYXMgc3RyaW5nKSwgYyA9PiBjLmNoYXJDb2RlQXQoMCkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBba2V5d29yZCwgLi4uYXJnc10gPSBKU09OLnBhcnNlKChuZXcgVGV4dERlY29kZXIoKSkuZGVjb2RlKHVpbnQ4YXJyYXkpKTsgLy8gYmFzZTY0LXV0ZjggLT4gSlNPTiAtPiBBcnJheVxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5d29yZCA9PT0gXCJuYXZcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdE5hdihlbCBhcyBOYXZFbGVtZW50LCBhcmdzIGFzIE5hdkFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleXdvcmQgPT09IFwiY29tYm9cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdENvbWJvKGVsLCBhcmdzIGFzIENvbWJvQXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5d29yZCA9PT0gXCJzZWxlY3RvclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0U2VsZWN0b3IoZWwsIGFyZ3MgYXMgU2VsZWN0b3JBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlNraXBwZWQgUGFneS5pbml0KCkgZm9yOiAlb1xcblVua25vd24ga2V5d29yZCAnJXMnXCIsIGVsLCBrZXl3b3JkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgeyBjb25zb2xlLndhcm4oXCJTa2lwcGVkIFBhZ3kuaW5pdCgpIGZvcjogJW9cXG4lc1wiLCBlbCwgZXJyKSB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufSkoKTtcbiJdfQ==
|
@@ -81,7 +81,7 @@ const Pagy = (() => {
|
|
81
81
|
const trim = (link, param) => link.replace(new RegExp(`(\\?|&)${param}=1\\b(?!&)|\\b${param}=1&`), "");
|
82
82
|
// Public interface
|
83
83
|
return {
|
84
|
-
version: "
|
84
|
+
version: "6.0.0",
|
85
85
|
// Scan for elements with a "data-pagy" attribute and call their init functions with the decoded args
|
86
86
|
init(arg) {
|
87
87
|
const target = arg instanceof Element ? arg : document;
|
data/lib/javascripts/pagy.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
!function(){
|
1
|
+
!function(){var e=(()=>{const e=new ResizeObserver((e=>e.forEach((e=>e.target.querySelectorAll(".pagy-rjs").forEach((e=>e.pagyRender())))))),t=(t,[n,r,a,c])=>{const i=t.parentElement??t,s=Object.keys(r).map((e=>parseInt(e))).sort(((e,t)=>t-e));let p=-1;const l=(e,t,n)=>e.replace(/__pagy_page__/g,t).replace(/__pagy_label__/g,n);(t.pagyRender=function(){const e=s.find((e=>e<i.clientWidth))||0;if(e===p)return;let g=n.before;const y=r[e.toString()],f=a?.[e.toString()]??y.map((e=>e.toString()));for(const e in y){const t=y[e],r=f[e];g+="string"==typeof c&&1===t?o(l(n.link,t.toString(),r),c):"number"==typeof t?l(n.link,t.toString(),r):"gap"===t?n.gap:l(n.active,t,r)}g+=n.after,t.innerHTML="",t.insertAdjacentHTML("afterbegin",g),p=e})(),t.classList.contains("pagy-rjs")&&e.observe(i)},n=(e,[t,n])=>a(e,(e=>[e,t.replace(/__pagy_page__/,e)]),n),r=(e,[t,n,r])=>{a(e,(e=>{const r=Math.max(Math.ceil(t/parseInt(e)),1).toString();return[r,n.replace(/__pagy_page__/,r).replace(/__pagy_items__/,e)]}),r)},a=(e,t,n)=>{const r=e.querySelector("input"),a=r.value,c=function(){if(r.value===a)return;const[c,i,s]=[r.min,r.value,r.max].map((e=>parseInt(e)||0));if(i<c||i>s)return r.value=a,void r.select();let[p,l]=t(r.value);"string"==typeof n&&"1"===p&&(l=o(l,n)),e.insertAdjacentHTML("afterbegin",l),e.querySelector("a").click()};["change","focus"].forEach((e=>r.addEventListener(e,r.select))),r.addEventListener("focusout",c),r.addEventListener("keypress",(e=>{"Enter"===e.key&&c()}))},o=(e,t)=>e.replace(new RegExp(`(\\?|&)${t}=1\\b(?!&)|\\b${t}=1&`),"");return{version:"6.0.0",init(e){const a=(e instanceof Element?e:document).querySelectorAll("[data-pagy]");for(const e of a)try{const a=Uint8Array.from(atob(e.getAttribute("data-pagy")),(e=>e.charCodeAt(0))),[o,...c]=JSON.parse((new TextDecoder).decode(a));"nav"===o?t(e,c):"combo"===o?n(e,c):"selector"===o?r(e,c):console.warn("Skipped Pagy.init() for: %o\nUnknown keyword '%s'",e,o)}catch(t){console.warn("Skipped Pagy.init() for: %o\n%s",e,t)}}}})();window.Pagy=e}();
|
data/lib/locales/de.yml
CHANGED
@@ -13,7 +13,7 @@ de:
|
|
13
13
|
gap: "…"
|
14
14
|
|
15
15
|
info:
|
16
|
-
no_items: "
|
16
|
+
no_items: "Keine %{item_name} gefunden"
|
17
17
|
single_page: "Zeige <b>%{count}</b> %{item_name}"
|
18
18
|
multiple_pages: "Zeige %{item_name} <b>%{from}-%{to}</b> von <b>%{count}</b> gesamt"
|
19
19
|
|
data/lib/locales/ko.yml
CHANGED
data/lib/locales/nn.yml
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# :one_other pluralization (see https://github.com/ddnexus/pagy/blob/master/lib/locales/utils/p11n.rb)
|
2
|
+
|
3
|
+
nn:
|
4
|
+
pagy:
|
5
|
+
|
6
|
+
item_name:
|
7
|
+
one: "resultat"
|
8
|
+
other: "resultat"
|
9
|
+
|
10
|
+
nav:
|
11
|
+
prev: "‹ Førre"
|
12
|
+
next: "Neste ›"
|
13
|
+
gap: "…"
|
14
|
+
|
15
|
+
info:
|
16
|
+
no_items: "Ingen %{item_name} funne"
|
17
|
+
single_page: "Viser <b>%{count}</b> %{item_name}"
|
18
|
+
multiple_pages: "Viser %{item_name} <b>%{from}-%{to}</b> av totalt <b>%{count}</b>"
|
19
|
+
|
20
|
+
combo_nav_js: "<label>Side %{page_input} av %{pages}</label>"
|
21
|
+
|
22
|
+
items_selector_js: "<label>Vis %{items_input} %{item_name} per side</label>"
|
data/lib/pagy/calendar/day.rb
CHANGED
@@ -15,14 +15,24 @@ class Pagy # :nodoc:
|
|
15
15
|
super
|
16
16
|
@initial = @starting.beginning_of_day
|
17
17
|
@final = @ending.tomorrow.beginning_of_day
|
18
|
-
@pages = @last = (@
|
18
|
+
@pages = @last = page_offset(@initial, @final)
|
19
19
|
@from = starting_time_for(@page)
|
20
20
|
@to = @from.tomorrow
|
21
21
|
end
|
22
22
|
|
23
23
|
# Starting time for the page
|
24
24
|
def starting_time_for(page)
|
25
|
-
@initial
|
25
|
+
@initial.days_since(time_offset_for(page))
|
26
|
+
end
|
27
|
+
|
28
|
+
def page_offset_at(time)
|
29
|
+
page_offset(@initial, time.beginning_of_day)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def page_offset(time_a, time_b) # remove in 6.0
|
35
|
+
(time_b.time - time_a.time).to_i / 1.day
|
26
36
|
end
|
27
37
|
end
|
28
38
|
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Pagy # :nodoc:
|
4
|
+
class Calendar # :nodoc:
|
5
|
+
# Initializes the calendar objects, reducing complexity in the extra
|
6
|
+
# The returned calendar is a simple hash of units/objects with an added helper
|
7
|
+
# returning the last_object_at(time) used in the extra
|
8
|
+
class Helper < Hash
|
9
|
+
class << self
|
10
|
+
private
|
11
|
+
|
12
|
+
def init(conf, period, params)
|
13
|
+
new.send(:init, conf, period, params)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def init(conf, period, params)
|
20
|
+
@units = Calendar::UNITS & conf.keys # get the units in time length desc order
|
21
|
+
raise ArgumentError, 'no calendar unit found in pagy_calendar @configuration' if @units.empty?
|
22
|
+
|
23
|
+
@period = period
|
24
|
+
@params = params
|
25
|
+
@page_param = conf[:pagy][:page_param] || DEFAULT[:page_param]
|
26
|
+
@conf = Marshal.load(Marshal.dump(conf)) # store a copy
|
27
|
+
@units.each do |unit| # set all the :page_param vars for later deletion
|
28
|
+
unit_page_param = :"#{unit}_#{@page_param}"
|
29
|
+
conf[unit][:page_param] = unit_page_param
|
30
|
+
conf[unit][:page] = @params[unit_page_param]
|
31
|
+
end
|
32
|
+
calendar = {}
|
33
|
+
object = nil
|
34
|
+
@units.each_with_index do |unit, index|
|
35
|
+
params_to_delete = @units[(index + 1), @units.size].map { |sub| conf[sub][:page_param] } + [@page_param]
|
36
|
+
conf[unit][:params] = lambda do |unit_params| # delete page_param from the sub-units
|
37
|
+
# Hash#except missing from ruby 2.5 baseline
|
38
|
+
params_to_delete.each { |p| unit_params.delete(p.to_s) }
|
39
|
+
unit_params
|
40
|
+
end
|
41
|
+
conf[unit][:period] = object&.send(:active_period) || @period
|
42
|
+
calendar[unit] = object = Calendar.send(:create, unit, conf[unit])
|
43
|
+
end
|
44
|
+
[replace(calendar), object.from, object.to]
|
45
|
+
end
|
46
|
+
|
47
|
+
def last_object_at(time)
|
48
|
+
conf = Marshal.load(Marshal.dump(@conf))
|
49
|
+
page_params = {}
|
50
|
+
@units.inject(nil) do |object, unit|
|
51
|
+
conf[unit][:period] = object&.send(:active_period) || @period
|
52
|
+
conf[unit][:page] = page_params[:"#{unit}_#{@page_param}"] \
|
53
|
+
= Calendar.send(:create, unit, conf[unit]).send(:page_at, time)
|
54
|
+
conf[unit][:params] ||= {}
|
55
|
+
conf[unit][:params].merge!(page_params)
|
56
|
+
Calendar.send(:create, unit, conf[unit])
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/lib/pagy/calendar/month.rb
CHANGED
@@ -22,7 +22,11 @@ class Pagy # :nodoc:
|
|
22
22
|
|
23
23
|
# Starting time for the page
|
24
24
|
def starting_time_for(page)
|
25
|
-
@initial
|
25
|
+
@initial.months_since(time_offset_for(page))
|
26
|
+
end
|
27
|
+
|
28
|
+
def page_offset_at(time)
|
29
|
+
months_in(time.beginning_of_month) - months_in(@initial)
|
26
30
|
end
|
27
31
|
|
28
32
|
private
|
@@ -29,7 +29,11 @@ class Pagy # :nodoc:
|
|
29
29
|
|
30
30
|
# Starting time for the page
|
31
31
|
def starting_time_for(page)
|
32
|
-
@initial
|
32
|
+
@initial.months_since(time_offset_for(page) * 3)
|
33
|
+
end
|
34
|
+
|
35
|
+
def page_offset_at(time)
|
36
|
+
(months_in(time.beginning_of_quarter) - months_in(@initial)) / 3
|
33
37
|
end
|
34
38
|
|
35
39
|
private
|
data/lib/pagy/calendar/week.rb
CHANGED
@@ -13,21 +13,26 @@ class Pagy # :nodoc:
|
|
13
13
|
# Setup the calendar variables
|
14
14
|
def setup_unit_vars
|
15
15
|
super
|
16
|
-
if @vars[:offset] # remove in pagy 6
|
17
|
-
Warning.warn '[PAGY WARNING] The week :offset variable has been deprecated and will be ignored from pagy 6. ' \
|
18
|
-
"Set the Date.beginning_of_week variable to be one of #{::Date::DAYS_INTO_WEEK.keys.inspect} instead."
|
19
|
-
Date.beginning_of_week = ::Date::DAYS_INTO_WEEK.keys[@vars[:offset]]
|
20
|
-
end
|
21
16
|
@initial = @starting.beginning_of_week
|
22
17
|
@final = @ending.next_week.beginning_of_week
|
23
|
-
@pages = @last = (@
|
18
|
+
@pages = @last = page_offset(@initial, @final)
|
24
19
|
@from = starting_time_for(@page)
|
25
20
|
@to = @from.next_week
|
26
21
|
end
|
27
22
|
|
28
23
|
# Starting time for the page
|
29
24
|
def starting_time_for(page)
|
30
|
-
@initial
|
25
|
+
@initial.weeks_since(time_offset_for(page))
|
26
|
+
end
|
27
|
+
|
28
|
+
def page_offset_at(time)
|
29
|
+
page_offset(@initial, time.beginning_of_week)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def page_offset(time_a, time_b) # remove in 6.0
|
35
|
+
(time_b.time - time_a.time).to_i / 1.week
|
31
36
|
end
|
32
37
|
end
|
33
38
|
end
|
data/lib/pagy/calendar/year.rb
CHANGED
@@ -22,7 +22,11 @@ class Pagy # :nodoc:
|
|
22
22
|
|
23
23
|
# Starting time for the page
|
24
24
|
def starting_time_for(page)
|
25
|
-
@initial.years_since(
|
25
|
+
@initial.years_since(time_offset_for(page))
|
26
|
+
end
|
27
|
+
|
28
|
+
def page_offset_at(time)
|
29
|
+
time.beginning_of_year.year - @initial.year
|
26
30
|
end
|
27
31
|
end
|
28
32
|
end
|
data/lib/pagy/calendar.rb
CHANGED
@@ -12,6 +12,9 @@ require 'pagy'
|
|
12
12
|
class Pagy # :nodoc:
|
13
13
|
# Base class for time units subclasses (Year, Quarter, Month, Week, Day)
|
14
14
|
class Calendar < Pagy
|
15
|
+
# Specific out of range error
|
16
|
+
class OutOfRangeError < StandardError; end
|
17
|
+
|
15
18
|
# List of units in desc order of duration. It can be used for custom units.
|
16
19
|
UNITS = %i[year quarter month week day] # rubocop:disable Style/MutableConstant
|
17
20
|
|
@@ -45,6 +48,14 @@ class Pagy # :nodoc:
|
|
45
48
|
|
46
49
|
protected
|
47
50
|
|
51
|
+
# The page that includes time
|
52
|
+
def page_at(time)
|
53
|
+
raise OutOfRangeError unless time.between?(@initial, @final)
|
54
|
+
|
55
|
+
offset = page_offset_at(time) # offset starts from 0
|
56
|
+
@order == :asc ? offset + 1 : @pages - offset
|
57
|
+
end
|
58
|
+
|
48
59
|
# Base class method for the setup of the unit variables (subclasses must implement it and call super)
|
49
60
|
def setup_unit_vars
|
50
61
|
raise VariableError.new(self, :format, 'to be a strftime format', @vars[:format]) unless @vars[:format].is_a?(String)
|
@@ -52,10 +63,9 @@ class Pagy # :nodoc:
|
|
52
63
|
unless %i[asc desc].include?(@order = @vars[:order])
|
53
64
|
|
54
65
|
@starting, @ending = @vars[:period]
|
55
|
-
raise VariableError.new(self, :period, 'to be a an Array of min and max
|
56
|
-
unless @starting.is_a?(
|
57
|
-
|
58
|
-
@with_zone = @starting.is_a?(ActiveSupport::TimeWithZone) # remove in 6.0 and replace Time in the line above
|
66
|
+
raise VariableError.new(self, :period, 'to be a an Array of min and max TimeWithZone instances', @vars[:period]) \
|
67
|
+
unless @starting.is_a?(ActiveSupport::TimeWithZone) \
|
68
|
+
&& @ending.is_a?(ActiveSupport::TimeWithZone) && @starting <= @ending
|
59
69
|
end
|
60
70
|
|
61
71
|
# Apply the strftime format to the time (overridden by the i18n extra when localization is required)
|
@@ -63,9 +73,9 @@ class Pagy # :nodoc:
|
|
63
73
|
time.strftime(opts[:format])
|
64
74
|
end
|
65
75
|
|
66
|
-
# Number of units to offset from the @initial time, in order to get the ordered starting time for the page.
|
67
|
-
# Used in starting_time_for(page)
|
68
|
-
def
|
76
|
+
# Number of time units to offset from the @initial time, in order to get the ordered starting time for the page.
|
77
|
+
# Used in starting_time_for(page) where page starts from 1 (e.g. page to starting_time means subtracting 1)
|
78
|
+
def time_offset_for(page)
|
69
79
|
@order == :asc ? page - 1 : @pages - page
|
70
80
|
end
|
71
81
|
|
data/lib/pagy/countless.rb
CHANGED
@@ -12,7 +12,7 @@ class Pagy # :nodoc:
|
|
12
12
|
p_id = %( id="#{pagy_id}") if pagy_id
|
13
13
|
link = pagy_link_proc(pagy, link_extra: %(class="page-link" #{link_extra}))
|
14
14
|
|
15
|
-
html = +%(<nav#{p_id} class="pagy-bootstrap-nav"
|
15
|
+
html = +%(<nav#{p_id} class="pagy-bootstrap-nav"><ul class="pagination">)
|
16
16
|
html << pagy_bootstrap_prev_html(pagy, link)
|
17
17
|
pagy.series(**vars).each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
|
18
18
|
html << case item
|
@@ -40,7 +40,7 @@ class Pagy # :nodoc:
|
|
40
40
|
'gap' => %(<li class="page-item gap disabled"><a href="#" class="page-link">#{pagy_t 'pagy.nav.gap'}</a></li>),
|
41
41
|
'after' => %(#{pagy_bootstrap_next_html pagy, link}</ul>) }
|
42
42
|
|
43
|
-
%(<nav#{p_id} class="#{'pagy-rjs ' if sequels.size > 1}pagy-bootstrap-nav-js"
|
43
|
+
%(<nav#{p_id} class="#{'pagy-rjs ' if sequels.size > 1}pagy-bootstrap-nav-js" #{
|
44
44
|
pagy_data(pagy, :nav, tags, sequels, pagy.label_sequels(sequels))}></nav>)
|
45
45
|
end
|
46
46
|
|
@@ -54,7 +54,7 @@ class Pagy # :nodoc:
|
|
54
54
|
p_page}" class="text-primary" style="padding: 0; border: none; text-align: center; width: #{
|
55
55
|
p_pages.to_s.length + 1}rem;">)
|
56
56
|
|
57
|
-
%(<nav#{p_id} class="pagy-bootstrap-combo-nav-js pagination"
|
57
|
+
%(<nav#{p_id} class="pagy-bootstrap-combo-nav-js pagination"><div class="btn-group" role="group" #{
|
58
58
|
pagy_data(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"'
|
data/lib/pagy/extras/calendar.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
require 'pagy/calendar'
|
5
|
+
require 'pagy/calendar/helper'
|
5
6
|
|
6
7
|
class Pagy # :nodoc:
|
7
8
|
# Add pagination filtering by calendar unit (:year, :quarter, :month, :week, :day) to the regular pagination
|
@@ -18,35 +19,17 @@ class Pagy # :nodoc:
|
|
18
19
|
raise ArgumentError, "keys must be in #{CONF_KEYS.inspect} and object values must be Hashes; got #{conf.inspect}"
|
19
20
|
end
|
20
21
|
|
21
|
-
conf[:pagy]
|
22
|
-
|
23
|
-
|
22
|
+
conf[:pagy] = {} unless conf[:pagy] # use default Pagy object when omitted
|
23
|
+
unless conf.key?(:active) && !conf[:active]
|
24
|
+
calendar, from, to = Calendar::Helper.send(:init, conf, pagy_calendar_period(collection), params)
|
25
|
+
collection = pagy_calendar_filter(collection, from, to)
|
26
|
+
end
|
27
|
+
pagy, results = send(conf[:pagy][:backend] || :pagy, collection, conf[:pagy]) # use backend: :pagy when omitted
|
24
28
|
[calendar, pagy, results]
|
25
29
|
end
|
26
30
|
|
27
|
-
|
28
|
-
|
29
|
-
units = Calendar::UNITS & conf.keys # get the units in time length desc order
|
30
|
-
raise ArgumentError, 'no calendar unit found in pagy_calendar configuration' if units.empty?
|
31
|
-
|
32
|
-
page_param = conf[:pagy][:page_param] || DEFAULT[:page_param]
|
33
|
-
units.each do |unit| # set all the :page_param vars for later deletion
|
34
|
-
unit_page_param = :"#{unit}_#{page_param}"
|
35
|
-
conf[unit][:page_param] = unit_page_param
|
36
|
-
conf[unit][:page] = params[unit_page_param]
|
37
|
-
end
|
38
|
-
calendar = {}
|
39
|
-
last_obj = nil
|
40
|
-
units.each_with_index do |unit, index|
|
41
|
-
params_to_delete = units[(index + 1), units.size].map { |sub| conf[sub][:page_param] } + [page_param]
|
42
|
-
conf[unit][:params] = lambda do |params| # delete page_param from the sub-units
|
43
|
-
params_to_delete.each { |p| params.delete(p.to_s) } # Hash#except missing from ruby 2.5 baseline
|
44
|
-
params
|
45
|
-
end
|
46
|
-
conf[unit][:period] = last_obj&.send(:active_period) || pagy_calendar_period(collection)
|
47
|
-
calendar[unit] = last_obj = Calendar.send(:create, unit, conf[unit])
|
48
|
-
end
|
49
|
-
[calendar, pagy_calendar_filter(collection, last_obj.from, last_obj.to)]
|
31
|
+
def pagy_calendar_url_at(calendar, time)
|
32
|
+
pagy_url_for(calendar.send(:last_object_at, time), 1)
|
50
33
|
end
|
51
34
|
|
52
35
|
# This method must be implemented by the application
|
@@ -3,16 +3,7 @@
|
|
3
3
|
|
4
4
|
class Pagy # :nodoc:
|
5
5
|
DEFAULT[:elasticsearch_rails_search] ||= :search
|
6
|
-
DEFAULT[:elasticsearch_rails_pagy_search] ||=
|
7
|
-
# :nocov:
|
8
|
-
Warning.warn '[PAGY WARNING] The :elasticsearch_rails_search_method variable ' \
|
9
|
-
'has been deprecated and will be ignored from pagy 6. ' \
|
10
|
-
'Use :elasticsearch_rails_pagy_search instead.'
|
11
|
-
DEFAULT[:elasticsearch_rails_search_method]
|
12
|
-
# :nocov:
|
13
|
-
else
|
14
|
-
:pagy_search
|
15
|
-
end
|
6
|
+
DEFAULT[:elasticsearch_rails_pagy_search] ||= :pagy_search
|
16
7
|
|
17
8
|
# Paginate ElasticsearchRails response objects
|
18
9
|
module ElasticsearchRailsExtra
|
@@ -12,7 +12,7 @@ class Pagy # :nodoc:
|
|
12
12
|
p_id = %( id="#{pagy_id}") if pagy_id
|
13
13
|
link = pagy_link_proc(pagy, link_extra: link_extra)
|
14
14
|
|
15
|
-
html = +%(<div#{p_id} class="pagy-materialize-nav pagination" role="navigation"
|
15
|
+
html = +%(<div#{p_id} class="pagy-materialize-nav pagination" role="navigation"><ul class="pagination">)
|
16
16
|
html << pagy_materialize_prev_html(pagy, link)
|
17
17
|
pagy.series(**vars).each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36]
|
18
18
|
html << case item
|
@@ -38,7 +38,7 @@ class Pagy # :nodoc:
|
|
38
38
|
'gap' => %(<li class="gap disabled"><a href="#">#{pagy_t 'pagy.nav.gap'}</a></li>),
|
39
39
|
'after' => %(#{pagy_materialize_next_html pagy, link}</ul>) }
|
40
40
|
|
41
|
-
%(<div#{p_id} class="#{'pagy-rjs ' if sequels.size > 1}pagy-materialize-nav-js" role="navigation"
|
41
|
+
%(<div#{p_id} class="#{'pagy-rjs ' if sequels.size > 1}pagy-materialize-nav-js" role="navigation" #{
|
42
42
|
pagy_data(pagy, :nav, tags, sequels, pagy.label_sequels(sequels))}></div>)
|
43
43
|
end
|
44
44
|
|
@@ -53,7 +53,7 @@ class Pagy # :nodoc:
|
|
53
53
|
p_page}" style="text-align: center; width: #{p_pages.to_s.length + 1}rem;">)
|
54
54
|
|
55
55
|
html = %(<ul#{p_id} class="pagy-materialize-combo-nav-js pagination chip" role="navigation")
|
56
|
-
%(#{html}
|
56
|
+
%(#{html} style="padding-right: 0" #{
|
57
57
|
pagy_data(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>#{
|
@@ -2,16 +2,8 @@
|
|
2
2
|
|
3
3
|
class Pagy # :nodoc:
|
4
4
|
DEFAULT[:meilisearch_search] ||= :ms_search
|
5
|
-
DEFAULT[:meilisearch_pagy_search] ||=
|
6
|
-
|
7
|
-
Warning.warn '[PAGY WARNING] The :meilisearch_search_method variable ' \
|
8
|
-
'has been deprecated and will be ignored from pagy 6. ' \
|
9
|
-
'Use :meilisearch_pagy_search instead.'
|
10
|
-
DEFAULT[:meilisearch_search_method]
|
11
|
-
# :nocov:
|
12
|
-
else
|
13
|
-
:pagy_search
|
14
|
-
end
|
5
|
+
DEFAULT[:meilisearch_pagy_search] ||= :pagy_search
|
6
|
+
|
15
7
|
# Paginate Meilisearch results
|
16
8
|
module MeilisearchExtra
|
17
9
|
module Meilisearch # :nodoc:
|
@@ -27,9 +19,10 @@ class Pagy # :nodoc:
|
|
27
19
|
module Pagy
|
28
20
|
# Create a Pagy object from a Meilisearch results
|
29
21
|
def new_from_meilisearch(results, vars = {})
|
30
|
-
vars[:items] = results.raw_answer['
|
31
|
-
vars[:page] =
|
32
|
-
vars[:count] = results.raw_answer['
|
22
|
+
vars[:items] = results.raw_answer['hitsPerPage']
|
23
|
+
vars[:page] = results.raw_answer['page']
|
24
|
+
vars[:count] = results.raw_answer['totalHits']
|
25
|
+
|
33
26
|
new(vars)
|
34
27
|
end
|
35
28
|
end
|
@@ -40,13 +33,14 @@ class Pagy # :nodoc:
|
|
40
33
|
|
41
34
|
# Return Pagy object and results
|
42
35
|
def pagy_meilisearch(pagy_search_args, vars = {})
|
43
|
-
model, term, options
|
44
|
-
vars
|
45
|
-
options[:
|
46
|
-
options[:
|
47
|
-
results
|
48
|
-
vars[:count]
|
49
|
-
|
36
|
+
model, term, options = pagy_search_args
|
37
|
+
vars = pagy_meilisearch_get_vars(nil, vars)
|
38
|
+
options[:hits_per_page] = vars[:items]
|
39
|
+
options[:page] = vars[:page]
|
40
|
+
results = model.send(:ms_search, term, **options)
|
41
|
+
vars[:count] = results.raw_answer['totalHits']
|
42
|
+
|
43
|
+
pagy = ::Pagy.new(vars)
|
50
44
|
# with :last_page overflow we need to re-run the method in order to get the hits
|
51
45
|
return pagy_meilisearch(pagy_search_args, vars.merge(page: pagy.page)) \
|
52
46
|
if defined?(::Pagy::OverflowExtra) && pagy.overflow? && pagy.vars[:overflow] == :last_page
|
data/lib/pagy/extras/navs.rb
CHANGED
@@ -18,7 +18,7 @@ class Pagy # :nodoc:
|
|
18
18
|
'gap' => %(<span class="page gap">#{pagy_t 'pagy.nav.gap'}</span> ),
|
19
19
|
'after' => pagy_nav_next_html(pagy, link) }
|
20
20
|
|
21
|
-
%(<nav#{p_id} class="#{'pagy-rjs ' if sequels.size > 1}pagy-nav-js pagination"
|
21
|
+
%(<nav#{p_id} class="#{'pagy-rjs ' if sequels.size > 1}pagy-nav-js pagination" #{
|
22
22
|
pagy_data(pagy, :nav, tags, sequels, pagy.label_sequels(sequels))}></nav>)
|
23
23
|
end
|
24
24
|
|
@@ -31,7 +31,7 @@ class Pagy # :nodoc:
|
|
31
31
|
input = %(<input type="number" min="1" max="#{p_pages}" value="#{
|
32
32
|
p_page}" style="padding: 0; text-align: center; width: #{p_pages.to_s.length + 1}rem;">)
|
33
33
|
|
34
|
-
%(<nav#{p_id} class="pagy-combo-nav-js pagination"
|
34
|
+
%(<nav#{p_id} class="pagy-combo-nav-js pagination" #{
|
35
35
|
pagy_data(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;">#{
|
@@ -3,16 +3,8 @@
|
|
3
3
|
|
4
4
|
class Pagy # :nodoc:
|
5
5
|
DEFAULT[:searchkick_search] ||= :search
|
6
|
-
DEFAULT[:searchkick_pagy_search] ||=
|
7
|
-
|
8
|
-
Warning.warn '[PAGY WARNING] The :searchkick_search_method variable ' \
|
9
|
-
'has been deprecated and will be ignored from pagy 6. ' \
|
10
|
-
'Use :searchkick_pagy_search instead.'
|
11
|
-
DEFAULT[:searchkick_search_method]
|
12
|
-
# :nocov:
|
13
|
-
else
|
14
|
-
:pagy_search
|
15
|
-
end
|
6
|
+
DEFAULT[:searchkick_pagy_search] ||= :pagy_search
|
7
|
+
|
16
8
|
# Paginate Searchkick::Results objects
|
17
9
|
module SearchkickExtra
|
18
10
|
module Searchkick # :nodoc:
|
@@ -8,6 +8,7 @@ class Pagy # :nodoc:
|
|
8
8
|
# even in the irb/rails console without any app or config.
|
9
9
|
module StandaloneExtra
|
10
10
|
# Extracted from Rack::Utils and reformatted for rubocop
|
11
|
+
# :nocov:
|
11
12
|
module QueryUtils
|
12
13
|
module_function
|
13
14
|
|
@@ -32,6 +33,7 @@ class Pagy # :nodoc:
|
|
32
33
|
end
|
33
34
|
end
|
34
35
|
end
|
36
|
+
# :nocov:
|
35
37
|
|
36
38
|
# Return the URL for the page. If there is no pagy.vars[:url]
|
37
39
|
# it works exactly as the regular #pagy_url_for, relying on the params method and Rack.
|
@@ -45,9 +47,8 @@ class Pagy # :nodoc:
|
|
45
47
|
params = pagy.params.is_a?(Hash) ? pagy.params.clone : {} # safe when it gets reused
|
46
48
|
params[page_param] = page
|
47
49
|
params[items_param] = vars[:items] if vars[:items_extra]
|
48
|
-
|
49
|
-
|
50
|
-
# query_string = "?#{Rack::Utils.build_nested_query(params)}" # add in 6.0
|
50
|
+
params = pagy.params.call(params) if pagy.params.is_a?(Proc)
|
51
|
+
query_string = "?#{Rack::Utils.build_nested_query(params)}"
|
51
52
|
query_string = query_string.gsub('&', '&') if html_escaped # the only unescaped entity
|
52
53
|
"#{vars[:url]}#{query_string}#{vars[:fragment]}"
|
53
54
|
end
|
data/lib/pagy/frontend.rb
CHANGED
@@ -21,7 +21,7 @@ class Pagy
|
|
21
21
|
p_prev = pagy.prev
|
22
22
|
p_next = pagy.next
|
23
23
|
|
24
|
-
html = +%(<nav#{p_id} class="pagy-nav pagination"
|
24
|
+
html = +%(<nav#{p_id} class="pagy-nav pagination">)
|
25
25
|
html << if p_prev
|
26
26
|
%(<span class="page prev">#{link.call p_prev, pagy_t('pagy.nav.prev'), 'aria-label="previous"'}</span> )
|
27
27
|
else
|
data/lib/pagy/url_helpers.rb
CHANGED
@@ -8,32 +8,17 @@ class Pagy
|
|
8
8
|
# For non-rack environments you can use the standalone extra
|
9
9
|
def pagy_url_for(pagy, page, absolute: false, html_escaped: false)
|
10
10
|
vars = pagy.vars
|
11
|
+
request_path = vars[:request_path].to_s.empty? ? request.path : vars[:request_path]
|
11
12
|
page_param = vars[:page_param].to_s
|
12
13
|
items_param = vars[:items_param].to_s
|
13
14
|
params = pagy.params.is_a?(Hash) ? pagy.params.transform_keys(&:to_s) : {}
|
14
15
|
params = request.GET.merge(params)
|
15
16
|
params[page_param] = page
|
16
17
|
params[items_param] = vars[:items] if vars[:items_extra]
|
17
|
-
|
18
|
-
|
19
|
-
# query_string = "?#{Rack::Utils.build_nested_query(params)}" # add in 6.0
|
18
|
+
params = pagy.params.call(params) if pagy.params.is_a?(Proc)
|
19
|
+
query_string = "?#{Rack::Utils.build_nested_query(params)}"
|
20
20
|
query_string = query_string.gsub('&', '&') if html_escaped # the only unescaped entity
|
21
|
-
"#{request.base_url if absolute}#{
|
22
|
-
end
|
23
|
-
|
24
|
-
private
|
25
|
-
|
26
|
-
# Transitional code to handle params deprecations. It will be removed in version 6.0
|
27
|
-
def pagy_deprecated_params(pagy, params) # remove in 6.0
|
28
|
-
if pagy.params.is_a?(Proc) # new code
|
29
|
-
pagy.params.call(params)
|
30
|
-
elsif respond_to?(:pagy_massage_params) # deprecated code
|
31
|
-
Warning.warn '[PAGY WARNING] The pagy_massage_params method has been deprecated and it will be ignored from version 6. ' \
|
32
|
-
'Set the :params variable to a Proc with the same code as the pagy_massage_params method.'
|
33
|
-
pagy_massage_params(params)
|
34
|
-
else
|
35
|
-
params # no massage params
|
36
|
-
end
|
21
|
+
"#{request.base_url if absolute}#{request_path}#{query_string}#{vars[:fragment]}"
|
37
22
|
end
|
38
23
|
end
|
39
24
|
end
|
data/lib/pagy.rb
CHANGED
@@ -5,7 +5,7 @@ require 'pathname'
|
|
5
5
|
|
6
6
|
# Core class
|
7
7
|
class Pagy
|
8
|
-
VERSION = '
|
8
|
+
VERSION = '6.0.0'
|
9
9
|
|
10
10
|
# Root pathname to get the path of Pagy files like templates or dictionaries
|
11
11
|
def self.root
|
@@ -22,9 +22,10 @@ class Pagy
|
|
22
22
|
fragment: '',
|
23
23
|
link_extra: '',
|
24
24
|
i18n_key: 'pagy.item_name',
|
25
|
-
cycle: false
|
25
|
+
cycle: false,
|
26
|
+
request_path: '' }
|
26
27
|
|
27
|
-
attr_reader :count, :page, :items, :vars, :pages, :last, :offset, :in, :from, :to, :prev, :next, :params
|
28
|
+
attr_reader :count, :page, :items, :vars, :pages, :last, :offset, :in, :from, :to, :prev, :next, :params, :request_path
|
28
29
|
|
29
30
|
# Merge and validate the options, do some simple arithmetic and set the instance variables
|
30
31
|
def initialize(vars)
|
@@ -34,6 +35,7 @@ class Pagy
|
|
34
35
|
setup_pages_var
|
35
36
|
setup_offset_var
|
36
37
|
setup_params_var
|
38
|
+
setup_request_path_var
|
37
39
|
raise OverflowError.new(self, :page, "in 1..#{@last}", @page) if @page > @last
|
38
40
|
|
39
41
|
@from = [@offset - @outset + 1, @count].min
|
@@ -92,7 +94,7 @@ class Pagy
|
|
92
94
|
def setup_vars(name_min)
|
93
95
|
name_min.each do |name, min|
|
94
96
|
raise VariableError.new(self, name, ">= #{min}", @vars[name]) \
|
95
|
-
unless @vars[name] && instance_variable_set(:"@#{name}", @vars[name].to_i) >= min
|
97
|
+
unless @vars[name]&.respond_to?(:to_i) && instance_variable_set(:"@#{name}", @vars[name].to_i) >= min
|
96
98
|
end
|
97
99
|
end
|
98
100
|
|
@@ -116,6 +118,16 @@ class Pagy
|
|
116
118
|
raise VariableError.new(self, :params, 'must be a Hash or a Proc', @params) \
|
117
119
|
unless (@params = @vars[:params]).is_a?(Hash) || @params.is_a?(Proc)
|
118
120
|
end
|
121
|
+
|
122
|
+
def setup_request_path_var
|
123
|
+
request_path = @vars[:request_path]
|
124
|
+
return if request_path.to_s.empty?
|
125
|
+
|
126
|
+
raise VariableError.new(self, :request_path, 'must be a bare path like "/foo"', request_path) \
|
127
|
+
if !request_path.start_with?('/') || request_path.include?('?')
|
128
|
+
|
129
|
+
@request_path = request_path
|
130
|
+
end
|
119
131
|
end
|
120
132
|
|
121
133
|
require 'pagy/backend'
|
@@ -6,7 +6,7 @@
|
|
6
6
|
Usage: link.call( page_number [, text [, extra_attributes_string ]])
|
7
7
|
-%>
|
8
8
|
<% link = pagy_link_proc(pagy, link_extra: 'class="page-link"') -%>
|
9
|
-
<%# -%><nav
|
9
|
+
<%# -%><nav class="pagy-bootstrap-nav" role="navigation">
|
10
10
|
<%# -%> <ul class="pagination">
|
11
11
|
<% if pagy.prev -%> <li class="page-item prev"><%== link.call(pagy.prev, pagy_t('pagy.nav.prev'), 'aria-label="previous"') %></li>
|
12
12
|
<% else -%> <li class="page-item prev disabled"><a href="#" class="page-link"><%== pagy_t('pagy.nav.prev') %></a></li>
|
data/lib/templates/nav.html.erb
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
Usage: link.call( page_number [, text [, extra_attributes_string ]])
|
7
7
|
-%>
|
8
8
|
<% link = pagy_link_proc(pagy) -%>
|
9
|
-
<%# -%><nav
|
9
|
+
<%# -%><nav class="pagy_nav pagination" role="navigation">
|
10
10
|
<% if pagy.prev -%> <span class="page prev"><%== link.call(pagy.prev, pagy_t('pagy.nav.prev'), 'aria-label="previous"') %></span>
|
11
11
|
<% else -%> <span class="page prev disabled"><%== pagy_t('pagy.nav.prev') %></span>
|
12
12
|
<% end -%>
|
data/lib/templates/nav.html.haml
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
- link = pagy_link_proc(pagy)
|
8
8
|
|
9
|
-
%nav.pagy_nav.pagination{
|
9
|
+
%nav.pagy_nav.pagination{:role => "navigation"}
|
10
10
|
|
11
11
|
- if pagy.prev
|
12
12
|
%span.page.prev!= link.call(pagy.prev, pagy_t('pagy.nav.prev'), 'aria-label="previous"')
|
data/lib/templates/nav.html.slim
CHANGED
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pagy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 6.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Domizio Demichelis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
12
|
-
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: activesupport
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
11
|
+
date: 2022-12-22 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
27
13
|
description: Agnostic pagination in plain ruby. It does it all. Better.
|
28
14
|
email:
|
29
15
|
- dd.nexus@gmail.com
|
@@ -55,6 +41,7 @@ files:
|
|
55
41
|
- lib/locales/ko.yml
|
56
42
|
- lib/locales/nb.yml
|
57
43
|
- lib/locales/nl.yml
|
44
|
+
- lib/locales/nn.yml
|
58
45
|
- lib/locales/pl.yml
|
59
46
|
- lib/locales/pt-BR.yml
|
60
47
|
- lib/locales/pt.yml
|
@@ -73,6 +60,7 @@ files:
|
|
73
60
|
- lib/pagy/backend.rb
|
74
61
|
- lib/pagy/calendar.rb
|
75
62
|
- lib/pagy/calendar/day.rb
|
63
|
+
- lib/pagy/calendar/helper.rb
|
76
64
|
- lib/pagy/calendar/month.rb
|
77
65
|
- lib/pagy/calendar/quarter.rb
|
78
66
|
- lib/pagy/calendar/week.rb
|
@@ -131,7 +119,7 @@ metadata:
|
|
131
119
|
documentation_uri: https://ddnexus.github.io/pagy
|
132
120
|
bug_tracker_uri: https://github.com/ddnexus/pagy/issues
|
133
121
|
changelog_uri: https://github.com/ddnexus/pagy/blob/master/CHANGELOG.md
|
134
|
-
|
122
|
+
support: https://github.com/ddnexus/pagy/discussions/categories/q-a
|
135
123
|
post_install_message:
|
136
124
|
rdoc_options: []
|
137
125
|
require_paths:
|
@@ -147,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
147
135
|
- !ruby/object:Gem::Version
|
148
136
|
version: '0'
|
149
137
|
requirements: []
|
150
|
-
rubygems_version: 3.2.
|
138
|
+
rubygems_version: 3.2.33
|
151
139
|
signing_key:
|
152
140
|
specification_version: 4
|
153
141
|
summary: The kick-ass pagination ruby gem
|