carousel.js 25.1 KB
Newer Older
XhmikosR's avatar
Dist    
XhmikosR committed
1
/*!
XhmikosR's avatar
XhmikosR committed
2
  * Bootstrap carousel.js v5.0.0-alpha2 (https://getbootstrap.com/)
XhmikosR's avatar
XhmikosR committed
3
  * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
XhmikosR's avatar
XhmikosR committed
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
XhmikosR's avatar
Dist    
XhmikosR committed
5
  */
Mark Otto's avatar
dist    
Mark Otto committed
6
(function (global, factory) {
XhmikosR's avatar
XhmikosR committed
7
8
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js')) :
  typeof define === 'function' && define.amd ? define(['./dom/data.js', './dom/event-handler.js', './dom/manipulator.js', './dom/selector-engine.js'], factory) :
XhmikosR's avatar
XhmikosR committed
9
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Carousel = factory(global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine));
XhmikosR's avatar
XhmikosR committed
10
}(this, (function (Data, EventHandler, Manipulator, SelectorEngine) { 'use strict';
Mark Otto's avatar
dist    
Mark Otto committed
11

XhmikosR's avatar
XhmikosR committed
12
13
14
15
16
17
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }

  var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
  var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
  var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
  var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
Mark Otto's avatar
dist    
Mark Otto committed
18

XhmikosR's avatar
XhmikosR committed
19
20
  /**
   * --------------------------------------------------------------------------
XhmikosR's avatar
XhmikosR committed
21
   * Bootstrap (v5.0.0-alpha2): util/index.js
XhmikosR's avatar
XhmikosR committed
22
   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
XhmikosR's avatar
XhmikosR committed
23
24
25
   * --------------------------------------------------------------------------
   */
  var MILLISECONDS_MULTIPLIER = 1000;
XhmikosR's avatar
XhmikosR committed
26
  var TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
XhmikosR's avatar
XhmikosR committed
27
28

  var toType = function toType(obj) {
XhmikosR's avatar
XhmikosR committed
29
30
31
32
    if (obj === null || obj === undefined) {
      return "" + obj;
    }

XhmikosR's avatar
XhmikosR committed
33
34
35
    return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
  };

XhmikosR's avatar
XhmikosR committed
36
  var getSelector = function getSelector(element) {
XhmikosR's avatar
XhmikosR committed
37
38
39
40
    var selector = element.getAttribute('data-target');

    if (!selector || selector === '#') {
      var hrefAttr = element.getAttribute('href');
XhmikosR's avatar
XhmikosR committed
41
      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
XhmikosR's avatar
XhmikosR committed
42
43
    }

XhmikosR's avatar
XhmikosR committed
44
45
46
47
48
49
    return selector;
  };

  var getElementFromSelector = function getElementFromSelector(element) {
    var selector = getSelector(element);
    return selector ? document.querySelector(selector) : null;
XhmikosR's avatar
XhmikosR committed
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
  };

  var getTransitionDurationFromElement = function getTransitionDurationFromElement(element) {
    if (!element) {
      return 0;
    } // Get transition-duration of the element


    var _window$getComputedSt = window.getComputedStyle(element),
        transitionDuration = _window$getComputedSt.transitionDuration,
        transitionDelay = _window$getComputedSt.transitionDelay;

    var floatTransitionDuration = parseFloat(transitionDuration);
    var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found

    if (!floatTransitionDuration && !floatTransitionDelay) {
      return 0;
    } // If multiple durations are defined, take the first


    transitionDuration = transitionDuration.split(',')[0];
    transitionDelay = transitionDelay.split(',')[0];
    return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
  };

  var triggerTransitionEnd = function triggerTransitionEnd(element) {
XhmikosR's avatar
XhmikosR committed
76
    element.dispatchEvent(new Event(TRANSITION_END));
XhmikosR's avatar
XhmikosR committed
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
  };

  var isElement = function isElement(obj) {
    return (obj[0] || obj).nodeType;
  };

  var emulateTransitionEnd = function emulateTransitionEnd(element, duration) {
    var called = false;
    var durationPadding = 5;
    var emulatedDuration = duration + durationPadding;

    function listener() {
      called = true;
      element.removeEventListener(TRANSITION_END, listener);
    }

    element.addEventListener(TRANSITION_END, listener);
    setTimeout(function () {
      if (!called) {
        triggerTransitionEnd(element);
      }
    }, emulatedDuration);
  };

  var typeCheckConfig = function typeCheckConfig(componentName, config, configTypes) {
    Object.keys(configTypes).forEach(function (property) {
      var expectedTypes = configTypes[property];
      var value = config[property];
      var valueType = value && isElement(value) ? 'element' : toType(value);

      if (!new RegExp(expectedTypes).test(valueType)) {
        throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
      }
    });
  };

  var isVisible = function isVisible(element) {
    if (!element) {
      return false;
    }

    if (element.style && element.parentNode && element.parentNode.style) {
XhmikosR's avatar
XhmikosR committed
119
120
121
      var elementStyle = getComputedStyle(element);
      var parentNodeStyle = getComputedStyle(element.parentNode);
      return elementStyle.display !== 'none' && parentNodeStyle.display !== 'none' && elementStyle.visibility !== 'hidden';
XhmikosR's avatar
XhmikosR committed
122
123
124
125
126
127
128
129
130
    }

    return false;
  };

  var reflow = function reflow(element) {
    return element.offsetHeight;
  };

XhmikosR's avatar
XhmikosR committed
131
132
133
134
135
136
137
138
139
140
141
  var getjQuery = function getjQuery() {
    var _window = window,
        jQuery = _window.jQuery;

    if (jQuery && !document.body.hasAttribute('data-no-jquery')) {
      return jQuery;
    }

    return null;
  };

XhmikosR's avatar
XhmikosR committed
142
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
Mark Otto's avatar
Mark Otto committed
143
144
145
146

  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
fat's avatar
fat committed
147
  /**
XhmikosR's avatar
Dist    
XhmikosR committed
148
149
150
   * ------------------------------------------------------------------------
   * Constants
   * ------------------------------------------------------------------------
fat's avatar
fat committed
151
   */
Mark Otto's avatar
dist    
Mark Otto committed
152

XhmikosR's avatar
Dist    
XhmikosR committed
153
  var NAME = 'carousel';
XhmikosR's avatar
XhmikosR committed
154
  var VERSION = '5.0.0-alpha2';
XhmikosR's avatar
Dist    
XhmikosR committed
155
156
157
  var DATA_KEY = 'bs.carousel';
  var EVENT_KEY = "." + DATA_KEY;
  var DATA_API_KEY = '.data-api';
XhmikosR's avatar
XhmikosR committed
158
159
  var ARROW_LEFT_KEY = 'ArrowLeft';
  var ARROW_RIGHT_KEY = 'ArrowRight';
XhmikosR's avatar
Dist    
XhmikosR committed
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch

  var SWIPE_THRESHOLD = 40;
  var Default = {
    interval: 5000,
    keyboard: true,
    slide: false,
    pause: 'hover',
    wrap: true,
    touch: true
  };
  var DefaultType = {
    interval: '(number|boolean)',
    keyboard: 'boolean',
    slide: '(boolean|string)',
    pause: '(string|boolean)',
    wrap: 'boolean',
    touch: 'boolean'
  };
XhmikosR's avatar
XhmikosR committed
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
  var DIRECTION_NEXT = 'next';
  var DIRECTION_PREV = 'prev';
  var DIRECTION_LEFT = 'left';
  var DIRECTION_RIGHT = 'right';
  var EVENT_SLIDE = "slide" + EVENT_KEY;
  var EVENT_SLID = "slid" + EVENT_KEY;
  var EVENT_KEYDOWN = "keydown" + EVENT_KEY;
  var EVENT_MOUSEENTER = "mouseenter" + EVENT_KEY;
  var EVENT_MOUSELEAVE = "mouseleave" + EVENT_KEY;
  var EVENT_TOUCHSTART = "touchstart" + EVENT_KEY;
  var EVENT_TOUCHMOVE = "touchmove" + EVENT_KEY;
  var EVENT_TOUCHEND = "touchend" + EVENT_KEY;
  var EVENT_POINTERDOWN = "pointerdown" + EVENT_KEY;
  var EVENT_POINTERUP = "pointerup" + EVENT_KEY;
  var EVENT_DRAG_START = "dragstart" + EVENT_KEY;
  var EVENT_LOAD_DATA_API = "load" + EVENT_KEY + DATA_API_KEY;
  var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
  var CLASS_NAME_CAROUSEL = 'carousel';
  var CLASS_NAME_ACTIVE = 'active';
  var CLASS_NAME_SLIDE = 'slide';
  var CLASS_NAME_RIGHT = 'carousel-item-right';
  var CLASS_NAME_LEFT = 'carousel-item-left';
  var CLASS_NAME_NEXT = 'carousel-item-next';
  var CLASS_NAME_PREV = 'carousel-item-prev';
  var CLASS_NAME_POINTER_EVENT = 'pointer-event';
  var SELECTOR_ACTIVE = '.active';
  var SELECTOR_ACTIVE_ITEM = '.active.carousel-item';
  var SELECTOR_ITEM = '.carousel-item';
  var SELECTOR_ITEM_IMG = '.carousel-item img';
  var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';
  var SELECTOR_INDICATORS = '.carousel-indicators';
  var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]';
  var SELECTOR_DATA_RIDE = '[data-ride="carousel"]';
XhmikosR's avatar
Dist    
XhmikosR committed
212
213
214
215
  var PointerType = {
    TOUCH: 'touch',
    PEN: 'pen'
  };
XhmikosR's avatar
XhmikosR committed
216
217
218
219
220
  /**
   * ------------------------------------------------------------------------
   * Class Definition
   * ------------------------------------------------------------------------
   */
XhmikosR's avatar
Dist    
XhmikosR committed
221

XhmikosR's avatar
XhmikosR committed
222
  var Carousel = /*#__PURE__*/function () {
XhmikosR's avatar
Dist    
XhmikosR committed
223
224
225
226
227
228
229
230
231
232
233
    function Carousel(element, config) {
      this._items = null;
      this._interval = null;
      this._activeElement = null;
      this._isPaused = false;
      this._isSliding = false;
      this.touchTimeout = null;
      this.touchStartX = 0;
      this.touchDeltaX = 0;
      this._config = this._getConfig(config);
      this._element = element;
XhmikosR's avatar
XhmikosR committed
234
      this._indicatorsElement = SelectorEngine__default['default'].findOne(SELECTOR_INDICATORS, this._element);
XhmikosR's avatar
Dist    
XhmikosR committed
235
      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
XhmikosR's avatar
XhmikosR committed
236
      this._pointerEvent = Boolean(window.PointerEvent);
XhmikosR's avatar
Dist    
XhmikosR committed
237
238

      this._addEventListeners();
XhmikosR's avatar
XhmikosR committed
239

XhmikosR's avatar
XhmikosR committed
240
      Data__default['default'].setData(element, DATA_KEY, this);
XhmikosR's avatar
Dist    
XhmikosR committed
241
242
243
244
245
246
247
248
    } // Getters


    var _proto = Carousel.prototype;

    // Public
    _proto.next = function next() {
      if (!this._isSliding) {
XhmikosR's avatar
XhmikosR committed
249
        this._slide(DIRECTION_NEXT);
XhmikosR's avatar
Dist    
XhmikosR committed
250
      }
Mark Otto's avatar
dist    
Mark Otto committed
251
    };
XhmikosR's avatar
Dist    
XhmikosR committed
252
253
254
255

    _proto.nextWhenVisible = function nextWhenVisible() {
      // Don't call next when the page isn't visible
      // or the carousel or its parent isn't visible
XhmikosR's avatar
XhmikosR committed
256
      if (!document.hidden && isVisible(this._element)) {
XhmikosR's avatar
Dist    
XhmikosR committed
257
258
        this.next();
      }
Mark Otto's avatar
dist    
Mark Otto committed
259
    };
XhmikosR's avatar
Dist    
XhmikosR committed
260
261
262

    _proto.prev = function prev() {
      if (!this._isSliding) {
XhmikosR's avatar
XhmikosR committed
263
        this._slide(DIRECTION_PREV);
XhmikosR's avatar
Dist    
XhmikosR committed
264
      }
Mark Otto's avatar
dist    
Mark Otto committed
265
    };
fat's avatar
fat committed
266

XhmikosR's avatar
Dist    
XhmikosR committed
267
268
269
270
271
    _proto.pause = function pause(event) {
      if (!event) {
        this._isPaused = true;
      }

XhmikosR's avatar
XhmikosR committed
272
      if (SelectorEngine__default['default'].findOne(SELECTOR_NEXT_PREV, this._element)) {
XhmikosR's avatar
XhmikosR committed
273
        triggerTransitionEnd(this._element);
XhmikosR's avatar
Dist    
XhmikosR committed
274
275
276
277
278
        this.cycle(true);
      }

      clearInterval(this._interval);
      this._interval = null;
Mark Otto's avatar
dist    
Mark Otto committed
279
    };
fat's avatar
fat committed
280

XhmikosR's avatar
Dist    
XhmikosR committed
281
282
    _proto.cycle = function cycle(event) {
      if (!event) {
Mark Otto's avatar
dist    
Mark Otto committed
283
        this._isPaused = false;
XhmikosR's avatar
Dist    
XhmikosR committed
284
      }
fat's avatar
fat committed
285

XhmikosR's avatar
Dist    
XhmikosR committed
286
287
288
289
      if (this._interval) {
        clearInterval(this._interval);
        this._interval = null;
      }
fat's avatar
fat committed
290

XhmikosR's avatar
XhmikosR committed
291
      if (this._config && this._config.interval && !this._isPaused) {
XhmikosR's avatar
Dist    
XhmikosR committed
292
293
294
        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
      }
    };
Mark Otto's avatar
grunt    
Mark Otto committed
295

XhmikosR's avatar
Dist    
XhmikosR committed
296
297
    _proto.to = function to(index) {
      var _this = this;
Mark Otto's avatar
dist    
Mark Otto committed
298

XhmikosR's avatar
XhmikosR committed
299
      this._activeElement = SelectorEngine__default['default'].findOne(SELECTOR_ACTIVE_ITEM, this._element);
Mark Otto's avatar
dist    
Mark Otto committed
300

XhmikosR's avatar
Dist    
XhmikosR committed
301
      var activeIndex = this._getItemIndex(this._activeElement);
fat's avatar
fat committed
302

XhmikosR's avatar
Dist    
XhmikosR committed
303
304
305
      if (index > this._items.length - 1 || index < 0) {
        return;
      }
Mark Otto's avatar
dist    
Mark Otto committed
306

XhmikosR's avatar
Dist    
XhmikosR committed
307
      if (this._isSliding) {
XhmikosR's avatar
XhmikosR committed
308
        EventHandler__default['default'].one(this._element, EVENT_SLID, function () {
XhmikosR's avatar
Dist    
XhmikosR committed
309
310
311
312
          return _this.to(index);
        });
        return;
      }
Mark Otto's avatar
grunt    
Mark Otto committed
313

XhmikosR's avatar
Dist    
XhmikosR committed
314
315
316
317
318
      if (activeIndex === index) {
        this.pause();
        this.cycle();
        return;
      }
fat's avatar
fat committed
319

XhmikosR's avatar
XhmikosR committed
320
      var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV;
fat's avatar
fat committed
321

XhmikosR's avatar
Dist    
XhmikosR committed
322
323
      this._slide(direction, this._items[index]);
    };
Mark Otto's avatar
dist    
Mark Otto committed
324

XhmikosR's avatar
Dist    
XhmikosR committed
325
    _proto.dispose = function dispose() {
XhmikosR's avatar
XhmikosR committed
326
327
      EventHandler__default['default'].off(this._element, EVENT_KEY);
      Data__default['default'].removeData(this._element, DATA_KEY);
XhmikosR's avatar
Dist    
XhmikosR committed
328
329
330
331
332
333
334
335
      this._items = null;
      this._config = null;
      this._element = null;
      this._interval = null;
      this._isPaused = null;
      this._isSliding = null;
      this._activeElement = null;
      this._indicatorsElement = null;
Mark Otto's avatar
Mark Otto committed
336
337
    } // Private
    ;
XhmikosR's avatar
Dist    
XhmikosR committed
338
339

    _proto._getConfig = function _getConfig(config) {
XhmikosR's avatar
XhmikosR committed
340
      config = _extends({}, Default, config);
XhmikosR's avatar
XhmikosR committed
341
      typeCheckConfig(NAME, config, DefaultType);
XhmikosR's avatar
Dist    
XhmikosR committed
342
343
      return config;
    };
Mark Otto's avatar
dist    
Mark Otto committed
344

XhmikosR's avatar
Dist    
XhmikosR committed
345
346
    _proto._handleSwipe = function _handleSwipe() {
      var absDeltax = Math.abs(this.touchDeltaX);
Mark Otto's avatar
dist    
Mark Otto committed
347

XhmikosR's avatar
Dist    
XhmikosR committed
348
349
350
      if (absDeltax <= SWIPE_THRESHOLD) {
        return;
      }
fat's avatar
fat committed
351

XhmikosR's avatar
XhmikosR committed
352
353
      var direction = absDeltax / this.touchDeltaX;
      this.touchDeltaX = 0; // swipe left
fat's avatar
fat committed
354

XhmikosR's avatar
Dist    
XhmikosR committed
355
356
357
      if (direction > 0) {
        this.prev();
      } // swipe right
fat's avatar
fat committed
358
359


XhmikosR's avatar
Dist    
XhmikosR committed
360
361
362
363
      if (direction < 0) {
        this.next();
      }
    };
fat's avatar
fat committed
364

XhmikosR's avatar
Dist    
XhmikosR committed
365
366
    _proto._addEventListeners = function _addEventListeners() {
      var _this2 = this;
fat's avatar
fat committed
367

XhmikosR's avatar
Dist    
XhmikosR committed
368
      if (this._config.keyboard) {
XhmikosR's avatar
XhmikosR committed
369
        EventHandler__default['default'].on(this._element, EVENT_KEYDOWN, function (event) {
XhmikosR's avatar
Dist    
XhmikosR committed
370
371
372
          return _this2._keydown(event);
        });
      }
Mark Otto's avatar
grunt    
Mark Otto committed
373

XhmikosR's avatar
Dist    
XhmikosR committed
374
      if (this._config.pause === 'hover') {
XhmikosR's avatar
XhmikosR committed
375
        EventHandler__default['default'].on(this._element, EVENT_MOUSEENTER, function (event) {
XhmikosR's avatar
Dist    
XhmikosR committed
376
          return _this2.pause(event);
XhmikosR's avatar
XhmikosR committed
377
        });
XhmikosR's avatar
XhmikosR committed
378
        EventHandler__default['default'].on(this._element, EVENT_MOUSELEAVE, function (event) {
XhmikosR's avatar
Dist    
XhmikosR committed
379
380
381
          return _this2.cycle(event);
        });
      }
fat's avatar
fat committed
382

383
      if (this._config.touch && this._touchSupported) {
Mark Otto's avatar
Mark Otto committed
384
385
        this._addTouchEventListeners();
      }
XhmikosR's avatar
Dist    
XhmikosR committed
386
    };
Mark Otto's avatar
dist    
Mark Otto committed
387

XhmikosR's avatar
Dist    
XhmikosR committed
388
389
    _proto._addTouchEventListeners = function _addTouchEventListeners() {
      var _this3 = this;
Mark Otto's avatar
dist    
Mark Otto committed
390

XhmikosR's avatar
Dist    
XhmikosR committed
391
      var start = function start(event) {
XhmikosR's avatar
XhmikosR committed
392
393
        if (_this3._pointerEvent && PointerType[event.pointerType.toUpperCase()]) {
          _this3.touchStartX = event.clientX;
XhmikosR's avatar
Dist    
XhmikosR committed
394
        } else if (!_this3._pointerEvent) {
XhmikosR's avatar
XhmikosR committed
395
          _this3.touchStartX = event.touches[0].clientX;
Mark Otto's avatar
dist    
Mark Otto committed
396
        }
XhmikosR's avatar
Dist    
XhmikosR committed
397
      };
Mark Otto's avatar
dist    
Mark Otto committed
398

XhmikosR's avatar
Dist    
XhmikosR committed
399
400
      var move = function move(event) {
        // ensure swiping with one touch and not pinching
XhmikosR's avatar
XhmikosR committed
401
        if (event.touches && event.touches.length > 1) {
XhmikosR's avatar
Dist    
XhmikosR committed
402
403
          _this3.touchDeltaX = 0;
        } else {
XhmikosR's avatar
XhmikosR committed
404
          _this3.touchDeltaX = event.touches[0].clientX - _this3.touchStartX;
Mark Otto's avatar
dist    
Mark Otto committed
405
406
        }
      };
fat's avatar
fat committed
407

XhmikosR's avatar
Dist    
XhmikosR committed
408
      var end = function end(event) {
XhmikosR's avatar
XhmikosR committed
409
410
        if (_this3._pointerEvent && PointerType[event.pointerType.toUpperCase()]) {
          _this3.touchDeltaX = event.clientX - _this3.touchStartX;
Mark Otto's avatar
dist    
Mark Otto committed
411
        }
Mark Otto's avatar
dist    
Mark Otto committed
412

XhmikosR's avatar
Dist    
XhmikosR committed
413
414
415
416
417
418
419
420
421
422
423
        _this3._handleSwipe();

        if (_this3._config.pause === 'hover') {
          // If it's a touch-enabled device, mouseenter/leave are fired as
          // part of the mouse compatibility events on first tap - the carousel
          // would stop cycling until user tapped out of it;
          // here, we listen for touchend, explicitly pause the carousel
          // (as if it's the second time we tap on it, mouseenter compat event
          // is NOT fired) and after a timeout (to allow for mouse compatibility
          // events to fire) we explicitly restart cycling
          _this3.pause();
fat's avatar
fat committed
424

XhmikosR's avatar
Dist    
XhmikosR committed
425
426
427
          if (_this3.touchTimeout) {
            clearTimeout(_this3.touchTimeout);
          }
fat's avatar
fat committed
428

XhmikosR's avatar
Dist    
XhmikosR committed
429
430
431
          _this3.touchTimeout = setTimeout(function (event) {
            return _this3.cycle(event);
          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);
Mark Otto's avatar
dist    
Mark Otto committed
432
433
        }
      };
Mark Otto's avatar
grunt    
Mark Otto committed
434

XhmikosR's avatar
XhmikosR committed
435
436
      SelectorEngine__default['default'].find(SELECTOR_ITEM_IMG, this._element).forEach(function (itemImg) {
        EventHandler__default['default'].on(itemImg, EVENT_DRAG_START, function (e) {
XhmikosR's avatar
XhmikosR committed
437
438
          return e.preventDefault();
        });
XhmikosR's avatar
Dist    
XhmikosR committed
439
      });
Mark Otto's avatar
grunt    
Mark Otto committed
440

XhmikosR's avatar
Dist    
XhmikosR committed
441
      if (this._pointerEvent) {
XhmikosR's avatar
XhmikosR committed
442
        EventHandler__default['default'].on(this._element, EVENT_POINTERDOWN, function (event) {
XhmikosR's avatar
Dist    
XhmikosR committed
443
444
          return start(event);
        });
XhmikosR's avatar
XhmikosR committed
445
        EventHandler__default['default'].on(this._element, EVENT_POINTERUP, function (event) {
XhmikosR's avatar
Dist    
XhmikosR committed
446
447
          return end(event);
        });
Mark Otto's avatar
dist    
Mark Otto committed
448

XhmikosR's avatar
XhmikosR committed
449
        this._element.classList.add(CLASS_NAME_POINTER_EVENT);
XhmikosR's avatar
Dist    
XhmikosR committed
450
      } else {
XhmikosR's avatar
XhmikosR committed
451
        EventHandler__default['default'].on(this._element, EVENT_TOUCHSTART, function (event) {
XhmikosR's avatar
Dist    
XhmikosR committed
452
453
          return start(event);
        });
XhmikosR's avatar
XhmikosR committed
454
        EventHandler__default['default'].on(this._element, EVENT_TOUCHMOVE, function (event) {
XhmikosR's avatar
Dist    
XhmikosR committed
455
456
          return move(event);
        });
XhmikosR's avatar
XhmikosR committed
457
        EventHandler__default['default'].on(this._element, EVENT_TOUCHEND, function (event) {
XhmikosR's avatar
Dist    
XhmikosR committed
458
459
460
461
          return end(event);
        });
      }
    };
fat's avatar
fat committed
462

XhmikosR's avatar
Dist    
XhmikosR committed
463
464
465
466
    _proto._keydown = function _keydown(event) {
      if (/input|textarea/i.test(event.target.tagName)) {
        return;
      }
fat's avatar
fat committed
467

XhmikosR's avatar
XhmikosR committed
468
469
      switch (event.key) {
        case ARROW_LEFT_KEY:
XhmikosR's avatar
Dist    
XhmikosR committed
470
471
472
          event.preventDefault();
          this.prev();
          break;
fat's avatar
fat committed
473

XhmikosR's avatar
XhmikosR committed
474
        case ARROW_RIGHT_KEY:
XhmikosR's avatar
Dist    
XhmikosR committed
475
476
477
478
479
          event.preventDefault();
          this.next();
          break;
      }
    };
fat's avatar
fat committed
480

XhmikosR's avatar
Dist    
XhmikosR committed
481
    _proto._getItemIndex = function _getItemIndex(element) {
XhmikosR's avatar
XhmikosR committed
482
      this._items = element && element.parentNode ? SelectorEngine__default['default'].find(SELECTOR_ITEM, element.parentNode) : [];
XhmikosR's avatar
Dist    
XhmikosR committed
483
484
      return this._items.indexOf(element);
    };
fat's avatar
fat committed
485

XhmikosR's avatar
Dist    
XhmikosR committed
486
    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {
XhmikosR's avatar
XhmikosR committed
487
488
      var isNextDirection = direction === DIRECTION_NEXT;
      var isPrevDirection = direction === DIRECTION_PREV;
Mark Otto's avatar
dist    
Mark Otto committed
489

XhmikosR's avatar
Dist    
XhmikosR committed
490
      var activeIndex = this._getItemIndex(activeElement);
fat's avatar
fat committed
491

XhmikosR's avatar
Dist    
XhmikosR committed
492
493
      var lastItemIndex = this._items.length - 1;
      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;
Mark Otto's avatar
dist    
Mark Otto committed
494

XhmikosR's avatar
Dist    
XhmikosR committed
495
496
497
      if (isGoingToWrap && !this._config.wrap) {
        return activeElement;
      }
fat's avatar
fat committed
498

XhmikosR's avatar
XhmikosR committed
499
      var delta = direction === DIRECTION_PREV ? -1 : 1;
XhmikosR's avatar
Dist    
XhmikosR committed
500
501
502
      var itemIndex = (activeIndex + delta) % this._items.length;
      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
    };
fat's avatar
fat committed
503

XhmikosR's avatar
Dist    
XhmikosR committed
504
505
    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
      var targetIndex = this._getItemIndex(relatedTarget);
fat's avatar
fat committed
506

XhmikosR's avatar
XhmikosR committed
507
      var fromIndex = this._getItemIndex(SelectorEngine__default['default'].findOne(SELECTOR_ACTIVE_ITEM, this._element));
fat's avatar
fat committed
508

XhmikosR's avatar
XhmikosR committed
509
      return EventHandler__default['default'].trigger(this._element, EVENT_SLIDE, {
XhmikosR's avatar
Dist    
XhmikosR committed
510
511
512
513
514
515
        relatedTarget: relatedTarget,
        direction: eventDirectionName,
        from: fromIndex,
        to: targetIndex
      });
    };
fat's avatar
fat committed
516

XhmikosR's avatar
Dist    
XhmikosR committed
517
518
    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
      if (this._indicatorsElement) {
XhmikosR's avatar
XhmikosR committed
519
        var indicators = SelectorEngine__default['default'].find(SELECTOR_ACTIVE, this._indicatorsElement);
XhmikosR's avatar
XhmikosR committed
520
521

        for (var i = 0; i < indicators.length; i++) {
XhmikosR's avatar
XhmikosR committed
522
          indicators[i].classList.remove(CLASS_NAME_ACTIVE);
XhmikosR's avatar
XhmikosR committed
523
        }
fat's avatar
fat committed
524

XhmikosR's avatar
Dist    
XhmikosR committed
525
        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
fat's avatar
fat committed
526

XhmikosR's avatar
Dist    
XhmikosR committed
527
        if (nextIndicator) {
XhmikosR's avatar
XhmikosR committed
528
          nextIndicator.classList.add(CLASS_NAME_ACTIVE);
Mark Otto's avatar
dist    
Mark Otto committed
529
        }
XhmikosR's avatar
Dist    
XhmikosR committed
530
531
      }
    };
fat's avatar
fat committed
532

XhmikosR's avatar
Dist    
XhmikosR committed
533
534
    _proto._slide = function _slide(direction, element) {
      var _this4 = this;
fat's avatar
fat committed
535

XhmikosR's avatar
XhmikosR committed
536
      var activeElement = SelectorEngine__default['default'].findOne(SELECTOR_ACTIVE_ITEM, this._element);
fat's avatar
fat committed
537

XhmikosR's avatar
Dist    
XhmikosR committed
538
      var activeElementIndex = this._getItemIndex(activeElement);
fat's avatar
fat committed
539

XhmikosR's avatar
Dist    
XhmikosR committed
540
      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);
fat's avatar
fat committed
541

XhmikosR's avatar
Dist    
XhmikosR committed
542
      var nextElementIndex = this._getItemIndex(nextElement);
fat's avatar
fat committed
543

XhmikosR's avatar
Dist    
XhmikosR committed
544
545
546
547
      var isCycling = Boolean(this._interval);
      var directionalClassName;
      var orderClassName;
      var eventDirectionName;
fat's avatar
fat committed
548

XhmikosR's avatar
XhmikosR committed
549
550
551
552
      if (direction === DIRECTION_NEXT) {
        directionalClassName = CLASS_NAME_LEFT;
        orderClassName = CLASS_NAME_NEXT;
        eventDirectionName = DIRECTION_LEFT;
XhmikosR's avatar
Dist    
XhmikosR committed
553
      } else {
XhmikosR's avatar
XhmikosR committed
554
555
556
        directionalClassName = CLASS_NAME_RIGHT;
        orderClassName = CLASS_NAME_PREV;
        eventDirectionName = DIRECTION_RIGHT;
XhmikosR's avatar
Dist    
XhmikosR committed
557
      }
Mark Otto's avatar
dist    
Mark Otto committed
558

XhmikosR's avatar
XhmikosR committed
559
      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE)) {
XhmikosR's avatar
Dist    
XhmikosR committed
560
561
562
        this._isSliding = false;
        return;
      }
