PageSourceSearch

https://magistral-kms.ru/assets/js/components/hs.carousel.js

js magistral-kms.ru collected 2026-10-07 18:16:41 UTC 8,991 bytes, 283 lines download raw bytes

1/**
2 * Carousel wrapper.
3 *
4 * @author Htmlstream
5 * @version 1.0
6 * @requires
7 *
8 */
9;(function ($) {
10  'use strict';
11
12  $.HSCore.components.HSCarousel = {
13    /**
14     *
15     *
16     * @var Object _baseConfig
17     */
18    _baseConfig: {
19      autoplay: true,
20      infinite: true
21    },
22
23    /**
24     *
25     *
26     * @var jQuery pageCollection
27     */
28    pageCollection: $(),
29
30    /**
31     * Initialization of Carousel wrapper.
32     *
33     * @param String selector (optional)
34     * @param Object config (optional)
35     *
36     * @return jQuery pageCollection - collection of initialized items.
37     */
38
39    init: function (selector, config) {
40
41      this.collection = selector && $(selector).length ? $(selector) : $();
42      if (!$(selector).length) return;
43
44      this.config = config && $.isPlainObject(config) ?
45        $.extend({}, this._baseConfig, config) : this._baseConfig;
46
47      this.config.itemSelector = selector;
48
49      this.initCarousel();
50
51      return this.pageCollection;
52
53    },
54
55    initCarousel: function () {
56      //Variables
57      var $self = this,
58        config = $self.config,
59        collection = $self.pageCollection;
60
61      //Actions
62      this.collection.each(function (i, el) {
63        //Variables
64        var $this = $(el),
65          id = $this.attr('id'),
66
67          //Markup elements
68          target = $this.data('nav-for'),
69          isThumb = $this.data('is-thumbs'),
70          arrowsClasses = $this.data('arrows-classes'),
71          arrowLeftClasses = $this.data('arrow-left-classes'),
72          arrowRightClasses = $this.data('arrow-right-classes'),
73          pagiClasses = $this.data('pagi-classes'),
74          pagiHelper = $this.data('pagi-helper'),
75          $pagiIcons = $this.data('pagi-icons'),
76          $prevMarkup = '<div class="js-prev ' + arrowsClasses + ' ' + arrowLeftClasses + '"></div>',
77          $nextMarkup = '<div class="js-next ' + arrowsClasses + ' ' + arrowRightClasses + '"></div>',
78
79          //Setters
80          setSlidesToShow = $this.data('slides-show'),
81          setSlidesToScroll = $this.data('slides-scroll'),
82          setAutoplay = $this.data('autoplay'),
83          setAnimation = $this.data('animation'),
84          setEasing = $this.data('easing'),
85          setFade = $this.data('fade'),
86          setSpeed = $this.data('speed'),
87          setSlidesRows = $this.data('rows'),
88          setCenterMode = $this.data('center-mode'),
89          setCenterPadding = $this.data('center-padding'),
90          setPauseOnHover = $this.data('pause-hover'),
91          setVariableWidth = $this.data('variable-width'),
92          setInitialSlide = $this.data('initial-slide'),
93          setVertical = $this.data('vertical'),
94          setRtl = $this.data('rtl'),
95          setInEffect = $this.data('in-effect'),
96          setOutEffect = $this.data('out-effect'),
97          setInfinite = $this.data('infinite'),
98          setDataTitlePosition = $this.data('title-pos-inside'),
99          setFocusOnSelect = $this.data('focus-on-select'),
100          setLazyLoad = $this.data('lazy-load');
101
102        $this.on('init', function (event, slick) {
103          $(slick.$slides).css('height', 'auto');
104        });
105
106        if (setInEffect && setOutEffect) {
107          $this.on('init', function (event, slick) {
108            $(slick.$slides).addClass('single-slide');
109          });
110        }
111
112        if (pagiHelper) {
113          $this.on('init', function (event, slick) {
114            var $pagination = $this.find('.js-pagination');
115
116            if (!$pagination.length) return;
117
118            $pagination.append('<span class="u-dots-helper"></span>');
119          });
120        }
121
122        if (isThumb) {
123          $('#' + id).on('click', '.js-slide', function (e) {
124            e.stopPropagation();
125            //Variables
126            var i;
127
128            //Variables values
129            i = $(this).data('slick-index');
130
131            if ($('#' + id).slick('slickCurrentSlide') !== i) {
132              $('#' + id).slick('slickGoTo', i);
133            }
134          });
135        }
136
137        $this.on('init', function (event, slider) {
138          var $pagination = $this.find('.js-pagination');
139
140          if (!$pagination.length) return;
141
142          $($pagination[0].children[0]).addClass('slick-current');
143        });
144
145        $this.slick({
146          autoplay: setAutoplay ? true : false,
147          autoplaySpeed: setSpeed ? setSpeed : 3000,
148
149          cssEase: setAnimation ? setAnimation : 'ease',
150          easing: setEasing ? setEasing : 'linear',
151          fade: setFade ? true : false,
152
153          infinite: setInfinite ? true : false,
154          initialSlide: setInitialSlide ? setInitialSlide - 1 : 0,
155          slidesToShow: setSlidesToShow ? setSlidesToShow : 1,
156          slidesToScroll: setSlidesToScroll ? setSlidesToScroll : 1,
157          centerMode: setCenterMode ? true : false,
158          variableWidth: setVariableWidth ? true : false,
159          pauseOnHover: setPauseOnHover ? true : false,
160          rows: setSlidesRows ? setSlidesRows : 1,
161          vertical: setVertical ? true : false,
162          verticalSwiping: setVertical ? true : false,
163          rtl: setRtl ? true : false,
164          centerPadding: setCenterPadding ? setCenterPadding : 0,
165          focusOnSelect: setFocusOnSelect ? true : false,
166          lazyLoad: setLazyLoad ? setLazyLoad : false,
167
168          asNavFor: target ? target : false,
169          prevArrow: arrowsClasses ? $prevMarkup : false,
170          nextArrow: arrowsClasses ? $nextMarkup : false,
171          dots: pagiClasses ? true : false,
172          dotsClass: 'js-pagination ' + pagiClasses,
173          customPaging: function (slider, i) {
174            var title = $(slider.$slides[i]).data('title');
175
176            if (title && $pagiIcons) {
177              return '<span>' + title + '</span>' + $pagiIcons;
178            } else if ($pagiIcons) {
179              return '<span></span>' + $pagiIcons;
180            } else if (title && setDataTitlePosition) {
181              return '<span>' + title + '</span>';
182            } else if (title && !setDataTitlePosition) {
183              return '<span></span>' + '<strong class="u-dot-title">' + title + '</strong>';
184            } else {
185              return '<span></span>';
186            }
187          }
188        });
189
190        $this.on('beforeChange', function (event, slider, currentSlide, nextSlide) {
191          var $pagination = $this.find('.js-pagination');
192
193          if (!$pagination.length) return;
194
195          if (currentSlide > nextSlide) {
196            $($pagination[0].children).removeClass('slick-active-right');
197            $($pagination[0].children[nextSlide]).addClass('slick-active-right');
198          } else {
199            $($pagination[0].children).removeClass('slick-active-right');
200          }
201
202          $($pagination[0].children).removeClass('slick-current');
203          setTimeout(function () {
204            $($pagination[0].children[nextSlide]).addClass('slick-current');
205          }, .25);
206        });
207
208        if (setInEffect && setOutEffect) {
209          $this.on('afterChange', function (event, slick, currentSlide, nextSlide) {
210            $(slick.$slides).removeClass('animated set-position ' + setInEffect + ' ' + setOutEffect);
211          });
212
213          $this.on('beforeChange', function (event, slick, currentSlide) {
214            $(slick.$slides[currentSlide]).addClass('animated ' + setOutEffect);
215          });
216
217          $this.on('setPosition', function (event, slick) {
218            $(slick.$slides[slick.currentSlide]).addClass('animated set-position ' + setInEffect);
219          });
220        }
221
222        //Actions
223        collection = collection.add($this);
224      });
225    },
226
227    /**
228     * Implementation of text animation.
229     *
230     * @param jQuery carousel
231     * @param String textAnimationSelector
232     *
233     * @requires charming.js, anime.js, textfx.js
234     *
235     * @return undefined
236     */
237    initTextAnimation: function(carousel, textAnimationSelector) {
238
239      if (!window.TextFx || !window.anime || !carousel.length) return;
240
241      var $text = carousel.find(textAnimationSelector);
242
243      if (!$text.length) return;
244
245      $text.each(function (i, el) {
246
247        var $this = $(el);
248
249        if (!$this.data('TextFx')) {
250
251          $this.data('TextFx', new TextFx($this.get(0)));
252
253        }
254
255      });
256
257
258      carousel.on('beforeChange', function (event, slick, currentSlide, nextSlide) {
259
260        var targets = slick.$slider
261          .find('.slick-track')
262          .children();
263
264        var currentTarget = targets.eq(currentSlide),
265          nextTarget = targets.eq(nextSlide);
266
267        currentTarget = currentTarget.find(textAnimationSelector);
268        nextTarget = nextTarget.find(textAnimationSelector);
269
270        if (currentTarget.length) {
271          currentTarget.data('TextFx').hide(currentTarget.data('effect') ? currentTarget.data('effect') : 'fx1');
272        }
273
274        if (nextTarget.length) {
275          nextTarget.data('TextFx').show(nextTarget.data('effect') ? nextTarget.data('effect') : 'fx1');
276        }
277
278      });
279
280    }
281  }
282
283})(jQuery);

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.