From 7d27596d6b7545a4d48cc03e26b4f32a3729c591 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Wed, 23 Aug 2023 23:58:07 +0300 Subject: [PATCH] Fix slider step Use the value of the `step` attribute if no keyboard steps are specified. --- src/elements/emby-slider/emby-slider.js | 29 +++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/elements/emby-slider/emby-slider.js b/src/elements/emby-slider/emby-slider.js index aca89f376e8..6d9cd024f2e 100644 --- a/src/elements/emby-slider/emby-slider.js +++ b/src/elements/emby-slider/emby-slider.js @@ -20,6 +20,27 @@ import '../emby-input/emby-input'; } } + /** + * Returns normalized slider step. + * + * @param {HTMLInputElement} range slider itself + * @param {number|undefined} step step + * @returns {number} normalized slider step. + */ + function normalizeSliderStep(range, step) { + if (step > 0) { + return step; + } + + step = parseFloat(range.step); + + if (step > 0) { + return step; + } + + return 1; + } + /** * Returns slider fraction corresponding to client position. * @@ -35,7 +56,7 @@ import '../emby-input/emby-input'; // Snap to step const valueRange = range.max - range.min; if (range.step !== 'any' && valueRange !== 0) { - const step = (range.step || 1) / valueRange; + const step = normalizeSliderStep(range) / valueRange; fraction = Math.round(fraction / step) * step; } @@ -54,7 +75,7 @@ import '../emby-input/emby-input'; // Snap to step if (range.step !== 'any') { - const step = range.step || 1; + const step = normalizeSliderStep(range); value = Math.round(value / step) * step; } @@ -377,13 +398,13 @@ import '../emby-input/emby-input'; switch (keyboardnavigation.getKeyName(e)) { case 'ArrowLeft': case 'Left': - stepKeyboard(this, -this.keyboardStepDown || -1); + stepKeyboard(this, -normalizeSliderStep(this, this.keyboardStepDown)); e.preventDefault(); e.stopPropagation(); break; case 'ArrowRight': case 'Right': - stepKeyboard(this, this.keyboardStepUp || 1); + stepKeyboard(this, normalizeSliderStep(this, this.keyboardStepUp)); e.preventDefault(); e.stopPropagation(); break;