{"version":3,"sources":["webpack:///./node_modules/vanilla-lazyload/dist/lazyload.min.js","webpack:///./node_modules/intersection-observer/intersection-observer.js"],"names":["module","exports","t","Object","assign","n","arguments","length","e","o","prototype","hasOwnProperty","call","apply","this","window","navigator","test","userAgent","a","document","createElement","r","elements_selector","container","threshold","thresholds","data_src","data_srcset","data_sizes","data_bg","data_poster","class_loading","class_loaded","class_error","load_delay","auto_unobserve","callback_enter","callback_exit","callback_loading","callback_loaded","callback_error","callback_finish","use_native","i","s","CustomEvent","detail","instance","createEvent","initCustomEvent","dispatchEvent","c","getAttribute","l","setAttribute","removeAttribute","u","d","f","_","children","tagName","push","v","g","h","IMG","parentNode","forEach","IFRAME","VIDEO","load","p","classList","add","className","m","remove","replace","RegExp","y","E","loadingCount","L","toLoadCount","w","addEventListener","I","removeEventListener","k","A","z","indexOf","target","C","style","backgroundImage","concat","b","O","callback_reveal","_observer","_settings","unobserve","N","clearTimeout","M","R","HTMLImageElement","F","IntersectionObserver","isIntersecting","intersectionRatio","setTimeout","x","root","rootMargin","G","Array","slice","D","querySelectorAll","P","S","U","filter","$","update","V","T","disconnect","observe","j","loadAll","destroy","lazyLoadOptions","IntersectionObserverEntry","defineProperty","get","registry","crossOriginUpdater","crossOriginRect","THROTTLE_TIMEOUT","POLL_INTERVAL","USE_MUTATION_OBSERVER","_setupCrossOriginUpdater","boundingClientRect","intersectionRect","convertFromParentRect","top","bottom","left","right","width","height","observer","_checkForIntersections","_resetCrossOriginUpdater","_observationTargets","some","item","element","nodeType","Error","_registerInstance","entry","_monitorIntersections","ownerDocument","_unmonitorIntersections","_unregisterInstance","_unmonitorAllIntersections","takeRecords","records","_queuedEntries","_initThresholds","opt_threshold","isArray","sort","isNaN","_parseRootMargin","opt_rootMargin","margins","split","map","margin","parts","exec","value","parseFloat","unit","doc","win","defaultView","_monitoringDocuments","callback","monitoringInterval","domObserver","setInterval","addEvent","MutationObserver","attributes","childList","characterData","subtree","_monitoringUnsubscribes","clearInterval","removeEvent","frame","getFrameElement","index","rootDoc","itemDoc","unsubscribe","splice","unsubscribes","rootIsInDom","_rootIsInDom","rootRect","_getRootRect","targetRect","getBoundingClientRect","rootContainsTarget","_rootContainsTarget","oldEntry","_computeTargetAndRootIntersection","newEntry","time","performance","now","rootBounds","_hasCrossedThreshold","_callback","getComputedStyle","display","rect1","rect2","parent","getParentNode","atRoot","parentRect","parentComputedStyle","frameRect","frameIntersect","body","documentElement","overflow","Math","max","min","html","clientWidth","clientHeight","_expandRectByRootMargin","rect","_rootMarginValues","newRect","oldRatio","newRatio","containsDeep","ensureDOMRect","targetArea","intersectionArea","Number","toFixed","opt_options","fn","timeout","timer","options","bind","join","node","event","opt_useCapture","attachEvent","detatchEvent","el","err","parentBoundingRect","parentIntersectionRect","child","host","assignedSlot","frameElement"],"mappings":"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","file":"/dist/vendor.js","sourcesContent":["!function(t,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):(t=t||self).LazyLoad=n()}(this,(function(){\"use strict\";function t(){return(t=Object.assign||function(t){for(var n=1;n-1})(t)&&(C(t,n,e),p(t,n.class_loading)),b(t,n,e),function(t,n){n&&(n.toLoadCount-=1,L(t,n))}(n,e)},O=function(t,n,e){z(t,n,e),u(t,\"loading\"),y(n.callback_loading,t,e),y(n.callback_reveal,t,e),function(t,n){if(n){var e=n._observer;e&&n._settings.auto_unobserve&&e.unobserve(t)}}(t,e)},N=function(t){var n=f(t);n&&(clearTimeout(n),d(t,null))},x=function(t,n,e){var o=e._settings;y(o.callback_enter,t,n,e),o.load_delay?function(t,n,e){var o=n.load_delay,a=f(t);a||(a=setTimeout((function(){O(t,n,e),N(t)}),o),d(t,a))}(t,o,e):O(t,o,e)},M=[\"IMG\",\"IFRAME\"],R=function(t){return t.use_native&&\"loading\"in HTMLImageElement.prototype},T=function(t,n,e){t.forEach((function(t){-1!==M.indexOf(t.tagName)&&(t.setAttribute(\"loading\",\"lazy\"),function(t,n,e){z(t,n,e),u(t,\"native\")}(t,n,e))})),e.toLoadCount=0},j=function(t,n){!function(t){t.disconnect()}(t),function(t,n){n.forEach((function(n){t.observe(n),u(n,\"observed\")}))}(t,n)},F=function(t){var n;o&&!R(t._settings)&&(t._observer=new IntersectionObserver((function(n){n.forEach((function(n){return function(t){return t.isIntersecting||t.intersectionRatio>0}(n)?x(n.target,n,t):function(t,n,e){var o=e._settings;y(o.callback_exit,t,n,e),o.load_delay&&N(t)}(n.target,n,t)}))}),{root:(n=t._settings).container===document?null:n.container,rootMargin:n.thresholds||n.threshold+\"px\"}))},G=function(t){return Array.prototype.slice.call(t)},D=function(t){return t.container.querySelectorAll(t.elements_selector)},P=function(t){return!function(t){return null!==c(t,\"ll-status\")}(t)||function(t){return\"observed\"===c(t,\"ll-status\")}(t)},S=function(t){return function(t){return\"error\"===c(t,\"ll-status\")}(t)},U=function(t,n){return function(t){return G(t).filter(P)}(t||D(n))},V=function(t){var n,e=t._settings;(n=D(e),G(n).filter(S)).forEach((function(t){m(t,e.class_error),function(t){l(t,\"ll-status\",null)}(t)})),t.update()},$=function(t,e){var o;this._settings=i(t),this.loadingCount=0,F(this),o=this,n&&window.addEventListener(\"online\",(function(t){V(o)})),this.update(e)};return $.prototype={update:function(t){var n=this._settings,a=U(t,n);this.toLoadCount=a.length,!e&&o?R(n)?T(a,n,this):j(this._observer,a):this.loadAll(a)},destroy:function(){this._observer&&this._observer.disconnect(),delete this._observer,delete this._settings,delete this.loadingCount,delete this.toLoadCount},loadAll:function(t){var n=this,e=this._settings;U(t,e).forEach((function(t){O(t,e,n)}))},load:function(t){O(t,this._settings,this)}},$.load=function(t,n){var e=i(n);O(t,e)},n&&function(t,n){if(n)if(n.length)for(var e,o=0;e=n[o];o+=1)s(t,e);else s(t,n)}($,window.lazyLoadOptions),$}));\r\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n */\n(function() {\n'use strict';\n\n// Exit early if we're not running in a browser.\nif (typeof window !== 'object') {\n return;\n}\n\n// Exit early if all IntersectionObserver and IntersectionObserverEntry\n// features are natively supported.\nif ('IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window &&\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype) {\n\n // Minimal polyfill for Edge 15's lack of `isIntersecting`\n // See: https://github.com/w3c/IntersectionObserver/issues/211\n if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {\n Object.defineProperty(window.IntersectionObserverEntry.prototype,\n 'isIntersecting', {\n get: function () {\n return this.intersectionRatio > 0;\n }\n });\n }\n return;\n}\n\n\n/**\n * A local reference to the document.\n */\nvar document = window.document;\n\n\n/**\n * An IntersectionObserver registry. This registry exists to hold a strong\n * reference to IntersectionObserver instances currently observing a target\n * element. Without this registry, instances without another reference may be\n * garbage collected.\n */\nvar registry = [];\n\n/**\n * The signal updater for cross-origin intersection. When not null, it means\n * that the polyfill is configured to work in a cross-origin mode.\n * @type {function(DOMRect|ClientRect, DOMRect|ClientRect)}\n */\nvar crossOriginUpdater = null;\n\n/**\n * The current cross-origin intersection. Only used in the cross-origin mode.\n * @type {DOMRect|ClientRect}\n */\nvar crossOriginRect = null;\n\n\n/**\n * Creates the global IntersectionObserverEntry constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @param {Object} entry A dictionary of instance properties.\n * @constructor\n */\nfunction IntersectionObserverEntry(entry) {\n this.time = entry.time;\n this.target = entry.target;\n this.rootBounds = ensureDOMRect(entry.rootBounds);\n this.boundingClientRect = ensureDOMRect(entry.boundingClientRect);\n this.intersectionRect = ensureDOMRect(entry.intersectionRect || getEmptyRect());\n this.isIntersecting = !!entry.intersectionRect;\n\n // Calculates the intersection ratio.\n var targetRect = this.boundingClientRect;\n var targetArea = targetRect.width * targetRect.height;\n var intersectionRect = this.intersectionRect;\n var intersectionArea = intersectionRect.width * intersectionRect.height;\n\n // Sets intersection ratio.\n if (targetArea) {\n // Round the intersection ratio to avoid floating point math issues:\n // https://github.com/w3c/IntersectionObserver/issues/324\n this.intersectionRatio = Number((intersectionArea / targetArea).toFixed(4));\n } else {\n // If area is zero and is intersecting, sets to 1, otherwise to 0\n this.intersectionRatio = this.isIntersecting ? 1 : 0;\n }\n}\n\n\n/**\n * Creates the global IntersectionObserver constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {Function} callback The function to be invoked after intersection\n * changes have queued. The function is not invoked if the queue has\n * been emptied by calling the `takeRecords` method.\n * @param {Object=} opt_options Optional configuration options.\n * @constructor\n */\nfunction IntersectionObserver(callback, opt_options) {\n\n var options = opt_options || {};\n\n if (typeof callback != 'function') {\n throw new Error('callback must be a function');\n }\n\n if (options.root && options.root.nodeType != 1) {\n throw new Error('root must be an Element');\n }\n\n // Binds and throttles `this._checkForIntersections`.\n this._checkForIntersections = throttle(\n this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT);\n\n // Private properties.\n this._callback = callback;\n this._observationTargets = [];\n this._queuedEntries = [];\n this._rootMarginValues = this._parseRootMargin(options.rootMargin);\n\n // Public properties.\n this.thresholds = this._initThresholds(options.threshold);\n this.root = options.root || null;\n this.rootMargin = this._rootMarginValues.map(function(margin) {\n return margin.value + margin.unit;\n }).join(' ');\n\n /** @private @const {!Array} */\n this._monitoringDocuments = [];\n /** @private @const {!Array} */\n this._monitoringUnsubscribes = [];\n}\n\n\n/**\n * The minimum interval within which the document will be checked for\n * intersection changes.\n */\nIntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;\n\n\n/**\n * The frequency in which the polyfill polls for intersection changes.\n * this can be updated on a per instance basis and must be set prior to\n * calling `observe` on the first target.\n */\nIntersectionObserver.prototype.POLL_INTERVAL = null;\n\n/**\n * Use a mutation observer on the root element\n * to detect intersection changes.\n */\nIntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;\n\n\n/**\n * Sets up the polyfill in the cross-origin mode. The result is the\n * updater function that accepts two arguments: `boundingClientRect` and\n * `intersectionRect` - just as these fields would be available to the\n * parent via `IntersectionObserverEntry`. This function should be called\n * each time the iframe receives intersection information from the parent\n * window, e.g. via messaging.\n * @return {function(DOMRect|ClientRect, DOMRect|ClientRect)}\n */\nIntersectionObserver._setupCrossOriginUpdater = function() {\n if (!crossOriginUpdater) {\n /**\n * @param {DOMRect|ClientRect} boundingClientRect\n * @param {DOMRect|ClientRect} intersectionRect\n */\n crossOriginUpdater = function(boundingClientRect, intersectionRect) {\n if (!boundingClientRect || !intersectionRect) {\n crossOriginRect = getEmptyRect();\n } else {\n crossOriginRect = convertFromParentRect(boundingClientRect, intersectionRect);\n }\n registry.forEach(function(observer) {\n observer._checkForIntersections();\n });\n };\n }\n return crossOriginUpdater;\n};\n\n\n/**\n * Resets the cross-origin mode.\n */\nIntersectionObserver._resetCrossOriginUpdater = function() {\n crossOriginUpdater = null;\n crossOriginRect = null;\n};\n\n\n/**\n * Starts observing a target element for intersection changes based on\n * the thresholds values.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.observe = function(target) {\n var isTargetAlreadyObserved = this._observationTargets.some(function(item) {\n return item.element == target;\n });\n\n if (isTargetAlreadyObserved) {\n return;\n }\n\n if (!(target && target.nodeType == 1)) {\n throw new Error('target must be an Element');\n }\n\n this._registerInstance();\n this._observationTargets.push({element: target, entry: null});\n this._monitorIntersections(target.ownerDocument);\n this._checkForIntersections();\n};\n\n\n/**\n * Stops observing a target element for intersection changes.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.unobserve = function(target) {\n this._observationTargets =\n this._observationTargets.filter(function(item) {\n return item.element != target;\n });\n this._unmonitorIntersections(target.ownerDocument);\n if (this._observationTargets.length == 0) {\n this._unregisterInstance();\n }\n};\n\n\n/**\n * Stops observing all target elements for intersection changes.\n */\nIntersectionObserver.prototype.disconnect = function() {\n this._observationTargets = [];\n this._unmonitorAllIntersections();\n this._unregisterInstance();\n};\n\n\n/**\n * Returns any queue entries that have not yet been reported to the\n * callback and clears the queue. This can be used in conjunction with the\n * callback to obtain the absolute most up-to-date intersection information.\n * @return {Array} The currently queued entries.\n */\nIntersectionObserver.prototype.takeRecords = function() {\n var records = this._queuedEntries.slice();\n this._queuedEntries = [];\n return records;\n};\n\n\n/**\n * Accepts the threshold value from the user configuration object and\n * returns a sorted array of unique threshold values. If a value is not\n * between 0 and 1 and error is thrown.\n * @private\n * @param {Array|number=} opt_threshold An optional threshold value or\n * a list of threshold values, defaulting to [0].\n * @return {Array} A sorted list of unique and valid threshold values.\n */\nIntersectionObserver.prototype._initThresholds = function(opt_threshold) {\n var threshold = opt_threshold || [0];\n if (!Array.isArray(threshold)) threshold = [threshold];\n\n return threshold.sort().filter(function(t, i, a) {\n if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) {\n throw new Error('threshold must be a number between 0 and 1 inclusively');\n }\n return t !== a[i - 1];\n });\n};\n\n\n/**\n * Accepts the rootMargin value from the user configuration object\n * and returns an array of the four margin values as an object containing\n * the value and unit properties. If any of the values are not properly\n * formatted or use a unit other than px or %, and error is thrown.\n * @private\n * @param {string=} opt_rootMargin An optional rootMargin value,\n * defaulting to '0px'.\n * @return {Array} An array of margin objects with the keys\n * value and unit.\n */\nIntersectionObserver.prototype._parseRootMargin = function(opt_rootMargin) {\n var marginString = opt_rootMargin || '0px';\n var margins = marginString.split(/\\s+/).map(function(margin) {\n var parts = /^(-?\\d*\\.?\\d+)(px|%)$/.exec(margin);\n if (!parts) {\n throw new Error('rootMargin must be specified in pixels or percent');\n }\n return {value: parseFloat(parts[1]), unit: parts[2]};\n });\n\n // Handles shorthand.\n margins[1] = margins[1] || margins[0];\n margins[2] = margins[2] || margins[0];\n margins[3] = margins[3] || margins[1];\n\n return margins;\n};\n\n\n/**\n * Starts polling for intersection changes if the polling is not already\n * happening, and if the page's visibility state is visible.\n * @param {!Document} doc\n * @private\n */\nIntersectionObserver.prototype._monitorIntersections = function(doc) {\n var win = doc.defaultView;\n if (!win) {\n // Already destroyed.\n return;\n }\n if (this._monitoringDocuments.indexOf(doc) != -1) {\n // Already monitoring.\n return;\n }\n\n // Private state for monitoring.\n var callback = this._checkForIntersections;\n var monitoringInterval = null;\n var domObserver = null;\n\n // If a poll interval is set, use polling instead of listening to\n // resize and scroll events or DOM mutations.\n if (this.POLL_INTERVAL) {\n monitoringInterval = win.setInterval(callback, this.POLL_INTERVAL);\n } else {\n addEvent(win, 'resize', callback, true);\n addEvent(doc, 'scroll', callback, true);\n if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in win) {\n domObserver = new win.MutationObserver(callback);\n domObserver.observe(doc, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n });\n }\n }\n\n this._monitoringDocuments.push(doc);\n this._monitoringUnsubscribes.push(function() {\n // Get the window object again. When a friendly iframe is destroyed, it\n // will be null.\n var win = doc.defaultView;\n\n if (win) {\n if (monitoringInterval) {\n win.clearInterval(monitoringInterval);\n }\n removeEvent(win, 'resize', callback, true);\n }\n\n removeEvent(doc, 'scroll', callback, true);\n if (domObserver) {\n domObserver.disconnect();\n }\n });\n\n // Also monitor the parent.\n if (doc != (this.root && this.root.ownerDocument || document)) {\n var frame = getFrameElement(doc);\n if (frame) {\n this._monitorIntersections(frame.ownerDocument);\n }\n }\n};\n\n\n/**\n * Stops polling for intersection changes.\n * @param {!Document} doc\n * @private\n */\nIntersectionObserver.prototype._unmonitorIntersections = function(doc) {\n var index = this._monitoringDocuments.indexOf(doc);\n if (index == -1) {\n return;\n }\n\n var rootDoc = (this.root && this.root.ownerDocument || document);\n\n // Check if any dependent targets are still remaining.\n var hasDependentTargets =\n this._observationTargets.some(function(item) {\n var itemDoc = item.element.ownerDocument;\n // Target is in this context.\n if (itemDoc == doc) {\n return true;\n }\n // Target is nested in this context.\n while (itemDoc && itemDoc != rootDoc) {\n var frame = getFrameElement(itemDoc);\n itemDoc = frame && frame.ownerDocument;\n if (itemDoc == doc) {\n return true;\n }\n }\n return false;\n });\n if (hasDependentTargets) {\n return;\n }\n\n // Unsubscribe.\n var unsubscribe = this._monitoringUnsubscribes[index];\n this._monitoringDocuments.splice(index, 1);\n this._monitoringUnsubscribes.splice(index, 1);\n unsubscribe();\n\n // Also unmonitor the parent.\n if (doc != rootDoc) {\n var frame = getFrameElement(doc);\n if (frame) {\n this._unmonitorIntersections(frame.ownerDocument);\n }\n }\n};\n\n\n/**\n * Stops polling for intersection changes.\n * @param {!Document} doc\n * @private\n */\nIntersectionObserver.prototype._unmonitorAllIntersections = function() {\n var unsubscribes = this._monitoringUnsubscribes.slice(0);\n this._monitoringDocuments.length = 0;\n this._monitoringUnsubscribes.length = 0;\n for (var i = 0; i < unsubscribes.length; i++) {\n unsubscribes[i]();\n }\n};\n\n\n/**\n * Scans each observation target for intersection changes and adds them\n * to the internal entries queue. If new entries are found, it\n * schedules the callback to be invoked.\n * @private\n */\nIntersectionObserver.prototype._checkForIntersections = function() {\n if (!this.root && crossOriginUpdater && !crossOriginRect) {\n // Cross origin monitoring, but no initial data available yet.\n return;\n }\n\n var rootIsInDom = this._rootIsInDom();\n var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();\n\n this._observationTargets.forEach(function(item) {\n var target = item.element;\n var targetRect = getBoundingClientRect(target);\n var rootContainsTarget = this._rootContainsTarget(target);\n var oldEntry = item.entry;\n var intersectionRect = rootIsInDom && rootContainsTarget &&\n this._computeTargetAndRootIntersection(target, targetRect, rootRect);\n\n var newEntry = item.entry = new IntersectionObserverEntry({\n time: now(),\n target: target,\n boundingClientRect: targetRect,\n rootBounds: crossOriginUpdater && !this.root ? null : rootRect,\n intersectionRect: intersectionRect\n });\n\n if (!oldEntry) {\n this._queuedEntries.push(newEntry);\n } else if (rootIsInDom && rootContainsTarget) {\n // If the new entry intersection ratio has crossed any of the\n // thresholds, add a new entry.\n if (this._hasCrossedThreshold(oldEntry, newEntry)) {\n this._queuedEntries.push(newEntry);\n }\n } else {\n // If the root is not in the DOM or target is not contained within\n // root but the previous entry for this target had an intersection,\n // add a new record indicating removal.\n if (oldEntry && oldEntry.isIntersecting) {\n this._queuedEntries.push(newEntry);\n }\n }\n }, this);\n\n if (this._queuedEntries.length) {\n this._callback(this.takeRecords(), this);\n }\n};\n\n\n/**\n * Accepts a target and root rect computes the intersection between then\n * following the algorithm in the spec.\n * TODO(philipwalton): at this time clip-path is not considered.\n * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo\n * @param {Element} target The target DOM element\n * @param {Object} targetRect The bounding rect of the target.\n * @param {Object} rootRect The bounding rect of the root after being\n * expanded by the rootMargin value.\n * @return {?Object} The final intersection rect object or undefined if no\n * intersection is found.\n * @private\n */\nIntersectionObserver.prototype._computeTargetAndRootIntersection =\n function(target, targetRect, rootRect) {\n // If the element isn't displayed, an intersection can't happen.\n if (window.getComputedStyle(target).display == 'none') return;\n\n var intersectionRect = targetRect;\n var parent = getParentNode(target);\n var atRoot = false;\n\n while (!atRoot && parent) {\n var parentRect = null;\n var parentComputedStyle = parent.nodeType == 1 ?\n window.getComputedStyle(parent) : {};\n\n // If the parent isn't displayed, an intersection can't happen.\n if (parentComputedStyle.display == 'none') return null;\n\n if (parent == this.root || parent.nodeType == /* DOCUMENT */ 9) {\n atRoot = true;\n if (parent == this.root || parent == document) {\n if (crossOriginUpdater && !this.root) {\n if (!crossOriginRect ||\n crossOriginRect.width == 0 && crossOriginRect.height == 0) {\n // A 0-size cross-origin intersection means no-intersection.\n parent = null;\n parentRect = null;\n intersectionRect = null;\n } else {\n parentRect = crossOriginRect;\n }\n } else {\n parentRect = rootRect;\n }\n } else {\n // Check if there's a frame that can be navigated to.\n var frame = getParentNode(parent);\n var frameRect = frame && getBoundingClientRect(frame);\n var frameIntersect =\n frame &&\n this._computeTargetAndRootIntersection(frame, frameRect, rootRect);\n if (frameRect && frameIntersect) {\n parent = frame;\n parentRect = convertFromParentRect(frameRect, frameIntersect);\n } else {\n parent = null;\n intersectionRect = null;\n }\n }\n } else {\n // If the element has a non-visible overflow, and it's not the \n // or element, update the intersection rect.\n // Note: and cannot be clipped to a rect that's not also\n // the document rect, so no need to compute a new intersection.\n var doc = parent.ownerDocument;\n if (parent != doc.body &&\n parent != doc.documentElement &&\n parentComputedStyle.overflow != 'visible') {\n parentRect = getBoundingClientRect(parent);\n }\n }\n\n // If either of the above conditionals set a new parentRect,\n // calculate new intersection data.\n if (parentRect) {\n intersectionRect = computeRectIntersection(parentRect, intersectionRect);\n }\n if (!intersectionRect) break;\n parent = parent && getParentNode(parent);\n }\n return intersectionRect;\n};\n\n\n/**\n * Returns the root rect after being expanded by the rootMargin value.\n * @return {ClientRect} The expanded root rect.\n * @private\n */\nIntersectionObserver.prototype._getRootRect = function() {\n var rootRect;\n if (this.root) {\n rootRect = getBoundingClientRect(this.root);\n } else {\n // Use / instead of window since scroll bars affect size.\n var html = document.documentElement;\n var body = document.body;\n rootRect = {\n top: 0,\n left: 0,\n right: html.clientWidth || body.clientWidth,\n width: html.clientWidth || body.clientWidth,\n bottom: html.clientHeight || body.clientHeight,\n height: html.clientHeight || body.clientHeight\n };\n }\n return this._expandRectByRootMargin(rootRect);\n};\n\n\n/**\n * Accepts a rect and expands it by the rootMargin value.\n * @param {DOMRect|ClientRect} rect The rect object to expand.\n * @return {ClientRect} The expanded rect.\n * @private\n */\nIntersectionObserver.prototype._expandRectByRootMargin = function(rect) {\n var margins = this._rootMarginValues.map(function(margin, i) {\n return margin.unit == 'px' ? margin.value :\n margin.value * (i % 2 ? rect.width : rect.height) / 100;\n });\n var newRect = {\n top: rect.top - margins[0],\n right: rect.right + margins[1],\n bottom: rect.bottom + margins[2],\n left: rect.left - margins[3]\n };\n newRect.width = newRect.right - newRect.left;\n newRect.height = newRect.bottom - newRect.top;\n\n return newRect;\n};\n\n\n/**\n * Accepts an old and new entry and returns true if at least one of the\n * threshold values has been crossed.\n * @param {?IntersectionObserverEntry} oldEntry The previous entry for a\n * particular target element or null if no previous entry exists.\n * @param {IntersectionObserverEntry} newEntry The current entry for a\n * particular target element.\n * @return {boolean} Returns true if a any threshold has been crossed.\n * @private\n */\nIntersectionObserver.prototype._hasCrossedThreshold =\n function(oldEntry, newEntry) {\n\n // To make comparing easier, an entry that has a ratio of 0\n // but does not actually intersect is given a value of -1\n var oldRatio = oldEntry && oldEntry.isIntersecting ?\n oldEntry.intersectionRatio || 0 : -1;\n var newRatio = newEntry.isIntersecting ?\n newEntry.intersectionRatio || 0 : -1;\n\n // Ignore unchanged ratios\n if (oldRatio === newRatio) return;\n\n for (var i = 0; i < this.thresholds.length; i++) {\n var threshold = this.thresholds[i];\n\n // Return true if an entry matches a threshold or if the new ratio\n // and the old ratio are on the opposite sides of a threshold.\n if (threshold == oldRatio || threshold == newRatio ||\n threshold < oldRatio !== threshold < newRatio) {\n return true;\n }\n }\n};\n\n\n/**\n * Returns whether or not the root element is an element and is in the DOM.\n * @return {boolean} True if the root element is an element and is in the DOM.\n * @private\n */\nIntersectionObserver.prototype._rootIsInDom = function() {\n return !this.root || containsDeep(document, this.root);\n};\n\n\n/**\n * Returns whether or not the target element is a child of root.\n * @param {Element} target The target element to check.\n * @return {boolean} True if the target element is a child of root.\n * @private\n */\nIntersectionObserver.prototype._rootContainsTarget = function(target) {\n return containsDeep(this.root || document, target) &&\n (!this.root || this.root.ownerDocument == target.ownerDocument);\n};\n\n\n/**\n * Adds the instance to the global IntersectionObserver registry if it isn't\n * already present.\n * @private\n */\nIntersectionObserver.prototype._registerInstance = function() {\n if (registry.indexOf(this) < 0) {\n registry.push(this);\n }\n};\n\n\n/**\n * Removes the instance from the global IntersectionObserver registry.\n * @private\n */\nIntersectionObserver.prototype._unregisterInstance = function() {\n var index = registry.indexOf(this);\n if (index != -1) registry.splice(index, 1);\n};\n\n\n/**\n * Returns the result of the performance.now() method or null in browsers\n * that don't support the API.\n * @return {number} The elapsed time since the page was requested.\n */\nfunction now() {\n return window.performance && performance.now && performance.now();\n}\n\n\n/**\n * Throttles a function and delays its execution, so it's only called at most\n * once within a given time period.\n * @param {Function} fn The function to throttle.\n * @param {number} timeout The amount of time that must pass before the\n * function can be called again.\n * @return {Function} The throttled function.\n */\nfunction throttle(fn, timeout) {\n var timer = null;\n return function () {\n if (!timer) {\n timer = setTimeout(function() {\n fn();\n timer = null;\n }, timeout);\n }\n };\n}\n\n\n/**\n * Adds an event handler to a DOM node ensuring cross-browser compatibility.\n * @param {Node} node The DOM node to add the event handler to.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to add.\n * @param {boolean} opt_useCapture Optionally adds the even to the capture\n * phase. Note: this only works in modern browsers.\n */\nfunction addEvent(node, event, fn, opt_useCapture) {\n if (typeof node.addEventListener == 'function') {\n node.addEventListener(event, fn, opt_useCapture || false);\n }\n else if (typeof node.attachEvent == 'function') {\n node.attachEvent('on' + event, fn);\n }\n}\n\n\n/**\n * Removes a previously added event handler from a DOM node.\n * @param {Node} node The DOM node to remove the event handler from.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to remove.\n * @param {boolean} opt_useCapture If the event handler was added with this\n * flag set to true, it should be set to true here in order to remove it.\n */\nfunction removeEvent(node, event, fn, opt_useCapture) {\n if (typeof node.removeEventListener == 'function') {\n node.removeEventListener(event, fn, opt_useCapture || false);\n }\n else if (typeof node.detatchEvent == 'function') {\n node.detatchEvent('on' + event, fn);\n }\n}\n\n\n/**\n * Returns the intersection between two rect objects.\n * @param {Object} rect1 The first rect.\n * @param {Object} rect2 The second rect.\n * @return {?Object|?ClientRect} The intersection rect or undefined if no\n * intersection is found.\n */\nfunction computeRectIntersection(rect1, rect2) {\n var top = Math.max(rect1.top, rect2.top);\n var bottom = Math.min(rect1.bottom, rect2.bottom);\n var left = Math.max(rect1.left, rect2.left);\n var right = Math.min(rect1.right, rect2.right);\n var width = right - left;\n var height = bottom - top;\n\n return (width >= 0 && height >= 0) && {\n top: top,\n bottom: bottom,\n left: left,\n right: right,\n width: width,\n height: height\n } || null;\n}\n\n\n/**\n * Shims the native getBoundingClientRect for compatibility with older IE.\n * @param {Element} el The element whose bounding rect to get.\n * @return {DOMRect|ClientRect} The (possibly shimmed) rect of the element.\n */\nfunction getBoundingClientRect(el) {\n var rect;\n\n try {\n rect = el.getBoundingClientRect();\n } catch (err) {\n // Ignore Windows 7 IE11 \"Unspecified error\"\n // https://github.com/w3c/IntersectionObserver/pull/205\n }\n\n if (!rect) return getEmptyRect();\n\n // Older IE\n if (!(rect.width && rect.height)) {\n rect = {\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n }\n return rect;\n}\n\n\n/**\n * Returns an empty rect object. An empty rect is returned when an element\n * is not in the DOM.\n * @return {ClientRect} The empty rect.\n */\nfunction getEmptyRect() {\n return {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n width: 0,\n height: 0\n };\n}\n\n\n/**\n * Ensure that the result has all of the necessary fields of the DOMRect.\n * Specifically this ensures that `x` and `y` fields are set.\n *\n * @param {?DOMRect|?ClientRect} rect\n * @return {?DOMRect}\n */\nfunction ensureDOMRect(rect) {\n // A `DOMRect` object has `x` and `y` fields.\n if (!rect || 'x' in rect) {\n return rect;\n }\n // A IE's `ClientRect` type does not have `x` and `y`. The same is the case\n // for internally calculated Rect objects. For the purposes of\n // `IntersectionObserver`, it's sufficient to simply mirror `left` and `top`\n // for these fields.\n return {\n top: rect.top,\n y: rect.top,\n bottom: rect.bottom,\n left: rect.left,\n x: rect.left,\n right: rect.right,\n width: rect.width,\n height: rect.height\n };\n}\n\n\n/**\n * Inverts the intersection and bounding rect from the parent (frame) BCR to\n * the local BCR space.\n * @param {DOMRect|ClientRect} parentBoundingRect The parent's bound client rect.\n * @param {DOMRect|ClientRect} parentIntersectionRect The parent's own intersection rect.\n * @return {ClientRect} The local root bounding rect for the parent's children.\n */\nfunction convertFromParentRect(parentBoundingRect, parentIntersectionRect) {\n var top = parentIntersectionRect.top - parentBoundingRect.top;\n var left = parentIntersectionRect.left - parentBoundingRect.left;\n return {\n top: top,\n left: left,\n height: parentIntersectionRect.height,\n width: parentIntersectionRect.width,\n bottom: top + parentIntersectionRect.height,\n right: left + parentIntersectionRect.width\n };\n}\n\n\n/**\n * Checks to see if a parent element contains a child element (including inside\n * shadow DOM).\n * @param {Node} parent The parent element.\n * @param {Node} child The child element.\n * @return {boolean} True if the parent node contains the child node.\n */\nfunction containsDeep(parent, child) {\n var node = child;\n while (node) {\n if (node == parent) return true;\n\n node = getParentNode(node);\n }\n return false;\n}\n\n\n/**\n * Gets the parent node of an element or its host element if the parent node\n * is a shadow root.\n * @param {Node} node The node whose parent to get.\n * @return {Node|null} The parent node or null if no parent exists.\n */\nfunction getParentNode(node) {\n var parent = node.parentNode;\n\n if (node.nodeType == /* DOCUMENT */ 9 && node != document) {\n // If this node is a document node, look for the embedding frame.\n return getFrameElement(node);\n }\n\n if (parent && parent.nodeType == 11 && parent.host) {\n // If the parent is a shadow root, return the host element.\n return parent.host;\n }\n\n if (parent && parent.assignedSlot) {\n // If the parent is distributed in a , return the parent of a slot.\n return parent.assignedSlot.parentNode;\n }\n\n return parent;\n}\n\n\n/**\n * Returns the embedding frame element, if any.\n * @param {!Document} doc\n * @return {!Element}\n */\nfunction getFrameElement(doc) {\n try {\n return doc.defaultView && doc.defaultView.frameElement || null;\n } catch (e) {\n // Ignore the error.\n return null;\n }\n}\n\n\n// Exposes the constructors globally.\nwindow.IntersectionObserver = IntersectionObserver;\nwindow.IntersectionObserverEntry = IntersectionObserverEntry;\n\n}());\n"],"sourceRoot":""}