pagy 7.0.5 → 7.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 23ed181d6c937abde5035fce2fcc73ffdc41553461302f87ada5886db077b583
4
- data.tar.gz: 5bddf3a36fc0b47c2f15501f55045f45b16d2419a160352616cb918f75ab47a7
3
+ metadata.gz: ad56d9989566c41b48046508ab040e26c8a6350c1c433ce1a341d5ac8d624f97
4
+ data.tar.gz: dbaafa022867515e0912d80751244386e3026c0fa5de774f2014e80f1a26eb5f
5
5
  SHA512:
6
- metadata.gz: 3e727425a8e7efb69a4e2aa8cdf05d07233da12e7bb1859f6d1c757b863f18218bea4aec8be1f09b88496fe39c3bc1268c6c50db9afb2a56b2c680b1f997615c
7
- data.tar.gz: 8e67bdc30add6a250c66e22ab9ec4129214bca152718abf0bc9282b423d836874971a7e418eeac1e5e8f2fee197b1b24662468a6debb53b2eaf4791d5e3aabb4
6
+ metadata.gz: bb54413602bd78d87cb84a604d4a025dabae7a73cf54bbb0b5054d68f20119a6d9166188cf555f28f23659c6b375e55ade74429fdd042a8f1ac6c482112b69d5
7
+ data.tar.gz: e9083757c4cac1b40110d41ada75e13d626f8d0949486b32104a359653a61cf08bb384a1fcb674088ead0fb021528fd26dcbd1541d4dcd382ab8d6925734fec3
data/lib/config/pagy.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Pagy initializer file (7.0.5)
3
+ # Pagy initializer file (7.0.7)
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
 
