{"version":3,"file":null,"sources":["../lib/methods/attach.js","../lib/helpers/in-viewport.js","../lib/helpers/in-container.js","../lib/helpers/scroll-handler.js","../lib/methods/debounced-scroll.js","../lib/methods/destroy.js","../lib/methods/off.js","../lib/methods/on.js","../lib/helpers/observe-dom.js","../lib/index.js"],"sourcesContent":["/**\n * Attaches the scroll event handler\n *\n * @return {void}\n */\nfunction attach() {\n const container = this.options.container;\n\n if (container instanceof HTMLElement) {\n const style = window.getComputedStyle(container);\n\n if (style.position === 'static') {\n container.style.position = 'relative';\n }\n }\n\n container.addEventListener('scroll', this._scroll, { passive: true });\n window.addEventListener('resize', this._scroll, { passive: true });\n this._scroll();\n this.attached = true;\n}\n\nexport default attach;\n","/**\n * Checks an element's position in respect to the viewport\n * and determines wether it's inside the viewport.\n *\n * @param {node} element The DOM node you want to check\n * @return {boolean} A boolean value that indicates wether is on or off the viewport.\n */\nfunction inViewport(el, options = { tolerance: 0 }) {\n if (!el) {\n throw new Error('You should specify the element you want to test');\n }\n\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n\n const elRect = el.getBoundingClientRect();\n\n return (\n // Check bottom boundary\n elRect.bottom - options.tolerance > 0 &&\n\n // Check right boundary\n elRect.right - options.tolerance > 0 &&\n\n // Check left boundary\n elRect.left + options.tolerance < (window.innerWidth ||\n document.documentElement.clientWidth) &&\n\n // Check top boundary\n elRect.top + options.tolerance < (window.innerHeight ||\n document.documentElement.clientHeight)\n );\n}\n\nexport default inViewport;\n","/**\n * Checks an element's position in respect to a HTMLElement\n * and determines wether it's within its boundaries.\n *\n * @param {node} element The DOM node you want to check\n * @return {boolean} A boolean value that indicates wether is on or off the container.\n */\nfunction inContainer(el, options = { tolerance: 0, container: '' }) {\n if (!el) {\n throw new Error('You should specify the element you want to test');\n }\n\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (typeof options === 'string') {\n options = {\n tolerance: 0,\n container: document.querySelector(options)\n };\n }\n if (typeof options.container === 'string') {\n options.container = document.querySelector(options.container);\n }\n if (options instanceof HTMLElement) {\n options = {\n tolerance: 0,\n container: options\n };\n }\n if (!options.container) {\n throw new Error('You should specify a container element');\n }\n\n const containerRect = options.container.getBoundingClientRect();\n\n return (\n // // Check bottom boundary\n (el.offsetTop + el.clientHeight) - options.tolerance >\n options.container.scrollTop &&\n\n // Check right boundary\n (el.offsetLeft + el.clientWidth) - options.tolerance >\n options.container.scrollLeft &&\n\n // Check left boundary\n el.offsetLeft + options.tolerance <\n containerRect.width + options.container.scrollLeft &&\n\n // // Check top boundary\n el.offsetTop + options.tolerance <\n containerRect.height + options.container.scrollTop\n );\n}\n\nexport default inContainer;\n","import inViewport from './in-viewport';\nimport inContainer from './in-container';\n\n// TODO: Refactor this so it can be easily tested\n/* istanbul ignore next */\nfunction eventHandler(trackedElements = {}, options = { tolerance: 0 }) {\n const selectors = Object.keys(trackedElements);\n let testVisibility;\n\n if (!selectors.length) return;\n\n if (options.container === window) {\n testVisibility = inViewport;\n } else {\n testVisibility = inContainer;\n }\n\n selectors.forEach((selector) => {\n trackedElements[selector].nodes.forEach((item) => {\n if (testVisibility(item.node, options)) {\n item.wasVisible = item.isVisible;\n item.isVisible = true;\n } else {\n item.wasVisible = item.isVisible;\n item.isVisible = false;\n }\n if (item.isVisible === true && item.wasVisible === false) {\n if (!trackedElements[selector].enter) return;\n\n Object.keys(trackedElements[selector].enter).forEach((callback) => {\n if (typeof trackedElements[selector].enter[callback] === 'function') {\n trackedElements[selector].enter[callback](item.node, 'enter');\n }\n });\n }\n if (item.isVisible === false && item.wasVisible === true) {\n if (!trackedElements[selector].leave) return;\n\n Object.keys(trackedElements[selector].leave).forEach((callback) => {\n if (typeof trackedElements[selector].leave[callback] === 'function') {\n trackedElements[selector].leave[callback](item.node, 'leave');\n }\n });\n }\n });\n });\n}\n\nexport default eventHandler;\n","import scrollHandler from '../helpers/scroll-handler';\n\n/**\n * Debounces the scroll event to avoid performance issues\n *\n * @return {void}\n */\nfunction debouncedScroll() {\n let timeout;\n\n return () => {\n clearTimeout(timeout);\n\n timeout = setTimeout(() => {\n scrollHandler(this.trackedElements, this.options);\n }, this.options.debounce);\n };\n}\n\nexport default debouncedScroll;\n","/**\n * Removes the scroll event handler\n *\n * @return {void}\n */\nfunction destroy() {\n this.options.container.removeEventListener('scroll', this._scroll);\n window.removeEventListener('resize', this._scroll);\n this.attached = false;\n}\n\nexport default destroy;\n","/**\n * Stops tracking elements matching a CSS selector. If a selector has no\n * callbacks it gets removed.\n *\n * @param {string} event The event you want to stop tracking (enter or leave)\n * @param {string} selector The CSS selector you want to stop tracking\n * @return {void}\n */\nfunction off(event, selector, handler) {\n const enterCallbacks = Object.keys(this.trackedElements[selector].enter || {});\n const leaveCallbacks = Object.keys(this.trackedElements[selector].leave || {});\n\n if ({}.hasOwnProperty.call(this.trackedElements, selector)) {\n if (handler) {\n if (this.trackedElements[selector][event]) {\n const callbackName = (typeof handler === 'function') ? handler.name : handler;\n delete this.trackedElements[selector][event][callbackName];\n }\n } else {\n delete this.trackedElements[selector][event];\n }\n }\n\n if (!enterCallbacks.length && !leaveCallbacks.length) {\n delete this.trackedElements[selector];\n }\n}\n\nexport default off;\n","/**\n * Starts tracking elements matching a CSS selector\n *\n * @param {string} event The event you want to track (enter or leave)\n * @param {string} selector The element you want to track\n * @param {function} callback The callback function to handle the event\n * @return {void}\n */\nfunction on(event, selector, callback) {\n const allowed = ['enter', 'leave'];\n\n if (!event) throw new Error('No event given. Choose either enter or leave');\n if (!selector) throw new Error('No selector to track');\n if (allowed.indexOf(event) < 0) throw new Error(`${event} event is not supported`);\n\n if (!{}.hasOwnProperty.call(this.trackedElements, selector)) {\n this.trackedElements[selector] = {};\n }\n\n this.trackedElements[selector].nodes = [];\n\n for (let i = 0, elems = document.querySelectorAll(selector); i < elems.length; i++) {\n const item = {\n isVisible: false,\n wasVisible: false,\n node: elems[i]\n };\n\n this.trackedElements[selector].nodes.push(item);\n }\n\n if (typeof callback === 'function') {\n if (!this.trackedElements[selector][event]) {\n this.trackedElements[selector][event] = {};\n }\n\n this.trackedElements[selector][event][(callback.name || 'anonymous')] = callback;\n }\n}\n\nexport default on;\n","/**\n * Observes DOM mutations and runs a callback function when\n * detecting one.\n *\n * @param {node} obj The DOM node you want to observe\n * @param {function} callback The callback function you want to call\n * @return {void}\n */\nfunction observeDOM(obj, callback) {\n const MutationObserver = window.MutationObserver || window.WebKitMutationObserver;\n\n /* istanbul ignore else */\n if (MutationObserver) {\n const obs = new MutationObserver(callback);\n\n obs.observe(obj, {\n childList: true,\n subtree: true\n });\n } else {\n obj.addEventListener('DOMNodeInserted', callback, false);\n obj.addEventListener('DOMNodeRemoved', callback, false);\n }\n}\n\nexport default observeDOM;\n","// Methods\nimport attach from './methods/attach';\nimport debouncedScroll from './methods/debounced-scroll';\nimport destroy from './methods/destroy';\nimport off from './methods/off';\nimport on from './methods/on';\n\n// Helpers\nimport observeDOM from './helpers/observe-dom';\nimport inViewport from './helpers/in-viewport';\n\n/**\n * Detects wether DOM nodes enter or leave the viewport\n *\n * @constructor\n * @param {object} options The configuration object\n */\nfunction OnScreen(options = { tolerance: 0, debounce: 100, container: window }) {\n this.options = {};\n this.trackedElements = {};\n\n Object.defineProperties(this.options, {\n container: {\n configurable: false,\n enumerable: false,\n get() {\n let container;\n\n if (typeof options.container === 'string') {\n container = document.querySelector(options.container);\n } else if (options.container instanceof HTMLElement) {\n container = options.container;\n }\n\n return container || window;\n },\n set(value) {\n options.container = value;\n }\n },\n debounce: {\n get() {\n return parseInt(options.debounce, 10) || 100;\n },\n set(value) {\n options.debounce = value;\n }\n },\n tolerance: {\n get() {\n return parseInt(options.tolerance, 10) || 0;\n },\n set(value) {\n options.tolerance = value;\n }\n }\n });\n\n Object.defineProperty(this, '_scroll', {\n enumerable: false,\n configurable: false,\n writable: false,\n value: this._debouncedScroll.call(this)\n });\n\n observeDOM(document.querySelector('body'), () => {\n Object.keys(this.trackedElements).forEach((element) => {\n this.on('enter', element);\n this.on('leave', element);\n });\n });\n\n this.attach();\n}\n\nObject.defineProperties(OnScreen.prototype, {\n _debouncedScroll: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: debouncedScroll\n },\n attach: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: attach\n },\n destroy: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: destroy\n },\n off: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: off\n },\n on: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: on\n }\n});\n\nOnScreen.check = inViewport;\n\nexport default OnScreen;\n"],"names":["attach","container","options","HTMLElement","style","window","getComputedStyle","position","addEventListener","_scroll","passive","attached","inViewport","el","tolerance","Error","document","querySelector","elRect","getBoundingClientRect","bottom","right","left","innerWidth","documentElement","clientWidth","top","innerHeight","clientHeight","inContainer","containerRect","offsetTop","scrollTop","offsetLeft","scrollLeft","width","height","eventHandler","trackedElements","selectors","Object","keys","testVisibility","length","forEach","selector","nodes","item","node","wasVisible","isVisible","enter","callback","leave","debouncedScroll","timeout","clearTimeout","setTimeout","scrollHandler","debounce","destroy","removeEventListener","off","event","handler","enterCallbacks","leaveCallbacks","hasOwnProperty","call","callbackName","name","on","allowed","indexOf","i","elems","querySelectorAll","push","observeDOM","obj","MutationObserver","WebKitMutationObserver","obs","observe","childList","subtree","OnScreen","defineProperties","configurable","enumerable","get","set","value","parseInt","defineProperty","writable","_debouncedScroll","element","prototype","check"],"mappings":"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"}