You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							486 lines
						
					
					
						
							14 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							486 lines
						
					
					
						
							14 KiB
						
					
					
				| var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; | |
| 
 | |
| var _createClass = function () { 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); | |
| 
 | |
| function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | |
| 
 | |
| /** | |
|  * -------------------------------------------------------------------------- | |
|  * Bootstrap (v4.0.0-alpha.6): carousel.js | |
|  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | |
|  * -------------------------------------------------------------------------- | |
|  */ | |
| 
 | |
| var Carousel = function ($) { | |
| 
 | |
|   /** | |
|    * ------------------------------------------------------------------------ | |
|    * Constants | |
|    * ------------------------------------------------------------------------ | |
|    */ | |
| 
 | |
|   var NAME = 'carousel'; | |
|   var VERSION = '4.0.0-alpha.6'; | |
|   var DATA_KEY = 'bs.carousel'; | |
|   var EVENT_KEY = '.' + DATA_KEY; | |
|   var DATA_API_KEY = '.data-api'; | |
|   var JQUERY_NO_CONFLICT = $.fn[NAME]; | |
|   var TRANSITION_DURATION = 600; | |
|   var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key | |
|   var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key | |
|  | |
|   var Default = { | |
|     interval: 5000, | |
|     keyboard: true, | |
|     slide: false, | |
|     pause: 'hover', | |
|     wrap: true | |
|   }; | |
| 
 | |
|   var DefaultType = { | |
|     interval: '(number|boolean)', | |
|     keyboard: 'boolean', | |
|     slide: '(boolean|string)', | |
|     pause: '(string|boolean)', | |
|     wrap: 'boolean' | |
|   }; | |
| 
 | |
|   var Direction = { | |
|     NEXT: 'next', | |
|     PREV: 'prev', | |
|     LEFT: 'left', | |
|     RIGHT: 'right' | |
|   }; | |
| 
 | |
|   var Event = { | |
|     SLIDE: 'slide' + EVENT_KEY, | |
|     SLID: 'slid' + EVENT_KEY, | |
|     KEYDOWN: 'keydown' + EVENT_KEY, | |
|     MOUSEENTER: 'mouseenter' + EVENT_KEY, | |
|     MOUSELEAVE: 'mouseleave' + EVENT_KEY, | |
|     LOAD_DATA_API: 'load' + EVENT_KEY + DATA_API_KEY, | |
|     CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY | |
|   }; | |
| 
 | |
|   var ClassName = { | |
|     CAROUSEL: 'carousel', | |
|     ACTIVE: 'active', | |
|     SLIDE: 'slide', | |
|     RIGHT: 'carousel-item-right', | |
|     LEFT: 'carousel-item-left', | |
|     NEXT: 'carousel-item-next', | |
|     PREV: 'carousel-item-prev', | |
|     ITEM: 'carousel-item' | |
|   }; | |
| 
 | |
|   var Selector = { | |
|     ACTIVE: '.active', | |
|     ACTIVE_ITEM: '.active.carousel-item', | |
|     ITEM: '.carousel-item', | |
|     NEXT_PREV: '.carousel-item-next, .carousel-item-prev', | |
|     INDICATORS: '.carousel-indicators', | |
|     DATA_SLIDE: '[data-slide], [data-slide-to]', | |
|     DATA_RIDE: '[data-ride="carousel"]' | |
|   }; | |
| 
 | |
|   /** | |
|    * ------------------------------------------------------------------------ | |
|    * Class Definition | |
|    * ------------------------------------------------------------------------ | |
|    */ | |
| 
 | |
|   var Carousel = function () { | |
|     function Carousel(element, config) { | |
|       _classCallCheck(this, Carousel); | |
| 
 | |
|       this._items = null; | |
|       this._interval = null; | |
|       this._activeElement = null; | |
| 
 | |
|       this._isPaused = false; | |
|       this._isSliding = false; | |
| 
 | |
|       this._config = this._getConfig(config); | |
|       this._element = $(element)[0]; | |
|       this._indicatorsElement = $(this._element).find(Selector.INDICATORS)[0]; | |
| 
 | |
|       this._addEventListeners(); | |
|     } | |
| 
 | |
|     // getters | |
|  | |
|     // public | |
|  | |
|     Carousel.prototype.next = function next() { | |
|       if (this._isSliding) { | |
|         throw new Error('Carousel is sliding'); | |
|       } | |
|       this._slide(Direction.NEXT); | |
|     }; | |
| 
 | |
|     Carousel.prototype.nextWhenVisible = function nextWhenVisible() { | |
|       // Don't call next when the page isn't visible | |
|       if (!document.hidden) { | |
|         this.next(); | |
|       } | |
|     }; | |
| 
 | |
|     Carousel.prototype.prev = function prev() { | |
|       if (this._isSliding) { | |
|         throw new Error('Carousel is sliding'); | |
|       } | |
|       this._slide(Direction.PREVIOUS); | |
|     }; | |
| 
 | |
|     Carousel.prototype.pause = function pause(event) { | |
|       if (!event) { | |
|         this._isPaused = true; | |
|       } | |
| 
 | |
|       if ($(this._element).find(Selector.NEXT_PREV)[0] && Util.supportsTransitionEnd()) { | |
|         Util.triggerTransitionEnd(this._element); | |
|         this.cycle(true); | |
|       } | |
| 
 | |
|       clearInterval(this._interval); | |
|       this._interval = null; | |
|     }; | |
| 
 | |
|     Carousel.prototype.cycle = function cycle(event) { | |
|       if (!event) { | |
|         this._isPaused = false; | |
|       } | |
| 
 | |
|       if (this._interval) { | |
|         clearInterval(this._interval); | |
|         this._interval = null; | |
|       } | |
| 
 | |
|       if (this._config.interval && !this._isPaused) { | |
|         this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); | |
|       } | |
|     }; | |
| 
 | |
|     Carousel.prototype.to = function to(index) { | |
|       var _this = this; | |
| 
 | |
|       this._activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0]; | |
| 
 | |
|       var activeIndex = this._getItemIndex(this._activeElement); | |
| 
 | |
|       if (index > this._items.length - 1 || index < 0) { | |
|         return; | |
|       } | |
| 
 | |
|       if (this._isSliding) { | |
|         $(this._element).one(Event.SLID, function () { | |
|           return _this.to(index); | |
|         }); | |
|         return; | |
|       } | |
| 
 | |
|       if (activeIndex === index) { | |
|         this.pause(); | |
|         this.cycle(); | |
|         return; | |
|       } | |
| 
 | |
|       var direction = index > activeIndex ? Direction.NEXT : Direction.PREVIOUS; | |
| 
 | |
|       this._slide(direction, this._items[index]); | |
|     }; | |
| 
 | |