@@ -13,24 +13,23 @@ window.Pagy = (() => {
13
13
  if (width === lastWidth) {
14
14
  return;
15
15
  } // no change: abort
16
- let html = tags.before;
16
+ let html = tags.before; // already trimmed in html
17
17
  const series = sequels[width.toString()];
18
18
  const labels = labelSequels?.[width.toString()] ?? series.map(l => l.toString());
19
19
  for (const i in series) {
20
20
  const item = series[i];
21
21
  const label = labels[i];
22
- if (typeof trimParam === "string" && item === 1) {
23
- html += trim(fillIn(tags.link, item.toString(), label), trimParam);
24
- }
25
- else if (typeof item === "number") {
26
- html += fillIn(tags.link, item.toString(), label);
22
+ let filled;
23
+ if (typeof item === "number") {
24
+ filled = fillIn(tags.link, item.toString(), label);
27
25
  }
28
26
  else if (item === "gap") {
29
- html += tags.gap;
27
+ filled = tags.gap;
30
28
  }
31
29
  else { // active page
32
- html += fillIn(tags.active, item, label);
30
+ filled = fillIn(tags.active, item, label);
33
31
  }
32
+ html += (typeof trimParam === "string" && item == 1) ? trim(filled, trimParam) : filled;
34
33
  }
35
34
  html += tags.after; // eslint-disable-line align-assignments/align-assignments
36
35
  el.innerHTML = "";
@@ -82,7 +81,7 @@ window.Pagy = (() => {
82
81
  const trim = (link, param) => link.replace(new RegExp(`[?&]${param}=1\\b(?!&)|\\b${param}=1&`), "");
83
82
  // Public interface
84
83
  return {
85
- version: "7.0.5",
84
+ version: "7.0.7",
86
85
  // Scan for elements with a "data-pagy" attribute and call their init functions with the decoded args
87
86
  init(arg) {
88
87
  const target = arg instanceof Element ? arg : document;
@@ -111,4 +110,4 @@ window.Pagy = (() => {
111
110
  }
112
111
  };
113
112
  })();
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBhZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQWtCQSxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRTtJQUNmLDRDQUE0QztJQUM1QyxNQUFNLFdBQVcsR0FBRyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUNOLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFhLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FDM0UsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFeEUsNEJBQTRCO0lBQzVCLE1BQU0sT0FBTyxHQUFHLENBQUMsRUFBYSxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFTLEVBQUUsRUFBRTtRQUNoRixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztRQUN6QyxNQUFNLE1BQU0sR0FBTSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuRixJQUFJLFNBQVMsR0FBSyxDQUFDLENBQUMsQ0FBQztRQUNyQixNQUFNLE1BQU0sR0FBTSxDQUFDLElBQVcsRUFBRSxJQUFXLEVBQUUsS0FBWSxFQUFTLEVBQUUsQ0FDaEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0UsQ0FBQyxFQUFFLENB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QU8sR0FBRyxFQUFFLENBQUM7b0JBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUE7Z0JBQUMsQ0FBQztZQUM5RSxDQUFDO1FBQ0wsQ0FBQztLQUNKLENBQUM7QUFDTixDQUFDLENBQUMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsidHlwZSBOYXZBcmdzID0gcmVhZG9ubHkgW1RhZ3MsIFNlcXVlbHMsIG51bGwgfCBMYWJlbFNlcXVlbHMsIHN0cmluZz9dXG50eXBlIENvbWJvQXJncyA9IHJlYWRvbmx5IFtzdHJpbmcsIHN0cmluZz9dXG50eXBlIFNlbGVjdG9yQXJncyA9IHJlYWRvbmx5IFtudW1iZXIsIHN0cmluZywgc3RyaW5nP11cblxuaW50ZXJmYWNlIFRhZ3Mge1xuICAgIHJlYWRvbmx5IGJlZm9yZTpzdHJpbmdcbiAgICByZWFkb25seSBsaW5rOnN0cmluZ1xuICAgIHJlYWRvbmx5IGFjdGl2ZTpzdHJpbmdcbiAgICByZWFkb25seSBnYXA6c3RyaW5nXG4gICAgcmVhZG9ubHkgYWZ0ZXI6c3RyaW5nXG59XG5cbmludGVyZmFjZSBTZXF1ZWxzIHtyZWFkb25seSBbd2lkdGg6c3RyaW5nXTooc3RyaW5nIHwgbnVtYmVyKVtdfVxuXG5pbnRlcmZhY2UgTGFiZWxTZXF1ZWxzIHtyZWFkb25seSBbd2lkdGg6c3RyaW5nXTpzdHJpbmdbXX1cblxuaW50ZXJmYWNlIE5hdkVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtwYWd5UmVuZGVyKCk6dm9pZH1cblxuY29uc3QgUGFneSA9ICgoKSA9PiB7XG4gICAgLy8gVGhlIG9ic2VydmVyIGluc3RhbmNlIGZvciByZXNwb25zaXZlIG5hdnNcbiAgICBjb25zdCByanNPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihlbnRyaWVzID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJpZXMuZm9yRWFjaChlID0+IGUudGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGw8TmF2RWxlbWVudD4oXCIucGFneS1yanNcIikuZm9yRWFjaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsID0+IGVsLnBhZ3lSZW5kZXIoKSkpKTtcblxuICAgIC8vIEluaXQgdGhlICpfbmF2X2pzIGhlbHBlcnNcbiAgICBjb25zdCBpbml0TmF2ID0gKGVsOk5hdkVsZW1lbnQsIFt0YWdzLCBzZXF1ZWxzLCBsYWJlbFNlcXVlbHMsIHRyaW1QYXJhbV06TmF2QXJncykgPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBlbC5wYXJlbnRFbGVtZW50ID8/IGVsO1xuICAgICAgICBjb25zdCB3aWR0aHMgICAgPSBPYmplY3Qua2V5cyhzZXF1ZWxzKS5tYXAodyA9PiBwYXJzZUludCh3KSkuc29ydCgoYSwgYikgPT4gYiAtIGEpO1xuICAgICAgICBsZXQgbGFzdFdpZHRoICAgPSAtMTtcbiAgICAgICAgY29uc3QgZmlsbEluICAgID0gKGxpbms6c3RyaW5nLCBwYWdlOnN0cmluZywgbGFiZWw6c3RyaW5nKTpzdHJpbmcgPT5cbiAgICAgICAgICAgIGxpbmsucmVwbGFjZSgvX19wYWd5X3BhZ2VfXy9nLCBwYWdlKS5yZXBsYWNlKC9fX3BhZ3lfbGFiZWxfXy9nLCBsYWJlbCk7XG4gICAgICAgIChlbC5wYWd5UmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB3aWR0aHMuZmluZCh3ID0+IHcgPCBjb250YWluZXIuY2xpZW50V2lkdGgpIHx8IDA7XG4gICAgICAgICAgICBpZiAod2lkdGggPT09IGxhc3RXaWR0aCkgeyByZXR1cm4gfSAvLyBubyBjaGFuZ2U6IGFib3J0XG4gICAgICAgICAgICBsZXQgaHRtbCAgICAgPSB0YWdzLmJlZm9yZTtcbiAgICAgICAgICAgIGNvbnN0IHNlcmllcyA9IHNlcXVlbHNbd2lkdGgudG9TdHJpbmcoKV07XG4gICAgICAgICAgICBjb25zdCBsYWJlbHMgPSBsYWJlbFNlcXVlbHM/Llt3aWR0aC50b1N0cmluZygpXSA/PyBzZXJpZXMubWFwKGwgPT4gbC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaSBpbiBzZXJpZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtICA9IHNlcmllc1tpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IGxhYmVsc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRyaW1QYXJhbSA9PT0gXCJzdHJpbmdcIiAmJiBpdGVtID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gdHJpbShmaWxsSW4odGFncy5saW5rLCBpdGVtLnRvU3RyaW5nKCksIGxhYmVsKSwgdHJpbVBhcmFtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gZmlsbEluKHRhZ3MubGluaywgaXRlbS50b1N0cmluZygpLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtID09PSBcImdhcFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gdGFncy5nYXA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gYWN0aXZlIHBhZ2VcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSBmaWxsSW4odGFncy5hY3RpdmUsIGl0ZW0sIGxhYmVsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBodG1sICs9IHRhZ3MuYWZ0ZXI7ICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBhbGlnbi1hc3NpZ25tZW50cy9hbGlnbi1hc3NpZ25tZW50c1xuICAgICAgICAgICAgZWwuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIGVsLmluc2VydEFkamFjZW50SFRNTChcImFmdGVyYmVnaW5cIiwgaHRtbCk7XG4gICAgICAgICAgICBsYXN0V2lkdGggPSB3aWR0aDtcbiAgICAgICAgfSkoKTtcbiAgICAgICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhcInBhZ3ktcmpzXCIpKSB7IHJqc09ic2VydmVyLm9ic2VydmUoY29udGFpbmVyKSB9XG4gICAgfTtcblxuICAgIC8vIEluaXQgdGhlICpfY29tYm9fbmF2X2pzIGhlbHBlcnNcbiAgICBjb25zdCBpbml0Q29tYm8gPSAoZWw6RWxlbWVudCwgW2xpbmssIHRyaW1QYXJhbV06Q29tYm9BcmdzKSA9PlxuICAgICAgICBpbml0SW5wdXQoZWwsIGlucHV0VmFsdWUgPT4gW2lucHV0VmFsdWUsIGxpbmsucmVwbGFjZSgvX19wYWd5X3BhZ2VfXy8sIGlucHV0VmFsdWUpXSwgdHJpbVBhcmFtKTtcblxuICAgIC8vIEluaXQgdGhlIGl0ZW1zX3NlbGVjdG9yX2pzIGhlbHBlclxuICAgIGNvbnN0IGluaXRTZWxlY3RvciA9IChlbDpFbGVtZW50LCBbZnJvbSwgbGluaywgdHJpbVBhcmFtXTpTZWxlY3RvckFyZ3MpID0+IHtcbiAgICAgICAgaW5pdElucHV0KGVsLCBpbnB1dFZhbHVlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBNYXRoLm1heChNYXRoLmNlaWwoZnJvbSAvIHBhcnNlSW50KGlucHV0VmFsdWUpKSwgMSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBsaW5rLnJlcGxhY2UoL19fcGFneV9wYWdlX18vLCBwYWdlKS5yZXBsYWNlKC9fX3BhZ3lfaXRlbXNfXy8sIGlucHV0VmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIFtwYWdlLCBodG1sXTtcbiAgICAgICAgfSwgdHJpbVBhcmFtKTtcbiAgICB9O1xuXG4gICAgLy8gSW5pdCB0aGUgaW5wdXQgZWxlbWVudFxuICAgIGNvbnN0IGluaXRJbnB1dCA9IChlbDpFbGVtZW50LCBnZXRWYXJzOih2OnN0cmluZykgPT4gW3N0cmluZywgc3RyaW5nXSwgdHJpbVBhcmFtPzpzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgICA9IGVsLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFwiKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBjb25zdCBpbml0aWFsID0gaW5wdXQudmFsdWU7XG4gICAgICAgIGNvbnN0IGFjdGlvbiAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQudmFsdWUgPT09IGluaXRpYWwpIHsgcmV0dXJuIH0gIC8vIG5vdCBjaGFuZ2VkXG4gICAgICAgICAgICBjb25zdCBbbWluLCB2YWwsIG1heF0gPSBbaW5wdXQubWluLCBpbnB1dC52YWx1ZSwgaW5wdXQubWF4XS5tYXAobiA9PiBwYXJzZUludChuKSB8fCAwKTtcbiAgICAgICAgICAgIGlmICh2YWwgPCBtaW4gfHwgdmFsID4gbWF4KSB7ICAvLyByZXNldCBpbnZhbGlkL291dC1vZi1yYW5nZVxuICAgICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gaW5pdGlhbDtcbiAgICAgICAgICAgICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgW3BhZ2UsIGh0bWxdID0gZ2V0VmFycyhpbnB1dC52YWx1ZSk7ICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItY29uc3RcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdHJpbVBhcmFtID09PSBcInN0cmluZ1wiICYmIHBhZ2UgPT09IFwiMVwiKSB7IGh0bWwgPSB0cmltKGh0bWwsIHRyaW1QYXJhbSkgfVxuICAgICAgICAgICAgZWwuaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYWZ0ZXJiZWdpblwiLCBodG1sKTtcbiAgICAgICAgICAgIChlbC5xdWVyeVNlbGVjdG9yKFwiYVwiKSBhcyBIVE1MQW5jaG9yRWxlbWVudCkuY2xpY2soKTtcbiAgICAgICAgfTtcbiAgICAgICAgW1wiY2hhbmdlXCIsIFwiZm9jdXNcIl0uZm9yRWFjaChlID0+IGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoZSwgaW5wdXQuc2VsZWN0KSk7ICAgICAgICAvLyBhdXRvLXNlbGVjdFxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNvdXRcIiwgYWN0aW9uKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyIGFjdGlvblxuICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIiwgZSA9PiB7IGlmIChlLmtleSA9PT0gXCJFbnRlclwiKSB7IGFjdGlvbigpIH0gfSk7IC8vIHRyaWdnZXIgYWN0aW9uXG4gICAgfTtcblxuICAgIC8vIFRyaW0gdGhlICR7cGFnZS1wYXJhbX09MSBwYXJhbXMgaW4gbGlua3NcbiAgICBjb25zdCB0cmltID0gKGxpbms6c3RyaW5nLCBwYXJhbTpzdHJpbmcpID0+XG4gICAgICAgIGxpbmsucmVwbGFjZShuZXcgUmVnRXhwKGBbPyZdJHtwYXJhbX09MVxcXFxiKD8hJil8XFxcXGIke3BhcmFtfT0xJmApLCBcIlwiKTtcblxuICAgIC8vIFB1YmxpYyBpbnRlcmZhY2VcbiAgICByZXR1cm4ge1xuICAgICAgICB2ZXJzaW9uOiBcIjcuMC41XCIsXG5cbiAgICAgICAgLy8gU2NhbiBmb3IgZWxlbWVudHMgd2l0aCBhIFwiZGF0YS1wYWd5XCIgYXR0cmlidXRlIGFuZCBjYWxsIHRoZWlyIGluaXQgZnVuY3Rpb25zIHdpdGggdGhlIGRlY29kZWQgYXJnc1xuICAgICAgICBpbml0KGFyZz86RWxlbWVudCB8IG5ldmVyKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgICA9IGFyZyBpbnN0YW5jZW9mIEVsZW1lbnQgPyBhcmcgOiBkb2N1bWVudDtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1wYWd5XVwiKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWwgb2YgZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OGFycmF5ICAgICAgICAgPSBVaW50OEFycmF5LmZyb20oYXRvYihlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXBhZ3lcIikgYXMgc3RyaW5nKSwgYyA9PiBjLmNoYXJDb2RlQXQoMCkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBba2V5d29yZCwgLi4uYXJnc10gPSBKU09OLnBhcnNlKChuZXcgVGV4dERlY29kZXIoKSkuZGVjb2RlKHVpbnQ4YXJyYXkpKTsgLy8gYmFzZTY0LXV0ZjggLT4gSlNPTiAtPiBBcnJheVxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5d29yZCA9PT0gXCJuYXZcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdE5hdihlbCBhcyBOYXZFbGVtZW50LCBhcmdzIGFzIE5hdkFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleXdvcmQgPT09IFwiY29tYm9cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdENvbWJvKGVsLCBhcmdzIGFzIENvbWJvQXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5d29yZCA9PT0gXCJzZWxlY3RvclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0U2VsZWN0b3IoZWwsIGFyZ3MgYXMgU2VsZWN0b3JBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlNraXBwZWQgUGFneS5pbml0KCkgZm9yOiAlb1xcblVua25vd24ga2V5d29yZCAnJXMnXCIsIGVsLCBrZXl3b3JkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgeyBjb25zb2xlLndhcm4oXCJTa2lwcGVkIFBhZ3kuaW5pdCgpIGZvcjogJW9cXG4lc1wiLCBlbCwgZXJyKSB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufSkoKTtcbiJdfQ==
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBhZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQWtCQSxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRTtJQUNmLDRDQUE0QztJQUM1QyxNQUFNLFdBQVcsR0FBRyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUNOLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFhLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FDM0UsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFeEUsNEJBQTRCO0lBQzVCLE1BQU0sT0FBTyxHQUFHLENBQUMsRUFBYSxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFTLEVBQUUsRUFBRTtRQUNoRixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztRQUN6QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoRixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuQixNQUFNLE1BQU0sR0FBRyxDQUFDLElBQVcsRUFBRSxJQUFXLEVBQUUsS0FBWSxFQUFTLEVBQUUsQ0FDN0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0UsQ0FBQyxFQUFFLENB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QUM7b0JBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUE7Z0JBQUMsQ0FBQztZQUM5RSxDQUFDO1FBQ0wsQ0FBQztLQUNKLENBQUM7QUFDTixDQUFDLENBQUMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsidHlwZSBOYXZBcmdzID0gcmVhZG9ubHkgW1RhZ3MsIFNlcXVlbHMsIG51bGwgfCBMYWJlbFNlcXVlbHMsIHN0cmluZz9dXG50eXBlIENvbWJvQXJncyA9IHJlYWRvbmx5IFtzdHJpbmcsIHN0cmluZz9dXG50eXBlIFNlbGVjdG9yQXJncyA9IHJlYWRvbmx5IFtudW1iZXIsIHN0cmluZywgc3RyaW5nP11cblxuaW50ZXJmYWNlIFRhZ3Mge1xuICAgIHJlYWRvbmx5IGJlZm9yZTpzdHJpbmdcbiAgICByZWFkb25seSBsaW5rOnN0cmluZ1xuICAgIHJlYWRvbmx5IGFjdGl2ZTpzdHJpbmdcbiAgICByZWFkb25seSBnYXA6c3RyaW5nXG4gICAgcmVhZG9ubHkgYWZ0ZXI6c3RyaW5nXG59XG5cbmludGVyZmFjZSBTZXF1ZWxzIHtyZWFkb25seSBbd2lkdGg6c3RyaW5nXTooc3RyaW5nIHwgbnVtYmVyKVtdfVxuXG5pbnRlcmZhY2UgTGFiZWxTZXF1ZWxzIHtyZWFkb25seSBbd2lkdGg6c3RyaW5nXTpzdHJpbmdbXX1cblxuaW50ZXJmYWNlIE5hdkVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtwYWd5UmVuZGVyKCk6dm9pZH1cblxuY29uc3QgUGFneSA9ICgoKSA9PiB7XG4gICAgLy8gVGhlIG9ic2VydmVyIGluc3RhbmNlIGZvciByZXNwb25zaXZlIG5hdnNcbiAgICBjb25zdCByanNPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihlbnRyaWVzID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJpZXMuZm9yRWFjaChlID0+IGUudGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGw8TmF2RWxlbWVudD4oXCIucGFneS1yanNcIikuZm9yRWFjaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsID0+IGVsLnBhZ3lSZW5kZXIoKSkpKTtcblxuICAgIC8vIEluaXQgdGhlICpfbmF2X2pzIGhlbHBlcnNcbiAgICBjb25zdCBpbml0TmF2ID0gKGVsOk5hdkVsZW1lbnQsIFt0YWdzLCBzZXF1ZWxzLCBsYWJlbFNlcXVlbHMsIHRyaW1QYXJhbV06TmF2QXJncykgPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBlbC5wYXJlbnRFbGVtZW50ID8/IGVsO1xuICAgICAgICBjb25zdCB3aWR0aHMgPSBPYmplY3Qua2V5cyhzZXF1ZWxzKS5tYXAodyA9PiBwYXJzZUludCh3KSkuc29ydCgoYSwgYikgPT4gYiAtIGEpO1xuICAgICAgICBsZXQgbGFzdFdpZHRoID0gLTE7XG4gICAgICAgIGNvbnN0IGZpbGxJbiA9IChsaW5rOnN0cmluZywgcGFnZTpzdHJpbmcsIGxhYmVsOnN0cmluZyk6c3RyaW5nID0+XG4gICAgICAgICAgICBsaW5rLnJlcGxhY2UoL19fcGFneV9wYWdlX18vZywgcGFnZSkucmVwbGFjZSgvX19wYWd5X2xhYmVsX18vZywgbGFiZWwpO1xuICAgICAgICAoZWwucGFneVJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gd2lkdGhzLmZpbmQodyA9PiB3IDwgY29udGFpbmVyLmNsaWVudFdpZHRoKSB8fCAwO1xuICAgICAgICAgICAgaWYgKHdpZHRoID09PSBsYXN0V2lkdGgpIHsgcmV0dXJuIH0gLy8gbm8gY2hhbmdlOiBhYm9ydFxuICAgICAgICAgICAgbGV0IGh0bWwgPSB0YWdzLmJlZm9yZTsgIC8vIGFscmVhZHkgdHJpbW1lZCBpbiBodG1sXG4gICAgICAgICAgICBjb25zdCBzZXJpZXMgPSBzZXF1ZWxzW3dpZHRoLnRvU3RyaW5nKCldO1xuICAgICAgICAgICAgY29uc3QgbGFiZWxzID0gbGFiZWxTZXF1ZWxzPy5bd2lkdGgudG9TdHJpbmcoKV0gPz8gc2VyaWVzLm1hcChsID0+IGwudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGkgaW4gc2VyaWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHNlcmllc1tpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IGxhYmVsc1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgZmlsbGVkO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBmaWxsZWQgPSBmaWxsSW4odGFncy5saW5rLCBpdGVtLnRvU3RyaW5nKCksIGxhYmVsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gPT09IFwiZ2FwXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsbGVkID0gdGFncy5nYXA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gYWN0aXZlIHBhZ2VcbiAgICAgICAgICAgICAgICAgICAgZmlsbGVkID0gZmlsbEluKHRhZ3MuYWN0aXZlLCBpdGVtLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGh0bWwgKz0gKHR5cGVvZiB0cmltUGFyYW0gPT09IFwic3RyaW5nXCIgJiYgaXRlbSA9PSAxKSA/IHRyaW0oZmlsbGVkLCB0cmltUGFyYW0pIDogZmlsbGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaHRtbCArPSB0YWdzLmFmdGVyOyAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgYWxpZ24tYXNzaWdubWVudHMvYWxpZ24tYXNzaWdubWVudHNcbiAgICAgICAgICAgIGVsLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBlbC5pbnNlcnRBZGphY2VudEhUTUwoXCJhZnRlcmJlZ2luXCIsIGh0bWwpO1xuICAgICAgICAgICAgbGFzdFdpZHRoID0gd2lkdGg7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoXCJwYWd5LXJqc1wiKSkgeyByanNPYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lcikgfVxuICAgIH07XG5cbiAgICAvLyBJbml0IHRoZSAqX2NvbWJvX25hdl9qcyBoZWxwZXJzXG4gICAgY29uc3QgaW5pdENvbWJvID0gKGVsOkVsZW1lbnQsIFtsaW5rLCB0cmltUGFyYW1dOkNvbWJvQXJncykgPT5cbiAgICAgICAgaW5pdElucHV0KGVsLCBpbnB1dFZhbHVlID0+IFtpbnB1dFZhbHVlLCBsaW5rLnJlcGxhY2UoL19fcGFneV9wYWdlX18vLCBpbnB1dFZhbHVlKV0sIHRyaW1QYXJhbSk7XG5cbiAgICAvLyBJbml0IHRoZSBpdGVtc19zZWxlY3Rvcl9qcyBoZWxwZXJcbiAgICBjb25zdCBpbml0U2VsZWN0b3IgPSAoZWw6RWxlbWVudCwgW2Zyb20sIGxpbmssIHRyaW1QYXJhbV06U2VsZWN0b3JBcmdzKSA9PiB7XG4gICAgICAgIGluaXRJbnB1dChlbCwgaW5wdXRWYWx1ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYWdlID0gTWF0aC5tYXgoTWF0aC5jZWlsKGZyb20gLyBwYXJzZUludChpbnB1dFZhbHVlKSksIDEpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCBodG1sID0gbGluay5yZXBsYWNlKC9fX3BhZ3lfcGFnZV9fLywgcGFnZSkucmVwbGFjZSgvX19wYWd5X2l0ZW1zX18vLCBpbnB1dFZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBbcGFnZSwgaHRtbF07XG4gICAgICAgIH0sIHRyaW1QYXJhbSk7XG4gICAgfTtcblxuICAgIC8vIEluaXQgdGhlIGlucHV0IGVsZW1lbnRcbiAgICBjb25zdCBpbml0SW5wdXQgPSAoZWw6RWxlbWVudCwgZ2V0VmFyczoodjpzdHJpbmcpID0+IFtzdHJpbmcsIHN0cmluZ10sIHRyaW1QYXJhbT86c3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZWwucXVlcnlTZWxlY3RvcihcImlucHV0XCIpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGluaXRpYWwgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LnZhbHVlID09PSBpbml0aWFsKSB7IHJldHVybiB9ICAvLyBub3QgY2hhbmdlZFxuICAgICAgICAgICAgY29uc3QgW21pbiwgdmFsLCBtYXhdID0gW2lucHV0Lm1pbiwgaW5wdXQudmFsdWUsIGlucHV0Lm1heF0ubWFwKG4gPT4gcGFyc2VJbnQobikgfHwgMCk7XG4gICAgICAgICAgICBpZiAodmFsIDwgbWluIHx8IHZhbCA+IG1heCkgeyAgLy8gcmVzZXQgaW52YWxpZC9vdXQtb2YtcmFuZ2VcbiAgICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IGluaXRpYWw7XG4gICAgICAgICAgICAgICAgaW5wdXQuc2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IFtwYWdlLCBodG1sXSA9IGdldFZhcnMoaW5wdXQudmFsdWUpOyAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRyaW1QYXJhbSA9PT0gXCJzdHJpbmdcIiAmJiBwYWdlID09PSBcIjFcIikgeyBodG1sID0gdHJpbShodG1sLCB0cmltUGFyYW0pIH1cbiAgICAgICAgICAgIGVsLmluc2VydEFkamFjZW50SFRNTChcImFmdGVyYmVnaW5cIiwgaHRtbCk7XG4gICAgICAgICAgICAoZWwucXVlcnlTZWxlY3RvcihcImFcIikgYXMgSFRNTEFuY2hvckVsZW1lbnQpLmNsaWNrKCk7XG4gICAgICAgIH07XG4gICAgICAgIFtcImNoYW5nZVwiLCBcImZvY3VzXCJdLmZvckVhY2goZSA9PiBpbnB1dC5hZGRFdmVudExpc3RlbmVyKGUsIGlucHV0LnNlbGVjdCkpOyAgICAgICAgLy8gYXV0by1zZWxlY3RcbiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3Vzb3V0XCIsIGFjdGlvbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJpZ2dlciBhY3Rpb25cbiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXByZXNzXCIsIGUgPT4geyBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikgeyBhY3Rpb24oKSB9IH0pOyAvLyB0cmlnZ2VyIGFjdGlvblxuICAgIH07XG5cbiAgICAvLyBUcmltIHRoZSAke3BhZ2UtcGFyYW19PTEgcGFyYW1zIGluIGxpbmtzXG4gICAgY29uc3QgdHJpbSA9IChsaW5rOnN0cmluZywgcGFyYW06c3RyaW5nKSA9PlxuICAgICAgICBsaW5rLnJlcGxhY2UobmV3IFJlZ0V4cChgWz8mXSR7cGFyYW19PTFcXFxcYig/ISYpfFxcXFxiJHtwYXJhbX09MSZgKSwgXCJcIik7XG5cbiAgICAvLyBQdWJsaWMgaW50ZXJmYWNlXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmVyc2lvbjogXCI3LjAuN1wiLFxuXG4gICAgICAgIC8vIFNjYW4gZm9yIGVsZW1lbnRzIHdpdGggYSBcImRhdGEtcGFneVwiIGF0dHJpYnV0ZSBhbmQgY2FsbCB0aGVpciBpbml0IGZ1bmN0aW9ucyB3aXRoIHRoZSBkZWNvZGVkIGFyZ3NcbiAgICAgICAgaW5pdChhcmc/OkVsZW1lbnQgfCBuZXZlcikge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYXJnIGluc3RhbmNlb2YgRWxlbWVudCA/IGFyZyA6IGRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSB0YXJnZXQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLXBhZ3ldXCIpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbCBvZiBlbGVtZW50cykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4YXJyYXkgPSBVaW50OEFycmF5LmZyb20oYXRvYihlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXBhZ3lcIikgYXMgc3RyaW5nKSwgYyA9PiBjLmNoYXJDb2RlQXQoMCkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBba2V5d29yZCwgLi4uYXJnc10gPSBKU09OLnBhcnNlKChuZXcgVGV4dERlY29kZXIoKSkuZGVjb2RlKHVpbnQ4YXJyYXkpKTsgLy8gYmFzZTY0LXV0ZjggLT4gSlNPTiAtPiBBcnJheVxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5d29yZCA9PT0gXCJuYXZcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdE5hdihlbCBhcyBOYXZFbGVtZW50LCBhcmdzIGFzIE5hdkFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleXdvcmQgPT09IFwiY29tYm9cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdENvbWJvKGVsLCBhcmdzIGFzIENvbWJvQXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5d29yZCA9PT0gXCJzZWxlY3RvclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0U2VsZWN0b3IoZWwsIGFyZ3MgYXMgU2VsZWN0b3JBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlNraXBwZWQgUGFneS5pbml0KCkgZm9yOiAlb1xcblVua25vd24ga2V5d29yZCAnJXMnXCIsIGVsLCBrZXl3b3JkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgeyBjb25zb2xlLndhcm4oXCJTa2lwcGVkIFBhZ3kuaW5pdCgpIGZvcjogJW9cXG4lc1wiLCBlbCwgZXJyKSB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufSkoKTtcbiJdfQ==
@@ -12,24 +12,23 @@ const Pagy = (() => {
12
12
  if (width === lastWidth) {
13
13
  return;
14
14
  } // no change: abort
15
- let html = tags.before;
15
+ let html = tags.before; // already trimmed in html
16
16
  const series = sequels[width.toString()];
17
17
  const labels = labelSequels?.[width.toString()] ?? series.map(l => l.toString());
18
18
  for (const i in series) {
19
19
  const item = series[i];
20
20
  const label = labels[i];
21
- if (typeof trimParam === "string" && item === 1) {
22
- html += trim(fillIn(tags.link, item.toString(), label), trimParam);
23
- }
24
- else if (typeof item === "number") {
25
- html += fillIn(tags.link, item.toString(), label);
21
+ let filled;
22
+ if (typeof item === "number") {
23
+ filled = fillIn(tags.link, item.toString(), label);
26
24
  }
27
25
  else if (item === "gap") {
28
- html += tags.gap;
26
+ filled = tags.gap;
29
27
  }
30
28
  else { // active page
31
- html += fillIn(tags.active, item, label);
29
+ filled = fillIn(tags.active, item, label);
32
30
  }
31
+ html += (typeof trimParam === "string" && item == 1) ? trim(filled, trimParam) : filled;
33
32
  }
34
33
  html += tags.after; // eslint-disable-line align-assignments/align-assignments
35
34
  el.innerHTML = "";
@@ -81,7 +80,7 @@ const Pagy = (() => {
81
80
  const trim = (link, param) => link.replace(new RegExp(`[?&]${param}=1\\b(?!&)|\\b${param}=1&`), "");
82
81
  // Public interface
83
82
  return {
84
- version: "7.0.5",
83
+ version: "7.0.7",
85
84
  // Scan for elements with a "data-pagy" attribute and call their init functions with the decoded args
86
85
  init(arg) {
87
86
  const target = arg instanceof Element ? arg : document;
@@ -1 +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,n,a,i])=>{let l=t.parentElement??t,c=Object.keys(n).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=>e<l.clientWidth)||0;if(e===p)return;let g=r.before,y=n[e.toString()],f=a?.[e.toString()]??y.map(e=>e.toString());for(let e in y){let t=y[e],n=f[e];"string"==typeof i&&1===t?g+=o(s(r.link,t.toString(),n),i):"number"==typeof t?g+=s(r.link,t.toString(),n):"gap"===t?g+=r.gap:g+=s(r.active,t,n)}g+=r.after,t.innerHTML="",t.insertAdjacentHTML("afterbegin",g),p=e})(),t.classList.contains("pagy-rjs")&&e.observe(l)},r=(e,[t,r])=>a(e,e=>[e,t.replace(/__pagy_page__/,e)],r),n=(e,[t,r,n])=>{a(e,e=>{let n=Math.max(Math.ceil(t/parseInt(e)),1).toString(),a=r.replace(/__pagy_page__/,n).replace(/__pagy_items__/,e);return[n,a]},n)},a=(e,t,r)=>{let n=e.querySelector("input"),a=n.value,i=function(){if(n.value===a)return;let[i,l,c]=[n.min,n.value,n.max].map(e=>parseInt(e)||0);if(l<i||l>c){n.value=a,n.select();return}let[p,s]=t(n.value);"string"==typeof r&&"1"===p&&(s=o(s,r)),e.insertAdjacentHTML("afterbegin",s),e.querySelector("a").click()};["change","focus"].forEach(e=>n.addEventListener(e,n.select)),n.addEventListener("focusout",i),n.addEventListener("keypress",e=>{"Enter"===e.key&&i()})},o=(e,t)=>e.replace(RegExp(`[?&]${t}=1\\b(?!&)|\\b${t}=1&`),"");return{version:"7.0.5",init(e){for(let a of(e instanceof Element?e:document).querySelectorAll("[data-pagy]"))try{let e=Uint8Array.from(atob(a.getAttribute("data-pagy")),e=>e.charCodeAt(0)),[o,...i]=JSON.parse(new TextDecoder().decode(e));"nav"===o?t(a,i):"combo"===o?r(a,i):"selector"===o?n(a,i):console.warn("Skipped Pagy.init() for: %o\nUnknown keyword '%s'",a,o)}catch(e){console.warn("Skipped Pagy.init() for: %o\n%s",a,e)}}}})();window.Pagy=e}();
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,i])=>{let l=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=>e<l.clientWidth)||0;if(e===p)return;let g=r.before,y=a[e.toString()],f=n?.[e.toString()]??y.map(e=>e.toString());for(let e in y){let t;let a=y[e],n=f[e];t="number"==typeof a?s(r.link,a.toString(),n):"gap"===a?r.gap:s(r.active,a,n),g+="string"==typeof i&&1==a?o(t,i):t}g+=r.after,t.innerHTML="",t.insertAdjacentHTML("afterbegin",g),p=e})(),t.classList.contains("pagy-rjs")&&e.observe(l)},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=a.value,i=function(){if(a.value===n)return;let[i,l,c]=[a.min,a.value,a.max].map(e=>parseInt(e)||0);if(l<i||l>c){a.value=n,a.select();return}let[p,s]=t(a.value);"string"==typeof r&&"1"===p&&(s=o(s,r)),e.insertAdjacentHTML("afterbegin",s),e.querySelector("a").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:"7.0.7",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,...i]=JSON.parse(new TextDecoder().decode(e));"nav"===o?t(n,i):"combo"===o?r(n,i):"selector"===o?a(n,i):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}();
@@ -21,9 +21,10 @@ class Pagy # :nodoc:
21
21
  when Integer
