import ResizeObserver from 'resize-observer-polyfill' export const BAR_MAP = { vertical: { offset: 'offsetHeight', scroll: 'scrollTop', scrollSize: 'scrollHeight', size: 'height', key: 'vertical', axis: 'Y', client: 'clientY', direction: 'top' }, horizontal: { offset: 'offsetWidth', scroll: 'scrollLeft', scrollSize: 'scrollWidth', size: 'width', key: 'horizontal', axis: 'X', client: 'clientX', direction: 'left' } } export function renderThumbStyle ({ move, size, bar }) { const style = {} const translate = `translate${bar.axis}(${move}%)` style[bar.size] = size style.transform = translate style.msTransform = translate style.webkitTransform = translate return style }; const isServer = typeof window === 'undefined' /* istanbul ignore next */ const resizeHandler = function (entries) { for (const entry of entries) { const listeners = entry.target.__resizeListeners__ || [] if (listeners.length) { listeners.forEach(fn => { fn() }) } } } /* istanbul ignore next */ export const addResizeListener = function (element, fn) { if (isServer) return if (!element.__resizeListeners__) { element.__resizeListeners__ = [] element.__ro__ = new ResizeObserver(resizeHandler) element.__ro__.observe(element) } element.__resizeListeners__.push(fn) } /* istanbul ignore next */ export const removeResizeListener = function (element, fn) { if (!element || !element.__resizeListeners__) return element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1) if (!element.__resizeListeners__.length) { element.__ro__.disconnect() } } function extend (to, _from) { for (const key in _from) { to[key] = _from[key] } return to }; export function toObject (arr) { const res = {} for (let i = 0; i < arr.length; i++) { if (arr[i]) { extend(res, arr[i]) } } return res }; export const on = (function () { if (!isServer && document.addEventListener) { return function (element, event, handler) { if (element && event && handler) { element.addEventListener(event, handler, false) } } } else { return function (element, event, handler) { if (element && event && handler) { element.attachEvent('on' + event, handler) } } } })() /* istanbul ignore next */ export const off = (function () { if (!isServer && document.removeEventListener) { return function (element, event, handler) { if (element && event) { element.removeEventListener(event, handler, false) } } } else { return function (element, event, handler) { if (element && event) { element.detachEvent('on' + event, handler) } } } })()