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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d283e0b1a2f28d6e05156089b3284b22c3e488626d5501093fdee506260a9825
4
- data.tar.gz: c426766d510f8f229da57fedf0866b9ce9c2b213467a6548fbc760568b3ba973
3
+ metadata.gz: ac089590648eb671973328ca5e0b733974081bfcb77a6f62d12509e9974d61f0
4
+ data.tar.gz: edc05f99258a3a673532ab2f3fcca6108403574f101c3f3764369e79254ccf2f
5
5
  SHA512:
6
- metadata.gz: a7009de54deb7819bee599dc5a621f15e12c5de9a1e56c68a4136fb486d5214201f0ad626ec3bf979f3ba0eaadf267f902cc90da67214768a591b53b597ab931
7
- data.tar.gz: fbfc64b79436c808b218166d0efd5448f0ec8d66446091dc6d5a9e70872ae37868dabb92d67224224d2fa41e7c0f87ad294c6bfd67c34c97c492e947a480a562
6
+ metadata.gz: c2d7cfeb79468d57d830ccbc9d304c2df29d087990d28a58f7722a5f4712ea611a87799b95963d01936508102f1201b24e2d3549b1d8d10b471d69a300165f36
7
+ data.tar.gz: c1c862168613092702d8f93d76a01d835b772cf5de8a3b642f3f332a1b39456128ef20354e4fa09812d34e290c8706dfbbce74718ae41770033a87281a28c90c
data/apps/calendar.ru CHANGED
@@ -18,7 +18,7 @@
18
18
  # DOC
19
19
  # https://ddnexus.github.io/pagy/playground/#4-calendar-app
20
20
 
21
- VERSION = '8.4.2'
21
+ VERSION = '8.4.3'
22
22
 
23
23
  require 'bundler/inline'
24
24
  require 'bundler'
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.2'
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
- content_type 'application/javascript'
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="<%= %(/javascripts/#{"pagy#{'-dev' if ENV['DEBUG']}.js"}) %>"></script>
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-heigth: 1.2s;
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-heigth: 1rem !important;
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.2'
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 '/javascript' => 'pagy#javascript'
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 javascript
120
- file = "pagy#{'-dev' if ENV['DEBUG']}.js"
121
- render js: Pagy.root.join('javascripts', file).read
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="/javascript"></script>
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-heigth: 1.2s;
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.2'
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
- # Serve pagy.js or pagy-dev.js
50
- get("/#{PAGY_JS}") do
51
- content_type 'application/javascript'
52
- send_file Pagy.root.join('javascripts', PAGY_JS)
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="<%= %(/#{PAGY_JS}) %>"></script>
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-heigth: 1.2s;
111
+ line-height: 1.2s;
108
112
  padding: 0;
109
113
  margin: 0;
110
114
  } }
data/bin/pagy CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- VERSION = '8.4.2'
4
+ VERSION = '8.4.3'
5
5
  APPS = %w[repro rails demo calendar].freeze
6
6
  LINUX = RbConfig::CONFIG['host_os'].include?('linux')
7
7
 
data/config/pagy.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Pagy initializer file (8.4.2)
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
 
@@ -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.2",
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 x=new ResizeObserver((B)=>B.forEach((D)=>D.target.querySelectorAll(".pagy-rjs").forEach((E)=>E.pagyRender()))),A=(B,[D,E,z,G])=>{const F=B.parentElement??B,K=Object.keys(E).map((H)=>parseInt(H)).sort((H,M)=>M-H);let L=-1;const T=(H,M,Q)=>H.replace(/__pagy_page__/g,M).replace(/__pagy_label__/g,Q);if((B.pagyRender=function(){const H=K.find((R)=>R<F.clientWidth)||0;if(H===L)return;let M=D.before;const Q=E[H.toString()],Y=z?.[H.toString()]??Q.map((R)=>R.toString());for(let R in Q){const U=Q[R],j=Y[R];let X;if(typeof U==="number")X=T(D.a,U.toString(),j);else if(U==="gap")X=D.gap;else X=T(D.current,U,j);M+=typeof G==="string"&&U==1?$(X,G):X}M+=D.after,B.innerHTML="",B.insertAdjacentHTML("afterbegin",M),L=H})(),B.classList.contains("pagy-rjs"))x.observe(F)},C=(B,[D,E])=>Z(B,(z)=>[z,D.replace(/__pagy_page__/,z)],E),J=(B,[D,E,z])=>{Z(B,(G)=>{const F=Math.max(Math.ceil(D/parseInt(G)),1).toString(),K=E.replace(/__pagy_page__/,F).replace(/__pagy_items__/,G);return[F,K]},z)},Z=(B,D,E)=>{const z=B.querySelector("input"),G=B.querySelector("a"),F=z.value,K=function(){if(z.value===F)return;const[L,T,H]=[z.min,z.value,z.max].map((Y)=>parseInt(Y)||0);if(T<L||T>H){z.value=F,z.select();return}let[M,Q]=D(z.value);if(typeof E==="string"&&M==="1")Q=$(Q,E);G.href=Q,G.click()};["change","focus"].forEach((L)=>z.addEventListener(L,z.select)),z.addEventListener("focusout",K),z.addEventListener("keypress",(L)=>{if(L.key==="Enter")K()})},$=(B,D)=>B.replace(new RegExp(`[?&]${D}=1\\b(?!&)|\\b${D}=1&`),"");return{version:"8.4.2",init(B){const E=(B instanceof Element?B:document).querySelectorAll("[data-pagy]");for(let z of E)try{const G=Uint8Array.from(atob(z.getAttribute("data-pagy")),(L)=>L.charCodeAt(0)),[F,...K]=JSON.parse((new TextDecoder()).decode(G));if(F==="nav")A(z,K);else if(F==="combo")C(z,K);else if(F==="selector")J(z,K);else console.warn("Skipped Pagy.init() for: %o\nUnknown keyword '%s'",z,F)}catch(G){console.warn("Skipped Pagy.init() for: %o\n%s",z,G)}}}})();
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
@@ -5,7 +5,7 @@ require 'pathname'
5
5
 
6
6
  # Core class
7
7
  class Pagy
8
- VERSION = '8.4.2'
8
+ VERSION = '8.4.3'
9
9
 
10
10
  # Gem root pathname to get the path of Pagy files stylesheets, javascripts, apps, locales, etc.
11
11
  def self.root
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.2
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-04 00:00:00.000000000 Z
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.2.gem
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:
@@ -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