From 14392dadc14a1112c64cf8b6fab9b4e60a33b0b7 Mon Sep 17 00:00:00 2001 From: Javier Godoy <11554739+javier-godoy@users.noreply.github.com> Date: Tue, 5 May 2026 10:09:04 -0300 Subject: [PATCH 1/6] fix: handle null activeElement in _spaceCatcher Close #49 --- .../frontend/paper-slider/l2t-paper-slider.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js b/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js index 68bf80c..f24e38b 100644 --- a/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js +++ b/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js @@ -540,14 +540,13 @@ Polymer$0({ */ _spaceCatcher: function (e) { e.preventDefault(); - if (this.shadowRoot != null) { - var nextPos = this.shadowRoot.activeElement.getAttribute('aria-posinset'); + const activeEl = this.shadowRoot && this.shadowRoot.activeElement; + if (activeEl) { + var nextPos = activeEl.getAttribute('aria-posinset'); + if (nextPos) this.movePos(parseInt(nextPos) - 1); } else { - var nextPos = document.activeElement.getAttribute('aria-posinset'); + this.movePos((this.position + 1) % this.totalSlides); } - if (!nextPos) - return; - this.movePos(parseInt(nextPos) - 1); }, /** From 6893f6da276049e042ff14611261d9b6361cac34 Mon Sep 17 00:00:00 2001 From: Javier Godoy <11554739+javier-godoy@users.noreply.github.com> Date: Tue, 5 May 2026 11:28:20 -0300 Subject: [PATCH 2/6] fix: guard _moveManual and _ariaChecked against dom-repeat race Close #50 --- .../resources/frontend/paper-slider/l2t-paper-slider.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js b/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js index f24e38b..1dee3c4 100644 --- a/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js +++ b/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js @@ -372,7 +372,7 @@ Polymer$0({ _ariaChecked: function () { var dotElems = this.$.container.querySelectorAll('.slider__dot'); if (dotElems.length > 0) { - for (var i = 0; i < this.totalSlides; i++) { + for (var i = 0; i < dotElems.length; i++) { dotElems[i].setAttribute("aria-checked", "false"); }; dotElems[this.position].setAttribute("aria-checked", "true"); @@ -478,13 +478,13 @@ Polymer$0({ _moveManual: function () { var this$ = this; var dotElems = this.$.container.querySelectorAll('.slider__dot'), i; - for (i = 0; i < this.totalSlides; ++i) { + for (i = 0; i < dotElems.length; ++i) { dotElems[i].setAttribute("aria-label", "Slide " + parseInt(dotElems[i].getAttribute('aria-posinset')) + " selector"); dotElems[i].addEventListener('click', function (e) { this$.movePos(e.target.getAttribute('aria-posinset') - 1); }); }; - if (this.totalSlides) { + if (dotElems.length) { this._dotStyles = window.getComputedStyle(dotElems[0]); } }, From e10daf9d8cddb5737a21184d2f6d579f31dfc12c Mon Sep 17 00:00:00 2001 From: Javier Godoy <11554739+javier-godoy@users.noreply.github.com> Date: Thu, 7 May 2026 10:15:52 -0300 Subject: [PATCH 3/6] refactor: replace var with const in _spaceCatcher --- .../resources/frontend/paper-slider/l2t-paper-slider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js b/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js index 1dee3c4..3156a04 100644 --- a/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js +++ b/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js @@ -542,7 +542,7 @@ Polymer$0({ e.preventDefault(); const activeEl = this.shadowRoot && this.shadowRoot.activeElement; if (activeEl) { - var nextPos = activeEl.getAttribute('aria-posinset'); + const nextPos = activeEl.getAttribute('aria-posinset'); if (nextPos) this.movePos(parseInt(nextPos) - 1); } else { this.movePos((this.position + 1) % this.totalSlides); From c8c9edf07574e208d40653c0fd01c39c3f8237ee Mon Sep 17 00:00:00 2001 From: Javier Godoy <11554739+javier-godoy@users.noreply.github.com> Date: Thu, 7 May 2026 10:16:33 -0300 Subject: [PATCH 4/6] refactor: use Number.parseInt with radix in _spaceCatcher --- .../resources/frontend/paper-slider/l2t-paper-slider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js b/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js index 3156a04..0bc1623 100644 --- a/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js +++ b/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js @@ -543,7 +543,7 @@ Polymer$0({ const activeEl = this.shadowRoot && this.shadowRoot.activeElement; if (activeEl) { const nextPos = activeEl.getAttribute('aria-posinset'); - if (nextPos) this.movePos(parseInt(nextPos) - 1); + if (nextPos) this.movePos(Number.parseInt(nextPos, 10) - 1); } else { this.movePos((this.position + 1) % this.totalSlides); } From 87452c38df7dd3f44e12553ca7830f5cc8b4d522 Mon Sep 17 00:00:00 2001 From: Javier Godoy <11554739+javier-godoy@users.noreply.github.com> Date: Thu, 7 May 2026 10:40:59 -0300 Subject: [PATCH 5/6] fix: avoid duplicate click handlers accumulating in _moveManual Close #53 --- .../frontend/paper-slider/l2t-paper-slider.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js b/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js index 0bc1623..0b23c05 100644 --- a/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js +++ b/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js @@ -480,10 +480,14 @@ Polymer$0({ var dotElems = this.$.container.querySelectorAll('.slider__dot'), i; for (i = 0; i < dotElems.length; ++i) { dotElems[i].setAttribute("aria-label", "Slide " + parseInt(dotElems[i].getAttribute('aria-posinset')) + " selector"); - dotElems[i].addEventListener('click', function (e) { - this$.movePos(e.target.getAttribute('aria-posinset') - 1); - }); }; + if (!this._dotClickListener) { + this._dotClickListener = function (e) { + const dot = e.target.closest('.slider__dot'); + if (dot) this$.movePos(Number.parseInt(dot.getAttribute('aria-posinset'), 10) - 1); + }; + this.$.container.addEventListener('click', this._dotClickListener); + } if (dotElems.length) { this._dotStyles = window.getComputedStyle(dotElems[0]); } @@ -656,6 +660,10 @@ Polymer$0({ detached: function() { this.autoProgress = false; removeListener(this.$.container, 'track', e => this._swipeHandler(e)); + if (this._dotClickListener) { + this.$.container.removeEventListener('click', this._dotClickListener); + this._dotClickListener = null; + } }, _increment: function(n) { From c2c960298cc6e1c9887c691a72f59b02ce0432f2 Mon Sep 17 00:00:00 2001 From: Javier Godoy <11554739+javier-godoy@users.noreply.github.com> Date: Thu, 7 May 2026 12:53:51 -0300 Subject: [PATCH 6/6] fix: bound-check position in _ariaChecked Close #54 --- .../resources/frontend/paper-slider/l2t-paper-slider.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js b/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js index 0b23c05..88de0c2 100644 --- a/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js +++ b/src/main/resources/META-INF/resources/frontend/paper-slider/l2t-paper-slider.js @@ -375,7 +375,9 @@ Polymer$0({ for (var i = 0; i < dotElems.length; i++) { dotElems[i].setAttribute("aria-checked", "false"); }; - dotElems[this.position].setAttribute("aria-checked", "true"); + if (this.position < dotElems.length) { + dotElems[this.position].setAttribute("aria-checked", "true"); + } } },