|     Carousel.prototype.dispose = function dispose() { | |
|       $(this._element).off(EVENT_KEY); | |
|       $.removeData(this._element, DATA_KEY); | |
| 
 | |
|       this._items = null; | |
|       this._config = null; | |
|       this._element = null; | |
|       this._interval = null; | |
|       this._isPaused = null; | |
|       this._isSliding = null; | |
|       this._activeElement = null; | |
|       this._indicatorsElement = null; | |
|     }; | |
| 
 | |
|     // private | |
|  | |
|     Carousel.prototype._getConfig = function _getConfig(config) { | |
|       config = $.extend({}, Default, config); | |
|       Util.typeCheckConfig(NAME, config, DefaultType); | |
|       return config; | |
|     }; | |
| 
 | |
|     Carousel.prototype._addEventListeners = function _addEventListeners() { | |
|       var _this2 = this; | |
| 
 | |
|       if (this._config.keyboard) { | |
|         $(this._element).on(Event.KEYDOWN, function (event) { | |
|           return _this2._keydown(event); | |
|         }); | |
|       } | |
| 
 | |
|       if (this._config.pause === 'hover' && !('ontouchstart' in document.documentElement)) { | |
|         $(this._element).on(Event.MOUSEENTER, function (event) { | |
|           return _this2.pause(event); | |
|         }).on(Event.MOUSELEAVE, function (event) { | |
|           return _this2.cycle(event); | |
|         }); | |
|       } | |
|     }; | |
| 
 | |
|     Carousel.prototype._keydown = function _keydown(event) { | |
|       if (/input|textarea/i.test(event.target.tagName)) { | |
|         return; | |
|       } | |
| 
 | |
|       switch (event.which) { | |
|         case ARROW_LEFT_KEYCODE: | |
|           event.preventDefault(); | |
|           this.prev(); | |
|           break; | |
|         case ARROW_RIGHT_KEYCODE: | |
|           event.preventDefault(); | |
|           this.next(); | |
|           break; | |
|         default: | |
|           return; | |
|       } | |
|     }; | |
| 
 | |