Mark Otto's avatar
dist    
Mark Otto committed
563

XhmikosR's avatar
Dist    
XhmikosR committed
564
      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
Mark Otto's avatar
dist    
Mark Otto committed
565

XhmikosR's avatar
XhmikosR committed
566
      if (slideEvent.defaultPrevented) {
XhmikosR's avatar
Dist    
XhmikosR committed
567
568
        return;
      }
fat's avatar
fat committed
569

XhmikosR's avatar
Dist    
XhmikosR committed
570
571
572
573
      if (!activeElement || !nextElement) {
        // Some weirdness is happening, so we bail
        return;
      }
fat's avatar
fat committed
574

XhmikosR's avatar
Dist    
XhmikosR committed
575
      this._isSliding = true;
Mark Otto's avatar
Mark Otto committed
576

XhmikosR's avatar
Dist    
XhmikosR committed
577
578
579
      if (isCycling) {
        this.pause();
      }
fat's avatar
fat committed
580

XhmikosR's avatar
Dist    
XhmikosR committed
581
      this._setActiveIndicatorElement(nextElement);
Mark Otto's avatar
dist    
Mark Otto committed
582

XhmikosR's avatar
XhmikosR committed
583
      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {
XhmikosR's avatar
XhmikosR committed
584
585
586
587
        nextElement.classList.add(orderClassName);
        reflow(nextElement);
        activeElement.classList.add(directionalClassName);
        nextElement.classList.add(directionalClassName);
XhmikosR's avatar
Dist    
XhmikosR committed
588
        var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);
