'use strict'; import $ from 'jquery'; import 'hammerjs/hammer'; import 'jquery-hammerjs/jquery.hammer'; import Events from '../_events'; const CarouselUI = (($) => { // Constants const NAME = 'CarouselUI'; class CarouselUI { // Static methods static each(callback) { $(`js${NAME}, .js-carousel`).each((i, e) => { callback(i, $(e)); }); } static init() { this.dispose(); console.log(`${NAME}: init`); this.each((i, e) => { const $e = $(e), id = `Carousel${i}`; $e.attr('id', id); $e.data('id', i); const $items = $(e).find('.carousel-item'), count = $items.length; if (!count) { return; } // create carousel-controls if ($e.data('indicators')) { const $indicators = $(''); $indicators.append( `
  • `, ); for (let i = 1; i < count; i++) { $indicators.append( `
  • `, ); } $e.prepend($indicators); } // create arrows if ($e.data('arrows')) { $e.prepend( `Previous`, ); $e.prepend( `Next`, ); } // init carousel $e.carousel(); const $youtubeSlides = $e.find( 'iframe[src^="https://www.youtube.com/embed/"]', ); $e.on('slide.bs.carousel', () => { if ($youtubeSlides.length) { $youtubeSlides.each((i, e) => { const $e = $(e); try { $e.data( 'player', new YT.Player(e, { events: { onReady: () => { $e.data('player').pauseVideo(); }, }, }), ); $e.data('player').pauseVideo(); } catch (e) {} }); } }); $e.find('.carousel-control-prev').on('click', (e) => { e.preventDefault(); $e.carousel('prev'); }); $e.find('.carousel-control-next').on('click', (e) => { e.preventDefault(); $e.carousel('next'); }); // init touch swipes $e.hammer().bind(Events.SWIPELEFT, (e) => { $(event.target).carousel('next'); }); $e.hammer().bind(Events.SWIPERIGHT, (e) => { $(event.target).carousel('prev'); }); /*$e.find('.carousel-item').hammer().bind('tap', (event) => { $(event.target).carousel('next'); });*/ $e.addClass(`js${NAME}-active`); $e.trigger(Events.CAROUSEL_READY); }); } static dispose() { this.each((i, e) => { $(e).carousel('dispose'); }); } } $(window).on(`${Events.LODEDANDREADY}`, () => { CarouselUI.init(); }); return CarouselUI; })($); export default CarouselUI;