diff --git a/.github/ISSUE_TEMPLATE/Code.yml b/.github/ISSUE_TEMPLATE/Code.yml index 674e8eb09..5c6745edd 100644 --- a/.github/ISSUE_TEMPLATE/Code.yml +++ b/.github/ISSUE_TEMPLATE/Code.yml @@ -19,7 +19,7 @@ body: attributes: label: 👀 Before submitting... options: - - label: I upgraded to pagy version 8.1.0 + - label: I upgraded to pagy version 8.1.1 required: true - label: I searched through the [Documentation](https://ddnexus.github.io/pagy/) required: true @@ -49,7 +49,7 @@ body: and we won't install/setup/debug your partial or complete application.** - Avoid posting useless things like: + 🚩 Avoid posting USELESS THINGS like: - Code snippets / Log transcripts - Descriptions of errors / behaviors / expectations @@ -71,16 +71,20 @@ body: options: - label: I am providing a VALID code file that confirms the bug required: true + - label: I am NOT posting any of the USELESS THINGS listed above + required: true - label: I am aware that this issue will be automatically closed if the code file is missing or INVALID required: true - type: textarea id: description attributes: - label: Description + label: 💬 Description placeholder: > - 1. Describe what actually happens WITH THE CODE FILE you provided + 1. DO NOT POST any of the useless things listed above + + 2. Describe what actually happens WITH THE CODE FILE you provided - 2. Describe what should happen instead + 3. Describe what should happen instead validations: required: true diff --git a/.github/latest_release_body.md b/.github/latest_release_body.md index 3b9c28f17..d382f3db0 100644 --- a/.github/latest_release_body.md +++ b/.github/latest_release_body.md @@ -11,13 +11,11 @@ If you wish to keep your favorites alive, please, [vote here](https://github.com - Better frontend helpers - See the [CHANGELOG](https://ddnexus.github.io/pagy/changelog) for possible breaking changes -### Changes in 8.1.0 +### Changes in 8.1.1 -- Implement max_pages to limit the pagination regardless the actual count -- Improve efficiency of params in pagy_url_for -- Remove nil variables from DEFAULT -- Removed redundant @pages, aliased with @last +- Fixed broken aria-label for disabled links in Foundation (#685) +- Simplification of input variables and defaults: params and request_path are not instance variables [CHANGELOG](https://ddnexus.github.io/pagy/changelog) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3e04b944..948e6fc0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,11 @@ If you upgrade from version `< 8.0.0` see the following:
+## Version 8.1.1 + +- Fixed broken aria-label for disabled links in Foundation (#685) +- Simplification of input variables and defaults: params and request_path are not instance variables + ## Version 8.1.0 - Implement max_pages to limit the pagination regardless the actual count diff --git a/README.md b/README.md index 2c69d2d9b..750cd5e6f 100644 --- a/README.md +++ b/README.md @@ -375,7 +375,7 @@ See also the [How To Page](https://ddnexus.github.io/pagy/docs/how-to) ## Top 💯 Contributors -[](https://github.com/ddnexus)[](https://github.com/benkoshy)[](https://github.com/dependabot[bot])[](https://github.com/grosser)[](https://github.com/Earlopain)[](https://github.com/workgena)[](https://github.com/bquorning)[](https://github.com/molfar)[](https://github.com/sunny)[](https://github.com/enzinia)[](https://github.com/espen)[](https://github.com/berniechiu)[](https://github.com/renshuki)[](https://github.com/wimdavies)[](https://github.com/tiagotex)[](https://github.com/gamafranco)[](https://github.com/thomasklemm)[](https://github.com/tersor)[](https://github.com/simonneutert)[](https://github.com/rainerborene)[](https://github.com/petergoldstein)[](https://github.com/sabljak)[](https://github.com/cseelus)[](https://github.com/ashmaroli)[](https://github.com/747)[](https://github.com/WilliamHorel)[](https://github.com/okuramasafumi)[](https://github.com/olleolleolle)[](https://github.com/pedrocarmona)[](https://github.com/rafaeelaudibert)[](https://github.com/rafaelmontas)[](https://github.com/yenshirak)[](https://github.com/Tolchi)[](https://github.com/serghost)[](https://github.com/sliminas)[](https://github.com/artplan1)[](https://github.com/woller)[](https://github.com/sk8higher)[](https://github.com/muhammadnawzad)[](https://github.com/ronald)[](https://github.com/achmiral)[](https://github.com/mauro-ni)[](https://github.com/borama)[](https://github.com/creativetags)[](https://github.com/mcary)[](https://github.com/marckohlbrugge)[](https://github.com/tr4b4nt)[](https://github.com/tiejianluo)[](https://github.com/szTheory)[](https://github.com/smoothdvd)[](https://github.com/rhodes-david)[](https://github.com/radinreth)[](https://github.com/okliv)[](https://github.com/nedimdz)[](https://github.com/msdundar)[](https://github.com/m-abdurrehman)[](https://github.com/dwieringa)[](https://github.com/jyuvaraj03)[](https://github.com/YutoYasunaga)[](https://github.com/iamyujinwon)[](https://github.com/yhk1038)[](https://github.com/ya-s-u)[](https://github.com/yshmarov)[](https://github.com/thattimc)[](https://github.com/thomaschauffour)[](https://github.com/snkashis)[](https://github.com/fluser)[](https://github.com/tulak)[](https://github.com/Federico-G)[](https://github.com/egimenos)[](https://github.com/elliotlarson)[](https://github.com/hungdiep97)[](https://github.com/djpremier)[](https://github.com/davidwessman)[](https://github.com/david-a-wheeler)[](https://github.com/MrMoins)[](https://github.com/excid3)[](https://github.com/cellvinchung)[](https://github.com/brunoocasali)[](https://github.com/BrandonKlotz)[](https://github.com/Atul9)[](https://github.com/amenon)[](https://github.com/artinboghosian)[](https://github.com/antonzaharia)[](https://github.com/andrew)[](https://github.com/AliOsm)[](https://github.com/AbelToy)[](https://github.com/maful)[](https://github.com/loed-idzinga)[](https://github.com/epeirce)[](https://github.com/kobusjoubert)[](https://github.com/KevinColemanInc)[](https://github.com/neontuna)[](https://github.com/xuanxu)[](https://github.com/jpgarritano)[](https://github.com/archonic)[](https://github.com/jonasMirendo)[](https://github.com/lostapathy)[](https://github.com/jivko-chobanov)[](https://github.com/whithajess) +[](https://github.com/ddnexus)[](https://github.com/benkoshy)[](https://github.com/dependabot[bot])[](https://github.com/grosser)[](https://github.com/Earlopain)[](https://github.com/workgena)[](https://github.com/bquorning)[](https://github.com/molfar)[](https://github.com/sunny)[](https://github.com/enzinia)[](https://github.com/espen)[](https://github.com/berniechiu)[](https://github.com/renshuki)[](https://github.com/wimdavies)[](https://github.com/tiagotex)[](https://github.com/gamafranco)[](https://github.com/thomasklemm)[](https://github.com/tersor)[](https://github.com/simonneutert)[](https://github.com/rainerborene)[](https://github.com/petergoldstein)[](https://github.com/sabljak)[](https://github.com/cseelus)[](https://github.com/ashmaroli)[](https://github.com/747)[](https://github.com/WilliamHorel)[](https://github.com/okuramasafumi)[](https://github.com/olleolleolle)[](https://github.com/pedrocarmona)[](https://github.com/rafaeelaudibert)[](https://github.com/rafaelmontas)[](https://github.com/yenshirak)[](https://github.com/Tolchi)[](https://github.com/serghost)[](https://github.com/sliminas)[](https://github.com/artplan1)[](https://github.com/woller)[](https://github.com/sk8higher)[](https://github.com/muhammadnawzad)[](https://github.com/ronald)[](https://github.com/achmiral)[](https://github.com/mauro-ni)[](https://github.com/borama)[](https://github.com/creativetags)[](https://github.com/mcary)[](https://github.com/marckohlbrugge)[](https://github.com/tr4b4nt)[](https://github.com/tiejianluo)[](https://github.com/szTheory)[](https://github.com/smoothdvd)[](https://github.com/rhodes-david)[](https://github.com/radinreth)[](https://github.com/okliv)[](https://github.com/nedimdz)[](https://github.com/msdundar)[](https://github.com/m-abdurrehman)[](https://github.com/dwieringa)[](https://github.com/jyuvaraj03)[](https://github.com/YutoYasunaga)[](https://github.com/iamyujinwon)[](https://github.com/yhk1038)[](https://github.com/ya-s-u)[](https://github.com/yshmarov)[](https://github.com/thattimc)[](https://github.com/thomaschauffour)[](https://github.com/snkashis)[](https://github.com/fluser)[](https://github.com/tulak)[](https://github.com/Federico-G)[](https://github.com/egimenos)[](https://github.com/elliotlarson)[](https://github.com/hungdiep97)[](https://github.com/djpremier)[](https://github.com/davidwessman)[](https://github.com/david-a-wheeler)[](https://github.com/MrMoins)[](https://github.com/excid3)[](https://github.com/cellvinchung)[](https://github.com/brunoocasali)[](https://github.com/BrandonKlotz)[](https://github.com/Atul9)[](https://github.com/amenon)[](https://github.com/artinboghosian)[](https://github.com/antonzaharia)[](https://github.com/andrew)[](https://github.com/AliOsm)[](https://github.com/AbelToy)[](https://github.com/maful)[](https://github.com/loed-idzinga)[](https://github.com/epeirce)[](https://github.com/kobusjoubert)[](https://github.com/KevinColemanInc)[](https://github.com/neontuna)[](https://github.com/xuanxu)[](https://github.com/jpgarritano)[](https://github.com/archonic)[](https://github.com/jonasMirendo)[](https://github.com/lostapathy)[](https://github.com/jivko-chobanov)[](https://github.com/whithajess)
diff --git a/docs/api/pagy.md b/docs/api/pagy.md index 108a97308..2d082fdf4 100644 --- a/docs/api/pagy.md +++ b/docs/api/pagy.md @@ -9,8 +9,7 @@ categories: The scope of the `Pagy` class is keeping track of the all integers and variables involved in the pagination. It basically takes a few integers (such as the count of the collection, the page number, the items per page, ...), does some simple arithmetic and -creates a very small object that allocates less than 3k of -memory. +creates a very small object that allocates less than 3k of memory. ## Synopsis @@ -128,24 +127,24 @@ For example: `pagy(some_scope, items: params[:items])` will work without any add The only mandatory instance variable to be passed is the `:count` of the collection to paginate: all the other variables are optional and have sensible defaults. Of course you will also have to pass the `page` or you will always get the default page -number 1. - -| Variable | Description | Default | -|:-----------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:--------| -| `:anchor_string` | The extra attributes string (formatted as a valid HTML attribute/value pairs) added to the page links _(see [Customize the link attributes](/docs/how-to.md#customize-the-link-attributes))_ | `nil` | -| `:count` | The total count of the collection to paginate (mandatory argument) | `nil` | -| `:count_args` | The arguments passed to the `collection.count`. You may want to set it to `[]` in ORMs different than ActiveRecord | [:all] | -| `:cycle` | Enable cycling/circular/infinite pagination: `true` sets `next` to `1` when the current page is the last page | `false` | -| `:fragment` | The arbitrary fragment string (including the "#") to add to the url. _(see [Customize the params](/docs/how-to.md#customize-the-params))_ | `nil` | -| `:items` | The requested number of items for the page | `20` | -| `:jsonapi` | Enable `jsonapi` compliance of the pagy query params | `false` | -| `:max_pages` | Paginate only `:max_pages`. _(see also [Paginate only max_pages](/docs/how-to.md#paginate-only-max_pages-regardless-the-count))_ | `nil` | -| `:outset` | The initial offset of the collection to paginate: pass it only if the collection had an offset | `0` | -| `:page` | The requested page number: extracted from the `request.params`, or forced by passeing a variable | `1` | -| `:page_param` | The name of the page param name used in the url. _(see [Customize the page param](/docs/how-to.md#customize-the-page-param))_ | `:page` | -| `:params` | It can be a `Hash` of params to add to the URL, or a `Proc` that can edit/add/delete the request params _(see [Customize the params](/docs/how-to.md#customize-the-params))_ | `{}` | -| `:request_path` | Allows overriding the request path for pagination links. Pass the path only (not the absolute url). _(see [Customize the request path](/docs/how-to.md#customize-the-request-path))_ | `nil` | -| `:size` | The size of the page links to show: can be an array of 4 items or the integer of the total page size. _(see also [Control the page links](/docs/how-to.md#control-the-page-links))_ | `7` | +number `1`. For performance reasons, only the instance variables get validated. + +| Variable | Description | Default | +|:-----------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:--------| +| `:anchor_string` | The extra attributes string (formatted as a valid HTML `attr="value"`) added to the page links _(see [Customize the link attributes](/docs/how-to.md#customize-the-link-attributes))_ | `nil` | +| `:count` | The total count of the collection to paginate (mandatory argument) | `nil` | +| `:count_args` | The arguments passed to the `collection.count`. You may want to set it to `[]` in ORMs different than ActiveRecord | [:all] | +| `:cycle` | Enable cycling/circular/infinite pagination: `true` sets `next` to `1` when the current page is the last page | `false` | +| `:fragment` | The arbitrary fragment string (including the "#") to add to the url. _(see [Customize the params](/docs/how-to.md#customize-the-params))_ | `nil` | +| `:items` | The requested number of items for the page | `20` | +| `:jsonapi` | Enable `jsonapi` compliance of the pagy query params | `false` | +| `:max_pages` | Paginate only `:max_pages`. _(see [Paginate only max_pages](/docs/how-to.md#paginate-only-max_pages-regardless-the-count))_ | `nil` | +| `:outset` | The initial offset of the collection to paginate: pass it only if the collection had an offset | `0` | +| `:page` | The requested page number: extracted from the `request.params`, or forced by passeing a variable | `1` | +| `:page_param` | The name of the page param name used in the url. _(see [Customize the page param](/docs/how-to.md#customize-the-page-param))_ | `:page` | +| `:params` | It can be a `Hash` of params to add to the URL, or a `Proc` that can edit/add/delete the request params _(see [Customize the params](/docs/how-to.md#customize-the-params))_ | `nil` | +| `:request_path` | Allows overriding the `request.path` for pagination links. Pass the path only (not the absolute url). _(see [Pass the request path](/docs/how-to.md#pass-the-request-path))_ | `nil` | +| `:size` | The size of the page links to show: can be an array of 4 items or the integer of the total page size. _(see also [Control the page links](/docs/how-to.md#control-the-page-links))_ | `7` | !!! Extras may add and document their own variables @@ -153,25 +152,23 @@ Extras may add and document their own variables ### Attribute Readers -Pagy exposes all the instance variables needed for the pagination through a few attribute readers. They all return integers ( -or `nil`), except the `vars` hash: - -| Reader | Description | -|:---------------|:-------------------------------------------------------------------------------------------------------------------| -| `count` | The collection `:count` | -| `from` | The collection-position of the first item in the page (`:outset` excluded) | -| `in` | The number of the items in the page | -| `items` | The requested number of items for the page | -| `last` | The number of the last page in the collection (ordinal meaning) | -| `next` | The next page number or `nil` if there is no next page | -| `offset` | The number of items skipped from the collection in order to get the start of the current page (`:outset` included) | -| `page` | The current page number | -| `pages` | Alias for `last` (cardinal meaning) | -| `params` | The `:params` variable (`Hash` or `Proc`) | -| `prev` | The previous page number or `nil` if there is no previous page | -| `request_path` | The request path used for pagination helpers. If nil, helpers will use `request.path` | -| `to` | The collection-position of the last item in the page (`:outset` excluded) | -| `vars` | The variables hash | +Pagy exposes all its internal instance variables through a few readers. They all return integers (or `nil`), except the +`vars` hash (which contains all the input variables): + +| Reader | Description | +|:---------|:-------------------------------------------------------------------------------------------------------------------| +| `count` | The collection `:count` | +| `from` | The collection-position of the first item in the page (`:outset` excluded) | +| `in` | The number of the items in the page | +| `items` | The requested number of items for the page | +| `last` | The number of the last page in the collection (ordinal meaning) | +| `next` | The next page number or `nil` if there is no next page | +| `offset` | The number of items skipped from the collection in order to get the start of the current page (`:outset` included) | +| `page` | The current page number | +| `pages` | Alias for `last` (cardinal meaning) | +| `prev` | The previous page number or `nil` if there is no previous page | +| `to` | The collection-position of the last item in the page (`:outset` excluded) | +| `vars` | The variables hash | ### Lowest limit analysis diff --git a/e2e/snapshots.js b/e2e/snapshots.js index e0d87bb26..66c73e346 100644 --- a/e2e/snapshots.js +++ b/e2e/snapshots.js @@ -122,61 +122,61 @@ module.exports = { }, "Test /foundation-calendar #nav": { "1": "
2021-10-21 13:18:23 +0000 | 2021-10-21 23:14:50 +0000 |\n 2021-10-23 01:06:02 +0000 | 2021-10-25 18:54:35 +0000 | 2021-10-26 02:22:17\n +0000 | 2021-10-28 22:59:49 +0000 | 2021-10-30 15:02:25 +0000
", - "2": "", + "2": "", "3": "
2021-11-02 04:03:39 +0000 | 2021-11-04 22:41:23 +0000 |\n 2021-11-06 00:34:29 +0000 | 2021-11-06 23:56:16 +0000 | 2021-11-07 06:22:04\n +0000 | 2021-11-07 19:46:08 +0000 | 2021-11-08 09:31:13 +0000 | 2021-11-09\n 17:22:03 +0000 | 2021-11-11 05:29:54 +0000 | 2021-11-13 09:41:04 +0000 |\n 2021-11-16 07:48:22 +0000 | 2021-11-16 12:43:44 +0000 | 2021-11-17 16:03:07\n +0000 | 2021-11-20 02:39:01 +0000 | 2021-11-21 02:01:24 +0000 | 2021-11-23\n 19:24:43 +0000 | 2021-11-26 11:47:22 +0000 | 2021-11-28 06:30:04 +0000
", "4": "", "5": "
2022-01-01 19:18:06 +0000 | 2022-01-03 08:36:27 +0000 |\n 2022-01-03 23:31:01 +0000 | 2022-01-05 02:14:57 +0000 | 2022-01-06 09:26:03\n +0000 | 2022-01-07 20:22:22 +0000 | 2022-01-10 04:04:28 +0000 | 2022-01-11\n 17:17:55 +0000 | 2022-01-14 05:21:54 +0000 | 2022-01-16 01:18:58 +0000 |\n 2022-01-18 08:42:56 +0000 | 2022-01-19 00:45:04 +0000 | 2022-01-20 08:18:54\n +0000 | 2022-01-22 05:26:38 +0000 | 2022-01-24 10:57:50 +0000 | 2022-01-26\n 09:47:02 +0000 | 2022-01-28 20:44:30 +0000 | 2022-01-31 16:19:50 +0000
", "6": "", "7": "
2023-11-02 02:52:55 +0000 | 2023-11-02 06:00:32 +0000 |\n 2023-11-03 08:39:06 +0000 | 2023-11-04 23:51:22 +0000 | 2023-11-07 16:11:33\n +0000 | 2023-11-10 10:55:29 +0000 | 2023-11-12 01:20:18 +0000 | 2023-11-12\n 04:22:50 +0000 | 2023-11-12 08:38:58 +0000 | 2023-11-13 15:43:40 +0000
", - "8": "", + "8": "", "9": "
2023-10-01 11:54:24 +0000 | 2023-10-03 07:36:32 +0000 |\n 2023-10-05 05:13:57 +0000 | 2023-10-06 16:07:06 +0000 | 2023-10-09 00:03:52\n +0000 | 2023-10-09 02:32:01 +0000 | 2023-10-10 16:39:07 +0000 | 2023-10-12\n 13:28:16 +0000 | 2023-10-14 04:29:14 +0000 | 2023-10-17 03:30:24 +0000 |\n 2023-10-20 03:13:15 +0000 | 2023-10-20 20:47:06 +0000 | 2023-10-21 13:59:34\n +0000 | 2023-10-23 21:38:48 +0000 | 2023-10-24 06:07:13 +0000 | 2023-10-25\n 22:51:17 +0000 | 2023-10-26 21:12:50 +0000 | 2023-10-28 05:52:20 +0000 |\n 2023-10-29 22:11:01 +0000 | 2023-10-30 12:29:25 +0000
", "10": "" }, "Test /foundation-calendar #nav-js": { "1": "
2021-10-21 13:18:23 +0000 | 2021-10-21 23:14:50 +0000 |\n 2021-10-23 01:06:02 +0000 | 2021-10-25 18:54:35 +0000 | 2021-10-26 02:22:17\n +0000 | 2021-10-28 22:59:49 +0000 | 2021-10-30 15:02:25 +0000
", - "2": "", + "2": "", "3": "
2021-11-02 04:03:39 +0000 | 2021-11-04 22:41:23 +0000 |\n 2021-11-06 00:34:29 +0000 | 2021-11-06 23:56:16 +0000 | 2021-11-07 06:22:04\n +0000 | 2021-11-07 19:46:08 +0000 | 2021-11-08 09:31:13 +0000 | 2021-11-09\n 17:22:03 +0000 | 2021-11-11 05:29:54 +0000 | 2021-11-13 09:41:04 +0000 |\n 2021-11-16 07:48:22 +0000 | 2021-11-16 12:43:44 +0000 | 2021-11-17 16:03:07\n +0000 | 2021-11-20 02:39:01 +0000 | 2021-11-21 02:01:24 +0000 | 2021-11-23\n 19:24:43 +0000 | 2021-11-26 11:47:22 +0000 | 2021-11-28 06:30:04 +0000
", "4": "", "5": "
2022-01-01 19:18:06 +0000 | 2022-01-03 08:36:27 +0000 |\n 2022-01-03 23:31:01 +0000 | 2022-01-05 02:14:57 +0000 | 2022-01-06 09:26:03\n +0000 | 2022-01-07 20:22:22 +0000 | 2022-01-10 04:04:28 +0000 | 2022-01-11\n 17:17:55 +0000 | 2022-01-14 05:21:54 +0000 | 2022-01-16 01:18:58 +0000 |\n 2022-01-18 08:42:56 +0000 | 2022-01-19 00:45:04 +0000 | 2022-01-20 08:18:54\n +0000 | 2022-01-22 05:26:38 +0000 | 2022-01-24 10:57:50 +0000 | 2022-01-26\n 09:47:02 +0000 | 2022-01-28 20:44:30 +0000 | 2022-01-31 16:19:50 +0000
", "6": "", "7": "
2023-11-02 02:52:55 +0000 | 2023-11-02 06:00:32 +0000 |\n 2023-11-03 08:39:06 +0000 | 2023-11-04 23:51:22 +0000 | 2023-11-07 16:11:33\n +0000 | 2023-11-10 10:55:29 +0000 | 2023-11-12 01:20:18 +0000 | 2023-11-12\n 04:22:50 +0000 | 2023-11-12 08:38:58 +0000 | 2023-11-13 15:43:40 +0000
", - "8": "", + "8": "", "9": "
2023-10-01 11:54:24 +0000 | 2023-10-03 07:36:32 +0000 |\n 2023-10-05 05:13:57 +0000 | 2023-10-06 16:07:06 +0000 | 2023-10-09 00:03:52\n +0000 | 2023-10-09 02:32:01 +0000 | 2023-10-10 16:39:07 +0000 | 2023-10-12\n 13:28:16 +0000 | 2023-10-14 04:29:14 +0000 | 2023-10-17 03:30:24 +0000 |\n 2023-10-20 03:13:15 +0000 | 2023-10-20 20:47:06 +0000 | 2023-10-21 13:59:34\n +0000 | 2023-10-23 21:38:48 +0000 | 2023-10-24 06:07:13 +0000 | 2023-10-25\n 22:51:17 +0000 | 2023-10-26 21:12:50 +0000 | 2023-10-28 05:52:20 +0000 |\n 2023-10-29 22:11:01 +0000 | 2023-10-30 12:29:25 +0000
", "10": "" }, "Test /foundation-calendar #nav-js-responsive (500 width)": { "1": "
2021-10-21 13:18:23 +0000 | 2021-10-21 23:14:50 +0000 |\n 2021-10-23 01:06:02 +0000 | 2021-10-25 18:54:35 +0000 | 2021-10-26 02:22:17\n +0000 | 2021-10-28 22:59:49 +0000 | 2021-10-30 15:02:25 +0000
", - "2": "", + "2": "", "3": "
2021-11-02 04:03:39 +0000 | 2021-11-04 22:41:23 +0000 |\n 2021-11-06 00:34:29 +0000 | 2021-11-06 23:56:16 +0000 | 2021-11-07 06:22:04\n +0000 | 2021-11-07 19:46:08 +0000 | 2021-11-08 09:31:13 +0000 | 2021-11-09\n 17:22:03 +0000 | 2021-11-11 05:29:54 +0000 | 2021-11-13 09:41:04 +0000 |\n 2021-11-16 07:48:22 +0000 | 2021-11-16 12:43:44 +0000 | 2021-11-17 16:03:07\n +0000 | 2021-11-20 02:39:01 +0000 | 2021-11-21 02:01:24 +0000 | 2021-11-23\n 19:24:43 +0000 | 2021-11-26 11:47:22 +0000 | 2021-11-28 06:30:04 +0000
", "4": "", "5": "
2022-01-01 19:18:06 +0000 | 2022-01-03 08:36:27 +0000 |\n 2022-01-03 23:31:01 +0000 | 2022-01-05 02:14:57 +0000 | 2022-01-06 09:26:03\n +0000 | 2022-01-07 20:22:22 +0000 | 2022-01-10 04:04:28 +0000 | 2022-01-11\n 17:17:55 +0000 | 2022-01-14 05:21:54 +0000 | 2022-01-16 01:18:58 +0000 |\n 2022-01-18 08:42:56 +0000 | 2022-01-19 00:45:04 +0000 | 2022-01-20 08:18:54\n +0000 | 2022-01-22 05:26:38 +0000 | 2022-01-24 10:57:50 +0000 | 2022-01-26\n 09:47:02 +0000 | 2022-01-28 20:44:30 +0000 | 2022-01-31 16:19:50 +0000
", "6": "", "7": "
2023-11-02 02:52:55 +0000 | 2023-11-02 06:00:32 +0000 |\n 2023-11-03 08:39:06 +0000 | 2023-11-04 23:51:22 +0000 | 2023-11-07 16:11:33\n +0000 | 2023-11-10 10:55:29 +0000 | 2023-11-12 01:20:18 +0000 | 2023-11-12\n 04:22:50 +0000 | 2023-11-12 08:38:58 +0000 | 2023-11-13 15:43:40 +0000
", - "8": "", + "8": "", "9": "
2023-10-01 11:54:24 +0000 | 2023-10-03 07:36:32 +0000 |\n 2023-10-05 05:13:57 +0000 | 2023-10-06 16:07:06 +0000 | 2023-10-09 00:03:52\n +0000 | 2023-10-09 02:32:01 +0000 | 2023-10-10 16:39:07 +0000 | 2023-10-12\n 13:28:16 +0000 | 2023-10-14 04:29:14 +0000 | 2023-10-17 03:30:24 +0000 |\n 2023-10-20 03:13:15 +0000 | 2023-10-20 20:47:06 +0000 | 2023-10-21 13:59:34\n +0000 | 2023-10-23 21:38:48 +0000 | 2023-10-24 06:07:13 +0000 | 2023-10-25\n 22:51:17 +0000 | 2023-10-26 21:12:50 +0000 | 2023-10-28 05:52:20 +0000 |\n 2023-10-29 22:11:01 +0000 | 2023-10-30 12:29:25 +0000
", "10": "" }, "Test /foundation-calendar #nav-js-responsive (750 width)": { "1": "
2021-10-21 13:18:23 +0000 | 2021-10-21 23:14:50 +0000 |\n 2021-10-23 01:06:02 +0000 | 2021-10-25 18:54:35 +0000 | 2021-10-26 02:22:17\n +0000 | 2021-10-28 22:59:49 +0000 | 2021-10-30 15:02:25 +0000
", - "2": "", + "2": "", "3": "
2021-11-02 04:03:39 +0000 | 2021-11-04 22:41:23 +0000 |\n 2021-11-06 00:34:29 +0000 | 2021-11-06 23:56:16 +0000 | 2021-11-07 06:22:04\n +0000 | 2021-11-07 19:46:08 +0000 | 2021-11-08 09:31:13 +0000 | 2021-11-09\n 17:22:03 +0000 | 2021-11-11 05:29:54 +0000 | 2021-11-13 09:41:04 +0000 |\n 2021-11-16 07:48:22 +0000 | 2021-11-16 12:43:44 +0000 | 2021-11-17 16:03:07\n +0000 | 2021-11-20 02:39:01 +0000 | 2021-11-21 02:01:24 +0000 | 2021-11-23\n 19:24:43 +0000 | 2021-11-26 11:47:22 +0000 | 2021-11-28 06:30:04 +0000
", "4": "", "5": "
2022-01-01 19:18:06 +0000 | 2022-01-03 08:36:27 +0000 |\n 2022-01-03 23:31:01 +0000 | 2022-01-05 02:14:57 +0000 | 2022-01-06 09:26:03\n +0000 | 2022-01-07 20:22:22 +0000 | 2022-01-10 04:04:28 +0000 | 2022-01-11\n 17:17:55 +0000 | 2022-01-14 05:21:54 +0000 | 2022-01-16 01:18:58 +0000 |\n 2022-01-18 08:42:56 +0000 | 2022-01-19 00:45:04 +0000 | 2022-01-20 08:18:54\n +0000 | 2022-01-22 05:26:38 +0000 | 2022-01-24 10:57:50 +0000 | 2022-01-26\n 09:47:02 +0000 | 2022-01-28 20:44:30 +0000 | 2022-01-31 16:19:50 +0000
", "6": "", "7": "
2023-11-02 02:52:55 +0000 | 2023-11-02 06:00:32 +0000 |\n 2023-11-03 08:39:06 +0000 | 2023-11-04 23:51:22 +0000 | 2023-11-07 16:11:33\n +0000 | 2023-11-10 10:55:29 +0000 | 2023-11-12 01:20:18 +0000 | 2023-11-12\n 04:22:50 +0000 | 2023-11-12 08:38:58 +0000 | 2023-11-13 15:43:40 +0000
", - "8": "", + "8": "", "9": "
2023-10-01 11:54:24 +0000 | 2023-10-03 07:36:32 +0000 |\n 2023-10-05 05:13:57 +0000 | 2023-10-06 16:07:06 +0000 | 2023-10-09 00:03:52\n +0000 | 2023-10-09 02:32:01 +0000 | 2023-10-10 16:39:07 +0000 | 2023-10-12\n 13:28:16 +0000 | 2023-10-14 04:29:14 +0000 | 2023-10-17 03:30:24 +0000 |\n 2023-10-20 03:13:15 +0000 | 2023-10-20 20:47:06 +0000 | 2023-10-21 13:59:34\n +0000 | 2023-10-23 21:38:48 +0000 | 2023-10-24 06:07:13 +0000 | 2023-10-25\n 22:51:17 +0000 | 2023-10-26 21:12:50 +0000 | 2023-10-28 05:52:20 +0000 |\n 2023-10-29 22:11:01 +0000 | 2023-10-30 12:29:25 +0000
", "10": "" }, "Test /foundation-calendar #nav-js-responsive (1000 width)": { "1": "
2021-10-21 13:18:23 +0000 | 2021-10-21 23:14:50 +0000 |\n 2021-10-23 01:06:02 +0000 | 2021-10-25 18:54:35 +0000 | 2021-10-26 02:22:17\n +0000 | 2021-10-28 22:59:49 +0000 | 2021-10-30 15:02:25 +0000
", - "2": "", + "2": "", "3": "
2021-11-02 04:03:39 +0000 | 2021-11-04 22:41:23 +0000 |\n 2021-11-06 00:34:29 +0000 | 2021-11-06 23:56:16 +0000 | 2021-11-07 06:22:04\n +0000 | 2021-11-07 19:46:08 +0000 | 2021-11-08 09:31:13 +0000 | 2021-11-09\n 17:22:03 +0000 | 2021-11-11 05:29:54 +0000 | 2021-11-13 09:41:04 +0000 |\n 2021-11-16 07:48:22 +0000 | 2021-11-16 12:43:44 +0000 | 2021-11-17 16:03:07\n +0000 | 2021-11-20 02:39:01 +0000 | 2021-11-21 02:01:24 +0000 | 2021-11-23\n 19:24:43 +0000 | 2021-11-26 11:47:22 +0000 | 2021-11-28 06:30:04 +0000
", "4": "", "5": "
2022-01-01 19:18:06 +0000 | 2022-01-03 08:36:27 +0000 |\n 2022-01-03 23:31:01 +0000 | 2022-01-05 02:14:57 +0000 | 2022-01-06 09:26:03\n +0000 | 2022-01-07 20:22:22 +0000 | 2022-01-10 04:04:28 +0000 | 2022-01-11\n 17:17:55 +0000 | 2022-01-14 05:21:54 +0000 | 2022-01-16 01:18:58 +0000 |\n 2022-01-18 08:42:56 +0000 | 2022-01-19 00:45:04 +0000 | 2022-01-20 08:18:54\n +0000 | 2022-01-22 05:26:38 +0000 | 2022-01-24 10:57:50 +0000 | 2022-01-26\n 09:47:02 +0000 | 2022-01-28 20:44:30 +0000 | 2022-01-31 16:19:50 +0000
", "6": "", "7": "
2023-11-02 02:52:55 +0000 | 2023-11-02 06:00:32 +0000 |\n 2023-11-03 08:39:06 +0000 | 2023-11-04 23:51:22 +0000 | 2023-11-07 16:11:33\n +0000 | 2023-11-10 10:55:29 +0000 | 2023-11-12 01:20:18 +0000 | 2023-11-12\n 04:22:50 +0000 | 2023-11-12 08:38:58 +0000 | 2023-11-13 15:43:40 +0000
", - "8": "", + "8": "", "9": "
2023-10-01 11:54:24 +0000 | 2023-10-03 07:36:32 +0000 |\n 2023-10-05 05:13:57 +0000 | 2023-10-06 16:07:06 +0000 | 2023-10-09 00:03:52\n +0000 | 2023-10-09 02:32:01 +0000 | 2023-10-10 16:39:07 +0000 | 2023-10-12\n 13:28:16 +0000 | 2023-10-14 04:29:14 +0000 | 2023-10-17 03:30:24 +0000 |\n 2023-10-20 03:13:15 +0000 | 2023-10-20 20:47:06 +0000 | 2023-10-21 13:59:34\n +0000 | 2023-10-23 21:38:48 +0000 | 2023-10-24 06:07:13 +0000 | 2023-10-25\n 22:51:17 +0000 | 2023-10-26 21:12:50 +0000 | 2023-10-28 05:52:20 +0000 |\n 2023-10-29 22:11:01 +0000 | 2023-10-30 12:29:25 +0000
", "10": "" }, @@ -453,13 +453,13 @@ module.exports = { }, "Test /foundation #combo-nav-js": { "1": "

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20

", - "2": "", + "2": "", "3": "

21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40

", "4": "", "5": "

41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60

", "6": "", "7": "

\n 981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000\n

", - "8": "", + "8": "", "9": "

\n 961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980\n

", "10": "", "11": "

\n 941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960\n

", @@ -691,61 +691,61 @@ module.exports = { }, "Test /foundation #nav": { "1": "

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20

", - "2": "", + "2": "", "3": "

21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40

", "4": "", "5": "

41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60

", "6": "", "7": "

\n 981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000\n

", - "8": "", + "8": "", "9": "

\n 961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980\n

", "10": "" }, "Test /foundation #nav-js": { "1": "

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20

", - "2": "", + "2": "", "3": "

21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40

", "4": "", "5": "

41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60

", "6": "", "7": "

\n 981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000\n

", - "8": "", + "8": "", "9": "

\n 961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980\n

", "10": "" }, "Test /foundation #nav-js-responsive (500 width)": { "1": "

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20

", - "2": "", + "2": "", "3": "

21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40

", "4": "", "5": "

41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60

", "6": "", "7": "

\n 981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000\n

", - "8": "", + "8": "", "9": "

\n 961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980\n

", "10": "" }, "Test /foundation #nav-js-responsive (750 width)": { "1": "

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20

", - "2": "", + "2": "", "3": "

21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40

", "4": "", "5": "

41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60

", "6": "", "7": "

\n 981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000\n

", - "8": "", + "8": "", "9": "

\n 961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980\n

", "10": "" }, "Test /foundation #nav-js-responsive (1000 width)": { "1": "

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20

", - "2": "", + "2": "", "3": "

21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40

", "4": "", "5": "

41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60

", "6": "", "7": "

\n 981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000\n

", - "8": "", + "8": "", "9": "

\n 961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980\n

", "10": "" }, @@ -1022,9 +1022,9 @@ module.exports = { "3": "" }, "Test trimmed links for /foundation?trim=true&page=1": { - "1": "", - "2": "", - "3": "" + "1": "", + "2": "", + "3": "" }, "Test trimmed links for /foundation?trim=true&page=2": { "1": "", @@ -1121,8 +1121,8 @@ module.exports = { "2": "" }, "Test trimmed links for /foundation-calendar?trim=true&month_page=1": { - "1": "", - "2": "" + "1": "", + "2": "" }, "Test trimmed links for /foundation-calendar?trim=true&month_page=2": { "1": "", diff --git a/gem/apps/calendar.ru b/gem/apps/calendar.ru index 8d5bc71fe..1fca30bcf 100644 --- a/gem/apps/calendar.ru +++ b/gem/apps/calendar.ru @@ -18,7 +18,7 @@ # DOC # https://ddnexus.github.io/pagy/playground/#4-calendar-app -VERSION = '8.1.0' +VERSION = '8.1.1' require 'bundler/inline' gemfile(true) do diff --git a/gem/apps/demo.ru b/gem/apps/demo.ru index a1973474a..630c3af3e 100644 --- a/gem/apps/demo.ru +++ b/gem/apps/demo.ru @@ -18,7 +18,7 @@ # DOC # https://ddnexus.github.io/pagy/playground/#3-demo-app -VERSION = '8.1.0' +VERSION = '8.1.1' require 'bundler/inline' gemfile(true) do diff --git a/gem/apps/rails.ru b/gem/apps/rails.ru index b8d632c13..3938df44f 100644 --- a/gem/apps/rails.ru +++ b/gem/apps/rails.ru @@ -15,7 +15,7 @@ # DOC # https://ddnexus.github.io/pagy/playground/#2-rails-app -VERSION = '8.1.0' +VERSION = '8.1.1' # Gemfile require 'bundler/inline' diff --git a/gem/apps/repro.ru b/gem/apps/repro.ru index 5a19e5bfa..4c8df5664 100644 --- a/gem/apps/repro.ru +++ b/gem/apps/repro.ru @@ -15,7 +15,7 @@ # DOC # https://ddnexus.github.io/pagy/playground/#1-repro-app -VERSION = '8.1.0' +VERSION = '8.1.1' require 'bundler/inline' gemfile(true) do diff --git a/gem/bin/pagy b/gem/bin/pagy index 6a106a6ad..c3aea8a65 100755 --- a/gem/bin/pagy +++ b/gem/bin/pagy @@ -1,7 +1,7 @@ #!/usr/bin/env ruby # frozen_string_literal: true -VERSION = '8.1.0' +VERSION = '8.1.1' APPS = %w[repro rails demo calendar].freeze require_relative '../lib/optimist' diff --git a/gem/config/pagy.rb b/gem/config/pagy.rb index 34284c091..910dc9fb3 100644 --- a/gem/config/pagy.rb +++ b/gem/config/pagy.rb @@ -1,33 +1,19 @@ # frozen_string_literal: true -# Pagy initializer file (8.1.0) +# Pagy initializer file (8.1.1) # Customize only what you really need and notice that the core Pagy works also without any of the following lines. # Should you just cherry pick part of this file, please maintain the require-order of the extras -# Pagy DEFAULT Variables +# Pagy Variables # See https://ddnexus.github.io/pagy/docs/api/pagy#variables -# All the Pagy::DEFAULT are set for all the Pagy instances but can be overridden per instance by just passing them to +# You can set any pagy variable as a Pagy::DEFAULT. They can also be overridden per instance by just passing them to # Pagy.new|Pagy::Countless.new|Pagy::Calendar::*.new or any of the #pagy* controller methods - -# Instance variables -# See https://ddnexus.github.io/pagy/docs/api/pagy#instance-variables -# Pagy::DEFAULT[:page] = 1 # default -# Pagy::DEFAULT[:items] = 20 # default -# Pagy::DEFAULT[:outset] = 0 # default - -# Other Variables -# See https://ddnexus.github.io/pagy/docs/api/pagy#other-variables -# Pagy::DEFAULT[:size] = [1,4,4,1] # default in pagy < 7.0 -# Pagy::DEFAULT[:page_param] = :page # default -# Pagy::DEFAULT[:fragment] = '#fragment' # example -# Pagy::DEFAULT[:anchor_string] = 'data-remote="true"' # example -# Pagy::DEFAULT[:cycle] = true # example -# Pagy::DEFAULT[:request_path] = '/foo' # example -# Pagy::DEFAULT[:count_args] = [] # example for non AR ORMs -# Pagy::DEFAULT[:params] = {} # default -# NOTICE: The :params can be also set as a lambda e.g: -# ->(params){ params.exclude('useless').merge!('custom' => 'useful') } +# Here are the few that make more sense as DEFAULTs: +# Pagy::DEFAULT[:items] = 20 # default +# Pagy::DEFAULT[:size] = [1,4,4,1] # default in pagy < 7.0 +# Pagy::DEFAULT[:page_param] = :page # default +# Pagy::DEFAULT[:count_args] = [] # example for non AR ORMs # Extras diff --git a/gem/javascripts/pagy-dev.js b/gem/javascripts/pagy-dev.js index 5f12ca6d5..8fb2f162d 100644 --- a/gem/javascripts/pagy-dev.js +++ b/gem/javascripts/pagy-dev.js @@ -82,7 +82,7 @@ window.Pagy = (() => { const trim = (a, param) => a.replace(new RegExp(`[?&]${param}=1\\b(?!&)|\\b${param}=1&`), ""); // Public interface return { - version: "8.1.0", + version: "8.1.1", // Scan for elements with a "data-pagy" attribute and call their init functions with the decoded args init(arg) { const target = arg instanceof Element ? arg : document; @@ -111,4 +111,4 @@ window.Pagy = (() => { } }; })(); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBhZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQWtCQSxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRTtJQUNmLDRDQUE0QztJQUM1QyxNQUFNLFdBQVcsR0FBRyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUNOLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFhLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FDM0UsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFeEUsNEJBQTRCO0lBQzVCLE1BQU0sT0FBTyxHQUFHLENBQUMsRUFBYSxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFTLEVBQUUsRUFBRTtRQUNsRixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztRQUN6QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoRixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuQixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQVEsRUFBRSxJQUFXLEVBQUUsS0FBWSxFQUFTLEVBQUUsQ0FDMUQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEUsQ0FBQyxFQUFFLENB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TyxHQUFHLEVBQUUsQ0FBQztvQkFBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQTtnQkFBQyxDQUFDO1lBQzlFLENBQUM7UUFDTCxDQUFDO0tBQ0osQ0FBQztBQUNOLENBQUMsQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIE5hdkFyZ3MgPSByZWFkb25seSBbVG9rZW5zLCBTZXF1ZWxzLCBudWxsIHwgTGFiZWxTZXF1ZWxzLCBzdHJpbmc/XVxudHlwZSBDb21ib0FyZ3MgPSByZWFkb25seSBbc3RyaW5nLCBzdHJpbmc/XVxudHlwZSBTZWxlY3RvckFyZ3MgPSByZWFkb25seSBbbnVtYmVyLCBzdHJpbmcsIHN0cmluZz9dXG5cbmludGVyZmFjZSBUb2tlbnMge1xuICAgIHJlYWRvbmx5IGJlZm9yZTpzdHJpbmdcbiAgICByZWFkb25seSBhOnN0cmluZ1xuICAgIHJlYWRvbmx5IGN1cnJlbnQ6c3RyaW5nXG4gICAgcmVhZG9ubHkgZ2FwOnN0cmluZ1xuICAgIHJlYWRvbmx5IGFmdGVyOnN0cmluZ1xufVxuXG5pbnRlcmZhY2UgU2VxdWVscyB7cmVhZG9ubHkgW3dpZHRoOnN0cmluZ106KHN0cmluZyB8IG51bWJlcilbXX1cblxuaW50ZXJmYWNlIExhYmVsU2VxdWVscyB7cmVhZG9ubHkgW3dpZHRoOnN0cmluZ106c3RyaW5nW119XG5cbmludGVyZmFjZSBOYXZFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7cGFneVJlbmRlcigpOnZvaWR9XG5cbmNvbnN0IFBhZ3kgPSAoKCkgPT4ge1xuICAgIC8vIFRoZSBvYnNlcnZlciBpbnN0YW5jZSBmb3IgcmVzcG9uc2l2ZSBuYXZzXG4gICAgY29uc3QgcmpzT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoZW50cmllcyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goZSA9PiBlLnRhcmdldC5xdWVyeVNlbGVjdG9yQWxsPE5hdkVsZW1lbnQ+KFwiLnBhZ3ktcmpzXCIpLmZvckVhY2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbCA9PiBlbC5wYWd5UmVuZGVyKCkpKSk7XG5cbiAgICAvLyBJbml0IHRoZSAqX25hdl9qcyBoZWxwZXJzXG4gICAgY29uc3QgaW5pdE5hdiA9IChlbDpOYXZFbGVtZW50LCBbdG9rZW5zLCBzZXF1ZWxzLCBsYWJlbFNlcXVlbHMsIHRyaW1QYXJhbV06TmF2QXJncykgPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBlbC5wYXJlbnRFbGVtZW50ID8/IGVsO1xuICAgICAgICBjb25zdCB3aWR0aHMgPSBPYmplY3Qua2V5cyhzZXF1ZWxzKS5tYXAodyA9PiBwYXJzZUludCh3KSkuc29ydCgoYSwgYikgPT4gYiAtIGEpO1xuICAgICAgICBsZXQgbGFzdFdpZHRoID0gLTE7XG4gICAgICAgIGNvbnN0IGZpbGxJbiA9IChhOnN0cmluZywgcGFnZTpzdHJpbmcsIGxhYmVsOnN0cmluZyk6c3RyaW5nID0+XG4gICAgICAgICAgICBhLnJlcGxhY2UoL19fcGFneV9wYWdlX18vZywgcGFnZSkucmVwbGFjZSgvX19wYWd5X2xhYmVsX18vZywgbGFiZWwpO1xuICAgICAgICAoZWwucGFneVJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gd2lkdGhzLmZpbmQodyA9PiB3IDwgY29udGFpbmVyLmNsaWVudFdpZHRoKSB8fCAwO1xuICAgICAgICAgICAgaWYgKHdpZHRoID09PSBsYXN0V2lkdGgpIHsgcmV0dXJuIH0gLy8gbm8gY2hhbmdlOiBhYm9ydFxuICAgICAgICAgICAgbGV0IGh0bWwgPSB0b2tlbnMuYmVmb3JlOyAgLy8gYWxyZWFkeSB0cmltbWVkIGluIGh0bWxcbiAgICAgICAgICAgIGNvbnN0IHNlcmllcyA9IHNlcXVlbHNbd2lkdGgudG9TdHJpbmcoKV07XG4gICAgICAgICAgICBjb25zdCBsYWJlbHMgPSBsYWJlbFNlcXVlbHM/Llt3aWR0aC50b1N0cmluZygpXSA/PyBzZXJpZXMubWFwKGwgPT4gbC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaSBpbiBzZXJpZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gc2VyaWVzW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gbGFiZWxzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBmaWxsZWQ7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGxlZCA9IGZpbGxJbih0b2tlbnMuYSwgaXRlbS50b1N0cmluZygpLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtID09PSBcImdhcFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGxlZCA9IHRva2Vucy5nYXA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gYWN0aXZlIHBhZ2VcbiAgICAgICAgICAgICAgICAgICAgZmlsbGVkID0gZmlsbEluKHRva2Vucy5jdXJyZW50LCBpdGVtLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGh0bWwgKz0gKHR5cGVvZiB0cmltUGFyYW0gPT09IFwic3RyaW5nXCIgJiYgaXRlbSA9PSAxKSA/IHRyaW0oZmlsbGVkLCB0cmltUGFyYW0pIDogZmlsbGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaHRtbCArPSB0b2tlbnMuYWZ0ZXI7ICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBhbGlnbi1hc3NpZ25tZW50cy9hbGlnbi1hc3NpZ25tZW50c1xuICAgICAgICAgICAgZWwuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIGVsLmluc2VydEFkamFjZW50SFRNTChcImFmdGVyYmVnaW5cIiwgaHRtbCk7XG4gICAgICAgICAgICBsYXN0V2lkdGggPSB3aWR0aDtcbiAgICAgICAgfSkoKTtcbiAgICAgICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhcInBhZ3ktcmpzXCIpKSB7IHJqc09ic2VydmVyLm9ic2VydmUoY29udGFpbmVyKSB9XG4gICAgfTtcblxuICAgIC8vIEluaXQgdGhlICpfY29tYm9fbmF2X2pzIGhlbHBlcnNcbiAgICBjb25zdCBpbml0Q29tYm8gPSAoZWw6RWxlbWVudCwgW3VybF90b2tlbiwgdHJpbVBhcmFtXTpDb21ib0FyZ3MpID0+XG4gICAgICAgIGluaXRJbnB1dChlbCwgaW5wdXRWYWx1ZSA9PiBbaW5wdXRWYWx1ZSwgdXJsX3Rva2VuLnJlcGxhY2UoL19fcGFneV9wYWdlX18vLCBpbnB1dFZhbHVlKV0sIHRyaW1QYXJhbSk7XG5cbiAgICAvLyBJbml0IHRoZSBpdGVtc19zZWxlY3Rvcl9qcyBoZWxwZXJcbiAgICBjb25zdCBpbml0U2VsZWN0b3IgPSAoZWw6RWxlbWVudCwgW2Zyb20sIHVybF90b2tlbiwgdHJpbVBhcmFtXTpTZWxlY3RvckFyZ3MpID0+IHtcbiAgICAgICAgaW5pdElucHV0KGVsLCBpbnB1dFZhbHVlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBNYXRoLm1heChNYXRoLmNlaWwoZnJvbSAvIHBhcnNlSW50KGlucHV0VmFsdWUpKSwgMSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHVybF90b2tlbi5yZXBsYWNlKC9fX3BhZ3lfcGFnZV9fLywgcGFnZSkucmVwbGFjZSgvX19wYWd5X2l0ZW1zX18vLCBpbnB1dFZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBbcGFnZSwgdXJsXTtcbiAgICAgICAgfSwgdHJpbVBhcmFtKTtcbiAgICB9O1xuXG4gICAgLy8gSW5pdCB0aGUgaW5wdXQgZWxlbWVudFxuICAgIGNvbnN0IGluaXRJbnB1dCA9IChlbDpFbGVtZW50LCBnZXRWYXJzOih2OnN0cmluZykgPT4gW3N0cmluZywgc3RyaW5nXSwgdHJpbVBhcmFtPzpzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBlbC5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIikgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgY29uc3QgbGluayA9IGVsLnF1ZXJ5U2VsZWN0b3IoXCJhXCIpIGFzIEhUTUxBbmNob3JFbGVtZW50O1xuICAgICAgICBjb25zdCBpbml0aWFsID0gaW5wdXQudmFsdWU7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC52YWx1ZSA9PT0gaW5pdGlhbCkgeyByZXR1cm4gfSAgLy8gbm90IGNoYW5nZWRcbiAgICAgICAgICAgIGNvbnN0IFttaW4sIHZhbCwgbWF4XSA9IFtpbnB1dC5taW4sIGlucHV0LnZhbHVlLCBpbnB1dC5tYXhdLm1hcChuID0+IHBhcnNlSW50KG4pIHx8IDApO1xuICAgICAgICAgICAgaWYgKHZhbCA8IG1pbiB8fCB2YWwgPiBtYXgpIHsgIC8vIHJlc2V0IGludmFsaWQvb3V0LW9mLXJhbmdlXG4gICAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSBpbml0aWFsO1xuICAgICAgICAgICAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBbcGFnZSwgdXJsXSA9IGdldFZhcnMoaW5wdXQudmFsdWUpOyAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRyaW1QYXJhbSA9PT0gXCJzdHJpbmdcIiAmJiBwYWdlID09PSBcIjFcIikgeyB1cmwgPSB0cmltKHVybCwgdHJpbVBhcmFtKSB9XG4gICAgICAgICAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgICAgICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICAgIH07XG4gICAgICAgIFtcImNoYW5nZVwiLCBcImZvY3VzXCJdLmZvckVhY2goZSA9PiBpbnB1dC5hZGRFdmVudExpc3RlbmVyKGUsIGlucHV0LnNlbGVjdCkpOyAgICAgICAgLy8gYXV0by1zZWxlY3RcbiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3Vzb3V0XCIsIGFjdGlvbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJpZ2dlciBhY3Rpb25cbiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXByZXNzXCIsIGUgPT4geyBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikgeyBhY3Rpb24oKSB9IH0pOyAvLyB0cmlnZ2VyIGFjdGlvblxuICAgIH07XG5cbiAgICAvLyBUcmltIHRoZSAke3BhZ2UtcGFyYW19PTEgcGFyYW1zIGluIGxpbmtzXG4gICAgY29uc3QgdHJpbSA9IChhOnN0cmluZywgcGFyYW06c3RyaW5nKSA9PlxuICAgICAgICBhLnJlcGxhY2UobmV3IFJlZ0V4cChgWz8mXSR7cGFyYW19PTFcXFxcYig/ISYpfFxcXFxiJHtwYXJhbX09MSZgKSwgXCJcIik7XG5cbiAgICAvLyBQdWJsaWMgaW50ZXJmYWNlXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmVyc2lvbjogXCI4LjEuMFwiLFxuXG4gICAgICAgIC8vIFNjYW4gZm9yIGVsZW1lbnRzIHdpdGggYSBcImRhdGEtcGFneVwiIGF0dHJpYnV0ZSBhbmQgY2FsbCB0aGVpciBpbml0IGZ1bmN0aW9ucyB3aXRoIHRoZSBkZWNvZGVkIGFyZ3NcbiAgICAgICAgaW5pdChhcmc/OkVsZW1lbnQgfCBuZXZlcikge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYXJnIGluc3RhbmNlb2YgRWxlbWVudCA/IGFyZyA6IGRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSB0YXJnZXQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLXBhZ3ldXCIpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbCBvZiBlbGVtZW50cykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4YXJyYXkgPSBVaW50OEFycmF5LmZyb20oYXRvYihlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXBhZ3lcIikgYXMgc3RyaW5nKSwgYyA9PiBjLmNoYXJDb2RlQXQoMCkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBba2V5d29yZCwgLi4uYXJnc10gPSBKU09OLnBhcnNlKChuZXcgVGV4dERlY29kZXIoKSkuZGVjb2RlKHVpbnQ4YXJyYXkpKTsgLy8gYmFzZTY0LXV0ZjggLT4gSlNPTiAtPiBBcnJheVxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5d29yZCA9PT0gXCJuYXZcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdE5hdihlbCBhcyBOYXZFbGVtZW50LCBhcmdzIGFzIE5hdkFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleXdvcmQgPT09IFwiY29tYm9cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdENvbWJvKGVsLCBhcmdzIGFzIENvbWJvQXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5d29yZCA9PT0gXCJzZWxlY3RvclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0U2VsZWN0b3IoZWwsIGFyZ3MgYXMgU2VsZWN0b3JBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlNraXBwZWQgUGFneS5pbml0KCkgZm9yOiAlb1xcblVua25vd24ga2V5d29yZCAnJXMnXCIsIGVsLCBrZXl3b3JkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgeyBjb25zb2xlLndhcm4oXCJTa2lwcGVkIFBhZ3kuaW5pdCgpIGZvcjogJW9cXG4lc1wiLCBlbCwgZXJyKSB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufSkoKTtcbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBhZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQWtCQSxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRTtJQUNmLDRDQUE0QztJQUM1QyxNQUFNLFdBQVcsR0FBRyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUNOLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFhLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FDM0UsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFeEUsNEJBQTRCO0lBQzVCLE1BQU0sT0FBTyxHQUFHLENBQUMsRUFBYSxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFTLEVBQUUsRUFBRTtRQUNsRixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztRQUN6QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoRixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuQixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQVEsRUFBRSxJQUFXLEVBQUUsS0FBWSxFQUFTLEVBQUUsQ0FDMUQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEUsQ0FBQyxFQUFFLENB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TyxHQUFHLEVBQUUsQ0FBQztvQkFBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQTtnQkFBQyxDQUFDO1lBQzlFLENBQUM7UUFDTCxDQUFDO0tBQ0osQ0FBQztBQUNOLENBQUMsQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIE5hdkFyZ3MgPSByZWFkb25seSBbVG9rZW5zLCBTZXF1ZWxzLCBudWxsIHwgTGFiZWxTZXF1ZWxzLCBzdHJpbmc/XVxudHlwZSBDb21ib0FyZ3MgPSByZWFkb25seSBbc3RyaW5nLCBzdHJpbmc/XVxudHlwZSBTZWxlY3RvckFyZ3MgPSByZWFkb25seSBbbnVtYmVyLCBzdHJpbmcsIHN0cmluZz9dXG5cbmludGVyZmFjZSBUb2tlbnMge1xuICAgIHJlYWRvbmx5IGJlZm9yZTpzdHJpbmdcbiAgICByZWFkb25seSBhOnN0cmluZ1xuICAgIHJlYWRvbmx5IGN1cnJlbnQ6c3RyaW5nXG4gICAgcmVhZG9ubHkgZ2FwOnN0cmluZ1xuICAgIHJlYWRvbmx5IGFmdGVyOnN0cmluZ1xufVxuXG5pbnRlcmZhY2UgU2VxdWVscyB7cmVhZG9ubHkgW3dpZHRoOnN0cmluZ106KHN0cmluZyB8IG51bWJlcilbXX1cblxuaW50ZXJmYWNlIExhYmVsU2VxdWVscyB7cmVhZG9ubHkgW3dpZHRoOnN0cmluZ106c3RyaW5nW119XG5cbmludGVyZmFjZSBOYXZFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7cGFneVJlbmRlcigpOnZvaWR9XG5cbmNvbnN0IFBhZ3kgPSAoKCkgPT4ge1xuICAgIC8vIFRoZSBvYnNlcnZlciBpbnN0YW5jZSBmb3IgcmVzcG9uc2l2ZSBuYXZzXG4gICAgY29uc3QgcmpzT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoZW50cmllcyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goZSA9PiBlLnRhcmdldC5xdWVyeVNlbGVjdG9yQWxsPE5hdkVsZW1lbnQ+KFwiLnBhZ3ktcmpzXCIpLmZvckVhY2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbCA9PiBlbC5wYWd5UmVuZGVyKCkpKSk7XG5cbiAgICAvLyBJbml0IHRoZSAqX25hdl9qcyBoZWxwZXJzXG4gICAgY29uc3QgaW5pdE5hdiA9IChlbDpOYXZFbGVtZW50LCBbdG9rZW5zLCBzZXF1ZWxzLCBsYWJlbFNlcXVlbHMsIHRyaW1QYXJhbV06TmF2QXJncykgPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBlbC5wYXJlbnRFbGVtZW50ID8/IGVsO1xuICAgICAgICBjb25zdCB3aWR0aHMgPSBPYmplY3Qua2V5cyhzZXF1ZWxzKS5tYXAodyA9PiBwYXJzZUludCh3KSkuc29ydCgoYSwgYikgPT4gYiAtIGEpO1xuICAgICAgICBsZXQgbGFzdFdpZHRoID0gLTE7XG4gICAgICAgIGNvbnN0IGZpbGxJbiA9IChhOnN0cmluZywgcGFnZTpzdHJpbmcsIGxhYmVsOnN0cmluZyk6c3RyaW5nID0+XG4gICAgICAgICAgICBhLnJlcGxhY2UoL19fcGFneV9wYWdlX18vZywgcGFnZSkucmVwbGFjZSgvX19wYWd5X2xhYmVsX18vZywgbGFiZWwpO1xuICAgICAgICAoZWwucGFneVJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gd2lkdGhzLmZpbmQodyA9PiB3IDwgY29udGFpbmVyLmNsaWVudFdpZHRoKSB8fCAwO1xuICAgICAgICAgICAgaWYgKHdpZHRoID09PSBsYXN0V2lkdGgpIHsgcmV0dXJuIH0gLy8gbm8gY2hhbmdlOiBhYm9ydFxuICAgICAgICAgICAgbGV0IGh0bWwgPSB0b2tlbnMuYmVmb3JlOyAgLy8gYWxyZWFkeSB0cmltbWVkIGluIGh0bWxcbiAgICAgICAgICAgIGNvbnN0IHNlcmllcyA9IHNlcXVlbHNbd2lkdGgudG9TdHJpbmcoKV07XG4gICAgICAgICAgICBjb25zdCBsYWJlbHMgPSBsYWJlbFNlcXVlbHM/Llt3aWR0aC50b1N0cmluZygpXSA/PyBzZXJpZXMubWFwKGwgPT4gbC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaSBpbiBzZXJpZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gc2VyaWVzW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gbGFiZWxzW2ldO1xuICAgICAgICAgICAgICAgIGxldCBmaWxsZWQ7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGxlZCA9IGZpbGxJbih0b2tlbnMuYSwgaXRlbS50b1N0cmluZygpLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtID09PSBcImdhcFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGxlZCA9IHRva2Vucy5nYXA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gYWN0aXZlIHBhZ2VcbiAgICAgICAgICAgICAgICAgICAgZmlsbGVkID0gZmlsbEluKHRva2Vucy5jdXJyZW50LCBpdGVtLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGh0bWwgKz0gKHR5cGVvZiB0cmltUGFyYW0gPT09IFwic3RyaW5nXCIgJiYgaXRlbSA9PSAxKSA/IHRyaW0oZmlsbGVkLCB0cmltUGFyYW0pIDogZmlsbGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaHRtbCArPSB0b2tlbnMuYWZ0ZXI7ICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBhbGlnbi1hc3NpZ25tZW50cy9hbGlnbi1hc3NpZ25tZW50c1xuICAgICAgICAgICAgZWwuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIGVsLmluc2VydEFkamFjZW50SFRNTChcImFmdGVyYmVnaW5cIiwgaHRtbCk7XG4gICAgICAgICAgICBsYXN0V2lkdGggPSB3aWR0aDtcbiAgICAgICAgfSkoKTtcbiAgICAgICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhcInBhZ3ktcmpzXCIpKSB7IHJqc09ic2VydmVyLm9ic2VydmUoY29udGFpbmVyKSB9XG4gICAgfTtcblxuICAgIC8vIEluaXQgdGhlICpfY29tYm9fbmF2X2pzIGhlbHBlcnNcbiAgICBjb25zdCBpbml0Q29tYm8gPSAoZWw6RWxlbWVudCwgW3VybF90b2tlbiwgdHJpbVBhcmFtXTpDb21ib0FyZ3MpID0+XG4gICAgICAgIGluaXRJbnB1dChlbCwgaW5wdXRWYWx1ZSA9PiBbaW5wdXRWYWx1ZSwgdXJsX3Rva2VuLnJlcGxhY2UoL19fcGFneV9wYWdlX18vLCBpbnB1dFZhbHVlKV0sIHRyaW1QYXJhbSk7XG5cbiAgICAvLyBJbml0IHRoZSBpdGVtc19zZWxlY3Rvcl9qcyBoZWxwZXJcbiAgICBjb25zdCBpbml0U2VsZWN0b3IgPSAoZWw6RWxlbWVudCwgW2Zyb20sIHVybF90b2tlbiwgdHJpbVBhcmFtXTpTZWxlY3RvckFyZ3MpID0+IHtcbiAgICAgICAgaW5pdElucHV0KGVsLCBpbnB1dFZhbHVlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBNYXRoLm1heChNYXRoLmNlaWwoZnJvbSAvIHBhcnNlSW50KGlucHV0VmFsdWUpKSwgMSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHVybF90b2tlbi5yZXBsYWNlKC9fX3BhZ3lfcGFnZV9fLywgcGFnZSkucmVwbGFjZSgvX19wYWd5X2l0ZW1zX18vLCBpbnB1dFZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBbcGFnZSwgdXJsXTtcbiAgICAgICAgfSwgdHJpbVBhcmFtKTtcbiAgICB9O1xuXG4gICAgLy8gSW5pdCB0aGUgaW5wdXQgZWxlbWVudFxuICAgIGNvbnN0IGluaXRJbnB1dCA9IChlbDpFbGVtZW50LCBnZXRWYXJzOih2OnN0cmluZykgPT4gW3N0cmluZywgc3RyaW5nXSwgdHJpbVBhcmFtPzpzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBlbC5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIikgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgY29uc3QgbGluayA9IGVsLnF1ZXJ5U2VsZWN0b3IoXCJhXCIpIGFzIEhUTUxBbmNob3JFbGVtZW50O1xuICAgICAgICBjb25zdCBpbml0aWFsID0gaW5wdXQudmFsdWU7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC52YWx1ZSA9PT0gaW5pdGlhbCkgeyByZXR1cm4gfSAgLy8gbm90IGNoYW5nZWRcbiAgICAgICAgICAgIGNvbnN0IFttaW4sIHZhbCwgbWF4XSA9IFtpbnB1dC5taW4sIGlucHV0LnZhbHVlLCBpbnB1dC5tYXhdLm1hcChuID0+IHBhcnNlSW50KG4pIHx8IDApO1xuICAgICAgICAgICAgaWYgKHZhbCA8IG1pbiB8fCB2YWwgPiBtYXgpIHsgIC8vIHJlc2V0IGludmFsaWQvb3V0LW9mLXJhbmdlXG4gICAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSBpbml0aWFsO1xuICAgICAgICAgICAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBbcGFnZSwgdXJsXSA9IGdldFZhcnMoaW5wdXQudmFsdWUpOyAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRyaW1QYXJhbSA9PT0gXCJzdHJpbmdcIiAmJiBwYWdlID09PSBcIjFcIikgeyB1cmwgPSB0cmltKHVybCwgdHJpbVBhcmFtKSB9XG4gICAgICAgICAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgICAgICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICAgIH07XG4gICAgICAgIFtcImNoYW5nZVwiLCBcImZvY3VzXCJdLmZvckVhY2goZSA9PiBpbnB1dC5hZGRFdmVudExpc3RlbmVyKGUsIGlucHV0LnNlbGVjdCkpOyAgICAgICAgLy8gYXV0by1zZWxlY3RcbiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3Vzb3V0XCIsIGFjdGlvbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJpZ2dlciBhY3Rpb25cbiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXByZXNzXCIsIGUgPT4geyBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikgeyBhY3Rpb24oKSB9IH0pOyAvLyB0cmlnZ2VyIGFjdGlvblxuICAgIH07XG5cbiAgICAvLyBUcmltIHRoZSAke3BhZ2UtcGFyYW19PTEgcGFyYW1zIGluIGxpbmtzXG4gICAgY29uc3QgdHJpbSA9IChhOnN0cmluZywgcGFyYW06c3RyaW5nKSA9PlxuICAgICAgICBhLnJlcGxhY2UobmV3IFJlZ0V4cChgWz8mXSR7cGFyYW19PTFcXFxcYig/ISYpfFxcXFxiJHtwYXJhbX09MSZgKSwgXCJcIik7XG5cbiAgICAvLyBQdWJsaWMgaW50ZXJmYWNlXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmVyc2lvbjogXCI4LjEuMVwiLFxuXG4gICAgICAgIC8vIFNjYW4gZm9yIGVsZW1lbnRzIHdpdGggYSBcImRhdGEtcGFneVwiIGF0dHJpYnV0ZSBhbmQgY2FsbCB0aGVpciBpbml0IGZ1bmN0aW9ucyB3aXRoIHRoZSBkZWNvZGVkIGFyZ3NcbiAgICAgICAgaW5pdChhcmc/OkVsZW1lbnQgfCBuZXZlcikge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYXJnIGluc3RhbmNlb2YgRWxlbWVudCA/IGFyZyA6IGRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSB0YXJnZXQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLXBhZ3ldXCIpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbCBvZiBlbGVtZW50cykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4YXJyYXkgPSBVaW50OEFycmF5LmZyb20oYXRvYihlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXBhZ3lcIikgYXMgc3RyaW5nKSwgYyA9PiBjLmNoYXJDb2RlQXQoMCkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBba2V5d29yZCwgLi4uYXJnc10gPSBKU09OLnBhcnNlKChuZXcgVGV4dERlY29kZXIoKSkuZGVjb2RlKHVpbnQ4YXJyYXkpKTsgLy8gYmFzZTY0LXV0ZjggLT4gSlNPTiAtPiBBcnJheVxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5d29yZCA9PT0gXCJuYXZcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdE5hdihlbCBhcyBOYXZFbGVtZW50LCBhcmdzIGFzIE5hdkFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleXdvcmQgPT09IFwiY29tYm9cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdENvbWJvKGVsLCBhcmdzIGFzIENvbWJvQXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5d29yZCA9PT0gXCJzZWxlY3RvclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0U2VsZWN0b3IoZWwsIGFyZ3MgYXMgU2VsZWN0b3JBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlNraXBwZWQgUGFneS5pbml0KCkgZm9yOiAlb1xcblVua25vd24ga2V5d29yZCAnJXMnXCIsIGVsLCBrZXl3b3JkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgeyBjb25zb2xlLndhcm4oXCJTa2lwcGVkIFBhZ3kuaW5pdCgpIGZvcjogJW9cXG4lc1wiLCBlbCwgZXJyKSB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufSkoKTtcbiJdfQ== \ No newline at end of file diff --git a/gem/javascripts/pagy-module.js b/gem/javascripts/pagy-module.js index 3b70e96e8..dd4ca2e4c 100644 --- a/gem/javascripts/pagy-module.js +++ b/gem/javascripts/pagy-module.js @@ -81,7 +81,7 @@ const Pagy = (() => { const trim = (a, param) => a.replace(new RegExp(`[?&]${param}=1\\b(?!&)|\\b${param}=1&`), ""); // Public interface return { - version: "8.1.0", + version: "8.1.1", // Scan for elements with a "data-pagy" attribute and call their init functions with the decoded args init(arg) { const target = arg instanceof Element ? arg : document; diff --git a/gem/javascripts/pagy.js b/gem/javascripts/pagy.js index 059c1ccb1..220a81aad 100644 --- a/gem/javascripts/pagy.js +++ b/gem/javascripts/pagy.js @@ -1 +1 @@ -!function(){let e=(()=>{let e=new ResizeObserver(e=>e.forEach(e=>e.target.querySelectorAll(".pagy-rjs").forEach(e=>e.pagyRender()))),t=(t,[r,a,n,l])=>{let i=t.parentElement??t,c=Object.keys(a).map(e=>parseInt(e)).sort((e,t)=>t-e),p=-1,s=(e,t,r)=>e.replace(/__pagy_page__/g,t).replace(/__pagy_label__/g,r);(t.pagyRender=function(){let e=c.find(e=>ee.toString());for(let e in y){let t;let a=y[e],n=f[e];t="number"==typeof a?s(r.a,a.toString(),n):"gap"===a?r.gap:s(r.current,a,n),g+="string"==typeof l&&1==a?o(t,l):t}g+=r.after,t.innerHTML="",t.insertAdjacentHTML("afterbegin",g),p=e})(),t.classList.contains("pagy-rjs")&&e.observe(i)},r=(e,[t,r])=>n(e,e=>[e,t.replace(/__pagy_page__/,e)],r),a=(e,[t,r,a])=>{n(e,e=>{let a=Math.max(Math.ceil(t/parseInt(e)),1).toString(),n=r.replace(/__pagy_page__/,a).replace(/__pagy_items__/,e);return[a,n]},a)},n=(e,t,r)=>{let a=e.querySelector("input"),n=e.querySelector("a"),l=a.value,i=function(){if(a.value===l)return;let[e,i,c]=[a.min,a.value,a.max].map(e=>parseInt(e)||0);if(ic){a.value=l,a.select();return}let[p,s]=t(a.value);"string"==typeof r&&"1"===p&&(s=o(s,r)),n.href=s,n.click()};["change","focus"].forEach(e=>a.addEventListener(e,a.select)),a.addEventListener("focusout",i),a.addEventListener("keypress",e=>{"Enter"===e.key&&i()})},o=(e,t)=>e.replace(RegExp(`[?&]${t}=1\\b(?!&)|\\b${t}=1&`),"");return{version:"8.1.0",init(e){for(let n of(e instanceof Element?e:document).querySelectorAll("[data-pagy]"))try{let e=Uint8Array.from(atob(n.getAttribute("data-pagy")),e=>e.charCodeAt(0)),[o,...l]=JSON.parse(new TextDecoder().decode(e));"nav"===o?t(n,l):"combo"===o?r(n,l):"selector"===o?a(n,l):console.warn("Skipped Pagy.init() for: %o\nUnknown keyword '%s'",n,o)}catch(e){console.warn("Skipped Pagy.init() for: %o\n%s",n,e)}}}})();window.Pagy=e}(); \ No newline at end of file +!function(){let e=(()=>{let e=new ResizeObserver(e=>e.forEach(e=>e.target.querySelectorAll(".pagy-rjs").forEach(e=>e.pagyRender()))),t=(t,[r,a,n,l])=>{let i=t.parentElement??t,c=Object.keys(a).map(e=>parseInt(e)).sort((e,t)=>t-e),p=-1,s=(e,t,r)=>e.replace(/__pagy_page__/g,t).replace(/__pagy_label__/g,r);(t.pagyRender=function(){let e=c.find(e=>ee.toString());for(let e in y){let t;let a=y[e],n=f[e];t="number"==typeof a?s(r.a,a.toString(),n):"gap"===a?r.gap:s(r.current,a,n),g+="string"==typeof l&&1==a?o(t,l):t}g+=r.after,t.innerHTML="",t.insertAdjacentHTML("afterbegin",g),p=e})(),t.classList.contains("pagy-rjs")&&e.observe(i)},r=(e,[t,r])=>n(e,e=>[e,t.replace(/__pagy_page__/,e)],r),a=(e,[t,r,a])=>{n(e,e=>{let a=Math.max(Math.ceil(t/parseInt(e)),1).toString(),n=r.replace(/__pagy_page__/,a).replace(/__pagy_items__/,e);return[a,n]},a)},n=(e,t,r)=>{let a=e.querySelector("input"),n=e.querySelector("a"),l=a.value,i=function(){if(a.value===l)return;let[e,i,c]=[a.min,a.value,a.max].map(e=>parseInt(e)||0);if(ic){a.value=l,a.select();return}let[p,s]=t(a.value);"string"==typeof r&&"1"===p&&(s=o(s,r)),n.href=s,n.click()};["change","focus"].forEach(e=>a.addEventListener(e,a.select)),a.addEventListener("focusout",i),a.addEventListener("keypress",e=>{"Enter"===e.key&&i()})},o=(e,t)=>e.replace(RegExp(`[?&]${t}=1\\b(?!&)|\\b${t}=1&`),"");return{version:"8.1.1",init(e){for(let n of(e instanceof Element?e:document).querySelectorAll("[data-pagy]"))try{let e=Uint8Array.from(atob(n.getAttribute("data-pagy")),e=>e.charCodeAt(0)),[o,...l]=JSON.parse(new TextDecoder().decode(e));"nav"===o?t(n,l):"combo"===o?r(n,l):"selector"===o?a(n,l):console.warn("Skipped Pagy.init() for: %o\nUnknown keyword '%s'",n,o)}catch(e){console.warn("Skipped Pagy.init() for: %o\n%s",n,e)}}}})();window.Pagy=e}(); \ No newline at end of file diff --git a/gem/lib/pagy.rb b/gem/lib/pagy.rb index b31f731e1..68e7ba0f8 100644 --- a/gem/lib/pagy.rb +++ b/gem/lib/pagy.rb @@ -5,7 +5,7 @@ # Core class class Pagy - VERSION = '8.1.0' + VERSION = '8.1.1' # Gem root pathname to get the path of Pagy files stylesheets, javascripts, apps, locales, etc. def self.root @@ -19,10 +19,9 @@ def self.root size: 7, cycle: false, count_args: [:all], # AR friendly - params: {}, page_param: :page } - attr_reader :count, :page, :items, :vars, :last, :offset, :in, :from, :to, :prev, :next, :params, :request_path + attr_reader :count, :page, :items, :vars, :last, :offset, :in, :from, :to, :prev, :next alias pages last # Merge and validate the options, do some simple arithmetic and set the instance variables @@ -34,9 +33,6 @@ def initialize(vars) raise OverflowError.new(self, :page, "in 1..#{@last}", @page) if @page > @last setup_offset_var - setup_params_var - setup_request_path_var - @from = [@offset - @outset + 1, @count].min @to = [@offset - @outset + @items, @count].min @in = [@to - @from + 1, @count].min @@ -116,7 +112,7 @@ def setup_items_var setup_vars(items: 1) end - # Setup @last and @last (overridden by the gearbox extra) + # Setup @last (overridden by the gearbox extra) def setup_last_var @last = [(@count.to_f / @items).ceil, 1].max @last = vars[:max_pages] if vars[:max_pages] && @last > vars[:max_pages] @@ -127,22 +123,6 @@ def setup_last_var def setup_offset_var @offset = (@items * (@page - 1)) + @outset # may be already set from gear_box end - - # Setup and validate @params - def setup_params_var - raise VariableError.new(self, :params, 'must be a Hash or a Proc', @params) \ - unless (@params = @vars[:params]).is_a?(Hash) || @params.is_a?(Proc) - end - - def setup_request_path_var - request_path = @vars[:request_path] - return if request_path.to_s.empty? - - raise VariableError.new(self, :request_path, 'must be a bare path like "/foo"', request_path) \ - if !request_path.start_with?('/') || request_path.include?('?') - - @request_path = request_path - end end require_relative 'pagy/backend' diff --git a/gem/lib/pagy/calendar.rb b/gem/lib/pagy/calendar.rb index d9827a871..0e4811f8e 100644 --- a/gem/lib/pagy/calendar.rb +++ b/gem/lib/pagy/calendar.rb @@ -28,7 +28,6 @@ def initialize(vars) # rubocop:disable Lint/MissingSuper normalize_vars(vars) # general default setup_vars(page: 1) setup_unit_vars - setup_params_var raise OverflowError.new(self, :page, "in 1..#{@last}", @page) if @page > @last @prev = (@page - 1 unless @page == 1) diff --git a/gem/lib/pagy/countless.rb b/gem/lib/pagy/countless.rb index cf2389bf3..b442c1f11 100644 --- a/gem/lib/pagy/countless.rb +++ b/gem/lib/pagy/countless.rb @@ -12,7 +12,6 @@ def initialize(vars = {}) # rubocop:disable Lint/MissingSuper setup_vars(page: 1, outset: 0) setup_items_var setup_offset_var - setup_params_var end # Finalize the instance variables based on the fetched size diff --git a/gem/lib/pagy/extras/foundation.rb b/gem/lib/pagy/extras/foundation.rb index 8c39db13d..a6c3ef34a 100644 --- a/gem/lib/pagy/extras/foundation.rb +++ b/gem/lib/pagy/extras/foundation.rb @@ -75,8 +75,8 @@ def foundation_prev_html(pagy, a) if (p_prev = pagy.prev) %() else - %() + %() end end @@ -84,8 +84,8 @@ def foundation_next_html(pagy, a) if (p_next = pagy.next) %() else - %() + %() end end end diff --git a/retype.yml b/retype.yml index e03b937b7..4e145c49f 100644 --- a/retype.yml +++ b/retype.yml @@ -8,7 +8,7 @@ url: https://ddnexus.github.io/pagy branding: title: Pagy - label: 8.1.0 + label: 8.1.1 colors: label: text: "#FFFFFF" diff --git a/src/pagy.ts b/src/pagy.ts index a4d6dcd7b..be91a68fc 100644 --- a/src/pagy.ts +++ b/src/pagy.ts @@ -98,7 +98,7 @@ const Pagy = (() => { // Public interface return { - version: "8.1.0", + version: "8.1.1", // Scan for elements with a "data-pagy" attribute and call their init functions with the decoded args init(arg?:Element | never) { diff --git a/test/pagy/extras/foundation_test.rb.rematch b/test/pagy/extras/foundation_test.rb.rematch index 8287dd5ee..031327124 100644 --- a/test/pagy/extras/foundation_test.rb.rematch +++ b/test/pagy/extras/foundation_test.rb.rematch @@ -2,17 +2,17 @@ pagy/extras/foundation::#pagy_foundation_combo_nav_js#test_0001_renders first, intermediate and last pages: :plain_1: '' :extras_1: '' @@ -37,7 +37,7 @@ pagy/extras/foundation::#pagy_foundation_combo_nav_js#test_0001_renders first, i nowrap">Page # - of 6' + of 6' :extras_6: '' + of 6' pagy/extras/foundation::#pagy_foundation_nav#test_0001_renders first, intermediate and last pages: :plain_1: :extras_1: + aria-label="Previous"><
  • 1
  • 2
  • 3
  • 4
  • 5
  • 50
  • :plain_20: + class="next disabled" role="link" aria-disabled="true" aria-label="Next">> :extras_50: + class="next disabled" role="link" aria-disabled="true" aria-label="Next">> pagy/extras/foundation::#pagy_foundation_nav_js#test_0002_renders first, intermediate and last pages with required steps: - :plain_1: + :plain_1: :extras_1: + data-pagy="WyJuYXYiLHsiYmVmb3JlIjoiPHVsIGNsYXNzPVwicGFnaW5hdGlvblwiPjxsaSBjbGFzcz1cInByZXYgZGlzYWJsZWRcIiByb2xlPVwibGlua1wiIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCIgYXJpYS1sYWJlbD1cIlByZXZpb3VzXCI+Jmx0OzwvbGk+IiwiYSI6IjxsaT48YSBhbmNob3Jfc3RyaW5nIGhyZWY9XCIvZm9vP3BhZ2U9X19wYWd5X3BhZ2VfX1wiPl9fcGFneV9sYWJlbF9fPC9hPjwvbGk+IiwiY3VycmVudCI6IjxsaSBjbGFzcz1cImN1cnJlbnRcIiByb2xlPVwibGlua1wiIGFyaWEtY3VycmVudD1cInBhZ2VcIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPl9fcGFneV9sYWJlbF9fPC9saT4iLCJnYXAiOiI8bGkgY2xhc3M9XCJlbGxpcHNpcyBnYXBcIj48L2xpPiIsImFmdGVyIjoiPGxpIGNsYXNzPVwibmV4dFwiPjxhIGFuY2hvcl9zdHJpbmcgaHJlZj1cIi9mb28/cGFnZT0yXCIgYXJpYS1sYWJlbD1cIk5leHRcIj4mZ3Q7PC9hPjwvbGk+PC91bD4ifSx7IjAiOlsiMSIsMiwzLCJnYXAiLDUwXSwiNjAwIjpbIjEiLDIsMyw0LCJnYXAiLDUwXX0sbnVsbF0="> :plain_20: :extras_20: - :plain_50: + :plain_50: :extras_50: + data-pagy="WyJuYXYiLHsiYmVmb3JlIjoiPHVsIGNsYXNzPVwicGFnaW5hdGlvblwiPjxsaSBjbGFzcz1cInByZXZcIj48YSBhbmNob3Jfc3RyaW5nIGhyZWY9XCIvZm9vP3BhZ2U9NDlcIiBhcmlhLWxhYmVsPVwiUHJldmlvdXNcIj4mbHQ7PC9hPjwvbGk+IiwiYSI6IjxsaT48YSBhbmNob3Jfc3RyaW5nIGhyZWY9XCIvZm9vP3BhZ2U9X19wYWd5X3BhZ2VfX1wiPl9fcGFneV9sYWJlbF9fPC9hPjwvbGk+IiwiY3VycmVudCI6IjxsaSBjbGFzcz1cImN1cnJlbnRcIiByb2xlPVwibGlua1wiIGFyaWEtY3VycmVudD1cInBhZ2VcIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPl9fcGFneV9sYWJlbF9fPC9saT4iLCJnYXAiOiI8bGkgY2xhc3M9XCJlbGxpcHNpcyBnYXBcIj48L2xpPiIsImFmdGVyIjoiPGxpIGNsYXNzPVwibmV4dCBkaXNhYmxlZFwiIHJvbGU9XCJsaW5rXCIgYXJpYS1kaXNhYmxlZD1cInRydWVcIiBhcmlhLWxhYmVsPVwiTmV4dFwiPiZndDs8L2xpPjwvdWw+In0seyIwIjpbMSwiZ2FwIiw0OCw0OSwiNTAiXSwiNjAwIjpbMSwiZ2FwIiw0Nyw0OCw0OSwiNTAiXX0sbnVsbF0="> pagy/extras/foundation::#pagy_foundation_nav_js#test_0001_renders single and multiple pages when used with Pagy::Countless: - :plain_1_0: + :plain_1_0: :extras_1_0: + data-pagy="WyJuYXYiLHsiYmVmb3JlIjoiPHVsIGNsYXNzPVwicGFnaW5hdGlvblwiPjxsaSBjbGFzcz1cInByZXYgZGlzYWJsZWRcIiByb2xlPVwibGlua1wiIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCIgYXJpYS1sYWJlbD1cIlByZXZpb3VzXCI+Jmx0OzwvbGk+IiwiYSI6IjxsaT48YSBhbmNob3Jfc3RyaW5nIGhyZWY9XCIvZm9vP3BhZ2U9X19wYWd5X3BhZ2VfX1wiPl9fcGFneV9sYWJlbF9fPC9hPjwvbGk+IiwiY3VycmVudCI6IjxsaSBjbGFzcz1cImN1cnJlbnRcIiByb2xlPVwibGlua1wiIGFyaWEtY3VycmVudD1cInBhZ2VcIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPl9fcGFneV9sYWJlbF9fPC9saT4iLCJnYXAiOiI8bGkgY2xhc3M9XCJlbGxpcHNpcyBnYXBcIj48L2xpPiIsImFmdGVyIjoiPGxpIGNsYXNzPVwibmV4dCBkaXNhYmxlZFwiIHJvbGU9XCJsaW5rXCIgYXJpYS1kaXNhYmxlZD1cInRydWVcIiBhcmlhLWxhYmVsPVwiTmV4dFwiPiZndDs8L2xpPjwvdWw+In0seyIwIjpbIjEiXSwiNjAwIjpbIjEiXX0sbnVsbF0="> :plain_2_23: :extras_2_23: diff --git a/test/pagy/extras/metadata_test.rb.rematch b/test/pagy/extras/metadata_test.rb.rematch index 797a3890d..fa58ea9cc 100644 --- a/test/pagy/extras/metadata_test.rb.rematch +++ b/test/pagy/extras/metadata_test.rb.rematch @@ -58,7 +58,6 @@ pagy/extras/metadata::#pagy_metadata for Pagy#test_0002_returns the full pagy me :cycle: false :count_args: - :all - :params: {} :page_param: :page :countless_minimal: false :steps: false diff --git a/test/pagy_test.rb b/test/pagy_test.rb index 243441aa6..3edc2b252 100644 --- a/test/pagy_test.rb +++ b/test/pagy_test.rb @@ -70,10 +70,6 @@ def series_for(page, *expected) _ { Pagy.new(count: 100, page: 2, size: [1, 2, 3, '4']).series }.must_raise Pagy::VariableError _ { Pagy.new(count: 100, page: '11') }.must_raise Pagy::OverflowError _ { Pagy.new(count: 100, page: 12) }.must_raise Pagy::OverflowError - _ { Pagy.new(count: 100, params: 12) }.must_raise Pagy::VariableError - _ { Pagy.new(count: 100, request_path: "http://example.com/foo") }.must_raise Pagy::VariableError - _ { Pagy.new(count: 100, request_path: "/foo?bar=1") }.must_raise Pagy::VariableError - _ { Pagy.new(count: 100, request_path: "foo") }.must_raise Pagy::VariableError begin Pagy.new(count: 100, page: 12) rescue Pagy::OverflowError => e @@ -317,7 +313,7 @@ def series_for(page, *expected) describe 'accessors' do it 'has accessors' do [ - :count, :page, :items, :vars, :request_path, # input + :count, :page, :items, :vars, # input :offset, :pages, :last, :from, :to, :in, :prev, :next, :series # output ].each do |meth| _(pagy).must_respond_to meth @@ -332,7 +328,6 @@ def series_for(page, *expected) _(Pagy::DEFAULT[:outset]).must_equal 0 _(Pagy::DEFAULT[:size]).must_equal 7 _(Pagy::DEFAULT[:page_param]).must_equal :page - _(Pagy::DEFAULT[:params]).must_equal({}) end end