fat's avatar
fat committed
589

XhmikosR's avatar
Dist    
XhmikosR committed
590
591
592
593
594
595
        if (nextElementInterval) {
          this._config.defaultInterval = this._config.defaultInterval || this._config.interval;
          this._config.interval = nextElementInterval;
        } else {
          this._config.interval = this._config.defaultInterval || this._config.interval;
        }
Mark Otto's avatar
dist    
Mark Otto committed
596

XhmikosR's avatar
XhmikosR committed
597
        var transitionDuration = getTransitionDurationFromElement(activeElement);
XhmikosR's avatar
XhmikosR committed
598
        EventHandler__default['default'].one(activeElement, TRANSITION_END, function () {
XhmikosR's avatar
XhmikosR committed
599
          nextElement.classList.remove(directionalClassName, orderClassName);
XhmikosR's avatar
XhmikosR committed
600
          nextElement.classList.add(CLASS_NAME_ACTIVE);
XhmikosR's avatar
XhmikosR committed
601
          activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName);
XhmikosR's avatar
Dist    
XhmikosR committed
602
603
          _this4._isSliding = false;
          setTimeout(function () {
XhmikosR's avatar
XhmikosR committed
604
            EventHandler__default['default'].trigger(_this4._element, EVENT_SLID, {
XhmikosR's avatar
XhmikosR committed
605
606
607
608
609
              relatedTarget: nextElement,
              direction: eventDirectionName,
              from: activeElementIndex,
              to: nextElementIndex
            });
XhmikosR's avatar
Dist    
XhmikosR committed
610
          }, 0);
XhmikosR's avatar
XhmikosR committed
611
612
        });
        emulateTransitionEnd(activeElement, transitionDuration);
