"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); // Based on https://github.com/react-bootstrap/dom-helpers/blob/master/src/util/inDOM.js var inDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement); var cachedType; function _setScrollType(type) { cachedType = type; } exports._setScrollType = _setScrollType; // Based on the jquery plugin https://github.com/othree/jquery.rtl-scroll-type function detectScrollType() { if (cachedType) { return cachedType; } if (!inDOM || !window.document.body) { return 'indeterminate'; } var dummy = window.document.createElement('div'); dummy.appendChild(document.createTextNode('ABCD')); dummy.dir = 'rtl'; dummy.style.fontSize = '14px'; dummy.style.width = '4px'; dummy.style.height = '1px'; dummy.style.position = 'absolute'; dummy.style.top = '-1000px'; dummy.style.overflow = 'scroll'; document.body.appendChild(dummy); cachedType = 'reverse'; if (dummy.scrollLeft > 0) { cachedType = 'default'; } else { dummy.scrollLeft = 1; if (dummy.scrollLeft === 0) { cachedType = 'negative'; } } document.body.removeChild(dummy); return cachedType; } exports.detectScrollType = detectScrollType; // Based on https://stackoverflow.com/a/24394376 function getNormalizedScrollLeft(element, direction) { var scrollLeft = element.scrollLeft; // Perform the calculations only when direction is rtl to avoid messing up the ltr bahavior if (direction !== 'rtl') { return scrollLeft; } var type = detectScrollType(); if (type === 'indeterminate') { return Number.NaN; } switch (type) { case 'negative': return element.scrollWidth - element.clientWidth + scrollLeft; case 'reverse': return element.scrollWidth - element.clientWidth - scrollLeft; } return scrollLeft; } exports.getNormalizedScrollLeft = getNormalizedScrollLeft; function setNormalizedScrollLeft(element, scrollLeft, direction) { // Perform the calculations only when direction is rtl to avoid messing up the ltr bahavior if (direction !== 'rtl') { element.scrollLeft = scrollLeft; return; } var type = detectScrollType(); if (type === 'indeterminate') { return; } switch (type) { case 'negative': element.scrollLeft = element.clientWidth - element.scrollWidth + scrollLeft; break; case 'reverse': element.scrollLeft = element.scrollWidth - element.clientWidth - scrollLeft; break; default: element.scrollLeft = scrollLeft; break; } } exports.setNormalizedScrollLeft = setNormalizedScrollLeft;