22
22
  %(<li class="page-item">#{link.call(item)}</li>)
23
23
  when String
24
- %(<li class="page-item active">#{link.call(item)}</li>)
24
+ %(<li class="page-item active"><a role="link" class="page-link" aria-current="page" aria-disabled="true">#{
25
+ pagy.label_for(item)}</a></li>)
25
26
  when :gap
26
- %(<li class="page-item gap disabled"><a href="#" class="page-link" aria-disabled="true">#{
27
+ %(<li class="page-item gap disabled"><a role="link" class="page-link" aria-disabled="true">#{
27
28
  pagy_t 'pagy.gap'}</a></li>)
28
29
  else raise InternalError, "expected item types in series to be Integer, String or :gap; got #{item.inspect}"
29
30
  end
@@ -39,9 +40,10 @@ class Pagy # :nodoc:
39
40
  p_id = %( id="#{pagy_id}") if pagy_id
40
41
  link = pagy_link_proc(pagy, link_extra: %(class="page-link" #{link_extra}))
41
42
  tags = { 'before' => %(<ul class="pagination">#{bootstrap_prev_html pagy, link}),
42
- 'link' => %(<li class="page-item">#{html = link.call(PAGE_PLACEHOLDER, LABEL_PLACEHOLDER)}</li>),
43
- 'active' => %(<li class="page-item active">#{html}</li>),
44
- 'gap' => %(<li class="page-item gap disabled"><a href="#" class="page-link" aria-disabled="true">#{
43
+ 'link' => %(<li class="page-item">#{link.call(PAGE_TOKEN, LABEL_TOKEN)}</li>),
44
+ 'active' => %(<li class="page-item active"><a role="link" class="page-link" ) +
45
+ %(aria-current="page" aria-disabled="true">#{LABEL_TOKEN}</a></li>),
46
+ 'gap' => %(<li class="page-item gap disabled"><a role="link" class="page-link" aria-disabled="true">#{
45
47
  pagy_t 'pagy.gap'}</a></li>),
46
48
  'after' => %(#{bootstrap_next_html pagy, link}</ul>) }
47
49
 
@@ -68,7 +70,7 @@ class Pagy # :nodoc:
68
70
  if (p_prev = pagy.prev)
69
71
  link.call(p_prev, pagy_t('pagy.prev'), %(class="prev btn btn-primary" #{prev_aria_label_attr}))
70
72
  else
71
- %(<a class="prev btn btn-primary disabled" href="#" aria-disabled="true" #{
73
+ %(<a role="link" class="prev btn btn-primary disabled" aria-disabled="true" #{
72
74
  prev_aria_label_attr}>#{pagy_t('pagy.prev')}</a>)
73
75
  end
74
76
  }<div class="pagy-combo-input btn btn-secondary" style="white-space: nowrap;">#{
@@ -76,7 +78,7 @@ class Pagy # :nodoc:
76
78
  if (p_next = pagy.next)
77
79
  link.call(p_next, pagy_t('pagy.next'), %(class="next btn btn-primary" #{next_aria_label_attr}))
78
80
  else
79
- %(<a class="next btn btn-primary disabled" href="#" aria-disabled="true" #{
81
+ %(<a role="link" class="next btn btn-primary disabled" aria-disabled="true" #{
80
82
  next_aria_label_attr}>#{pagy_t 'pagy.next'}</a>)
81
83
  end
82
84
  }</div></nav>)
@@ -88,7 +90,7 @@ class Pagy # :nodoc:
88
90
  if (p_prev = pagy.prev)
89
91
  %(<li class="page-item prev">#{link.call(p_prev, pagy_t('pagy.prev'), prev_aria_label_attr)}</li>)
90
92
  else
91
- %(<li class="page-item prev disabled"><a href="#" class="page-link" aria-disabled="true" #{
93
+ %(<li class="page-item prev disabled"><a role="link"class="page-link" aria-disabled="true" #{
92
94
  prev_aria_label_attr}>#{pagy_t('pagy.prev')}</a></li>)
93
95
  end
94
96
  end
@@ -97,7 +99,7 @@ class Pagy # :nodoc:
97
99
  if (p_next = pagy.next)
98
100
  %(<li class="page-item next">#{link.call p_next, pagy_t('pagy.next'), next_aria_label_attr}</li>)
99
101
  else
100
- %(<li class="page-item next disabled"><a href="#" class="page-link" aria-disabled="true" #{
102
+ %(<li class="page-item next disabled"><a role="link" class="page-link" aria-disabled="true" #{
101
103
  next_aria_label_attr}>#{pagy_t('pagy.next')}</a></li>)
102
104
  end
103
105
  end
@@ -24,7 +24,8 @@ class Pagy # :nodoc:
24
24
  when Integer
25
25
  %(<li>#{link.call(item, pagy.label_for(item), %(class="pagination-link"))}</li>)
26
26
  when String
27
- %(<li>#{link.call(item, pagy.label_for(item), %(class="pagination-link is-current"))}</li>)
27
+ %(<li><a role="link" class="pagination-link is-current" aria-current="page" aria-disabled="true">#{
28
+ pagy.label_for(item)}</a></li>)
28
29
  when :gap
29
30
  %(<li><span class="pagination-ellipsis">#{pagy_t 'pagy.gap'}</span></li>)
30
31
  else raise InternalError, "expected item types in series to be Integer, String or :gap; got #{item.inspect}"
@@ -40,8 +41,9 @@ class Pagy # :nodoc:
40
41
  p_id = %( id="#{pagy_id}") if pagy_id
41
42
  link = pagy_link_proc(pagy, link_extra:)
42
43
  tags = { 'before' => %(#{bulma_prev_next_html(pagy, link)}<ul class="pagination-list">),
43
- 'link' => %(<li>#{link.call(PAGE_PLACEHOLDER, LABEL_PLACEHOLDER, %(class="pagination-link"))}</li>),
44
- 'active' => %(<li>#{link.call(PAGE_PLACEHOLDER, LABEL_PLACEHOLDER, %(class="pagination-link is-current"))}</li>),
44
+ 'link' => %(<li>#{link.call(PAGE_TOKEN, LABEL_TOKEN, %(class="pagination-link"))}</li>),
45
+ 'active' => %(<li><a role="link" class="pagination-link is-current" aria-current="page" aria-disabled="true">#{
46
+ LABEL_TOKEN}</a></li>),
45
47
  'gap' => %(<li><span class="pagination-ellipsis">#{pagy_t 'pagy.gap'}</span></li>),
46
48
  'after' => '</ul>' }
47
49
 
@@ -68,7 +70,7 @@ class Pagy # :nodoc:
68
70
  if (p_prev = pagy.prev)
69
71
  %(<p class="control">#{link.call(p_prev, pagy_t('pagy.prev'), %(class="button" #{prev_aria_label_attr}))}</p>)
70
72
  else
71
- %(<p class="control"><a class="button" disabled aria-disabled="true" #{
73
+ %(<p class="control"><a role="link" class="button" disabled aria-disabled="true" #{
72
74
  prev_aria_label_attr}>#{pagy_t 'pagy.prev'}</a></p>)
73
75
  end
74
76
  }<div class="pagy-combo-input control level is-mobile">#{
@@ -76,7 +78,7 @@ class Pagy # :nodoc:
76
78
  if (p_next = pagy.next)
77
79
  %(<p class="control">#{link.call(p_next, pagy_t('pagy.next'), %(class="button" #{next_aria_label_attr}))}</p>)
78
80
  else
79
- %(<p class="control"><a class="button" disabled aria-disabled="true"#{
81
+ %(<p class="control"><a role="link" class="button" disabled aria-disabled="true"#{
80
82
  next_aria_label_attr}>#{pagy_t 'pagy.next'}</a></p>)
81
83
  end
82
84
  }</div></nav>)
@@ -88,13 +90,13 @@ class Pagy # :nodoc:
88
90
  html = +if (p_prev = pagy.prev)
89
91
  link.call(p_prev, pagy_t('pagy.prev'), %(#{prev_aria_label_attr} class="pagination-previous"))
90
92
  else
91
- %(<a class="pagination-previous" disabled aria-disabled="true" #{
93
+ %(<a role="link" class="pagination-previous" disabled aria-disabled="true" #{
92
94
  prev_aria_label_attr}>#{pagy_t 'pagy.prev'}</a>)
93
95
  end
94
96
  html << if (p_next = pagy.next)
95
97
  link.call(p_next, pagy_t('pagy.next'), %(#{next_aria_label_attr} class="pagination-next"))
96
98
  else
97
- %(<a class="pagination-next" disabled aria-disabled="true" #{
99
+ %(<a role="link" class="pagination-next" disabled aria-disabled="true" #{
98
100
  next_aria_label_attr}>#{pagy_t('pagy.next')}</a>)
99
101
  end
100
102
  end
@@ -39,8 +39,8 @@ class Pagy # :nodoc:
39
39
  p_id = %( id="#{pagy_id}") if pagy_id
40
40
  link = pagy_link_proc(pagy, link_extra:)
41
41
  tags = { 'before' => %(<ul class="pagination">#{foundation_prev_html pagy, link}),
42
- 'link' => %(<li>#{link.call(PAGE_PLACEHOLDER, LABEL_PLACEHOLDER)}</li>),
43
- 'active' => %(<li class="current" role="link" aria-current="page" aria-disabled="true">#{LABEL_PLACEHOLDER}</li>),
42
+ 'link' => %(<li>#{link.call(PAGE_TOKEN, LABEL_TOKEN)}</li>),
43
+ 'active' => %(<li class="current" role="link" aria-current="page" aria-disabled="true">#{LABEL_TOKEN}</li>),
44
44
  'gap' => %(<li class="ellipsis gap"></li>),
45
45
  'after' => %(#{pagy_foundation_next_html pagy, link}</ul>) }
46
46
 
@@ -64,7 +64,7 @@ class Pagy # :nodoc:
64
64
 
65
65
  # Return the marked link used by pagy.js
66
66
  def pagy_marked_link(link)
67
- link.call PAGE_PLACEHOLDER, '', 'style="display: none;"'
67
+ link.call PAGE_TOKEN, '', 'style="display: none;"'
68
68
  end
69
69
  end
70
70
  Frontend.prepend FrontendAddOn
@@ -31,10 +31,10 @@ class Pagy # :nodoc:
31
31
  countless = defined?(Countless) && pagy.is_a?(Countless)
32
32
  rel = { 'first' => 1, 'prev' => pagy.prev, 'next' => pagy.next }
33
33
  rel['last'] = pagy.last unless countless
34
- url_str = pagy_url_for(pagy, PAGE_PLACEHOLDER, absolute: true)
34
+ url_str = pagy_url_for(pagy, PAGE_TOKEN, absolute: true)
35
35
  link = rel.filter_map do |r, num|
36
36
  next unless num # rubocop:disable Layout/EmptyLineAfterGuardClause
37
- [r, url_str.sub(PAGE_PLACEHOLDER, num.to_s)]
37
+ [r, url_str.sub(PAGE_TOKEN, num.to_s)]
38
38
  end.compact.to_h
39
39
  hash = { 'link' => link }
40
40
  headers = pagy.vars[:headers]
@@ -21,9 +21,9 @@ class Pagy # :nodoc:
21
21
  when Integer
22
22
  %(<li class="waves-effect">#{link.call(item)}</li>)
23
23
  when String
24
- %(<li class="active">#{link.call(item)}</li>)
24
+ %(<li class="active"><a role="link" aria-current="page" aria-disabled="true">#{pagy.label_for(item)}</a></li>)
25
25
  when :gap
26
- %(<li class="gap disabled"><a href="#" aria-disabled="true">#{pagy_t 'pagy.gap'}</a></li>)
26
+ %(<li class="gap disabled"><a role="link" aria-disabled="true">#{pagy_t 'pagy.gap'}</a></li>)
27
27
  else
28
28
  raise InternalError, "expected item types in series to be Integer, String or :gap; got #{item.inspect}"
29
29
  end
@@ -40,9 +40,9 @@ class Pagy # :nodoc:
40
40
  link = pagy_link_proc(pagy, link_extra:)
41
41
 
42
42
  tags = { 'before' => %(<ul class="pagination">#{materialize_prev_html pagy, link}),
43
- 'link' => %(<li class="waves-effect">#{html = link.call(PAGE_PLACEHOLDER, LABEL_PLACEHOLDER)}</li>),
44
- 'active' => %(<li class="active">#{html}</li>),
45
- 'gap' => %(<li class="gap disabled"><a href="#" aria-disabled="true">#{pagy_t 'pagy.gap'}</a></li>),
43
+ 'link' => %(<li class="waves-effect">#{link.call(PAGE_TOKEN, LABEL_TOKEN)}</li>),
44
+ 'active' => %(<li class="active"><a role="link" aria-current="page" aria-disabled="true">#{LABEL_TOKEN}</a></li>),
45
+ 'gap' => %(<li class="gap disabled"><a role="link" aria-disabled="true">#{pagy_t 'pagy.gap'}</a></li>),
46
46
  'after' => %(#{materialize_next_html pagy, link}</ul>) }
47
47
 
48
48
  %(<div#{p_id} class="#{'pagy-rjs ' if sequels.size > 1}pagy-materialize-nav-js" role="navigation" #{
@@ -77,7 +77,7 @@ class Pagy # :nodoc:
77
77
  %(<li class="waves-effect prev"#{style}>#{
78
78
  link.call(p_prev, '<i class="material-icons">chevron_left</i>', prev_aria_label_attr)}</li>)
79
79
  else
80
- %(<li class="prev disabled"#{style}><a href="#" aria-disabled="true" #{
80
+ %(<li class="prev disabled"#{style}><a role="link" aria-disabled="true" #{
81
81
  prev_aria_label_attr}><i class="material-icons">chevron_left</i></a></li>)
82
82
  end
83
83
  end
@@ -87,7 +87,7 @@ class Pagy # :nodoc:
87
87
  %(<li class="waves-effect next"#{style}>#{
88
88
  link.call(p_next, '<i class="material-icons">chevron_right</i>', next_aria_label_attr)}</li>)
89
89
  else
90
- %(<li class="next disabled"#{style}><a href="#" aria-disabled="true" #{
90
+ %(<li class="next disabled"#{style}><a role="link" aria-disabled="true" #{
91
91
  next_aria_label_attr}><i class="material-icons">chevron_right</i></a></li>)
92
92
  end
93
93
  end
@@ -15,17 +15,17 @@ class Pagy # :nodoc:
15
15
 
16
16
  # Return the metadata hash
17
17
  def pagy_metadata(pagy, absolute: nil)
18
- scaffold_url = pagy_url_for(pagy, PAGE_PLACEHOLDER, absolute:)
18
+ scaffold_url = pagy_url_for(pagy, PAGE_TOKEN, absolute:)
19
19
  {}.tap do |metadata|
20
20
  keys = defined?(Calendar) && pagy.is_a?(Calendar) ? pagy.vars[:metadata] - %i[count items] : pagy.vars[:metadata]
21
21
  keys.each do |key|
22
22
  metadata[key] = case key
23
23
  when :scaffold_url then scaffold_url
24
- when :first_url then scaffold_url.sub(PAGE_PLACEHOLDER, 1.to_s)
25
- when :prev_url then scaffold_url.sub(PAGE_PLACEHOLDER, pagy.prev.to_s)
26
- when :page_url then scaffold_url.sub(PAGE_PLACEHOLDER, pagy.page.to_s)
27
- when :next_url then scaffold_url.sub(PAGE_PLACEHOLDER, pagy.next.to_s)
28
- when :last_url then scaffold_url.sub(PAGE_PLACEHOLDER, pagy.last.to_s)
24
+ when :first_url then scaffold_url.sub(PAGE_TOKEN, 1.to_s)
25
+ when :prev_url then scaffold_url.sub(PAGE_TOKEN, pagy.prev.to_s)
26
+ when :page_url then scaffold_url.sub(PAGE_TOKEN, pagy.page.to_s)
27
+ when :next_url then scaffold_url.sub(PAGE_TOKEN, pagy.next.to_s)
28
+ when :last_url then scaffold_url.sub(PAGE_TOKEN, pagy.last.to_s)
29
29
  else pagy.send(key)
30
30
  end
31
31
  rescue NoMethodError
@@ -14,9 +14,9 @@ class Pagy # :nodoc:
14
14
  p_id = %( id="#{pagy_id}") if pagy_id
15
15
  link = pagy_link_proc(pagy, link_extra:)
16
16
  tags = { 'before' => prev_html(pagy, link),
17
- 'link' => %(<span class="page">#{link.call(PAGE_PLACEHOLDER, LABEL_PLACEHOLDER)}</span>),
17
+ 'link' => %(<span class="page">#{link.call(PAGE_TOKEN, LABEL_TOKEN)}</span>),
18
18
  'active' => %(<span class="page active">) +
19
- %(<a role="link" aria-current="page" aria-disabled="true">#{LABEL_PLACEHOLDER}</a></span>),
19
+ %(<a role="link" aria-current="page" aria-disabled="true">#{LABEL_TOKEN}</a></span>),
20
20
  'gap' => %(<span class="page gap">#{pagy_t 'pagy.gap'}</span>),
21
21
  'after' => next_html(pagy, link) }
22
22
 
@@ -21,7 +21,7 @@ class Pagy # :nodoc:
21
21
  when Integer
22
22
  link.call(item, pagy.label_for(item), %(class="item"))
23
23
  when String
24
- link.call(item, pagy.label_for(item), %(class="item active"))
24
+ %(<a role="link" class="item active" aria-current="page" aria-disabled="true">#{pagy.label_for(item)}</a>)
25
25
  when :gap
26
26
  %(<div class="disabled item">#{pagy_t 'pagy.gap'}</div>)
27
27
  else
@@ -39,8 +39,8 @@ class Pagy # :nodoc:
39
39
  p_id = %( id="#{pagy_id}") if pagy_id
40
40
  link = pagy_link_proc(pagy, link_extra:)
41
41
  tags = { 'before' => semantic_prev_html(pagy, link),
42
- 'link' => link.call(PAGE_PLACEHOLDER, LABEL_PLACEHOLDER, %(class="item")),
43
- 'active' => link.call(PAGE_PLACEHOLDER, LABEL_PLACEHOLDER, %(class="item active")),
42
+ 'link' => link.call(PAGE_TOKEN, LABEL_TOKEN, %(class="item")),
43
+ 'active' => %(<a role="link" class="item active" aria-current="page" aria-disabled="true">#{LABEL_TOKEN}</a>),
44
44
  'gap' => %(<div class="disabled item">#{pagy_t('pagy.gap')}</div>),
45
45
  'after' => semantic_next_html(pagy, link) }
46
46
 
@@ -40,9 +40,9 @@ class Pagy # :nodoc:
40
40
  p_id = %( id="#{pagy_id}") if pagy_id
41
41
  link = pagy_link_proc(pagy, link_extra:)
42
42
  tags = { 'before' => uikit_prev_html(pagy, link),
43
- 'link' => %(<li>#{link.call(PAGE_PLACEHOLDER, LABEL_PLACEHOLDER)}</li>),
43
+ 'link' => %(<li>#{link.call(PAGE_TOKEN, LABEL_TOKEN)}</li>),
44
44
  'active' => %(<li class="uk-active"><span role="link" aria-current="page" aria-disabled="true">#{
45
- LABEL_PLACEHOLDER}</span></li>),
45
+ LABEL_TOKEN}</span></li>),
46
46
  'gap' => %(<li class="uk-disabled"><span>#{pagy_t 'pagy.gap'}</span></li>),
47
47
  'after' => uikit_next_html(pagy, link) }
48
48
 
data/lib/pagy/frontend.rb CHANGED
@@ -6,8 +6,8 @@ require 'pagy/i18n'
6
6
 
7
7
  class Pagy
8
8
  # Used for search and replace, hardcoded also in the pagy.js file
9
- PAGE_PLACEHOLDER = '__pagy_page__'
10
- LABEL_PLACEHOLDER = '__pagy_label__'
9
+ PAGE_TOKEN = '__pagy_page__'
10
+ LABEL_TOKEN = '__pagy_label__'
11
11
 
12
12
  # Frontend modules are specially optimized for performance.
13
13
  # The resulting code may not look very elegant, but produces the best benchmarks
@@ -59,8 +59,8 @@ class Pagy
59
59
  p_prev = pagy.prev
60
60
  p_next = pagy.next
61
61
  p_page = pagy.page.to_s
62
- left, right = %(<a href="#{pagy_url_for(pagy, PAGE_PLACEHOLDER)}" #{
63
- pagy.vars[:link_extra]} #{link_extra}).split(PAGE_PLACEHOLDER, 2)
62
+ left, right = %(<a href="#{pagy_url_for(pagy, PAGE_TOKEN)}" #{
63
+ pagy.vars[:link_extra]} #{link_extra}).split(PAGE_TOKEN, 2)
64
64
  # lambda used by all the helpers
65
65
  lambda do |page, text = pagy.label_for(page), extra_attrs = ''|
66
66
  %(#{left}#{page}#{right}#{ case page
data/lib/pagy.rb CHANGED
@@ -5,7 +5,7 @@ require 'pathname'
5
5
 
6
6
  # Core class
7
7
  class Pagy
8
- VERSION = '7.0.5'
8
+ VERSION = '7.0.7'
9
9
 
10
10
  # Root pathname to get the path of Pagy files like templates or dictionaries
11
11
  def self.root
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pagy
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.0.5
4
+ version: 7.0.7
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-02-23 00:00:00.000000000 Z
11
+ date: 2024-02-29 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Agnostic pagination in plain ruby. It does it all. Better.
14
14
  email: