{"version":3,"file":"LazyLoader.js","mappings":"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","sources":["webpack:///./components/LazyLoader/lazyLoad.js","webpack:///./components/LazyLoader/LazyLoader.js","webpack:///../../node_modules/fg-loadcss/src/loadCSS.js"],"sourcesContent":["const defaultConfig = {\n observer: {\n rootMargin: '0px',\n threshold: 0,\n },\n process() {},\n}\n\nfunction markAsProcessed(element) {\n element.setAttribute('data-processed', true)\n}\n\nconst hasBeenProcessed = element => element.getAttribute('data-processed') === 'true'\n\nconst onIntersection = process => (entries, observer) => {\n entries.forEach(({ isIntersecting, target }) => {\n if (isIntersecting) {\n observer.unobserve(target)\n\n if (!hasBeenProcessed(target)) {\n process(target)\n markAsProcessed(target)\n }\n }\n })\n}\n\nconst getElements = selector => [...document.querySelectorAll(selector)]\n\nconst markImages = (selector, className) => {\n const elements = getElements(selector).filter(el => !el.classList.contains(className))\n if (elements.length > 0) elements.forEach(img => img.classList.add(className))\n}\n\nexport default options => {\n const {\n observer: { root, rootMargin, threshold },\n className,\n selector,\n process,\n } = { ...defaultConfig, ...options }\n\n markImages(selector, className)\n\n const observer = new IntersectionObserver(onIntersection(process), {\n root,\n rootMargin,\n threshold,\n })\n\n const observe = () => {\n const elements = getElements(selector).filter(el => !hasBeenProcessed(el))\n if (elements.length > 0) elements.forEach(el => observer.observe(el))\n }\n\n const update = () => {\n markImages(selector, className)\n observe()\n }\n\n return {\n observe,\n update,\n observer,\n elements: getElements(selector),\n }\n}\n","import { loadCSS } from 'fg-loadcss'\nimport lazyLoad from './lazyLoad'\nimport { IS_LOADED, HAS_ERROR } from '../../constants'\nimport { supportsWebp, supportsWoff2 } from '../../helpers'\n\nconst defaultConfig = {\n className: 'lazy',\n replaceByWebp: false,\n onLoad() {},\n onError() {},\n}\nexport default class LazyLoader {\n constructor(selector = '', options = {}) {\n this.options = {\n ...defaultConfig,\n ...options,\n selector,\n }\n\n this.loadedIcons = []\n }\n\n isPicture({ parentNode }) {\n return parentNode && parentNode.tagName.toLowerCase() === 'picture'\n }\n\n getSources(el) {\n return [...el.querySelectorAll('source')]\n }\n\n setAttributes(el) {\n const {\n dataset: { src, poster, srcset, backgroundImage: bgImage, icon, replaceByWebp },\n } = el\n\n const shouldAddWebp = this.options.replaceByWebp && replaceByWebp !== 'false' && supportsWebp\n\n const getSourcePath = path => {\n if (!shouldAddWebp) return path\n\n const extensions = ['.jpg', '.jpeg', '.png']\n extensions.forEach(ext => {\n if (path.toLowerCase().includes(ext)) path = path.replace(ext, '.webp')\n })\n return path\n }\n\n if (src && !icon) el.src = getSourcePath(src)\n if (srcset) el.srcset = getSourcePath(srcset)\n if (poster) el.setAttribute('poster', getSourcePath(poster))\n if (bgImage) el.style.backgroundImage = `url('${getSourcePath(bgImage)}')`\n\n if (this.isPicture(el)) {\n const picture = el.parentNode\n const sources = this.getSources(picture)\n const img = picture.querySelector('img')\n const {\n dataset: { src: imgSrc, srcset: imgSrcset },\n } = img\n\n if (imgSrc) img.src = getSourcePath(imgSrc)\n if (imgSrcset) img.srcset = getSourcePath(imgSrcset)\n sources.forEach(source => {\n const {\n dataset: { srcset: sourceSrcset },\n } = source\n if (sourceSrcset) source.srcset = getSourcePath(sourceSrcset)\n })\n }\n }\n\n async loadIcon(image, resolve) {\n const { src } = image.dataset\n const duplicate = this.loadedIcons.find(({ src: s }) => s === src)\n\n try {\n const res = duplicate ? null : await fetch(src)\n const data = duplicate ? duplicate.data : await res.text()\n\n // If icon was loaded already, or fetch is successful.\n if (duplicate || res.ok) {\n const parser = new DOMParser()\n const svg = parser.parseFromString(data, 'image/svg+xml').querySelector('svg')\n\n svg.onload = e => {\n svg.classList.add(`${this.options.className}--${IS_LOADED}`)\n this.options.onLoad?.(e)\n }\n\n if (image.id) svg.id = image.id\n if (image.className) svg.classList = image.classList\n svg.setAttribute('data-processed', true)\n\n image.parentNode?.replaceChild(svg, image)\n\n if (!duplicate) {\n this.loadedIcons.push({\n src,\n data,\n })\n }\n } else if (res && !res.ok) {\n image.classList.add(`${this.options.className}--${HAS_ERROR}`)\n image.setAttribute('data-processed', true)\n this.options.onError?.(image, res)\n }\n } catch (error) {\n console.error(`Error loading \"${src}\" icon.`, error)\n }\n\n // Clear from duplications.\n this.loadedIcons = this.loadedIcons.reduce((arr, item) => {\n const dupl = arr.find(({ src: s }) => s === item.src)\n return dupl ? arr : [...arr, item]\n }, [])\n\n resolve()\n }\n\n handleLoad(el) {\n return new Promise(resolve => {\n const onLoad = e => {\n e.currentTarget.classList.add(`${this.options.className}--${IS_LOADED}`)\n this.options.onLoad?.(e)\n resolve()\n }\n\n const onError = e => {\n e.currentTarget.classList.add(`${this.options.className}--${HAS_ERROR}`)\n this.options.onError?.(e)\n resolve()\n }\n\n if (el.dataset.icon) this.loadIcon(el, resolve)\n if (el.tagName.toLowerCase() === 'video') el.onloadeddata = onLoad\n if (el.tagName.toLowerCase() === 'img' && !el.dataset.icon) el.onload = onLoad\n\n el.onerror = onError\n })\n }\n\n removeAttributes(el) {\n if (el.hasAttribute('data-src')) el.removeAttribute('data-src')\n if (el.hasAttribute('data-srcset')) el.removeAttribute('data-srcset')\n if (el.hasAttribute('data-poster')) el.removeAttribute('data-poster')\n if (el.hasAttribute('data-background-image')) el.removeAttribute('data-background-image')\n\n if (this.isPicture(el)) {\n this.getSources(el.parentNode).forEach(source => source.removeAttribute('data-srcset'))\n }\n }\n\n processElement = async el => {\n this.setAttributes(el)\n await this.handleLoad(el)\n this.removeAttributes(el)\n }\n\n loadFonts() {\n const PATH_TO_FONTS_CSS = '/css'\n const FILE_NAME = 'data-woff.css'\n\n if (!supportsWoff2) loadCSS(`${PATH_TO_FONTS_CSS}/${FILE_NAME}`)\n }\n\n update() {\n this.loader.update()\n }\n\n observe() {\n this.loader = lazyLoad({\n process: this.processElement,\n ...this.options,\n })\n this.loader.observe()\n }\n\n init() {\n this.loadFonts()\n this.observe()\n }\n}\n","/*! loadCSS. [c]2020 Filament Group, Inc. MIT License */\n(function(w){\n\t\"use strict\";\n\t/* exported loadCSS */\n\tvar loadCSS = function( href, before, media, attributes ){\n\t\t// Arguments explained:\n\t\t// `href` [REQUIRED] is the URL for your CSS file.\n\t\t// `before` [OPTIONAL] is the element the script should use as a reference for injecting our stylesheet before\n\t\t// By default, loadCSS attempts to inject the link after the last stylesheet or script in the DOM. However, you might desire a more specific location in your document.\n\t\t// `media` [OPTIONAL] is the media type or query of the stylesheet. By default it will be 'all'\n\t\t// `attributes` [OPTIONAL] is the Object of attribute name/attribute value pairs to set on the stylesheet's DOM Element.\n\t\tvar doc = w.document;\n\t\tvar ss = doc.createElement( \"link\" );\n\t\tvar ref;\n\t\tif( before ){\n\t\t\tref = before;\n\t\t}\n\t\telse {\n\t\t\tvar refs = ( doc.body || doc.getElementsByTagName( \"head\" )[ 0 ] ).childNodes;\n\t\t\tref = refs[ refs.length - 1];\n\t\t}\n\n\t\tvar sheets = doc.styleSheets;\n\t\t// Set any of the provided attributes to the stylesheet DOM Element.\n\t\tif( attributes ){\n\t\t\tfor( var attributeName in attributes ){\n\t\t\t\tif( attributes.hasOwnProperty( attributeName ) ){\n\t\t\t\t\tss.setAttribute( attributeName, attributes[attributeName] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tss.rel = \"stylesheet\";\n\t\tss.href = href;\n\t\t// temporarily set media to something inapplicable to ensure it'll fetch without blocking render\n\t\tss.media = \"only x\";\n\n\t\t// wait until body is defined before injecting link. This ensures a non-blocking load in IE11.\n\t\tfunction ready( cb ){\n\t\t\tif( doc.body ){\n\t\t\t\treturn cb();\n\t\t\t}\n\t\t\tsetTimeout(function(){\n\t\t\t\tready( cb );\n\t\t\t});\n\t\t}\n\t\t// Inject link\n\t\t\t// Note: the ternary preserves the existing behavior of \"before\" argument, but we could choose to change the argument to \"after\" in a later release and standardize on ref.nextSibling for all refs\n\t\t\t// Note: `insertBefore` is used instead of `appendChild`, for safety re: http://www.paulirish.com/2011/surefire-dom-element-insertion/\n\t\tready( function(){\n\t\t\tref.parentNode.insertBefore( ss, ( before ? ref : ref.nextSibling ) );\n\t\t});\n\t\t// A method (exposed on return object for external use) that mimics onload by polling document.styleSheets until it includes the new sheet.\n\t\tvar onloadcssdefined = function( cb ){\n\t\t\tvar resolvedHref = ss.href;\n\t\t\tvar i = sheets.length;\n\t\t\twhile( i-- ){\n\t\t\t\tif( sheets[ i ].href === resolvedHref ){\n\t\t\t\t\treturn cb();\n\t\t\t\t}\n\t\t\t}\n\t\t\tsetTimeout(function() {\n\t\t\t\tonloadcssdefined( cb );\n\t\t\t});\n\t\t};\n\n\t\tfunction loadCB(){\n\t\t\tif( ss.addEventListener ){\n\t\t\t\tss.removeEventListener( \"load\", loadCB );\n\t\t\t}\n\t\t\tss.media = media || \"all\";\n\t\t}\n\n\t\t// once loaded, set link's media back to `all` so that the stylesheet applies once it loads\n\t\tif( ss.addEventListener ){\n\t\t\tss.addEventListener( \"load\", loadCB);\n\t\t}\n\t\tss.onloadcssdefined = onloadcssdefined;\n\t\tonloadcssdefined( loadCB );\n\t\treturn ss;\n\t};\n\t// commonjs\n\tif( typeof exports !== \"undefined\" ){\n\t\texports.loadCSS = loadCSS;\n\t}\n\telse {\n\t\tw.loadCSS = loadCSS;\n\t}\n}( typeof global !== \"undefined\" ? global : this ));\n"],"names":["defaultConfig","observer","rootMargin","threshold","process","hasBeenProcessed","element","getAttribute","getElements","selector","document","querySelectorAll","markImages","className","elements","filter","el","classList","contains","length","forEach","img","add","replaceByWebp","onLoad","onError","LazyLoader","constructor","options","async","this","setAttributes","handleLoad","removeAttributes","loadedIcons","isPicture","parentNode","tagName","toLowerCase","getSources","dataset","src","poster","srcset","backgroundImage","bgImage","icon","shouldAddWebp","supportsWebp","getSourcePath","path","ext","includes","replace","setAttribute","style","picture","sources","querySelector","imgSrc","imgSrcset","source","sourceSrcset","image","resolve","duplicate","find","s","res","fetch","data","text","ok","svg","DOMParser","parseFromString","onload","e","IS_LOADED","id","replaceChild","push","HAS_ERROR","error","console","reduce","arr","item","Promise","currentTarget","loadIcon","onloadeddata","onerror","hasAttribute","removeAttribute","loadFonts","supportsWoff2","loadCSS","update","loader","observe","root","IntersectionObserver","entries","isIntersecting","target","unobserve","onIntersection","lazyLoad","processElement","init","w","exports","href","before","media","attributes","ref","doc","ss","createElement","refs","body","getElementsByTagName","childNodes","sheets","styleSheets","attributeName","hasOwnProperty","rel","ready","cb","setTimeout","insertBefore","nextSibling","onloadcssdefined","resolvedHref","i","loadCB","addEventListener","removeEventListener","g"],"sourceRoot":""}