pagy 8.4.2 → 8.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/apps/calendar.ru +1 -1
- data/apps/demo.ru +10 -5
- data/apps/rails.ru +11 -7
- data/apps/repro.ru +13 -9
- data/bin/pagy +1 -1
- data/config/pagy.rb +1 -1
- data/javascripts/pagy-module.js +1 -1
- data/javascripts/pagy.js +4 -1
- data/javascripts/pagy.min.js +4 -0
- data/javascripts/pagy.min.js.map +10 -0
- data/javascripts/pagy.mjs +101 -0
- data/lib/pagy.rb +1 -1
- data/pkg/pagy-8.4.3.gem +0 -0
- metadata +9 -5
- data/javascripts/pagy-dev.js +0 -104
- data/pkg/pagy-8.4.2.gem +0 -0
- /data/javascripts/{pagy-module.d.ts → pagy.d.ts} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ac089590648eb671973328ca5e0b733974081bfcb77a6f62d12509e9974d61f0
|
4
|
+
data.tar.gz: edc05f99258a3a673532ab2f3fcca6108403574f101c3f3764369e79254ccf2f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c2d7cfeb79468d57d830ccbc9d304c2df29d087990d28a58f7722a5f4712ea611a87799b95963d01936508102f1201b24e2d3549b1d8d10b471d69a300165f36
|
7
|
+
data.tar.gz: c1c862168613092702d8f93d76a01d835b772cf5de8a3b642f3f332a1b39456128ef20354e4fa09812d34e290c8706dfbbce74718ae41770033a87281a28c90c
|
data/apps/calendar.ru
CHANGED
data/apps/demo.ru
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
# DOC
|
19
19
|
# https://ddnexus.github.io/pagy/playground/#3-demo-app
|
20
20
|
|
21
|
-
VERSION = '8.4.
|
21
|
+
VERSION = '8.4.3'
|
22
22
|
|
23
23
|
require 'bundler/inline'
|
24
24
|
require 'bundler'
|
@@ -69,7 +69,12 @@ class PagyDemo < Sinatra::Base
|
|
69
69
|
end
|
70
70
|
|
71
71
|
get('/javascripts/:file') do
|
72
|
-
|
72
|
+
format = params[:file].split('.').last
|
73
|
+
if format == 'js'
|
74
|
+
content_type 'application/javascript'
|
75
|
+
elsif format == 'map'
|
76
|
+
content_type 'application/json'
|
77
|
+
end
|
73
78
|
send_file Pagy.root.join('javascripts', params[:file])
|
74
79
|
end
|
75
80
|
|
@@ -233,7 +238,7 @@ __END__
|
|
233
238
|
<html lang="en">
|
234
239
|
<head>
|
235
240
|
<title>Pagy Demo App</title>
|
236
|
-
<script src="
|
241
|
+
<script src="/javascripts/pagy.min.js"></script>
|
237
242
|
<script>
|
238
243
|
window.addEventListener("load", Pagy.init);
|
239
244
|
</script>
|
@@ -242,7 +247,7 @@ __END__
|
|
242
247
|
<style type="text/css">
|
243
248
|
@media screen { html, body {
|
244
249
|
font-size: 1rem;
|
245
|
-
line-
|
250
|
+
line-height: 1.2s;
|
246
251
|
padding: 0;
|
247
252
|
margin: 0;
|
248
253
|
} }
|
@@ -293,7 +298,7 @@ __END__
|
|
293
298
|
margin-top: .3rem;
|
294
299
|
margin-bottom: 1rem;
|
295
300
|
font-size: .8rem !important;
|
296
|
-
line-
|
301
|
+
line-height: 1rem !important;
|
297
302
|
color: white;
|
298
303
|
background-color: rgb(30 30 30);
|
299
304
|
padding: 1rem;
|
data/apps/rails.ru
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
# DOC
|
16
16
|
# https://ddnexus.github.io/pagy/playground/#2-rails-app
|
17
17
|
|
18
|
-
VERSION = '8.4.
|
18
|
+
VERSION = '8.4.3'
|
19
19
|
|
20
20
|
# Gemfile
|
21
21
|
require 'bundler/inline'
|
@@ -46,7 +46,7 @@ class PagyRails < Rails::Application # :nodoc:
|
|
46
46
|
|
47
47
|
routes.draw do
|
48
48
|
root to: 'comments#index'
|
49
|
-
get '/
|
49
|
+
get '/javascripts/:file', to: 'pagy#javascripts', file: /.*/
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -116,9 +116,13 @@ end
|
|
116
116
|
|
117
117
|
# You don't need this in real rails apps (see https://ddnexus.github.io/pagy/docs/api/javascript/setup/#2-configure)
|
118
118
|
class PagyController < ActionController::Base
|
119
|
-
def
|
120
|
-
|
121
|
-
|
119
|
+
def javascripts
|
120
|
+
format = params[:file].split('.').last
|
121
|
+
if format == 'js'
|
122
|
+
render js: Pagy.root.join('javascripts', params[:file]).read
|
123
|
+
elsif format == 'map'
|
124
|
+
render json: Pagy.root.join('javascripts', params[:file]).read
|
125
|
+
end
|
122
126
|
end
|
123
127
|
end
|
124
128
|
|
@@ -130,7 +134,7 @@ TEMPLATE = <<~ERB
|
|
130
134
|
<html>
|
131
135
|
<head>
|
132
136
|
<title>Pagy Rails App</title>
|
133
|
-
<script src="/
|
137
|
+
<script src="/javascripts/pagy.min.js"></script>
|
134
138
|
<script>
|
135
139
|
window.addEventListener("load", Pagy.init);
|
136
140
|
</script>
|
@@ -138,7 +142,7 @@ TEMPLATE = <<~ERB
|
|
138
142
|
<style type="text/css">
|
139
143
|
@media screen { html, body {
|
140
144
|
font-size: 1rem;
|
141
|
-
line-
|
145
|
+
line-height: 1.2s;
|
142
146
|
padding: 0;
|
143
147
|
margin: 0;
|
144
148
|
} }
|
data/apps/repro.ru
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
# DOC
|
16
16
|
# https://ddnexus.github.io/pagy/playground/#1-repro-app
|
17
17
|
|
18
|
-
VERSION = '8.4.
|
18
|
+
VERSION = '8.4.3'
|
19
19
|
|
20
20
|
require 'bundler/inline'
|
21
21
|
require 'bundler'
|
@@ -40,17 +40,21 @@ Pagy::DEFAULT.freeze
|
|
40
40
|
require 'sinatra/base'
|
41
41
|
# Sinatra application
|
42
42
|
class PagyRepro < Sinatra::Base
|
43
|
-
PAGY_JS = "pagy#{'-dev' if ENV['DEBUG']}.js".freeze
|
44
|
-
|
45
43
|
configure do
|
46
44
|
enable :inline_templates
|
47
45
|
end
|
48
46
|
include Pagy::Backend
|
49
|
-
|
50
|
-
get(
|
51
|
-
|
52
|
-
|
47
|
+
|
48
|
+
get('/javascripts/:file') do
|
49
|
+
format = params[:file].split('.').last
|
50
|
+
if format == 'js'
|
51
|
+
content_type 'application/javascript'
|
52
|
+
elsif format == 'map'
|
53
|
+
content_type 'application/json'
|
54
|
+
end
|
55
|
+
send_file Pagy.root.join('javascripts', params[:file])
|
53
56
|
end
|
57
|
+
|
54
58
|
# Edit this action as needed
|
55
59
|
get '/' do
|
56
60
|
collection = MockCollection.new
|
@@ -96,7 +100,7 @@ __END__
|
|
96
100
|
<html>
|
97
101
|
<head>
|
98
102
|
<title>Pagy Repro App</title>
|
99
|
-
<script src="
|
103
|
+
<script src="javascripts/pagy.min.js"></script>
|
100
104
|
<script>
|
101
105
|
window.addEventListener("load", Pagy.init);
|
102
106
|
</script>
|
@@ -104,7 +108,7 @@ __END__
|
|
104
108
|
<style type="text/css">
|
105
109
|
@media screen { html, body {
|
106
110
|
font-size: 1rem;
|
107
|
-
line-
|
111
|
+
line-height: 1.2s;
|
108
112
|
padding: 0;
|
109
113
|
margin: 0;
|
110
114
|
} }
|
data/bin/pagy
CHANGED
data/config/pagy.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Pagy initializer file (8.4.
|
3
|
+
# Pagy initializer file (8.4.3)
|
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
|
|
data/javascripts/pagy-module.js
CHANGED
@@ -74,7 +74,7 @@ const Pagy = (() => {
|
|
74
74
|
};
|
75
75
|
const trim = (a, param) => a.replace(new RegExp(`[?&]${param}=1\\b(?!&)|\\b${param}=1&`), "");
|
76
76
|
return {
|
77
|
-
version: "8.4.
|
77
|
+
version: "8.4.3",
|
78
78
|
init(arg) {
|
79
79
|
const target = arg instanceof Element ? arg : document;
|
80
80
|
const elements = target.querySelectorAll("[data-pagy]");
|
data/javascripts/pagy.js
CHANGED
@@ -1 +1,4 @@
|
|
1
|
-
window.Pagy=(()=>{const
|
1
|
+
window.Pagy=(()=>{const j=new ResizeObserver((z)=>z.forEach((B)=>B.target.querySelectorAll(".pagy-rjs").forEach((D)=>D.pagyRender()))),A=(z,[B,D,x,F])=>{const E=z.parentElement??z,H=Object.keys(D).map((G)=>parseInt(G)).sort((G,L)=>L-G);let K=-1;const R=(G,L,M)=>G.replace(/__pagy_page__/g,L).replace(/__pagy_label__/g,M);if((z.pagyRender=function(){const G=H.find((Q)=>Q<E.clientWidth)||0;if(G===K)return;let L=B.before;const M=D[G.toString()],X=x?.[G.toString()]??M.map((Q)=>Q.toString());for(let Q in M){const T=M[Q],$=X[Q];let U;if(typeof T==="number")U=R(B.a,T.toString(),$);else if(T==="gap")U=B.gap;else U=R(B.current,T,$);L+=typeof F==="string"&&T==1?Z(U,F):U}L+=B.after,z.innerHTML="",z.insertAdjacentHTML("afterbegin",L),K=G})(),z.classList.contains("pagy-rjs"))j.observe(E)},C=(z,[B,D])=>Y(z,(x)=>[x,B.replace(/__pagy_page__/,x)],D),J=(z,[B,D,x])=>{Y(z,(F)=>{const E=Math.max(Math.ceil(B/parseInt(F)),1).toString(),H=D.replace(/__pagy_page__/,E).replace(/__pagy_items__/,F);return[E,H]},x)},Y=(z,B,D)=>{const x=z.querySelector("input"),F=z.querySelector("a"),E=x.value,H=function(){if(x.value===E)return;const[K,R,G]=[x.min,x.value,x.max].map((X)=>parseInt(X)||0);if(R<K||R>G){x.value=E,x.select();return}let[L,M]=B(x.value);if(typeof D==="string"&&L==="1")M=Z(M,D);F.href=M,F.click()};["change","focus"].forEach((K)=>x.addEventListener(K,x.select)),x.addEventListener("focusout",H),x.addEventListener("keypress",(K)=>{if(K.key==="Enter")H()})},Z=(z,B)=>z.replace(new RegExp(`[?&]${B}=1\\b(?!&)|\\b${B}=1&`),"");return{version:"8.4.3",init(z){const D=(z instanceof Element?z:document).querySelectorAll("[data-pagy]");for(let x of D)try{const F=Uint8Array.from(atob(x.getAttribute("data-pagy")),(K)=>K.charCodeAt(0)),[E,...H]=JSON.parse((new TextDecoder()).decode(F));if(E==="nav")A(x,H);else if(E==="combo")C(x,H);else if(E==="selector")J(x,H);else console.warn("Skipped Pagy.init() for: %o\nUnknown keyword '%s'",x,E)}catch(F){console.warn("Skipped Pagy.init() for: %o\n%s",x,F)}}}})();
|
2
|
+
|
3
|
+
//# debugId=C131CFD0ECFFDA8364756e2164756e21
|
4
|
+
//# sourceMappingURL=pagy.min.js.map
|
@@ -0,0 +1,4 @@
|
|
1
|
+
window.Pagy=(()=>{const j=new ResizeObserver((z)=>z.forEach((B)=>B.target.querySelectorAll(".pagy-rjs").forEach((D)=>D.pagyRender()))),A=(z,[B,D,x,F])=>{const E=z.parentElement??z,H=Object.keys(D).map((G)=>parseInt(G)).sort((G,L)=>L-G);let K=-1;const R=(G,L,M)=>G.replace(/__pagy_page__/g,L).replace(/__pagy_label__/g,M);if((z.pagyRender=function(){const G=H.find((Q)=>Q<E.clientWidth)||0;if(G===K)return;let L=B.before;const M=D[G.toString()],X=x?.[G.toString()]??M.map((Q)=>Q.toString());for(let Q in M){const T=M[Q],$=X[Q];let U;if(typeof T==="number")U=R(B.a,T.toString(),$);else if(T==="gap")U=B.gap;else U=R(B.current,T,$);L+=typeof F==="string"&&T==1?Z(U,F):U}L+=B.after,z.innerHTML="",z.insertAdjacentHTML("afterbegin",L),K=G})(),z.classList.contains("pagy-rjs"))j.observe(E)},C=(z,[B,D])=>Y(z,(x)=>[x,B.replace(/__pagy_page__/,x)],D),J=(z,[B,D,x])=>{Y(z,(F)=>{const E=Math.max(Math.ceil(B/parseInt(F)),1).toString(),H=D.replace(/__pagy_page__/,E).replace(/__pagy_items__/,F);return[E,H]},x)},Y=(z,B,D)=>{const x=z.querySelector("input"),F=z.querySelector("a"),E=x.value,H=function(){if(x.value===E)return;const[K,R,G]=[x.min,x.value,x.max].map((X)=>parseInt(X)||0);if(R<K||R>G){x.value=E,x.select();return}let[L,M]=B(x.value);if(typeof D==="string"&&L==="1")M=Z(M,D);F.href=M,F.click()};["change","focus"].forEach((K)=>x.addEventListener(K,x.select)),x.addEventListener("focusout",H),x.addEventListener("keypress",(K)=>{if(K.key==="Enter")H()})},Z=(z,B)=>z.replace(new RegExp(`[?&]${B}=1\\b(?!&)|\\b${B}=1&`),"");return{version:"8.4.3",init(z){const D=(z instanceof Element?z:document).querySelectorAll("[data-pagy]");for(let x of D)try{const F=Uint8Array.from(atob(x.getAttribute("data-pagy")),(K)=>K.charCodeAt(0)),[E,...H]=JSON.parse((new TextDecoder()).decode(F));if(E==="nav")A(x,H);else if(E==="combo")C(x,H);else if(E==="selector")J(x,H);else console.warn("Skipped Pagy.init() for: %o\nUnknown keyword '%s'",x,E)}catch(F){console.warn("Skipped Pagy.init() for: %o\n%s",x,F)}}}})();
|
2
|
+
|
3
|
+
//# debugId=C131CFD0ECFFDA8364756e2164756e21
|
4
|
+
//# sourceMappingURL=pagy.min.js.map
|
@@ -0,0 +1,10 @@
|
|
1
|
+
{
|
2
|
+
"version": 3,
|
3
|
+
"sources": ["../../src/pagy.ts"],
|
4
|
+
"sourcesContent": [
|
5
|
+
"type NavArgs = readonly [Tokens, Sequels, null | LabelSequels, string?]\ntype ComboArgs = readonly [string, string?]\ntype SelectorArgs = readonly [number, string, string?]\n\ninterface Tokens {\n readonly before:string\n readonly a:string\n readonly current:string\n readonly gap:string\n readonly after:string\n}\n\ninterface Sequels {readonly [width:string]:(string | number)[]}\n\ninterface LabelSequels {readonly [width:string]:string[]}\n\ninterface NavElement extends Element {pagyRender():void}\n\nconst Pagy = (() => {\n // The observer instance for responsive navs\n const rjsObserver = new ResizeObserver(\n entries => entries.forEach(e => e.target.querySelectorAll<NavElement>(\".pagy-rjs\")\n .forEach(el => el.pagyRender())));\n // Init the *_nav_js helpers\n const initNav = (el:NavElement, [tokens, sequels, labelSequels, trimParam]:NavArgs) => {\n const container = el.parentElement ?? el;\n const widths = Object.keys(sequels).map(w => parseInt(w)).sort((a, b) => b - a);\n let lastWidth = -1;\n const fillIn = (a:string, page:string, label:string):string =>\n a.replace(/__pagy_page__/g, page).replace(/__pagy_label__/g, label);\n (el.pagyRender = function () {\n const width = widths.find(w => w < container.clientWidth) || 0;\n if (width === lastWidth) { return } // no change: abort\n let html = tokens.before; // already trimmed in html\n const series = sequels[width.toString()];\n const labels = labelSequels?.[width.toString()] ?? series.map(l => l.toString());\n for (const i in series) {\n const item = series[i];\n const label = labels[i];\n let filled;\n if (typeof item === \"number\") {\n filled = fillIn(tokens.a, item.toString(), label);\n } else if (item === \"gap\") {\n filled = tokens.gap;\n } else { // active page\n filled = fillIn(tokens.current, item, label);\n }\n html += (typeof trimParam === \"string\" && item == 1) ? trim(filled, trimParam) : filled;\n }\n html += tokens.after; // eslint-disable-line align-assignments/align-assignments\n el.innerHTML = \"\";\n el.insertAdjacentHTML(\"afterbegin\", html);\n lastWidth = width;\n })();\n if (el.classList.contains(\"pagy-rjs\")) { rjsObserver.observe(container) }\n };\n\n // Init the *_combo_nav_js helpers\n const initCombo = (el:Element, [url_token, trimParam]:ComboArgs) =>\n initInput(el, inputValue => [inputValue, url_token.replace(/__pagy_page__/, inputValue)], trimParam);\n\n // Init the items_selector_js helper\n const initSelector = (el:Element, [from, url_token, trimParam]:SelectorArgs) => {\n initInput(el, inputValue => {\n const page = Math.max(Math.ceil(from / parseInt(inputValue)), 1).toString();\n const url = url_token.replace(/__pagy_page__/, page).replace(/__pagy_items__/, inputValue);\n return [page, url];\n }, trimParam);\n };\n\n // Init the input element\n const initInput = (el:Element, getVars:(v:string) => [string, string], trimParam?:string) => {\n const input = el.querySelector(\"input\") as HTMLInputElement;\n const link = el.querySelector(\"a\") as HTMLAnchorElement;\n const initial = input.value;\n const action = function () {\n if (input.value === initial) { return } // not changed\n const [min, val, max] = [input.min, input.value, input.max].map(n => parseInt(n) || 0);\n if (val < min || val > max) { // reset invalid/out-of-range\n input.value = initial;\n input.select();\n return;\n }\n let [page, url] = getVars(input.value); // eslint-disable-line prefer-const\n if (typeof trimParam === \"string\" && page === \"1\") { url = trim(url, trimParam) }\n link.href = url;\n link.click();\n };\n [\"change\", \"focus\"].forEach(e => input.addEventListener(e, input.select)); // auto-select\n input.addEventListener(\"focusout\", action); // trigger action\n input.addEventListener(\"keypress\", e => { if (e.key === \"Enter\") { action() } }); // trigger action\n };\n\n // Trim the ${page-param}=1 params in links\n const trim = (a:string, param:string) =>\n a.replace(new RegExp(`[?&]${param}=1\\\\b(?!&)|\\\\b${param}=1&`), \"\");\n\n // Public interface\n return {\n version: \"8.4.3\",\n\n // Scan for elements with a \"data-pagy\" attribute and call their init functions with the decoded args\n init(arg?:Element | never) {\n const target = arg instanceof Element ? arg : document;\n const elements = target.querySelectorAll(\"[data-pagy]\");\n for (const el of elements) {\n try {\n const uint8array = Uint8Array.from(atob(el.getAttribute(\"data-pagy\") as string), c => c.charCodeAt(0));\n const [keyword, ...args] = JSON.parse((new TextDecoder()).decode(uint8array)); // base64-utf8 -> JSON -> Array\n if (keyword === \"nav\") {\n initNav(el as NavElement, args as NavArgs);\n } else if (keyword === \"combo\") {\n initCombo(el, args as ComboArgs);\n } else if (keyword === \"selector\") {\n initSelector(el, args as SelectorArgs);\n } else {\n console.warn(\"Skipped Pagy.init() for: %o\\nUnknown keyword '%s'\", el, keyword);\n }\n } catch (err) { console.warn(\"Skipped Pagy.init() for: %o\\n%s\", el, err) }\n }\n }\n };\n})();\n\nexport default Pagy;\n"
|
6
|
+
],
|
7
|
+
"mappings": "AAkBA,IAAM,GAAQ,IAAM,CAElB,MAAM,EAAc,IAAI,eACpB,KAAW,EAAQ,QAAQ,KAAK,EAAE,OAAO,iBAA6B,WAAW,EAC/C,QAAQ,KAAM,EAAG,WAAW,CAAC,CAAC,CAAC,EAE/D,EAAU,CAAC,GAAgB,EAAQ,EAAS,EAAc,KAAuB,CACrF,MAAM,EAAY,EAAG,eAAiB,EAChC,EAAY,OAAO,KAAK,CAAO,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,EAAG,IAAM,EAAI,CAAC,EACjF,IAAI,GAAc,EAClB,MAAM,EAAY,CAAC,EAAU,EAAa,IACtC,EAAE,QAAQ,iBAAkB,CAAI,EAAE,QAAQ,kBAAmB,CAAK,EAyBtE,IAxBC,EAAG,mBAAsB,EAAG,CAC3B,MAAM,EAAQ,EAAO,KAAK,KAAK,EAAI,EAAU,WAAW,GAAK,EAC7D,GAAI,IAAU,EAAa,OAC3B,IAAI,EAAW,EAAO,OACtB,MAAM,EAAS,EAAQ,EAAM,SAAS,GAChC,EAAS,IAAe,EAAM,SAAS,IAAM,EAAO,IAAI,KAAK,EAAE,SAAS,CAAC,EAC/E,QAAW,KAAK,EAAQ,CACtB,MAAM,EAAQ,EAAO,GACf,EAAQ,EAAO,GACrB,IAAI,EACJ,UAAW,IAAS,SAClB,EAAS,EAAO,EAAO,EAAG,EAAK,SAAS,EAAG,CAAK,UACvC,IAAS,MAClB,EAAS,EAAO,QAEhB,GAAS,EAAO,EAAO,QAAS,EAAM,CAAK,EAE7C,UAAgB,IAAc,UAAY,GAAQ,EAAK,EAAK,EAAQ,CAAS,EAAI,EAEnF,GAAQ,EAAO,MACf,EAAG,UAAY,GACf,EAAG,mBAAmB,aAAc,CAAI,EACxC,EAAY,IACX,EACC,EAAG,UAAU,SAAS,UAAU,EAAK,EAAY,QAAQ,CAAS,GAIlE,EAAY,CAAC,GAAa,EAAW,KACvC,EAAU,EAAI,KAAc,CAAC,EAAY,EAAU,QAAQ,gBAAiB,CAAU,CAAC,EAAG,CAAS,EAGjG,EAAe,CAAC,GAAa,EAAM,EAAW,KAA4B,CAC9E,EAAU,EAAI,KAAc,CAC1B,MAAM,EAAO,KAAK,IAAI,KAAK,KAAK,EAAO,SAAS,CAAU,CAAC,EAAG,CAAC,EAAE,SAAS,EACpE,EAAO,EAAU,QAAQ,gBAAiB,CAAI,EAAE,QAAQ,iBAAkB,CAAU,EAC1F,MAAO,CAAC,EAAM,CAAG,GAChB,CAAS,GAIR,EAAY,CAAC,EAAY,EAAwC,IAAsB,CAC3F,MAAM,EAAU,EAAG,cAAc,OAAO,EAClC,EAAU,EAAG,cAAc,GAAG,EAC9B,EAAU,EAAM,MAChB,UAAmB,EAAG,CAC1B,GAAI,EAAM,QAAU,EAAW,OAC/B,MAAO,EAAK,EAAK,GAAO,CAAC,EAAM,IAAK,EAAM,MAAO,EAAM,GAAG,EAAE,IAAI,KAAK,SAAS,CAAC,GAAK,CAAC,EACrF,GAAI,EAAM,GAAO,EAAM,EAAK,CAC1B,EAAM,MAAQ,EACd,EAAM,OAAO,EACb,OAEF,IAAK,EAAM,GAAO,EAAQ,EAAM,KAAK,EACrC,UAAW,IAAc,UAAY,IAAS,IAAO,EAAM,EAAK,EAAK,CAAS,EAC9E,EAAK,KAAO,EACZ,EAAK,MAAM,GAEb,CAAC,SAAU,OAAO,EAAE,QAAQ,KAAK,EAAM,iBAAiB,EAAG,EAAM,MAAM,CAAC,EACxE,EAAM,iBAAiB,WAAY,CAAM,EACzC,EAAM,iBAAiB,WAAY,KAAK,CAAE,GAAI,EAAE,MAAQ,QAAW,EAAO,EAAK,GAI3E,EAAO,CAAC,EAAU,IACpB,EAAE,QAAQ,IAAI,OAAO,OAAO,kBAAsB,MAAU,EAAG,EAAE,EAGrE,MAAO,CACL,QAAS,QAGT,IAAI,CAAC,EAAsB,CAEzB,MAAM,GADW,aAAe,QAAU,EAAM,UACxB,iBAAiB,aAAa,EACtD,QAAW,KAAM,EACf,GAAI,CACF,MAAM,EAAqB,WAAW,KAAK,KAAK,EAAG,aAAa,WAAW,CAAW,EAAG,KAAK,EAAE,WAAW,CAAC,CAAC,GACtG,KAAY,GAAQ,KAAK,OAAO,IAAI,YAAY,GAAG,OAAO,CAAU,CAAC,EAC5E,GAAI,IAAY,MACd,EAAQ,EAAkB,CAAe,UAChC,IAAY,QACrB,EAAU,EAAI,CAAiB,UACtB,IAAY,WACrB,EAAa,EAAI,CAAoB,MAErC,SAAQ,KAAK,oDAAqD,EAAI,CAAO,QAExE,EAAP,CAAc,QAAQ,KAAK,kCAAmC,EAAI,CAAG,GAG7E,IACC",
|
8
|
+
"debugId": "C131CFD0ECFFDA8364756e2164756e21",
|
9
|
+
"names": []
|
10
|
+
}
|
@@ -0,0 +1,101 @@
|
|
1
|
+
const Pagy = (() => {
|
2
|
+
const rjsObserver = new ResizeObserver((entries) => entries.forEach((e) => e.target.querySelectorAll(".pagy-rjs").forEach((el) => el.pagyRender())));
|
3
|
+
const initNav = (el, [tokens, sequels, labelSequels, trimParam]) => {
|
4
|
+
const container = el.parentElement ?? el;
|
5
|
+
const widths = Object.keys(sequels).map((w) => parseInt(w)).sort((a, b) => b - a);
|
6
|
+
let lastWidth = -1;
|
7
|
+
const fillIn = (a, page, label) => a.replace(/__pagy_page__/g, page).replace(/__pagy_label__/g, label);
|
8
|
+
(el.pagyRender = function() {
|
9
|
+
const width = widths.find((w) => w < container.clientWidth) || 0;
|
10
|
+
if (width === lastWidth) {
|
11
|
+
return;
|
12
|
+
}
|
13
|
+
let html = tokens.before;
|
14
|
+
const series = sequels[width.toString()];
|
15
|
+
const labels = labelSequels?.[width.toString()] ?? series.map((l) => l.toString());
|
16
|
+
for (const i in series) {
|
17
|
+
const item = series[i];
|
18
|
+
const label = labels[i];
|
19
|
+
let filled;
|
20
|
+
if (typeof item === "number") {
|
21
|
+
filled = fillIn(tokens.a, item.toString(), label);
|
22
|
+
} else if (item === "gap") {
|
23
|
+
filled = tokens.gap;
|
24
|
+
} else {
|
25
|
+
filled = fillIn(tokens.current, item, label);
|
26
|
+
}
|
27
|
+
html += typeof trimParam === "string" && item == 1 ? trim(filled, trimParam) : filled;
|
28
|
+
}
|
29
|
+
html += tokens.after;
|
30
|
+
el.innerHTML = "";
|
31
|
+
el.insertAdjacentHTML("afterbegin", html);
|
32
|
+
lastWidth = width;
|
33
|
+
})();
|
34
|
+
if (el.classList.contains("pagy-rjs")) {
|
35
|
+
rjsObserver.observe(container);
|
36
|
+
}
|
37
|
+
};
|
38
|
+
const initCombo = (el, [url_token, trimParam]) => initInput(el, (inputValue) => [inputValue, url_token.replace(/__pagy_page__/, inputValue)], trimParam);
|
39
|
+
const initSelector = (el, [from, url_token, trimParam]) => {
|
40
|
+
initInput(el, (inputValue) => {
|
41
|
+
const page = Math.max(Math.ceil(from / parseInt(inputValue)), 1).toString();
|
42
|
+
const url = url_token.replace(/__pagy_page__/, page).replace(/__pagy_items__/, inputValue);
|
43
|
+
return [page, url];
|
44
|
+
}, trimParam);
|
45
|
+
};
|
46
|
+
const initInput = (el, getVars, trimParam) => {
|
47
|
+
const input = el.querySelector("input");
|
48
|
+
const link = el.querySelector("a");
|
49
|
+
const initial = input.value;
|
50
|
+
const action = function() {
|
51
|
+
if (input.value === initial) {
|
52
|
+
return;
|
53
|
+
}
|
54
|
+
const [min, val, max] = [input.min, input.value, input.max].map((n) => parseInt(n) || 0);
|
55
|
+
if (val < min || val > max) {
|
56
|
+
input.value = initial;
|
57
|
+
input.select();
|
58
|
+
return;
|
59
|
+
}
|
60
|
+
let [page, url] = getVars(input.value);
|
61
|
+
if (typeof trimParam === "string" && page === "1") {
|
62
|
+
url = trim(url, trimParam);
|
63
|
+
}
|
64
|
+
link.href = url;
|
65
|
+
link.click();
|
66
|
+
};
|
67
|
+
["change", "focus"].forEach((e) => input.addEventListener(e, input.select));
|
68
|
+
input.addEventListener("focusout", action);
|
69
|
+
input.addEventListener("keypress", (e) => {
|
70
|
+
if (e.key === "Enter") {
|
71
|
+
action();
|
72
|
+
}
|
73
|
+
});
|
74
|
+
};
|
75
|
+
const trim = (a, param) => a.replace(new RegExp(`[?&]${param}=1\\b(?!&)|\\b${param}=1&`), "");
|
76
|
+
return {
|
77
|
+
version: "8.4.3",
|
78
|
+
init(arg) {
|
79
|
+
const target = arg instanceof Element ? arg : document;
|
80
|
+
const elements = target.querySelectorAll("[data-pagy]");
|
81
|
+
for (const el of elements) {
|
82
|
+
try {
|
83
|
+
const uint8array = Uint8Array.from(atob(el.getAttribute("data-pagy")), (c) => c.charCodeAt(0));
|
84
|
+
const [keyword, ...args] = JSON.parse(new TextDecoder().decode(uint8array));
|
85
|
+
if (keyword === "nav") {
|
86
|
+
initNav(el, args);
|
87
|
+
} else if (keyword === "combo") {
|
88
|
+
initCombo(el, args);
|
89
|
+
} else if (keyword === "selector") {
|
90
|
+
initSelector(el, args);
|
91
|
+
} else {
|
92
|
+
console.warn("Skipped Pagy.init() for: %o\nUnknown keyword '%s'", el, keyword);
|
93
|
+
}
|
94
|
+
} catch (err) {
|
95
|
+
console.warn("Skipped Pagy.init() for: %o\n%s", el, err);
|
96
|
+
}
|
97
|
+
}
|
98
|
+
}
|
99
|
+
};
|
100
|
+
})();
|
101
|
+
export default Pagy;
|
data/lib/pagy.rb
CHANGED
data/pkg/pagy-8.4.3.gem
ADDED
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pagy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 8.4.
|
4
|
+
version: 8.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Domizio Demichelis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-06-
|
11
|
+
date: 2024-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Agnostic pagination in plain ruby. It does it all. Better.
|
14
14
|
email:
|
@@ -25,10 +25,12 @@ files:
|
|
25
25
|
- apps/repro.ru
|
26
26
|
- bin/pagy
|
27
27
|
- config/pagy.rb
|
28
|
-
- javascripts/pagy-dev.js
|
29
|
-
- javascripts/pagy-module.d.ts
|
30
28
|
- javascripts/pagy-module.js
|
29
|
+
- javascripts/pagy.d.ts
|
31
30
|
- javascripts/pagy.js
|
31
|
+
- javascripts/pagy.min.js
|
32
|
+
- javascripts/pagy.min.js.map
|
33
|
+
- javascripts/pagy.mjs
|
32
34
|
- lib/optimist.rb
|
33
35
|
- lib/pagy.rb
|
34
36
|
- lib/pagy/backend.rb
|
@@ -105,7 +107,7 @@ files:
|
|
105
107
|
- locales/zh-CN.yml
|
106
108
|
- locales/zh-HK.yml
|
107
109
|
- locales/zh-TW.yml
|
108
|
-
- pkg/pagy-8.4.
|
110
|
+
- pkg/pagy-8.4.3.gem
|
109
111
|
- stylesheets/pagy.css
|
110
112
|
- stylesheets/pagy.scss
|
111
113
|
- stylesheets/pagy.tailwind.css
|
@@ -124,6 +126,8 @@ post_install_message: |
|
|
124
126
|
The foundation, materialize, semantic and uikit CSS extras
|
125
127
|
have been discontinued and will be removed in v9
|
126
128
|
https://github.com/ddnexus/pagy/discussions/672
|
129
|
+
The javascript files have been deprecated/renamed
|
130
|
+
https://ddnexus.github.io/pagy/changelog/#deprecations
|
127
131
|
*************************************************************
|
128
132
|
rdoc_options: []
|
129
133
|
require_paths:
|
data/javascripts/pagy-dev.js
DELETED
@@ -1,104 +0,0 @@
|
|
1
|
-
// pagy.ts
|
2
|
-
window.Pagy = (() => {
|
3
|
-
const rjsObserver = new ResizeObserver((entries) => entries.forEach((e) => e.target.querySelectorAll(".pagy-rjs").forEach((el) => el.pagyRender())));
|
4
|
-
const initNav = (el, [tokens, sequels, labelSequels, trimParam]) => {
|
5
|
-
const container = el.parentElement ?? el;
|
6
|
-
const widths = Object.keys(sequels).map((w) => parseInt(w)).sort((a, b) => b - a);
|
7
|
-
let lastWidth = -1;
|
8
|
-
const fillIn = (a, page, label) => a.replace(/__pagy_page__/g, page).replace(/__pagy_label__/g, label);
|
9
|
-
(el.pagyRender = function() {
|
10
|
-
const width = widths.find((w) => w < container.clientWidth) || 0;
|
11
|
-
if (width === lastWidth) {
|
12
|
-
return;
|
13
|
-
}
|
14
|
-
let html = tokens.before;
|
15
|
-
const series = sequels[width.toString()];
|
16
|
-
const labels = labelSequels?.[width.toString()] ?? series.map((l) => l.toString());
|
17
|
-
for (const i in series) {
|
18
|
-
const item = series[i];
|
19
|
-
const label = labels[i];
|
20
|
-
let filled;
|
21
|
-
if (typeof item === "number") {
|
22
|
-
filled = fillIn(tokens.a, item.toString(), label);
|
23
|
-
} else if (item === "gap") {
|
24
|
-
filled = tokens.gap;
|
25
|
-
} else {
|
26
|
-
filled = fillIn(tokens.current, item, label);
|
27
|
-
}
|
28
|
-
html += typeof trimParam === "string" && item == 1 ? trim(filled, trimParam) : filled;
|
29
|
-
}
|
30
|
-
html += tokens.after;
|
31
|
-
el.innerHTML = "";
|
32
|
-
el.insertAdjacentHTML("afterbegin", html);
|
33
|
-
lastWidth = width;
|
34
|
-
})();
|
35
|
-
if (el.classList.contains("pagy-rjs")) {
|
36
|
-
rjsObserver.observe(container);
|
37
|
-
}
|
38
|
-
};
|
39
|
-
const initCombo = (el, [url_token, trimParam]) => initInput(el, (inputValue) => [inputValue, url_token.replace(/__pagy_page__/, inputValue)], trimParam);
|
40
|
-
const initSelector = (el, [from, url_token, trimParam]) => {
|
41
|
-
initInput(el, (inputValue) => {
|
42
|
-
const page = Math.max(Math.ceil(from / parseInt(inputValue)), 1).toString();
|
43
|
-
const url = url_token.replace(/__pagy_page__/, page).replace(/__pagy_items__/, inputValue);
|
44
|
-
return [page, url];
|
45
|
-
}, trimParam);
|
46
|
-
};
|
47
|
-
const initInput = (el, getVars, trimParam) => {
|
48
|
-
const input = el.querySelector("input");
|
49
|
-
const link = el.querySelector("a");
|
50
|
-
const initial = input.value;
|
51
|
-
const action = function() {
|
52
|
-
if (input.value === initial) {
|
53
|
-
return;
|
54
|
-
}
|
55
|
-
const [min, val, max] = [input.min, input.value, input.max].map((n) => parseInt(n) || 0);
|
56
|
-
if (val < min || val > max) {
|
57
|
-
input.value = initial;
|
58
|
-
input.select();
|
59
|
-
return;
|
60
|
-
}
|
61
|
-
let [page, url] = getVars(input.value);
|
62
|
-
if (typeof trimParam === "string" && page === "1") {
|
63
|
-
url = trim(url, trimParam);
|
64
|
-
}
|
65
|
-
link.href = url;
|
66
|
-
link.click();
|
67
|
-
};
|
68
|
-
["change", "focus"].forEach((e) => input.addEventListener(e, input.select));
|
69
|
-
input.addEventListener("focusout", action);
|
70
|
-
input.addEventListener("keypress", (e) => {
|
71
|
-
if (e.key === "Enter") {
|
72
|
-
action();
|
73
|
-
}
|
74
|
-
});
|
75
|
-
};
|
76
|
-
const trim = (a, param) => a.replace(new RegExp(`[?&]${param}=1\\b(?!&)|\\b${param}=1&`), "");
|
77
|
-
return {
|
78
|
-
version: "8.4.2",
|
79
|
-
init(arg) {
|
80
|
-
const target = arg instanceof Element ? arg : document;
|
81
|
-
const elements = target.querySelectorAll("[data-pagy]");
|
82
|
-
for (const el of elements) {
|
83
|
-
try {
|
84
|
-
const uint8array = Uint8Array.from(atob(el.getAttribute("data-pagy")), (c) => c.charCodeAt(0));
|
85
|
-
const [keyword, ...args] = JSON.parse(new TextDecoder().decode(uint8array));
|
86
|
-
if (keyword === "nav") {
|
87
|
-
initNav(el, args);
|
88
|
-
} else if (keyword === "combo") {
|
89
|
-
initCombo(el, args);
|
90
|
-
} else if (keyword === "selector") {
|
91
|
-
initSelector(el, args);
|
92
|
-
} else {
|
93
|
-
console.warn("Skipped Pagy.init() for: %o\nUnknown keyword '%s'", el, keyword);
|
94
|
-
}
|
95
|
-
} catch (err) {
|
96
|
-
console.warn("Skipped Pagy.init() for: %o\n%s", el, err);
|
97
|
-
}
|
98
|
-
}
|
99
|
-
}
|
100
|
-
};
|
101
|
-
})();
|
102
|
-
|
103
|
-
//# debugId=22425B3DDA38810464756e2164756e21
|
104
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsicGFneS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJ0eXBlIE5hdkFyZ3MgPSByZWFkb25seSBbVG9rZW5zLCBTZXF1ZWxzLCBudWxsIHwgTGFiZWxTZXF1ZWxzLCBzdHJpbmc/XVxudHlwZSBDb21ib0FyZ3MgPSByZWFkb25seSBbc3RyaW5nLCBzdHJpbmc/XVxudHlwZSBTZWxlY3RvckFyZ3MgPSByZWFkb25seSBbbnVtYmVyLCBzdHJpbmcsIHN0cmluZz9dXG5cbmludGVyZmFjZSBUb2tlbnMge1xuICAgIHJlYWRvbmx5IGJlZm9yZTpzdHJpbmdcbiAgICByZWFkb25seSBhOnN0cmluZ1xuICAgIHJlYWRvbmx5IGN1cnJlbnQ6c3RyaW5nXG4gICAgcmVhZG9ubHkgZ2FwOnN0cmluZ1xuICAgIHJlYWRvbmx5IGFmdGVyOnN0cmluZ1xufVxuXG5pbnRlcmZhY2UgU2VxdWVscyB7cmVhZG9ubHkgW3dpZHRoOnN0cmluZ106KHN0cmluZyB8IG51bWJlcilbXX1cblxuaW50ZXJmYWNlIExhYmVsU2VxdWVscyB7cmVhZG9ubHkgW3dpZHRoOnN0cmluZ106c3RyaW5nW119XG5cbmludGVyZmFjZSBOYXZFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7cGFneVJlbmRlcigpOnZvaWR9XG5cbmNvbnN0IFBhZ3kgPSAoKCkgPT4ge1xuICAgIC8vIFRoZSBvYnNlcnZlciBpbnN0YW5jZSBmb3IgcmVzcG9uc2l2ZSBuYXZzXG4gICAgY29uc3QgcmpzT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoZW50cmllcyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goZSA9PiBlLnRhcmdldC5xdWVyeVNlbGVjdG9yQWxsPE5hdkVsZW1lbnQ+KFwiLnBhZ3ktcmpzXCIpLmZvckVhY2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbCA9PiBlbC5wYWd5UmVuZGVyKCkpKSk7XG5cbiAgICAvLyBJbml0IHRoZSAqX25hdl9qcyBoZWxwZXJzXG4gICAgY29uc3QgaW5pdE5hdiA9IChlbDpOYXZFbGVtZW50LCBbdG9rZW5zLCBzZXF1ZWxzLCBsYWJlbFNlcXVlbHMsIHRyaW1QYXJhbV06TmF2QXJncykgPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBlbC5wYXJlbnRFbGVtZW50ID8/IGVsO1xuICAgICAgICBjb25zdCB3aWR0aHMgICAgPSBPYmplY3Qua2V5cyhzZXF1ZWxzKS5tYXAodyA9PiBwYXJzZUludCh3KSkuc29ydCgoYSwgYikgPT4gYiAtIGEpO1xuICAgICAgICBsZXQgbGFzdFdpZHRoICAgPSAtMTtcbiAgICAgICAgY29uc3QgZmlsbEluICAgID0gKGE6c3RyaW5nLCBwYWdlOnN0cmluZywgbGFiZWw6c3RyaW5nKTpzdHJpbmcgPT5cbiAgICAgICAgICAgIGEucmVwbGFjZSgvX19wYWd5X3BhZ2VfXy9nLCBwYWdlKS5yZXBsYWNlKC9fX3BhZ3lfbGFiZWxfXy9nLCBsYWJlbCk7XG4gICAgICAgIChlbC5wYWd5UmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB3aWR0aHMuZmluZCh3ID0+IHcgPCBjb250YWluZXIuY2xpZW50V2lkdGgpIHx8IDA7XG4gICAgICAgICAgICBpZiAod2lkdGggPT09IGxhc3RXaWR0aCkgeyByZXR1cm4gfSAvLyBubyBjaGFuZ2U6IGFib3J0XG4gICAgICAgICAgICBsZXQgaHRtbCAgICAgPSB0b2tlbnMuYmVmb3JlOyAgLy8gYWxyZWFkeSB0cmltbWVkIGluIGh0bWxcbiAgICAgICAgICAgIGNvbnN0IHNlcmllcyA9IHNlcXVlbHNbd2lkdGgudG9TdHJpbmcoKV07XG4gICAgICAgICAgICBjb25zdCBsYWJlbHMgPSBsYWJlbFNlcXVlbHM/Llt3aWR0aC50b1N0cmluZygpXSA/PyBzZXJpZXMubWFwKGwgPT4gbC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaSBpbiBzZXJpZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtICA9IHNlcmllc1tpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IGxhYmVsc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgZmlsbGVkO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBmaWxsZWQgPSBmaWxsSW4odG9rZW5zLmEsIGl0ZW0udG9TdHJpbmcoKSwgbGFiZWwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbSA9PT0gXCJnYXBcIikge1xuICAgICAgICAgICAgICAgICAgICBmaWxsZWQgPSB0b2tlbnMuZ2FwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIGFjdGl2ZSBwYWdlXG4gICAgICAgICAgICAgICAgICAgIGZpbGxlZCA9IGZpbGxJbih0b2tlbnMuY3VycmVudCwgaXRlbSwgbGFiZWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBodG1sICs9ICh0eXBlb2YgdHJpbVBhcmFtID09PSBcInN0cmluZ1wiICYmIGl0ZW0gPT0gMSkgPyB0cmltKGZpbGxlZCwgdHJpbVBhcmFtKSA6IGZpbGxlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGh0bWwgKz0gdG9rZW5zLmFmdGVyOyAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgYWxpZ24tYXNzaWdubWVudHMvYWxpZ24tYXNzaWdubWVudHNcbiAgICAgICAgICAgIGVsLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBlbC5pbnNlcnRBZGphY2VudEhUTUwoXCJhZnRlcmJlZ2luXCIsIGh0bWwpO1xuICAgICAgICAgICAgbGFzdFdpZHRoID0gd2lkdGg7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoXCJwYWd5LXJqc1wiKSkgeyByanNPYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lcikgfVxuICAgIH07XG5cbiAgICAvLyBJbml0IHRoZSAqX2NvbWJvX25hdl9qcyBoZWxwZXJzXG4gICAgY29uc3QgaW5pdENvbWJvID0gKGVsOkVsZW1lbnQsIFt1cmxfdG9rZW4sIHRyaW1QYXJhbV06Q29tYm9BcmdzKSA9PlxuICAgICAgICBpbml0SW5wdXQoZWwsIGlucHV0VmFsdWUgPT4gW2lucHV0VmFsdWUsIHVybF90b2tlbi5yZXBsYWNlKC9fX3BhZ3lfcGFnZV9fLywgaW5wdXRWYWx1ZSldLCB0cmltUGFyYW0pO1xuXG4gICAgLy8gSW5pdCB0aGUgaXRlbXNfc2VsZWN0b3JfanMgaGVscGVyXG4gICAgY29uc3QgaW5pdFNlbGVjdG9yID0gKGVsOkVsZW1lbnQsIFtmcm9tLCB1cmxfdG9rZW4sIHRyaW1QYXJhbV06U2VsZWN0b3JBcmdzKSA9PiB7XG4gICAgICAgIGluaXRJbnB1dChlbCwgaW5wdXRWYWx1ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYWdlID0gTWF0aC5tYXgoTWF0aC5jZWlsKGZyb20gLyBwYXJzZUludChpbnB1dFZhbHVlKSksIDEpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCB1cmwgID0gdXJsX3Rva2VuLnJlcGxhY2UoL19fcGFneV9wYWdlX18vLCBwYWdlKS5yZXBsYWNlKC9fX3BhZ3lfaXRlbXNfXy8sIGlucHV0VmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIFtwYWdlLCB1cmxdO1xuICAgICAgICB9LCB0cmltUGFyYW0pO1xuICAgIH07XG5cbiAgICAvLyBJbml0IHRoZSBpbnB1dCBlbGVtZW50XG4gICAgY29uc3QgaW5pdElucHV0ID0gKGVsOkVsZW1lbnQsIGdldFZhcnM6KHY6c3RyaW5nKSA9PiBbc3RyaW5nLCBzdHJpbmddLCB0cmltUGFyYW0/OnN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCAgID0gZWwucXVlcnlTZWxlY3RvcihcImlucHV0XCIpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGxpbmsgICAgPSBlbC5xdWVyeVNlbGVjdG9yKFwiYVwiKSBhcyBIVE1MQW5jaG9yRWxlbWVudDtcbiAgICAgICAgY29uc3QgaW5pdGlhbCA9IGlucHV0LnZhbHVlO1xuICAgICAgICBjb25zdCBhY3Rpb24gID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LnZhbHVlID09PSBpbml0aWFsKSB7IHJldHVybiB9ICAvLyBub3QgY2hhbmdlZFxuICAgICAgICAgICAgY29uc3QgW21pbiwgdmFsLCBtYXhdID0gW2lucHV0Lm1pbiwgaW5wdXQudmFsdWUsIGlucHV0Lm1heF0ubWFwKG4gPT4gcGFyc2VJbnQobikgfHwgMCk7XG4gICAgICAgICAgICBpZiAodmFsIDwgbWluIHx8IHZhbCA+IG1heCkgeyAgLy8gcmVzZXQgaW52YWxpZC9vdXQtb2YtcmFuZ2VcbiAgICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IGluaXRpYWw7XG4gICAgICAgICAgICAgICAgaW5wdXQuc2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IFtwYWdlLCB1cmxdID0gZ2V0VmFycyhpbnB1dC52YWx1ZSk7ICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItY29uc3RcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdHJpbVBhcmFtID09PSBcInN0cmluZ1wiICYmIHBhZ2UgPT09IFwiMVwiKSB7IHVybCA9IHRyaW0odXJsLCB0cmltUGFyYW0pIH1cbiAgICAgICAgICAgIGxpbmsuaHJlZiA9IHVybDtcbiAgICAgICAgICAgIGxpbmsuY2xpY2soKTtcbiAgICAgICAgfTtcbiAgICAgICAgW1wiY2hhbmdlXCIsIFwiZm9jdXNcIl0uZm9yRWFjaChlID0+IGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoZSwgaW5wdXQuc2VsZWN0KSk7ICAgICAgICAvLyBhdXRvLXNlbGVjdFxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNvdXRcIiwgYWN0aW9uKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyIGFjdGlvblxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIiwgZSA9PiB7IGlmIChlLmtleSA9PT0gXCJFbnRlclwiKSB7IGFjdGlvbigpIH0gfSk7IC8vIHRyaWdnZXIgYWN0aW9uXG4gICAgfTtcblxuICAgIC8vIFRyaW0gdGhlICR7cGFnZS1wYXJhbX09MSBwYXJhbXMgaW4gbGlua3NcbiAgICBjb25zdCB0cmltID0gKGE6c3RyaW5nLCBwYXJhbTpzdHJpbmcpID0+XG4gICAgICAgIGEucmVwbGFjZShuZXcgUmVnRXhwKGBbPyZdJHtwYXJhbX09MVxcXFxiKD8hJil8XFxcXGIke3BhcmFtfT0xJmApLCBcIlwiKTtcblxuICAgIC8vIFB1YmxpYyBpbnRlcmZhY2VcbiAgICByZXR1cm4ge1xuICAgICAgICB2ZXJzaW9uOiBcIjguNC4yXCIsXG5cbiAgICAgICAgLy8gU2NhbiBmb3IgZWxlbWVudHMgd2l0aCBhIFwiZGF0YS1wYWd5XCIgYXR0cmlidXRlIGFuZCBjYWxsIHRoZWlyIGluaXQgZnVuY3Rpb25zIHdpdGggdGhlIGRlY29kZWQgYXJnc1xuICAgICAgICBpbml0KGFyZz86RWxlbWVudCB8IG5ldmVyKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgICA9IGFyZyBpbnN0YW5jZW9mIEVsZW1lbnQgPyBhcmcgOiBkb2N1bWVudDtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1wYWd5XVwiKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWwgb2YgZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OGFycmF5ICAgICAgICAgPSBVaW50OEFycmF5LmZyb20oYXRvYihlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXBhZ3lcIikgYXMgc3RyaW5nKSwgYyA9PiBjLmNoYXJDb2RlQXQoMCkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBba2V5d29yZCwgLi4uYXJnc10gPSBKU09OLnBhcnNlKChuZXcgVGV4dERlY29kZXIoKSkuZGVjb2RlKHVpbnQ4YXJyYXkpKTsgLy8gYmFzZTY0LXV0ZjggLT4gSlNPTiAtPiBBcnJheVxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5d29yZCA9PT0gXCJuYXZcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdE5hdihlbCBhcyBOYXZFbGVtZW50LCBhcmdzIGFzIE5hdkFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleXdvcmQgPT09IFwiY29tYm9cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdENvbWJvKGVsLCBhcmdzIGFzIENvbWJvQXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5d29yZCA9PT0gXCJzZWxlY3RvclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0U2VsZWN0b3IoZWwsIGFyZ3MgYXMgU2VsZWN0b3JBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlNraXBwZWQgUGFneS5pbml0KCkgZm9yOiAlb1xcblVua25vd24ga2V5d29yZCAnJXMnXCIsIGVsLCBrZXl3b3JkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgeyBjb25zb2xlLndhcm4oXCJTa2lwcGVkIFBhZ3kuaW5pdCgpIGZvcjogJW9cXG4lc1wiLCBlbCwgZXJyKSB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufSkoKTtcblxuZXhwb3J0IGRlZmF1bHQgUGFneTtcbiIKICBdLAogICJtYXBwaW5ncyI6ICI7QUFrQkEsSUFB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
|
data/pkg/pagy-8.4.2.gem
DELETED
Binary file
|
File without changes
|