/** * Content carousel (slider) with extensive options to control behaviour and appearance * @requires https://swiperjs.com/ */ import Swiper from 'swiper/bundle' export default (() => { // Get all elements with the 'swiper' class const carousels = document.querySelectorAll('[data-swiper]') if (carousels.length === 0) return // Iterate over each element using the built-in forEach method /* eslint-disable no-unused-vars */ carousels.forEach((value, index) => { let options, images // Parse swiper options from the data attribute if (value.dataset.swiper !== undefined && value.dataset.swiper !== '') { options = JSON.parse(value.dataset.swiper) images = options?.thumbnails?.images } // Create a new Swiper instance /* eslint-disable no-undef */ const swiper = new Swiper(value, options) /* eslint-enable no-undef */ // Check if a controlled slider is specified if (options?.controlSlider) { let controlledSliders = [] if (Array.isArray(options.controlSlider)) { // Handle multiple sliders controlledSliders = options.controlSlider.map((selector) => document.querySelector(selector) ) } else { // Handle single slider controlledSliders.push(document.querySelector(options.controlSlider)) } const swiperControlledInstances = controlledSliders.map( (controlledSlider) => { const controlledSliderOptions = controlledSlider?.dataset.swiper && JSON.parse(controlledSlider.dataset.swiper) // Create a new Swiper instance for each controlled slider /* eslint-disable no-undef */ return new Swiper(controlledSlider, controlledSliderOptions) /* eslint-enable no-undef */ } ) swiper.controller.control = swiperControlledInstances } }) })()