vlsuite-1.0.x-dev/modules/vlsuite_slider/js/vlsuite-slider.js

modules/vlsuite_slider/js/vlsuite-slider.js
(function ($, Drupal, once, window) {
  Drupal.behaviors.vlsuite_slider = {
    attach(context) {
      once('vlsuite-slider', 'div[data-vlsuite-slider]', context).forEach(slider);
    }
  };

  /**
   * Slider.
   */
  function slider(initElement) {
    var config = JSON.parse(initElement.dataset.vlsuiteSlider);
    if (!config.active || typeof window.Swiper !== 'function') {
      return;
    }
    var sliderElement = initElement.querySelector(config['scope_selector']);
    var rows = config['rows'] ?? false;

    var swiperElement = document.createElement('div');
    swiperElement.classList.add('swiper');
    var swiperWrapperElement = document.createElement('div');
    swiperWrapperElement.classList.add('swiper-wrapper');
    sliderElement.querySelectorAll(config['scope_items_selector']).forEach((block, index) => {
      block.classList.add('swiper-slide');
      swiperWrapperElement.appendChild(block);
    });
    swiperElement.appendChild(swiperWrapperElement);
    sliderElement.appendChild(swiperElement);

    var slidesPerViewSmall = config['slides_per_view_small'] ?? false;
    var slidesPerView = config['slides_per_view'] ?? 1;
    var swiperOptions = {
      slidesPerView: slidesPerView
    };
    if (rows !== false && parseInt(rows) !== 1) {
      swiperOptions['grid'] = {
        rows: rows,
        fill: 'row'
      };
    }
    if ((config['auto_height'] ?? false) && !(rows !== false && parseInt(rows) !== 1)) {
      swiperOptions['autoHeight'] = true;
    }
    if (config['space_between'] ?? true) {
      swiperOptions['spaceBetween'] = config['space_between'] ?? 16;
    }
    if (config['pagination'] ?? false) {
      var pagination = document.createElement('div');
      pagination.classList.add('swiper-pagination');
      swiperElement.appendChild(pagination);

      swiperOptions['pagination'] = {
        el: pagination,
        dynamicBullets: true,
        dynamicMainBullets: slidesPerView,
        clickable: true
      };
    }
    if (slidesPerViewSmall !== false && slidesPerViewSmall !== slidesPerView) {
      var small_size = config['small_size'] ?? 768;
      swiperOptions['slidesPerView'] = slidesPerViewSmall;
      swiperOptions['pagination']['dynamicMainBullets'] = slidesPerViewSmall;
      swiperOptions['breakpoints'] = {};
      swiperOptions['breakpoints'][small_size] = {
        slidesPerView: slidesPerView,
        pagination: {
          el: pagination,
          dynamicBullets: true,
          dynamicMainBullets: slidesPerView,
          clickable: true
        }
      };
    }
    if (config['navigation'] ?? false) {
      var naginationNext = document.createElement('div');
      naginationNext.classList.add('swiper-button-next');
      var naginationPrev = document.createElement('div');
      naginationPrev.classList.add('swiper-button-prev');
      swiperElement.appendChild(naginationNext);
      swiperElement.appendChild(naginationPrev);
      swiperOptions['navigation'] = {
        nextEl: naginationNext,
        prevEl: naginationPrev
      };
    }
    if (config['autoplay'] ?? false) {
      swiperOptions['autoplay'] = {
        'delay': config['autoplay'] * 1000,
        'pauseOnMouseEnter': true
      };
    }
    new window.Swiper(swiperElement, swiperOptions);
  }
}(jQuery, Drupal, once, window));

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc