1var brainSwiper = { 2 lang: { 3 default: { 4 prevSlideMessage: 'Vorheriges Element', 5 nextSlideMessage: 'Nächstes Element', 6 autoplayEnabled: 'Automatischer Elementwechsel aktiv', 7 autoplayDisabled: 'Automatischer Elementwechsel pausiert', 8 }, 9 }, 10 setUpList: function (carousels) { 11 let self = this; 12 for (let i = 0, n = carousels.length; i < n; i++) { 13 self.setUpCarousel(carousels[i]); 14 } 15 }, 16 setUpCarousel: function (carousel) { 17 let self = this; 18 if (carousel.offsetParent !== null) { 19 try { 20 self.create(carousel); 21 } catch (e) { 22 console.log(e); 23 } 24 } 25 carousel.addEventListener( 26 'ba-swiper-reset', 27 function (e) { 28 self.destroy(e.target); 29 if (e.detail.reinitialize) { 30 self.create(e.target); 31 } 32 }, 33 false, 34 ); 35 if ( 36 !carousel.classList.contains('activated') && 37 carousel.classList.contains('js-layout-listener') 38 ) { 39 carousel.addEventListener('ba-resized', function (e) { 40 let sliderHeight = event.target.innerHeight; 41 let frame = event.target.querySelector('.frame'); 42 if (frame) { 43 frame.style.maxHeight = sliderHeight + 'px'; 44 let iFrame = frame.querySelector('iframe'); 45 iFrame.style.height = 0; 46 iFrame.style.height = sliderHeight + 'px'; 47 } 48 }); 49 } 50 carousel.addEventListener( 51 'ba-layout-switch', 52 function (e) { 53 let pagination = e.target.querySelector('.swiper-pagination'); 54 if (pagination) { 55 pagination.removeAttribute('style'); 56 } 57 self.destroy(e.target); 58 self.create(e.target); 59 }, 60 false, 61 ); 62 }, 63 /** 64 * @param {HTMLElement} swiperContainer 65 * @returns {*|boolean} 66 */ 67 create: function (swiperContainer) { 68 let self = this; 69 const swiperWrapper = swiperContainer.querySelector('.swiper-wrapper'); 70 swiperWrapper 71 .querySelectorAll(':scope > .frame:not(.swiper-slide)') 72 .forEach(function (frameElt) { 73 frameElt.classList.add('swiper-slide'); 74 }); 75 let slides = swiperContainer.querySelectorAll('.swiper-slide'); 76 77 if (slides.length === 1 && slides[0]) { 78 slides[0].classList.add('swiper-slide-active'); 79 } 80 if ( 81 slides.length < 2 || 82 swiperContainer.classList.contains('initialized') 83 ) { 84 return null; 85 } 86 let slidesTotalWidth = 0; 87 slides.forEach(function (element) { 88 slidesTotalWidth += element.offsetWidth; 89 }); 90 // if all slides are visible, we don't need to initialize the swiper; 91 // all carousels listen to the ba-layout-switch event, so the swiper will be initialized, if the viewport changes 92 if (slidesTotalWidth <= swiperWrapper.offsetWidth) { 93 swiperContainer.classList.add('all-slides-in-view'); 94 return null; 95 } 96 let doInitialize = true; 97 let slidesPerView = 1; 98 let vpObj = null; 99 if (swiperContainer.dataset.viewports) { 100 vpObj = JSON.parse(swiperContainer.dataset.viewports); 101 const vpType = typeof vpObj[self.getViewport()]; 102 doInitialize = vpType !== 'undefined'; 103 if (doInitialize && vpType === 'number') { 104 slidesPerView = parseInt(vpObj[self.getViewport()]); 105 } 106 } 107 if (doInitialize) { 108 swiperContainer.classList.add('initialized'); 109 swiperContainer.classList.remove('no-slides', 'carousel-off'); 110 111 let spaceBetween = 0; 112 if ( 113 swiperContainer.dataset.spaceBetween && 114 parseInt(swiperContainer.dataset.spaceBetween) 115 ) { 116 spaceBetween = parseInt(swiperContainer.dataset.spaceBetween); 117 } 118 let loop = 119 slides.length > slidesPerView && 120 (!swiperContainer.hasAttribute('data-loop') || 121 swiperContainer.dataset.loop === '1'); 122 let centeredSlides = 123 swiperContainer.hasAttribute('data-centered-slides') && 124 swiperContainer.dataset.centeredSlides === '1'; 125 if (swiperContainer.hasAttribute('data-slides-per-view')) { 126 slidesPerView = swiperContainer.dataset.slidesPerView; 127 } 128 // https://swiperjs.com/ 129 let swiperOptions = { 130 direction: 'horizontal', 131 slidesPerView: slidesPerView, 132 centeredSlides: centeredSlides, 133 spaceBetween: spaceBetween, 134 loop: loop, 135 grabCursor: true, 136 a11y: self.lang.default, 137 }; 138 let lazy = swiperContainer.dataset.lazy; 139 if (lazy) { 140 // Disable preloading of all images 141 swiperOptions.preloadImages = false;
142 // Enable lazy loading 143 swiperOptions.lazy = true; 144 } 145 if (swiperContainer.dataset.free === '1') { 146 swiperOptions.freeMode = true; 147 } 148 if (swiperContainer.dataset.centered === '1') { 149 swiperOptions.centeredSlides = true; 150 } 151 if (swiperContainer.dataset.slideclick === '1') { 152 swiperOptions.slideToClickedSlide = true; 153 } 154 let autoplayInterval = 10000; 155 if (swiperContainer.hasAttribute('data-interval')) { 156 autoplayInterval = swiperContainer.dataset.interval; 157 } 158 if (autoplayInterval && autoplayInterval > 0) { 159 if (autoplayInterval < 100) { 160 swiperOptions.freeMode = true; 161 swiperOptions.speed = 2000; 162 } 163 swiperOptions.autoplay = { 164 delay: autoplayInterval, 165 disableOnInteraction: true, 166 }; 167 } 168 self.addSwiperNav(swiperContainer, swiperOptions); 169 self.addSwiperPagination(swiperContainer, swiperOptions); 170 /*var respWidth = Math.min(Math.round(swiperContainer.offsetWidth * 0.7), 483) + 20; 171 for (i = 0; i < slides.length; ++i) { 172 slides[i].style.width = respWidth + 'px'; 173 }*/ 174 try { 175 return this.createSwiperDefault(swiperContainer, swiperOptions); 176 } catch (e) { 177 console.log(e); 178 } 179 return null; 180 } else { 181 swiperContainer.classList.add('no-slides'); 182 if (slides[0]) { 183 slides[0].classList.add('swiper-slide-active'); 184 } 185 } 186 }, 187 addSwiperPagination: function (swiperContainer, swiperOptions) { 188 let hasPagination = !!swiperContainer.querySelector('.swiper-pagination'); 189 if (!hasPagination && swiperContainer.dataset.pagination === '1') { 190 const paginationOuterElement = document.createElement('div'); 191 paginationOuterElement.classList.add( 192 'swiper-pagination', 193 'js-swiper-added', 194 ); 195 swiperContainer.appendChild(paginationOuterElement); 196 hasPagination = true; 197 } 198 if (hasPagination) { 199 swiperOptions.pagination = { 200 el: '.swiper-pagination', 201 clickable: true, 202 }; 203 swiperContainer.classList.add('with-pagination'); 204 } 205 }, 206 addSwiperNav: function (swiperContainer, swiperOptions) { 207 let hasNav = !!swiperContainer.parentNode.querySelector( 208 '.swiper-button-next', 209 ); 210 if (!hasNav && swiperContainer.dataset.nav === '1') { 211 const swiperControlsElement = document.createElement('div'); 212 swiperControlsElement.classList.add('swiper-nav', 'js-swiper-added'); 213 swiperControlsElement.innerHTML = 214 '<button class="swiper-button-prev"><i class="fa fa-angle-left" aria-hidden="true"></i></button>' + 215 //+ '<button class="swiper-button-play"><span class="icon icon-play"><span class="play" aria-label="Start"></span>' 216 //+ '<span class="pause" aria-label="Pause" aria-hidden="true"></span></span></button>' 217 '<button class="swiper-button-next"><i class="fa fa-angle-right" aria-hidden="true"></i></button>'; 218 swiperContainer.appendChild(swiperControlsElement); 219 hasNav = true; 220 } 221 if (hasNav) { 222 const btnNext = swiperContainer.parentNode.querySelector( 223 '.swiper-button-next', 224 ); 225 const btnPrev = swiperContainer.parentNode.querySelector( 226 '.swiper-button-prev', 227 ); 228 swiperOptions.navigation = { 229 nextEl: btnNext, 230 prevEl: btnPrev, 231 disabledClass: 'swiper-button-disabled', 232 }; 233 swiperContainer.classList.add('with-nav'); 234 } 235 }, 236 createSwiperDefault: function (swiperContainer, swiperOptions) { 237 let self = this; 238 const swiper = new Swiper(swiperContainer, swiperOptions); 239 if (!swiperContainer.dataset.eventsAdded) { 240 swiperContainer.dataset.eventsAdded = 1; 241 const playButton = swiperContainer.querySelector('.swiper-button-play'); 242 if (playButton) { 243 playButton.addEventListener('click', function (evt) { 244 evt.preventDefault(); 245 self.toggleAutoplay(swiper, playButton, 2); 246 }); 247 } 248 swiperContainer 249 .querySelectorAll( 250 '.swiper-wrapper,.swiper-button-prev,.swiper-button-next,.swiper-pagination', 251 ) 252 .forEach(function (elt) { 253 elt.addEventListener('click', function (evt) { 254 swiperContainer.classList.add('user-interaction'); 255 }); 256 }); 257 if (swiperOptions.autoplay) { 258 swiperContainer.addEventListener('mouseenter', (e) => { 259 swiperContainer.classList.add('hover'); 260 if ( 261 swiperContainer.swiper && 262 !swiperContainer.classList.contains('user-interaction') 263 ) { 264 self.toggleAutoplay(swiperContainer.swiper, playButton, -1); 265 } 266 }); 267 swiperContainer.addEventListener('mouseleave', (e) => { 268 swiperContainer.classList.remove('hover'); 269 if ( 270 swiperContainer.swiper && 271 !swiperContainer.classList.contains('user-interaction') 272 ) { 273 self.toggleAutoplay(swiperContainer.swiper, playButton, 1); 274 } 275 }); 276 } 277 } 278 return swiper; 279 }, 280 toggleAutoplay: function (swiper, playButton, toggleType) { 281 let self = this; 282 if (playButton) { 283 const isPaused = playButton.classList.contains('paused'); 284 const isPausedByUser = 285 isPaused && playButton.classList.contains('paused-by-user'); 286 if (toggleType === 2) { 287 if (isPausedByUser) { 288 self.restartAutoplay(swiper, playButton); 289 playButton.classList.remove('paused-by-user'); 290 } else { 291 if (!isPaused) { 292 self.pauseAutoplay(swiper, playButton); 293 } 294 playButton.classList.add('paused-by-user'); 295 } 296 } else if (isPaused) { 297 // Only unpause, if user clicked on button or no previous user interaction occurred 298 if (toggleType !== -1 && !isPausedByUser) { 299 self.restartAutoplay(swiper, playButton); 300 } 301 } else if (!isPaused && toggleType !== 1) { 302 self.pauseAutoplay(swiper, playButton); 303 } 304 } else { 305 if (toggleType === 1) { 306 swiper.autoplay.start(); 307 } else { 308 swiper.autoplay.stop(); 309 } 310 } 311 }, 312 restartAutoplay: function (swiper, playButton) { 313 let self = this; 314 playButton.classList.remove('paused'); 315 playButton.setAttribute('aria-label', self.lang.default.autoplayEnabled); 316 playButton.querySelector('.pause').removeAttribute('aria-hidden'); 317 playButton.querySelector('.play').setAttribute('aria-hidden', 'true'); 318 swiper.autoplay.start(); 319 }, 320 pauseAutoplay: function (swiper, playButton) { 321 let self = this; 322 playButton.classList.add('paused'); 323 playButton.setAttribute('aria-label', self.lang.default.autoplayDisabled); 324 playButton.querySelector('.play').removeAttribute('aria-hidden'); 325 playButton.querySelector('.pause').setAttribute('aria-hidden', 'true'); 326 swiper.autoplay.stop(); 327 }, 328 destroy: function (swiperContainer) { 329 if (swiperContainer.swiper) { 330 swiperContainer.swiper.destroy(true, true); 331 //swiperContainer.removeEventListener('mouseenter'); 332 //swiperContainer.removeEventListener('mouseleave'); 333 } 334 swiperContainer.classList.remove( 335 'initialized', 336 'swiper-backface-hidden', 337 'all-slides-in-view', 338 ); 339 swiperContainer.classList.add('carousel-off'); 340 swiperContainer 341 .querySelectorAll('.swiper-slide-duplicate,.js-swiper-added') 342 .forEach((el) => el.remove()); 343 }, 344 getViewport: function () { 345 let viewport = getComputedStyle(document.documentElement).getPropertyValue( 346 '--vp', 347 ); 348 if (viewport) { 349 viewport = viewport.replaceAll('"', '').trim(); 350 } 351 return viewport; 352 }, 353};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.