XhmikosR's avatar
Dist    
XhmikosR committed
613
      } else {
XhmikosR's avatar
XhmikosR committed
614
615
        activeElement.classList.remove(CLASS_NAME_ACTIVE);
        nextElement.classList.add(CLASS_NAME_ACTIVE);
XhmikosR's avatar
Dist    
XhmikosR committed
616
        this._isSliding = false;
XhmikosR's avatar
XhmikosR committed
617
        EventHandler__default['default'].trigger(this._element, EVENT_SLID, {
XhmikosR's avatar
XhmikosR committed
618
619
620
621
622
          relatedTarget: nextElement,
          direction: eventDirectionName,
          from: activeElementIndex,
          to: nextElementIndex
        });
XhmikosR's avatar
Dist    
XhmikosR committed
623
      }
Mark Otto's avatar
dist    
Mark Otto committed
624

XhmikosR's avatar
Dist    
XhmikosR committed
625
626
627
      if (isCycling) {
        this.cycle();
      }
Mark Otto's avatar
Mark Otto committed
628
629
    } // Static
    ;
Mark Otto's avatar
grunt    
Mark Otto committed
630

XhmikosR's avatar
XhmikosR committed
631
    Carousel.carouselInterface = function carouselInterface(element, config) {
XhmikosR's avatar
XhmikosR committed
632
      var data = Data__default['default'].getData(element, DATA_KEY);
Mark Otto's avatar
dist    
Mark Otto committed
633

XhmikosR's avatar
XhmikosR committed
634
      var _config = _extends({}, Default, Manipulator__default['default'].getDataAttributes(element));
Mark Otto's avatar
dist    
Mark Otto committed
635

XhmikosR's avatar
XhmikosR committed
636
      if (typeof config === 'object') {
XhmikosR's avatar
XhmikosR committed
637
        _config = _extends({}, _config, config);
XhmikosR's avatar
XhmikosR committed
638
      }
Mark Otto's avatar
dist    
Mark Otto committed
639

XhmikosR's avatar
XhmikosR committed
640
      var action = typeof config === 'string' ? config : _config.slide;
Mark Otto's avatar
dist    
Mark Otto committed
641

XhmikosR's avatar
XhmikosR committed
642
643
644
645
646
647
648
649
      if (!data) {
        data = new Carousel(element, _config);
      }

      if (typeof config === 'number') {
        data.to(config);
      } else if (typeof action === 'string') {
        if (typeof data[action] === 'undefined') {
XhmikosR's avatar
Dist.    
XhmikosR committed
650
          throw new TypeError("No method named \"" + action + "\"");
Mark Otto's avatar
dist    
Mark Otto committed
651
        }
Mark Otto's avatar
dist    
Mark Otto committed
652

XhmikosR's avatar
XhmikosR committed
653
654
655
656
657
658
        data[action]();
      } else if (_config.interval && _config.ride) {
        data.pause();
        data.cycle();
      }
    };
