{"version":3,"file":"index.umd.min.js","sources":["../src/lib/shared.js","../src/lib/events.js","../src/lib/api.js","../src/lib/defaults.js","../src/lib/markup.js","../src/lib/styles.js","../src/lib/setup.js","../src/lib/index.js"],"sourcesContent":["const _shared = {\n pullStartY: null,\n pullMoveY: null,\n handlers: [],\n styleEl: null,\n events: null,\n dist: 0,\n state: 'pending',\n timeout: null,\n distResisted: 0,\n supportsPassive: false,\n supportsPointerEvents: !!window.PointerEvent,\n};\n\ntry {\n window.addEventListener('test', null, {\n get passive() { // eslint-disable-line getter-return\n _shared.supportsPassive = true;\n },\n });\n} catch (e) {\n // do nothing\n}\n\nexport default _shared;\n","import _ptr from './api';\nimport _shared from './shared';\n\nlet _timeout;\n\nconst screenY = function screenY(event) {\n if (_shared.pointerEventsEnabled && _shared.supportsPointerEvents) {\n return event.screenY;\n }\n return event.touches[0].screenY;\n};\n\nexport default () => {\n let _el;\n\n function _onTouchStart(e) {\n // here, we must pick a handler first, and then append their html/css on the DOM\n const target = _shared.handlers.filter(h => h.contains(e.target))[0];\n\n _shared.enable = !!target;\n\n if (target && _shared.state === 'pending') {\n _el = _ptr.setupDOM(target);\n\n if (target.shouldPullToRefresh()) {\n _shared.pullStartY = screenY(e);\n }\n\n clearTimeout(_shared.timeout);\n\n _ptr.update(target);\n }\n }\n\n function _onTouchMove(e) {\n if (!(_el && _el.ptrElement && _shared.enable)) {\n return;\n }\n\n if (!_shared.pullStartY) {\n if (_el.shouldPullToRefresh()) {\n _shared.pullStartY = screenY(e);\n }\n } else {\n _shared.pullMoveY = screenY(e);\n }\n\n if (_shared.state === 'refreshing') {\n if (e.cancelable && _el.shouldPullToRefresh() && _shared.pullStartY < _shared.pullMoveY) {\n e.preventDefault();\n }\n\n return;\n }\n\n if (_shared.state === 'pending') {\n _el.ptrElement.classList.add(`${_el.classPrefix}pull`);\n _shared.state = 'pulling';\n _ptr.update(_el);\n }\n\n if (_shared.pullStartY && _shared.pullMoveY) {\n _shared.dist = _shared.pullMoveY - _shared.pullStartY;\n }\n\n _shared.distExtra = _shared.dist - _el.distIgnore;\n\n if (_shared.distExtra > 0) {\n if (e.cancelable) {\n e.preventDefault();\n }\n\n _el.ptrElement.style[_el.cssProp] = `${_shared.distResisted}px`;\n\n _shared.distResisted = _el.resistanceFunction(_shared.distExtra / _el.distThreshold)\n * Math.min(_el.distMax, _shared.distExtra);\n\n if (_shared.state === 'pulling' && _shared.distResisted > _el.distThreshold) {\n _el.ptrElement.classList.add(`${_el.classPrefix}release`);\n _shared.state = 'releasing';\n _ptr.update(_el);\n }\n\n if (_shared.state === 'releasing' && _shared.distResisted < _el.distThreshold) {\n _el.ptrElement.classList.remove(`${_el.classPrefix}release`);\n _shared.state = 'pulling';\n _ptr.update(_el);\n }\n }\n }\n\n function _onTouchEnd() {\n if (!(_el && _el.ptrElement && _shared.enable)) {\n return;\n }\n\n // wait 1/2 sec before unmounting...\n clearTimeout(_timeout);\n _timeout = setTimeout(() => {\n if (_el && _el.ptrElement && _shared.state === 'pending') {\n _ptr.onReset(_el);\n }\n }, 500);\n\n if (_shared.state === 'releasing' && _shared.distResisted > _el.distThreshold) {\n _shared.state = 'refreshing';\n\n _el.ptrElement.style[_el.cssProp] = `${_el.distReload}px`;\n _el.ptrElement.classList.add(`${_el.classPrefix}refresh`);\n\n _shared.timeout = setTimeout(() => {\n const retval = _el.onRefresh(() => _ptr.onReset(_el));\n\n if (retval && typeof retval.then === 'function') {\n retval.then(() => _ptr.onReset(_el));\n }\n\n if (!retval && !_el.onRefresh.length) {\n _ptr.onReset(_el);\n }\n }, _el.refreshTimeout);\n } else {\n if (_shared.state === 'refreshing') {\n return;\n }\n\n _el.ptrElement.style[_el.cssProp] = '0px';\n\n _shared.state = 'pending';\n }\n\n _ptr.update(_el);\n\n _el.ptrElement.classList.remove(`${_el.classPrefix}release`);\n _el.ptrElement.classList.remove(`${_el.classPrefix}pull`);\n\n _shared.pullStartY = _shared.pullMoveY = null;\n _shared.dist = _shared.distResisted = 0;\n }\n\n function _onScroll() {\n if (_el) {\n _el.mainElement.classList.toggle(`${_el.classPrefix}top`, _el.shouldPullToRefresh());\n }\n }\n\n const _passiveSettings = _shared.supportsPassive\n ? { passive: _shared.passive || false }\n : undefined;\n\n if (_shared.pointerEventsEnabled && _shared.supportsPointerEvents) {\n window.addEventListener('pointerup', _onTouchEnd);\n window.addEventListener('pointerdown', _onTouchStart);\n window.addEventListener('pointermove', _onTouchMove, _passiveSettings);\n } else {\n window.addEventListener('touchend', _onTouchEnd);\n window.addEventListener('touchstart', _onTouchStart);\n window.addEventListener('touchmove', _onTouchMove, _passiveSettings);\n }\n\n window.addEventListener('scroll', _onScroll);\n\n return {\n onTouchEnd: _onTouchEnd,\n onTouchStart: _onTouchStart,\n onTouchMove: _onTouchMove,\n onScroll: _onScroll,\n\n destroy() {\n if (_shared.pointerEventsEnabled && _shared.supportsPointerEvents) {\n window.removeEventListener('pointerdown', _onTouchStart);\n window.removeEventListener('pointerup', _onTouchEnd);\n window.removeEventListener('pointermove', _onTouchMove, _passiveSettings);\n } else {\n window.removeEventListener('touchstart', _onTouchStart);\n window.removeEventListener('touchend', _onTouchEnd);\n window.removeEventListener('touchmove', _onTouchMove, _passiveSettings);\n }\n\n window.removeEventListener('scroll', _onScroll);\n },\n };\n};\n","import _shared from './shared';\n\nfunction setupDOM(handler) {\n if (!handler.ptrElement) {\n const ptr = document.createElement('div');\n\n if (handler.mainElement !== document.body) {\n handler.mainElement.parentNode.insertBefore(ptr, handler.mainElement);\n } else {\n document.body.insertBefore(ptr, document.body.firstChild);\n }\n\n ptr.classList.add(`${handler.classPrefix}ptr`);\n ptr.innerHTML = handler.getMarkup()\n .replace(/__PREFIX__/g, handler.classPrefix);\n\n handler.ptrElement = ptr;\n\n if (typeof handler.onInit === 'function') {\n handler.onInit(handler);\n }\n\n // Add the css styles to the style node, and then\n // insert it into the dom\n if (!_shared.styleEl) {\n _shared.styleEl = document.createElement('style');\n _shared.styleEl.setAttribute('id', 'pull-to-refresh-js-style');\n\n document.head.appendChild(_shared.styleEl);\n }\n\n _shared.styleEl.textContent = handler.getStyles()\n .replace(/__PREFIX__/g, handler.classPrefix)\n .replace(/\\s+/g, ' ');\n }\n\n return handler;\n}\n\nfunction onReset(handler) {\n handler.ptrElement.classList.remove(`${handler.classPrefix}refresh`);\n handler.ptrElement.style[handler.cssProp] = '0px';\n\n setTimeout(() => {\n // remove previous ptr-element from DOM\n if (handler.ptrElement && handler.ptrElement.parentNode) {\n handler.ptrElement.parentNode.removeChild(handler.ptrElement);\n handler.ptrElement = null;\n }\n\n // reset state\n _shared.state = 'pending';\n }, handler.refreshTimeout);\n}\n\nfunction update(handler) {\n const iconEl = handler.ptrElement.querySelector(`.${handler.classPrefix}icon`);\n const textEl = handler.ptrElement.querySelector(`.${handler.classPrefix}text`);\n\n if (iconEl) {\n if (_shared.state === 'refreshing') {\n iconEl.innerHTML = handler.iconRefreshing;\n } else {\n iconEl.innerHTML = handler.iconArrow;\n }\n }\n\n if (textEl) {\n if (_shared.state === 'releasing') {\n textEl.innerHTML = handler.instructionsReleaseToRefresh;\n }\n\n if (_shared.state === 'pulling' || _shared.state === 'pending') {\n textEl.innerHTML = handler.instructionsPullToRefresh;\n }\n\n if (_shared.state === 'refreshing') {\n textEl.innerHTML = handler.instructionsRefreshing;\n }\n }\n}\n\nexport default {\n setupDOM,\n onReset,\n update,\n};\n","import _ptrMarkup from './markup';\nimport _ptrStyles from './styles';\n\nexport default {\n distThreshold: 60,\n distMax: 80,\n distReload: 50,\n distIgnore: 0,\n mainElement: 'body',\n triggerElement: 'body',\n ptrElement: '.ptr',\n classPrefix: 'ptr--',\n cssProp: 'min-height',\n iconArrow: '⇣',\n iconRefreshing: '…',\n instructionsPullToRefresh: 'Pull down to refresh',\n instructionsReleaseToRefresh: 'Release to refresh',\n instructionsRefreshing: 'Refreshing',\n refreshTimeout: 500,\n getMarkup: () => _ptrMarkup,\n getStyles: () => _ptrStyles,\n onInit: () => {},\n onRefresh: () => location.reload(),\n resistanceFunction: t => Math.min(1, t / 2.5),\n shouldPullToRefresh: () => !window.scrollY,\n};\n","export default `\n
\n
\n
\n
\n
\n
\n`;\n","export default `\n.__PREFIX__ptr {\n box-shadow: inset 0 -3px 5px rgba(0, 0, 0, 0.12);\n pointer-events: none;\n font-size: 0.85em;\n font-weight: bold;\n top: 0;\n height: 0;\n transition: height 0.3s, min-height 0.3s;\n text-align: center;\n width: 100%;\n overflow: hidden;\n display: flex;\n align-items: flex-end;\n align-content: stretch;\n}\n\n.__PREFIX__box {\n padding: 10px;\n flex-basis: 100%;\n}\n\n.__PREFIX__pull {\n transition: none;\n}\n\n.__PREFIX__text {\n margin-top: .33em;\n color: rgba(0, 0, 0, 0.3);\n}\n\n.__PREFIX__icon {\n color: rgba(0, 0, 0, 0.3);\n transition: transform .3s;\n}\n\n/*\nWhen at the top of the page, disable vertical overscroll so passive touch\nlisteners can take over.\n*/\n.__PREFIX__top {\n touch-action: pan-x pan-down pinch-zoom;\n}\n\n.__PREFIX__release .__PREFIX__icon {\n transform: rotate(180deg);\n}\n`;\n","import _setupEvents from './events';\nimport _defaults from './defaults';\nimport _shared from './shared';\n\nconst _methods = ['mainElement', 'ptrElement', 'triggerElement'];\n\nexport default options => {\n const _handler = {};\n\n // merge options with defaults\n Object.keys(_defaults).forEach(key => {\n _handler[key] = options[key] || _defaults[key];\n });\n\n // normalize timeout value, even if it is zero\n _handler.refreshTimeout = typeof options.refreshTimeout === 'number'\n ? options.refreshTimeout\n : _defaults.refreshTimeout;\n\n // normalize elements\n _methods.forEach(method => {\n if (typeof _handler[method] === 'string') {\n _handler[method] = document.querySelector(_handler[method]);\n }\n });\n\n // attach events lazily\n if (!_shared.events) {\n _shared.events = _setupEvents();\n }\n\n _handler.contains = target => {\n return _handler.triggerElement.contains(target);\n };\n\n _handler.destroy = () => {\n // stop pending any pending callbacks\n clearTimeout(_shared.timeout);\n\n // remove handler from shared state\n const offset = _shared.handlers.indexOf(_handler);\n _shared.handlers.splice(offset, 1);\n };\n\n return _handler;\n};\n","import _ptr from './api';\nimport _shared from './shared';\nimport _setupEvents from './events';\nimport _setupHandler from './setup';\n\n// public API\nexport default {\n setPassiveMode(isPassive) {\n _shared.passive = isPassive;\n },\n setPointerEventsMode(isEnabled) {\n _shared.pointerEventsEnabled = isEnabled;\n },\n destroyAll() {\n if (_shared.events) {\n _shared.events.destroy();\n _shared.events = null;\n }\n\n _shared.handlers.forEach(h => {\n h.destroy();\n });\n },\n init(options = {}) {\n const handler = _setupHandler(options);\n\n _shared.handlers.push(handler);\n\n return handler;\n },\n\n // export utils for testing\n _: {\n setupHandler: _setupHandler,\n setupEvents: _setupEvents,\n setupDOM: _ptr.setupDOM,\n onReset: _ptr.onReset,\n update: _ptr.update,\n },\n};\n"],"names":["const","_shared","pullStartY","pullMoveY","handlers","styleEl","events","dist","state","timeout","distResisted","supportsPassive","supportsPointerEvents","window","PointerEvent","addEventListener","e","_timeout","handler","ptrElement","ptr","document","createElement","mainElement","body","parentNode","insertBefore","firstChild","classList","add","innerHTML","getMarkup","replace","classPrefix","onInit","setAttribute","head","appendChild","textContent","getStyles","remove","style","cssProp","setTimeout","removeChild","refreshTimeout","iconEl","querySelector","textEl","iconRefreshing","iconArrow","instructionsReleaseToRefresh","instructionsPullToRefresh","instructionsRefreshing","screenY","event","pointerEventsEnabled","touches","_el","_onTouchStart","target","filter","h","contains","enable","_ptr","setupDOM","shouldPullToRefresh","clearTimeout","update","_onTouchMove","distExtra","distIgnore","cancelable","preventDefault","resistanceFunction","distThreshold","Math","min","distMax","_onTouchEnd","onReset","retval","onRefresh","then","length","_onScroll","toggle","_passiveSettings","passive","undefined","onTouchEnd","onTouchStart","onTouchMove","onScroll","destroy","removeEventListener","distReload","triggerElement","location","reload","t","scrollY","_methods","options","_handler","Object","keys","_defaults","forEach","key","method","_setupEvents","offset","indexOf","splice","setPassiveMode","isPassive","setPointerEventsMode","isEnabled","destroyAll","init","_setupHandler","push","_","setupHandler","setupEvents"],"mappings":"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"}