{"version":3,"sources":["lazy.js"],"names":["loadModal","modal","toDelete","i","modals","length","style","display","push","setLazyItems","lazyLoadAll","splice","removeListener","forEach","array","fn","isInViewport","el","offset","rect","getBoundingClientRect","offsetParent","bottom","right","top","window","innerHeight","document","documentElement","clientHeight","left","innerWidth","clientWidth","isVisible","node","offsetWidth","offsetHeight","getClientRects","active","embeds","lazyLoadEmbeds","imgs","lazyLoadImages","videos","lazyLoadVideos","loadEmbed","attr","loadImage","loadVideo","embed","createElement","innerHTML","getAttribute","trim","children","child","tagName","onload","removeChild","appendChild","script","async","src","type","loader","querySelector","parentNode","removeAttribute","classList","remove","srcAttrName","contains","img","Image","loadImgFns","add","onerror","setAttribute","videoSource","load","setTimeout","canPlayType","paused","ready","attachEvent","readyState","addEventListener","registerListener","event","func","container","capture","removeEventListener","slice","call","querySelectorAll","data-async-bg","backgroundImage","data-async-src"],"mappings":"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","sourceRoot":"/assets","sourcesContent":["(function(){\n var active = false;\n var embeds = [];\n var imgs = [];\n var modals = [];\n var videos = [];\n\n ready(function(){\n setLazyItems();\n if (embeds.length || imgs.length || videos.length) {\n lazyLoadAll();\n }\n // if there are more after the first images load, then bound listeners\n if (embeds.length || imgs.length || videos.length) {\n registerListener('resize', lazyLoadAll);\n registerListener('scroll', lazyLoadAll, null, true);\n }\n // if we have any modals on the page\n modals = [].slice.call(document.querySelectorAll('.modal-popup'));\n if (modals.length) {\n registerListener('modal:open', loadModal);\n }\n });\n\n function loadModal() {\n var modal;\n var toDelete = [];\n\n for (var i = 0; i \u003c modals.length; i++){\n if (modals[i].style.display === 'block') {\n modal = modals[i];\n toDelete.push(i);\n }\n }\n\n setLazyItems(modal);\n lazyLoadAll();\n\n for (var i = 0; i \u003c toDelete.length; i++){\n modals.splice(toDelete[i] - i, 1);\n }\n if (!modals.length) {\n removeListener('modal:open', lazyLoadAll);\n }\n }\n\n function forEach(array, fn){\n for (var i = 0; i \u003c array.length; i++){\n fn(array[i]);\n }\n }\n\n function isInViewport(el, offset){\n offset = offset || 100;\n var rect = el.getBoundingClientRect();\n\n return (\n el.offsetParent !== null \u0026\u0026\n rect.bottom \u003e= 0 \u0026\u0026\n rect.right \u003e= 0 \u0026\u0026\n\n rect.top - offset \u003c= (\n window.innerHeight ||\n document.documentElement.clientHeight) \u0026\u0026\n\n rect.left - offset \u003c= (\n window.innerWidth ||\n document.documentElement.clientWidth)\n );\n }\n\n function isVisible(node) {\n return !!(node.offsetWidth || node.offsetHeight || node.getClientRects().length);\n }\n\n function lazyLoadAll(event) {\n if (active === false) {\n active = true;\n if (embeds.length) lazyLoadEmbeds();\n if (imgs.length) lazyLoadImages();\n if (videos.length) lazyLoadVideos();\n if (!embeds.length \u0026\u0026 !imgs.length \u0026\u0026 !videos.length) {\n removeListener('resize', lazyLoadAll);\n removeListener('scroll', lazyLoadAll, null, true);\n }\n active = false;\n }\n }\n\n function lazyLoadEmbeds() {\n var toDelete = [];\n\n for (var i = 0; i \u003c embeds.length; i++){\n if (isInViewport(embeds[i].el, 500)) {\n loadEmbed(embeds[i].el, embeds[i].attr);\n toDelete.push(i);\n }\n }\n\n for (var i = 0; i \u003c toDelete.length; i++){\n embeds.splice(toDelete[i] - i, 1);\n }\n }\n\n function lazyLoadImages() {\n var toDelete = [];\n\n for (var i = 0; i \u003c imgs.length; i++){\n if (isInViewport(imgs[i].el)) {\n loadImage(imgs[i].el, imgs[i].attr);\n toDelete.push(i);\n }\n }\n\n for (var i = 0; i \u003c toDelete.length; i++){\n imgs.splice(toDelete[i] - i, 1);\n }\n }\n\n function lazyLoadVideos() {\n var toDelete = [];\n\n for (var i = 0; i \u003c videos.length; i++){\n if (isInViewport(videos[i].el)) {\n loadVideo(videos[i].el);\n toDelete.push(i);\n }\n }\n\n for (var i = 0; i \u003c toDelete.length; i++){\n videos.splice(toDelete[i] - i, 1);\n }\n }\n\n var loadImgFns = {\n \"data-async-bg\": function(el, src){\n el.style.backgroundImage = 'url(\"' + src + '\")';\n },\n \"data-async-src\": function(el, src){\n el.src = src;\n }\n }\n\n function loadEmbed(el) {\n var embed = document.createElement('div');\n embed.innerHTML = el.getAttribute('data-html').trim();\n\n // loop in reverse so that the condition remains true as we remove children\n // from embed\n for (var i=embed.children.length - 1; i \u003e -1; i--) {\n var child = embed.children[i];\n if (!child) break;\n // if the element is an iframe we want to keep the loader in place until\n // the iframe is loaded\n if (child.tagName === 'IFRAME') {\n child.onload = function() {\n el.removeChild(el.children[0]);\n };\n el.appendChild(child);\n\n // if the element is a script we need to create it on the dom otherwise\n // it won't execute\n } else if (child.tagName === 'SCRIPT') {\n var script = document.createElement('script');\n script.innerHTML = child.innerHTML;\n script.async = child.async;\n if (child.src) script.src = child.src;\n if (child.type) script.type = child.type;\n el.appendChild(script);\n } else {\n var loader = el.querySelector('.embed-loader');\n loader.parentNode.removeChild(loader);\n el.appendChild(child);\n }\n }\n\n el.removeAttribute('data-html');\n el.classList.remove('lazy-embed');\n }\n\n function loadImage(el, srcAttrName, loadFunc) {\n if (!el.classList) return; // loading images won't work on \u003cIE10\n if (el.classList.contains('loaded')) return;\n\n var img = new Image(),\n src = el.getAttribute(srcAttrName);\n\n img.onload = function() {\n loadImgFns[srcAttrName](el, src);\n el.classList.add('loaded');\n }\n img.onerror = function() {\n el.classList.remove('img-loader');\n el.classList.add('load-error');\n }\n\n el.classList.add('img-loader');\n img.src = src;\n el.removeAttribute(srcAttrName);\n }\n\n function loadVideo(el) {\n if (el.getAttribute('data-async-poster')) {\n el.setAttribute('poster', el.getAttribute('data-async-poster'));\n }\n\n if (!el.classList) return; // loading images won't work on \u003cIE10\n if (el.classList.contains('loaded')) return;\n\n for (var i=0; i \u003c el.children.length; i++) {\n var videoSource = el.children[i];\n if (typeof videoSource.tagName === \"string\" \u0026\u0026 videoSource.tagName === \"SOURCE\") {\n videoSource.src = videoSource.getAttribute('data-async-src');\n videoSource.removeAttribute('data-async-src');\n }\n }\n\n el.load();\n el.classList.add('loaded');\n\n // Ugly timeout because it seems .load() takes some time, causing .paused to\n // be true immediately after .load() is called.\n setTimeout(function(){\n if (!el.canPlayType || el.paused) {\n el.setAttribute('poster', el.getAttribute('data-fallback-src'));\n }\n }, 50);\n }\n\n function ready(fn) {\n if (document.attachEvent ? document.readyState === \"complete\" : document.readyState !== \"loading\"){\n fn();\n } else {\n document.addEventListener('DOMContentLoaded', fn);\n }\n }\n\n function registerListener(event, func, container, capture) {\n container = container || window;\n if (container.addEventListener) {\n container.addEventListener(event, func, !!capture);\n } else {\n container.attachEvent('on' + event, func);\n }\n }\n\n function removeListener(event, func, container, capture) {\n container = container || window;\n container.removeEventListener(event, func, !!capture);\n }\n\n // we add all elements that are currently visible within the container\n function setLazyItems(container){\n container = container || document;\n forEach([].slice.call(container.querySelectorAll('[data-async-bg]')), function(el){\n if (isVisible(el))\n imgs.push({ attr: 'data-async-bg', el: el });\n });\n forEach([].slice.call(container.querySelectorAll('img[data-async-src]')), function(el){\n if (isVisible(el))\n imgs.push({ attr: 'data-async-src', el: el });\n });\n forEach([].slice.call(container.querySelectorAll('video.async-video')), function(el){\n if (isVisible(el))\n videos.push({ el: el });\n });\n forEach([].slice.call(container.querySelectorAll('.lazy-embed')), function(el){\n if (isVisible(el))\n embeds.push({ el: el });\n });\n }\n})();\n"]}