Mark Otto's avatar
dist    
Mark Otto committed
659

XhmikosR's avatar
XhmikosR committed
660
    Carousel.jQueryInterface = function jQueryInterface(config) {
XhmikosR's avatar
XhmikosR committed
661
      return this.each(function () {
XhmikosR's avatar
XhmikosR committed
662
        Carousel.carouselInterface(this, config);
XhmikosR's avatar
Dist    
XhmikosR committed
663
664
      });
    };
Mark Otto's avatar
dist    
Mark Otto committed
665

XhmikosR's avatar
XhmikosR committed
666
667
    Carousel.dataApiClickHandler = function dataApiClickHandler(event) {
      var target = getElementFromSelector(this);
fat's avatar
fat committed
668

XhmikosR's avatar
XhmikosR committed
669
      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
XhmikosR's avatar
Dist    
XhmikosR committed
670
671
        return;
      }
fat's avatar
fat committed
672

XhmikosR's avatar
XhmikosR committed
673
      var config = _extends({}, Manipulator__default['default'].getDataAttributes(target), Manipulator__default['default'].getDataAttributes(this));
fat's avatar
fat committed
674

XhmikosR's avatar
Dist    
XhmikosR committed
675
      var slideIndex = this.getAttribute('data-slide-to');
Mark Otto's avatar
dist    
Mark Otto committed
676

