{"version":3,"sources":["Lazy.js"],"names":["images","document","querySelectorAll","config","rootMargin","threshold","observer","imageCount","length","window","IntersectionObserver","onIntersection","i","image","classList","contains","observe","loadImagesImmediately","fetchImage","url","Promise","resolve","reject","Image","src","onload","onerror","preloadImage","dataset","then","applyImage","disconnect","entries","entry","intersectionRatio","unobserve","target","img","add"],"mappings":"AAEI,MAAMA,OAASC,SAASC,iBAAiB,eACnCC,OAAS,CAEXC,WAAY,WACZC,UAAW,KAGf,IACIC,SADAC,WAAaP,OAAOQ,OAIxB,GAAM,yBAA0BC,OAEzB,CAEHH,SAAW,IAAII,qBAAqBC,eAAgBR,QAGpD,IAAK,IAAIS,EAAI,EAAGA,EAAIZ,OAAOQ,OAAQI,IAAK,CACpC,IAAIC,MAAQb,OAAOY,GACfC,MAAMC,UAAUC,SAAS,wBAI7BT,SAASU,QAAQH,aAZrBI,sBAAsBjB,QAqB9B,SAASkB,WAAWC,GAChB,OAAO,IAAIC,QAAQ,SAASC,EAASC,GACjC,MAAMT,EAAQ,IAAIU,MAIlB,OAHAV,EAAMW,IAAML,EACZN,EAAMY,OAASJ,EACfR,EAAMa,QAAUJ,EACTT,IAQf,SAASc,aAAad,GAClB,MAAMW,EAAMX,EAAMe,QAAQJ,IAC1B,GAAKA,EAIL,OAAON,WAAWM,GAAKK,KAAK,WAAaC,WAAWjB,EAAOW,KAO/D,SAASP,sBAAsBjB,GAE3B,IAAK,IAAIY,EAAI,EAAGA,EAAIZ,EAAOQ,OAAQI,IAAK,CAEpCe,aADY3B,EAAOY,KAQ3B,SAASmB,aACAzB,UAILA,SAASyB,aAOb,SAASpB,eAAeqB,GAED,IAAfzB,YACAD,SAASyB,aAIb,IAAK,IAAInB,EAAI,EAAGA,EAAIoB,EAAQxB,OAAQI,IAAK,CACrC,IAAIqB,EAAQD,EAAQpB,GAEhBqB,EAAMC,kBAAoB,IAC1B3B,aAGAD,SAAS6B,UAAUF,EAAMG,QACzBT,aAAaM,EAAMG,UAU/B,SAASN,WAAWO,EAAKb,GAErBa,EAAIvB,UAAUwB,IAAI,uBAClBD,EAAIb,IAAMA,EACVa,EAAIvB,UAAUwB,IAAI","file":"Lazy.min.js","sourcesContent":["\r\n // Get all of the images that are marked up to lazy load\r\n const images = document.querySelectorAll('.lazy-image');\r\n const config = {\r\n // If the image gets within 50px in the Y axis, start the download.\r\n rootMargin: '50px 0px',\r\n threshold: 0.01\r\n };\r\n\r\n var imageCount = images.length;\r\n var observer;\r\n\r\n // If we don't have support for intersection observer, loads the images immediately\r\n if (!('IntersectionObserver' in window)) {\r\n loadImagesImmediately(images);\r\n } else {\r\n // It is supported, load the images\r\n observer = new IntersectionObserver(onIntersection, config);\r\n\r\n // foreach() is not supported in IE\r\n for (var i = 0; i < images.length; i++) {\r\n var image = images[i];\r\n if (image.classList.contains('lazy-image--handled')) {\r\n continue;\r\n }\r\n\r\n observer.observe(image);\r\n }\r\n }\r\n\r\n\r\n/**\r\n * Fetchs the image for the given URL\r\n * @param {string} url \r\n */\r\nfunction fetchImage(url) {\r\n return new Promise(function(resolve, reject) {\r\n const image = new Image();\r\n image.src = url;\r\n image.onload = resolve;\r\n image.onerror = reject;\r\n return image;\r\n });\r\n}\r\n\r\n/**\r\n * Preloads the image\r\n * @param {object} image \r\n */\r\nfunction preloadImage(image) {\r\n const src = image.dataset.src;\r\n if (!src) {\r\n return;\r\n }\r\n\r\n return fetchImage(src).then(function() { applyImage(image, src); });\r\n}\r\n\r\n/**\r\n * Load all of the images immediately\r\n * @param {NodeListOf} images \r\n */\r\nfunction loadImagesImmediately(images) {\r\n // foreach() is not supported in IE\r\n for (var i = 0; i < images.length; i++) {\r\n var image = images[i];\r\n preloadImage(image);\r\n }\r\n}\r\n\r\n/**\r\n * Disconnect the observer\r\n */\r\nfunction disconnect() {\r\n if (!observer) {\r\n return;\r\n }\r\n\r\n observer.disconnect();\r\n}\r\n\r\n/**\r\n * On intersection\r\n * @param {array} entries \r\n */\r\nfunction onIntersection(entries) {\r\n // Disconnect if we've already loaded all of the images\r\n if (imageCount === 0) {\r\n observer.disconnect();\r\n }\r\n\r\n // Loop through the entries\r\n for (var i = 0; i < entries.length; i++) {\r\n var entry = entries[i];\r\n // Are we in viewport?\r\n if (entry.intersectionRatio > 0) {\r\n imageCount--;\r\n\r\n // Stop watching and load the image\r\n observer.unobserve(entry.target);\r\n preloadImage(entry.target);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Apply the image\r\n * @param {object} img \r\n * @param {string} src \r\n */\r\nfunction applyImage(img, src) {\r\n // Prevent this from being lazy loaded a second time.\r\n img.classList.add('lazy-image--handled');\r\n img.src = src;\r\n img.classList.add('fade-in');\r\n}\r\n\r\n"]}