|     Carousel.prototype._getItemIndex = function _getItemIndex(element) { | |
|       this._items = $.makeArray($(element).parent().find(Selector.ITEM)); | |
|       return this._items.indexOf(element); | |
|     }; | |
| 
 | |
|     Carousel.prototype._getItemByDirection = function _getItemByDirection(direction, activeElement) { | |
|       var isNextDirection = direction === Direction.NEXT; | |
|       var isPrevDirection = direction === Direction.PREVIOUS; | |
|       var activeIndex = this._getItemIndex(activeElement); | |
|       var lastItemIndex = this._items.length - 1; | |
|       var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; | |
| 
 | |
|       if (isGoingToWrap && !this._config.wrap) { | |
|         return activeElement; | |
|       } | |
| 
 | |
|       var delta = direction === Direction.PREVIOUS ? -1 : 1; | |
|       var itemIndex = (activeIndex + delta) % this._items.length; | |
| 
 | |
|       return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; | |
|     }; | |
| 
 | |
|     Carousel.prototype._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { | |
|       var slideEvent = $.Event(Event.SLIDE, { | |
|         relatedTarget: relatedTarget, | |
|         direction: eventDirectionName | |
|       }); | |
| 
 | |
|       $(this._element).trigger(slideEvent); | |
| 
 | |
|       return slideEvent; | |
|     }; | |
| 
 | |
|     Carousel.prototype._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { | |
|       if (this._indicatorsElement) { | |
|         $(this._indicatorsElement).find(Selector.ACTIVE).removeClass(ClassName.ACTIVE); | |
| 
 | |
|         var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; | |
| 
 | |
|         if (nextIndicator) { | |
|           $(nextIndicator).addClass(ClassName.ACTIVE); | |
|         } | |
|       } | |
|     }; | |
| 
 | |
|     Carousel.prototype._slide = function _slide(direction, element) { | |
|       var _this3 = this; | |
| 
 | |
|       var activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0]; | |
|       var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); | |
| 
 | |
|       var isCycling = Boolean(this._interval); | |
| 
 | |
|       var directionalClassName = void 0; | |
|       var orderClassName = void 0; | |
|       var eventDirectionName = void 0; | |
| 
 | |
|       if (direction === Direction.NEXT) { | |
|         directionalClassName = ClassName.LEFT; | |
|         orderClassName = ClassName.NEXT; | |
|         eventDirectionName = Direction.LEFT; | |
|       } else { | |
|         directionalClassName = ClassName.RIGHT; | |
|         orderClassName = ClassName.PREV; | |
|         eventDirectionName = Direction.RIGHT; | |
|       } | |
| 
 | |
|       if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) { | |
|         this._isSliding = false; | |
|         return; | |
|       } | |
| 
 | |
|       var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); | |
|       if (slideEvent.isDefaultPrevented()) { | |
|         return; | |
|       } | |
| 
 | |
|       if (!activeElement || !nextElement) { | |
|         // some weirdness is happening, so we bail | |
|         return; | |
|       } | |
| 
 | |
|       this._isSliding = true; | |
| 
 | |
|       if (isCycling) { | |
|         this.pause(); | |
|       } | |
| 
 | |
|       this._setActiveIndicatorElement(nextElement); | |
| 
 | |
|       var slidEvent = $.Event(Event.SLID, { | |
|         relatedTarget: nextElement, | |
|         direction: eventDirectionName | |
|       }); | |
| 
 | |