XhmikosR's avatar
Dist    
XhmikosR committed
677
678
      if (slideIndex) {
        config.interval = false;
Mark Otto's avatar
dist    
Mark Otto committed
679
      }
Mark Otto's avatar
dist    
Mark Otto committed
680

XhmikosR's avatar
XhmikosR committed
681
      Carousel.carouselInterface(target, config);
XhmikosR's avatar
Dist    
XhmikosR committed
682
683

      if (slideIndex) {
XhmikosR's avatar
XhmikosR committed
684
        Data__default['default'].getData(target, DATA_KEY).to(slideIndex);
XhmikosR's avatar
Dist    
XhmikosR committed
685
      }
fat's avatar
fat committed
686

XhmikosR's avatar
Dist    
XhmikosR committed
687
      event.preventDefault();
Mark Otto's avatar
dist    
Mark Otto committed
688
    };
Mark Otto's avatar
dist    
Mark Otto committed
689

XhmikosR's avatar
XhmikosR committed
690
    Carousel.getInstance = function getInstance(element) {
XhmikosR's avatar
XhmikosR committed
691
      return Data__default['default'].getData(element, DATA_KEY);
XhmikosR's avatar
XhmikosR committed
692
693
    };

XhmikosR's avatar
Dist    
XhmikosR committed
694
695
696
697
698
699
700
701
702
703
704
705
    _createClass(Carousel, null, [{
      key: "VERSION",
      get: function get() {
        return VERSION;
      }
    }, {
      key: "Default",
      get: function get() {
        return Default;
      }
    }]);

