diff --git a/src/elements/emby-scrollbuttons/emby-scrollbuttons.js b/src/elements/emby-scrollbuttons/emby-scrollbuttons.js index 1f21f7bf21..cd276e40ad 100644 --- a/src/elements/emby-scrollbuttons/emby-scrollbuttons.js +++ b/src/elements/emby-scrollbuttons/emby-scrollbuttons.js @@ -140,6 +140,13 @@ const EmbyScrollButtonsPrototype = Object.create(HTMLDivElement.prototype); newPos = scrollPos + scrollSize; } + if (globalize.getIsRTL() && direction === 'left') { + newPos = scrollPos + scrollSize; + } else if (globalize.getIsRTL()) { + newPos = Math.min(0, scrollPos - scrollSize); + } + console.log(newPos); + scroller.scrollToPosition(newPos, false); } diff --git a/src/libraries/scroller.js b/src/libraries/scroller.js index 59918adf6a..b114dcba17 100644 --- a/src/libraries/scroller.js +++ b/src/libraries/scroller.js @@ -53,7 +53,9 @@ function disableOneEvent(event) { * * @return {Number} */ -function within(number, min, max) { +function within(number, num1, num2) { + const min = Math.min(num1, num2); + const max = Math.max(num1, num2); if (number < min) { return min; } else if (number > max) { @@ -174,6 +176,8 @@ const scrollerFactory = function (frame, options) { // Set position limits & relativess self._pos.end = Math.max(slideeSize - frameSize, 0); + if (globalize.getIsRTL()) + self._pos.end *= -1; } } @@ -269,9 +273,6 @@ const scrollerFactory = function (frame, options) { newPos = within(newPos, pos.start, pos.end); } - if (globalize.getIsRTL()) - newPos *= -1; - if (!transform) { nativeScrollTo(nativeScrollElement, newPos, immediate); return; @@ -360,7 +361,12 @@ const scrollerFactory = function (frame, options) { const slideeOffset = getBoundingClientRect(scrollElement); const itemOffset = getBoundingClientRect(item); - let offset = o.horizontal ? itemOffset.left - slideeOffset.left : itemOffset.top - slideeOffset.top; + let horizontalOffset = itemOffset.left - slideeOffset.left; + if (globalize.getIsRTL()) { + horizontalOffset = itemOffset.right - slideeOffset.right; + } + + let offset = o.horizontal ? horizontalOffset : itemOffset.top - slideeOffset.top; let size = o.horizontal ? itemOffset.width : itemOffset.height; if (!size && size !== 0) { @@ -384,12 +390,17 @@ const scrollerFactory = function (frame, options) { const currentEnd = currentStart + frameSize; console.debug('offset:' + offset + ' currentStart:' + currentStart + ' currentEnd:' + currentEnd); - const isVisible = offset >= currentStart && (offset + size) <= currentEnd; + const isVisible = offset >= Math.min(currentStart, currentEnd) + && (offset + size) <= Math.max(currentStart, currentEnd); + + let end = offset - frameSize + size; + if (globalize.getIsRTL()) + end *= -1; return { start: offset, center: offset + centerOffset - (frameSize / 2) + (size / 2), - end: offset - frameSize + size, + end, size: size, isVisible: isVisible };