|       if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.SLIDE)) { | |
| 
 | |
|         $(nextElement).addClass(orderClassName); | |
| 
 | |
|         Util.reflow(nextElement); | |
| 
 | |
|         $(activeElement).addClass(directionalClassName); | |
|         $(nextElement).addClass(directionalClassName); | |
| 
 | |
|         $(activeElement).one(Util.TRANSITION_END, function () { | |
|           $(nextElement).removeClass(directionalClassName + ' ' + orderClassName).addClass(ClassName.ACTIVE); | |
| 
 | |
|           $(activeElement).removeClass(ClassName.ACTIVE + ' ' + orderClassName + ' ' + directionalClassName); | |
| 
 | |
|           _this3._isSliding = false; | |
| 
 | |
|           setTimeout(function () { | |
|             return $(_this3._element).trigger(slidEvent); | |
|           }, 0); | |
|         }).emulateTransitionEnd(TRANSITION_DURATION); | |
|       } else { | |
|         $(activeElement).removeClass(ClassName.ACTIVE); | |
|         $(nextElement).addClass(ClassName.ACTIVE); | |
| 
 | |
|         this._isSliding = false; | |
|         $(this._element).trigger(slidEvent); | |
|       } | |
| 
 | |
|       if (isCycling) { | |
|         this.cycle(); | |
|       } | |
|     }; | |
| 
 | |
|     // static | |
|  | |
|     Carousel._jQueryInterface = function _jQueryInterface(config) { | |
|       return this.each(function () { | |
|         var data = $(this).data(DATA_KEY); | |
|         var _config = $.extend({}, Default, $(this).data()); | |
| 
 | |
|         if ((typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object') { | |
|           $.extend(_config, config); | |
|         } | |
| 
 | |
|         var action = typeof config === 'string' ? config : _config.slide; | |
| 
 | |
|         if (!data) { | |
|           data = new Carousel(this, _config); | |
|           $(this).data(DATA_KEY, data); | |
|         } | |
| 
 | |
|         if (typeof config === 'number') { | |
|           data.to(config); | |
|         } else if (typeof action === 'string') { | |
|           if (data[action] === undefined) { | |
|             throw new Error('No method named "' + action + '"'); | |
|           } | |
|           data[action](); | |
|         } else if (_config.interval) { | |
|           data.pause(); | |
|           data.cycle(); | |
|         } | |
|       }); | |
|     }; | |
| 
 | |
|     Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { | |
|       var selector = Util.getSelectorFromElement(this); | |
| 
 | |
|       if (!selector) { | |
|         return; | |
|       } | |
| 
 | |
|       var target = $(selector)[0]; | |
| 
 | |
|       if (!target || !$(target).hasClass(ClassName.CAROUSEL)) { | |
|         return; | |
|       } | |
| 
 | |
|       var config = $.extend({}, $(target).data(), $(this).data()); | |
|       var slideIndex = this.getAttribute('data-slide-to'); | |
| 
 | |
|       if (slideIndex) { | |
|         config.interval = false; | |
|       } | |
| 
 | |
|       Carousel._jQueryInterface.call($(target), config); | |
| 
 | |
|       if (slideIndex) { | |
|         $(target).data(DATA_KEY).to(slideIndex); | |
|       } | |
| 
 | |
|       event.preventDefault(); | |
|     }; | |
| 
 | |
|     _createClass(Carousel, null, [{ | |
|       key: 'VERSION', | |
|       get: function get() { | |
|         return VERSION; | |
|       } | |
|     }, { | |
|       key: 'Default', | |
|       get: function get() { | |
|         return Default; | |
|       } | |
|     }]); | |
| 
 | |
|     return Carousel; | |
|   }(); | |
| 
 | |
|   /** | |
|    * ------------------------------------------------------------------------ | |
|    * Data Api implementation | |
|    * ------------------------------------------------------------------------ | |
|    */ | |
| 
 | |
|   $(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler); | |
| 
 | |
|   $(window).on(Event.LOAD_DATA_API, function () { | |
|     $(Selector.DATA_RIDE).each(function () { | |
|       var $carousel = $(this); | |
|       Carousel._jQueryInterface.call($carousel, $carousel.data()); | |
|     }); | |
|   }); | |
| 
 | |
|   /** | |
|    * ------------------------------------------------------------------------ | |
|    * jQuery | |
|    * ------------------------------------------------------------------------ | |
|    */ | |
| 
 | |
|   $.fn[NAME] = Carousel._jQueryInterface; | |
|   $.fn[NAME].Constructor = Carousel; | |
|   $.fn[NAME].noConflict = function () { | |
|     $.fn[NAME] = JQUERY_NO_CONFLICT; | |
|     return Carousel._jQueryInterface; | |
|   }; | |
| 
 | |
|   return Carousel; | |
| }(jQuery); | |
| //# sourceMappingURL=carousel.js.map
 |