{"version":3,"file":"lazyload.js","sources":["../../src/core/render/dom.ts","../../src/modules/lazyload.ts"],"sourcesContent":["export function addClass (\n el: HTMLElement,\n list: Array | string = []\n): void {\n if (!Array.isArray(list)) list = [list]\n\n list.forEach(clz => (!el.classList.contains(clz) && el.classList.add(clz)))\n}\n\nexport function removeClass (\n el: HTMLElement,\n list: Array | string = []\n): void {\n if (!Array.isArray(list)) list = [list]\n\n list.forEach(clz => (el.classList.contains(clz) && el.classList.remove(clz)))\n}\n\nexport function attachListener (\n el: HTMLElement | Document | Window,\n evtName: string,\n handler: EventListenerOrEventListenerObject,\n opts?: boolean | AddEventListenerOptions\n): void {\n el.addEventListener(evtName, handler, opts)\n}\n\nexport function detachListener (\n el: HTMLElement | Document | Window,\n evtName: string,\n handler: EventListenerOrEventListenerObject\n): void {\n el.removeEventListener(evtName, handler)\n}\n\nexport function removeAttr (\n el: HTMLElement,\n attr: string\n): void {\n el.removeAttribute(attr)\n}\n\nexport function setAttr (\n el: HTMLElement,\n attr: string,\n value = ''\n): HTMLElement {\n el.setAttribute(attr, value)\n return el\n}\n\nexport function setStyle (\n el: HTMLElement,\n style: {[key: string]: string},\n forceRender?: boolean\n): HTMLElement {\n Object.keys(style).forEach(prop => {\n // TS7015: Element implicitly has an 'any' type because index expression is not of type 'number'.\n el.style[prop as any] = style[prop]\n })\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n forceRender && getComputedStyle(el)\n\n return el\n}\n\nexport function getTranslate (\n el: HTMLElement,\n isHorizontal: boolean\n): number {\n const matrix = getComputedStyle(el).transform.replace(/[a-z]|\\(|\\)|\\s/g, '').split(',').map(parseFloat)\n let arr: Array = []\n\n if (matrix.length === 16) {\n arr = matrix.slice(12, 14)\n } else if (matrix.length === 6) {\n arr = matrix.slice(4, 6)\n }\n return (>arr)[isHorizontal ? 0 : 1] || 0\n}\n\nexport function stringToElement (\n string: string\n): HTMLElement {\n const wrapper = document.createElement('div')\n wrapper.innerHTML = string\n return wrapper.firstChild as HTMLElement\n}\n","import {\n addClass,\n removeClass\n} from '../core/render/dom'\nimport { SwiperInstance, SwiperPlugin } from '../core/index'\nimport { Options } from '../core/options'\nimport { State } from '../core/state/index'\n\nexport type SwiperPluginLazyloadOptions = {\n loadPrevNext: boolean\n loadPrevNextAmount: number\n loadOnTransitionStart: boolean\n elementClass: string\n loadingClass: string\n loadedClass: string\n preloaderClass: string\n}\n\nexport type SwiperPluginLazyloadPartialOptions = Partial | boolean\n\nexport type SwiperPluginLazyloadHTMLElement = HTMLImageElement & {\n isLoaded: boolean\n}\n\nexport type SwiperPluginLazyloadInstance = {\n load (index: number): void\n loadRange (\n index: number,\n range: number\n ): void\n}\n\n/**\n * TinySwiper plugin for image lazy loading.\n *\n * @param {SwiperInstance} instance\n * @param {Options}\n */\nexport default function SwiperPluginLazyload (\n instance: SwiperInstance & {\n lazyload?: SwiperPluginLazyloadInstance\n },\n options: Options & {\n lazyload?: SwiperPluginLazyloadPartialOptions\n }\n) {\n const isEnable = Boolean(options.lazyload)\n const lazyloadOptions = Object.assign({\n loadPrevNext: false,\n loadPrevNextAmount: 1,\n loadOnTransitionStart: false,\n elementClass: 'swiper-lazy',\n loadingClass: 'swiper-lazy-loading',\n loadedClass: 'swiper-lazy-loaded',\n preloaderClass: 'swiper-lazy-preloader'\n }, options.lazyload)\n const lazyload: SwiperPluginLazyloadInstance = {\n load (index: number): void {\n const $slide = instance.env.element.$list[index]\n\n if (!$slide) return\n\n const $imgs = [].slice.call($slide.getElementsByClassName(lazyloadOptions.elementClass))\n const $preloaders: HTMLElement[] = [].slice.call($slide.getElementsByClassName(lazyloadOptions.preloaderClass))\n\n function handleLoaded ($img: SwiperPluginLazyloadHTMLElement) {\n $img.removeAttribute('data-src')\n addClass($img, [lazyloadOptions.loadedClass])\n removeClass($img, [lazyloadOptions.loadingClass])\n $img.onload = null\n $img.onerror = null\n $img.isLoaded = true\n\n if ($imgs.every((item: SwiperPluginLazyloadHTMLElement) => item.isLoaded)) {\n $preloaders.forEach(($preloader: HTMLElement) => {\n $preloader.parentElement!.removeChild($preloader)\n })\n }\n }\n\n $imgs.forEach(($img: SwiperPluginLazyloadHTMLElement) => {\n if (!$img.hasAttribute('data-src')) return\n\n const src = $img.getAttribute('data-src')\n\n addClass($img, [lazyloadOptions.loadingClass])\n removeClass($img, [lazyloadOptions.loadedClass])\n $img.src = src as string\n $img.onload = () => handleLoaded($img)\n $img.onerror = () => handleLoaded($img)\n })\n },\n\n loadRange (\n index: number,\n range: number\n ): void {\n lazyload.load(index)\n\n if (lazyloadOptions.loadPrevNext && range >= 1) {\n for (let i = 1; i <= range; i++) {\n lazyload.load(index + i)\n lazyload.load(index - i)\n }\n }\n }\n }\n\n if (!isEnable) return\n\n instance.on('before-init', () => {\n instance.lazyload = lazyload\n })\n\n if (lazyloadOptions.loadOnTransitionStart) {\n instance.on('before-slide', (\n oldIndex: number,\n state: State,\n newIndex: number\n ) => {\n lazyload.loadRange(newIndex, lazyloadOptions.loadPrevNextAmount)\n })\n } else {\n instance.on('after-slide', (\n index: number\n ) => {\n lazyload.loadRange(index, lazyloadOptions.loadPrevNextAmount)\n })\n }\n\n instance.on('after-destroy', () => {\n if (instance.lazyload) {\n delete instance.lazyload\n }\n })\n}\n"],"names":["addClass","el","list","Array","isArray","forEach","clz","classList","contains","add","removeClass","remove","SwiperPluginLazyload","instance","options","isEnable","Boolean","lazyload","lazyloadOptions","Object","assign","loadPrevNext","loadPrevNextAmount","loadOnTransitionStart","elementClass","loadingClass","loadedClass","preloaderClass","load","index","$slide","env","element","$list","$imgs","slice","call","getElementsByClassName","$preloaders","handleLoaded","$img","removeAttribute","onload","onerror","isLoaded","every","item","$preloader","parentElement","removeChild","hasAttribute","src","getAttribute","loadRange","range","i","on","oldIndex","state","newIndex"],"mappings":"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"}