Mark Otto's avatar
dist    
Mark Otto committed
706
    return Carousel;
XhmikosR's avatar
Dist    
XhmikosR committed
707
708
709
710
711
712
713
714
  }();
  /**
   * ------------------------------------------------------------------------
   * Data Api implementation
   * ------------------------------------------------------------------------
   */


XhmikosR's avatar
XhmikosR committed
715
716
717
  EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);
  EventHandler__default['default'].on(window, EVENT_LOAD_DATA_API, function () {
    var carousels = SelectorEngine__default['default'].find(SELECTOR_DATA_RIDE);
XhmikosR's avatar
Dist    
XhmikosR committed
718
719

    for (var i = 0, len = carousels.length; i < len; i++) {
XhmikosR's avatar
XhmikosR committed
720
      Carousel.carouselInterface(carousels[i], Data__default['default'].getData(carousels[i], DATA_KEY));
XhmikosR's avatar
Dist    
XhmikosR committed
721
722
    }
  });
XhmikosR's avatar
XhmikosR committed
723
  var $ = getjQuery();
XhmikosR's avatar
Dist    
XhmikosR committed
724
725
726
727
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
XhmikosR's avatar
XhmikosR committed
728
   * add .carousel to jQuery only if jQuery is present
XhmikosR's avatar
Dist    
XhmikosR committed
729
730
   */

731
732
  /* istanbul ignore if */

XhmikosR's avatar
XhmikosR committed
733
734
735
736
  if ($) {
    var JQUERY_NO_CONFLICT = $.fn[NAME];
    $.fn[NAME] = Carousel.jQueryInterface;
    $.fn[NAME].Constructor = Carousel;
XhmikosR's avatar
Dist    
XhmikosR committed
737

XhmikosR's avatar
XhmikosR committed
738
739
740
    $.fn[NAME].noConflict = function () {
      $.fn[NAME] = JQUERY_NO_CONFLICT;
      return Carousel.jQueryInterface;
XhmikosR's avatar
XhmikosR committed
741
742
    };
  }
fat's avatar
fat committed
743
744

  return Carousel;
Mark Otto's avatar
dist    
Mark Otto committed
745

XhmikosR's avatar
XhmikosR committed
746
})));
Mark Otto's avatar
dist    
Mark Otto committed
747
//# sourceMappingURL=carousel.js.map