{"version":3,"file":"LazyLoading-ddd58354.js","names":["define","Moduler","LazyLoad","utils","fadeIn","el","time","callback","maxOpacity","getAttribute","style","opacity","last","Date","tick","window","requestAnimationFrame","setTimeout","fadeOut","create","defaults","imageUrl","loading","loadingAttribute","fadeTime","setElementImage","element","attr","imgData","parseSettings","this","options","backgroundImage","init","self","intersectionObserver","IntersectionObserver","entries","forEach","entry","intersectionRatio","load","getComputedStyle","target","setAttribute","requestIdleCallback","unobserve","disconnect","elements","querySelectorAll","rect","getBoundingClientRect","top","innerHeight","observe"],"sources":["LazyLoading.js"],"mappings":"AAAAA,OAAO,CAAC,YAAY,SAAUC,GAC1B,aAIA,IAAIC,EAAW,CAAC,EAqDhB,OApDAA,EAASC,MAAQ,CACbC,OAAQ,SAAUC,EAAIC,EAAMC,GACxB,IAAIC,EAAaH,EAAGI,aAAa,4BACjC,GAAY,GAARH,EAKA,OAJAD,EAAGK,MAAMC,QAAUH,OACfD,GACAA,KAIRF,EAAGK,MAAMC,QAAU,EACnB,IAAIC,GAAQ,IAAIC,KACZC,EAAO,WACPT,EAAGK,MAAMC,SAAWN,EAAGK,MAAMC,SAAW,IAAIE,KAASD,GAAQN,EAC7DM,GAAQ,IAAIC,MACPR,EAAGK,MAAMC,QAAUH,EACnBO,OAAOC,uBAAyBA,sBAAsBF,IAAUG,WAAWH,EAAM,IAE9EP,GACAA,GAGZ,EACAO,GACJ,EACAI,QAAS,SAAUb,EAAIC,EAAMC,GACzB,GAAY,GAARD,EAKA,OAJAD,EAAGK,MAAMC,QAAU,OACfJ,GACAA,KAIR,IAAIC,EAAaH,EAAGI,aAAa,4BACjCJ,EAAGK,MAAMC,QAAUH,EACnB,IAAII,GAAQ,IAAIC,KACZC,EAAO,WACPT,EAAGK,MAAMC,SAAWN,EAAGK,MAAMC,SAAW,IAAIE,KAASD,GAAQN,EAC7DM,GAAQ,IAAIC,MACPR,EAAGK,MAAMC,QAAU,EACnBI,OAAOC,uBAAyBA,sBAAsBF,IAAUG,WAAWH,EAAM,KAElFT,EAAGK,MAAMC,QAAU,EACfJ,GACAA,IAGZ,EACAO,GACJ,GAGGb,EAAQkB,OAAO,CAClBC,SAAU,CACNC,SAAU,KACVC,QAAS,KACTC,iBAAkB,eAClBC,SAAU,KAGdC,gBAAiB,SAAUC,GACvB,IACIC,EAAOD,EAAQjB,aAAa,oBAC5BmB,EAAUD,EACR1B,EAAQE,MAAM0B,cAAcF,GAAMN,SAH7BS,KAIAC,QAAQV,SAEnBK,EAAQhB,MAAMsB,gBAAkB,OAASJ,EAAU,GACvD,EAEAK,KAAM,WACF,IAAIC,EAAOJ,KACPK,EAAuB,IAAIC,sBAAqBC,IAChDA,EAAQC,SAASC,IACb,GAAIA,EAAMC,kBAAoB,EAAG,CAC7B,IAAIC,EAAO,WACP,IAAI9B,EAAUI,OAAO2B,iBAAiBH,EAAMI,QAAQhC,QACpD4B,EAAMI,OAAOC,aAAa,2BAA4BjC,GACtDT,EAASC,MAAMe,QAAQqB,EAAMI,OAAQT,EAAKH,QAAQP,UAAU,WACxDU,EAAKT,gBAAgBc,EAAMI,QAC3BzC,EAASC,MAAMC,OAAOmC,EAAMI,OAAQT,EAAKH,QAAQP,SACrD,GACJ,EACCT,OAAO8B,qBAAuBA,oBAAoBJ,IAAUxB,WAAWwB,EAAM,GAC9EN,EAAqBW,UAAUP,EAAMI,OACzC,IACF,IAINR,EAAqBY,aAErB,IAAIC,EAAWd,EAAK7B,GAAG4C,iBAAiB,IAAMf,EAAKH,QAAQR,iBAAmB,YACnB,QAAvDW,EAAK7B,GAAGI,aAAayB,EAAKH,QAAQR,mBAAuD,QAAxBW,EAAKH,QAAQT,UAC9E0B,EAAW,CAACd,EAAK7B,MAAO2C,IAG5BA,EAASV,SAAQZ,IACb,IAAIwB,EAAOxB,EAAQyB,wBACfD,EAAKE,KAAO,GAAKF,EAAKE,IAAMrC,OAAOsC,YACnCnB,EAAKT,gBAAgBC,GAErBS,EAAqBmB,QAAQ5B,EACjC,GAER,GAER","sourcesContent":["define(['moduler'], function (Moduler) {\r\n 'use strict';\r\n /*\r\n * lazy loader for background-image image styling elements\r\n */\r\n var LazyLoad = {};\r\n LazyLoad.utils = {\r\n fadeIn: function (el, time, callback) {\r\n var maxOpacity = el.getAttribute('data-lazyloading-opacity');\r\n if (time == 0) {\r\n el.style.opacity = maxOpacity;\r\n if (callback) {\r\n callback();\r\n }\r\n return;\r\n }\r\n el.style.opacity = 0;\r\n var last = +new Date();\r\n var tick = function () {\r\n el.style.opacity = +el.style.opacity + (new Date() - last) / time;\r\n last = +new Date();\r\n if (+el.style.opacity < maxOpacity) {\r\n (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16);\r\n } else {\r\n if (callback) {\r\n callback();\r\n }\r\n }\r\n };\r\n tick();\r\n },\r\n fadeOut: function (el, time, callback) {\r\n if (time == 0) {\r\n el.style.opacity = 0;\r\n if (callback) {\r\n callback();\r\n }\r\n return;\r\n }\r\n var maxOpacity = el.getAttribute('data-lazyloading-opacity');\r\n el.style.opacity = maxOpacity;\r\n var last = +new Date();\r\n var tick = function () {\r\n el.style.opacity = +el.style.opacity - (new Date() - last) / time;\r\n last = +new Date();\r\n if (+el.style.opacity > 0) {\r\n (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16);\r\n } else {\r\n el.style.opacity = 0;\r\n if (callback) {\r\n callback();\r\n }\r\n }\r\n };\r\n tick();\r\n }\r\n };\r\n\r\n return Moduler.create({\r\n defaults: {\r\n imageUrl: null,\r\n loading: null, // set to 'lazy' to also consider the element itself \r\n loadingAttribute: 'data-loading',\r\n fadeTime: 200\r\n },\r\n\r\n setElementImage: function (element) {\r\n var self = this;\r\n var attr = element.getAttribute('data-lazyloading');\r\n var imgData = attr\r\n ? Moduler.utils.parseSettings(attr).imageUrl\r\n : self.options.imageUrl;\r\n \r\n element.style.backgroundImage = 'url(' + imgData + ')';\r\n },\r\n\r\n init: function () {\r\n var self = this;\r\n var intersectionObserver = new IntersectionObserver(entries => {\r\n entries.forEach((entry) => {\r\n if (entry.intersectionRatio > 0) {\r\n var load = function () {\r\n var opacity = window.getComputedStyle(entry.target).opacity;\r\n entry.target.setAttribute('data-lazyloading-opacity', opacity);\r\n LazyLoad.utils.fadeOut(entry.target, self.options.fadeTime, function () {\r\n self.setElementImage(entry.target);\r\n LazyLoad.utils.fadeIn(entry.target, self.options.fadeTime);\r\n });\r\n };\r\n (window.requestIdleCallback && requestIdleCallback(load)) || setTimeout(load, 0);\r\n intersectionObserver.unobserve(entry.target);\r\n }\r\n });\r\n });\r\n\r\n // reset\r\n intersectionObserver.disconnect();\r\n // start observing\r\n var elements = self.el.querySelectorAll('[' + self.options.loadingAttribute + '=\"lazy\"]');\r\n if (self.el.getAttribute(self.options.loadingAttribute) == 'lazy' || self.options.loading == 'lazy') {\r\n elements = [self.el, ...elements];\r\n }\r\n\r\n elements.forEach(element => {\r\n var rect = element.getBoundingClientRect();\r\n if (rect.top >= 0 && rect.top < window.innerHeight) {\r\n self.setElementImage(element);\r\n } else {\r\n intersectionObserver.observe(element);\r\n }\r\n });\r\n }\r\n });\r\n});"]}