UNPKG

react-id-swiper

Version:

ReactJs component for iDangerous Swiper

430 lines (370 loc) 23.7 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _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; }; 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; }; }(); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _reactDom = require('react-dom'); var _reactDom2 = _interopRequireDefault(_reactDom); var _objectAssign = require('object-assign'); var _objectAssign2 = _interopRequireDefault(_objectAssign); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _custom = require('./swiper/custom'); var _custom2 = _interopRequireDefault(_custom); var _utils = require('./utils'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* NOTE: Custom version won't support those features below - Virtual - Keyboard - Mouse wheel - Zoom - Lazy load image - A11y - Parallax - History - Hash-navigation - Effect-cube - Effect-flip - Effect-coverflow #Referer link: http://idangero.us/swiper/api/#custom-build */ var ReactIdSwiper = function (_Component) { _inherits(ReactIdSwiper, _Component); // Default props function ReactIdSwiper(props) { _classCallCheck(this, ReactIdSwiper); var _this = _possibleConstructorReturn(this, (ReactIdSwiper.__proto__ || Object.getPrototypeOf(ReactIdSwiper)).call(this, props)); _this.renderContent = _this.renderContent.bind(_this); return _this; } // Proptypes _createClass(ReactIdSwiper, [{ key: 'componentDidMount', value: function componentDidMount() { this.buildSwiper(); } }, { key: 'componentDidUpdate', value: function componentDidUpdate() { if (typeof this.swiper === 'undefined') return; var _props = this.props, rebuildOnUpdate = _props.rebuildOnUpdate, shouldSwiperUpdate = _props.shouldSwiperUpdate, activeSlideKey = _props.activeSlideKey; if (rebuildOnUpdate) { this.rebuildSwiper(); } else if (shouldSwiperUpdate) { this.updateSwiper(); var numSlides = this.swiper.slides.length; if (numSlides <= this.swiper.activeIndex) { var index = Math.max(numSlides - 1, 0); this.swiper.slideTo(index); } } if (activeSlideKey) { var activeSlideId = null; var id = 0; _react2.default.Children.forEach(this.props.children, function (child) { if (child) { if (child.key === activeSlideKey) { activeSlideId = id; } id += 1; } }); if (activeSlideId !== null) { this.swiper.slideTo(activeSlideId); } } } }, { key: 'componentWillUnmount', value: function componentWillUnmount() { if (typeof this.swiper !== 'undefined') this.swiper.destroy(true, true); delete this.swiper; } }, { key: 'buildSwiper', value: function buildSwiper() { this.swiper = new _custom2.default(_reactDom2.default.findDOMNode(this), (0, _objectAssign2.default)({}, this.props)); } }, { key: 'rebuildSwiper', value: function rebuildSwiper() { this.swiper.destroy(true, true); this.buildSwiper(); } }, { key: 'updateSwiper', value: function updateSwiper() { if (typeof this.swiper !== 'undefined') this.swiper.update(); } }, { key: 'renderContent', value: function renderContent(e) { if (!e) return false; var _props2 = this.props, slideClass = _props2.slideClass, noSwiping = _props2.noSwiping; var slideClassNames = [slideClass, e.props.className]; if (noSwiping) slideClassNames.push('swiper-no-swiping'); return _react2.default.cloneElement(e, _extends({}, e.props, { className: slideClassNames.join(' ').trim() })); } }, { key: 'render', value: function render() { var _props3 = this.props, ContainerEl = _props3.ContainerEl, WrapperEl = _props3.WrapperEl, containerClass = _props3.containerClass, wrapperClass = _props3.wrapperClass, children = _props3.children, rtl = _props3.rtl, scrollbar = _props3.scrollbar, renderScrollbar = _props3.renderScrollbar, pagination = _props3.pagination, renderPagination = _props3.renderPagination, navigation = _props3.navigation, renderPrevButton = _props3.renderPrevButton, renderNextButton = _props3.renderNextButton; return _react2.default.createElement( ContainerEl, { className: containerClass, dir: rtl && 'rtl' }, _react2.default.createElement( WrapperEl, { className: wrapperClass }, _react2.default.Children.map(children, this.renderContent) ), pagination && pagination.el && renderPagination(this.props), scrollbar && scrollbar.el && renderScrollbar(this.props), navigation && navigation.nextEl && renderNextButton(this.props), navigation && navigation.prevEl && renderPrevButton(this.props) ); } }]); return ReactIdSwiper; }(_react.Component); ReactIdSwiper.defaultProps = { containerClass: 'swiper-container', wrapperClass: 'swiper-wrapper', slideClass: 'swiper-slide', ContainerEl: 'div', WrapperEl: 'div', renderScrollbar: function renderScrollbar(_ref) { var scrollbar = _ref.scrollbar; return _react2.default.createElement('div', { className: (0, _utils.cn)(scrollbar.el) }); }, renderPagination: function renderPagination(_ref2) { var pagination = _ref2.pagination; return _react2.default.createElement('div', { className: (0, _utils.cn)(pagination.el) }); }, renderPrevButton: function renderPrevButton(_ref3) { var navigation = _ref3.navigation; return _react2.default.createElement('div', { className: (0, _utils.cn)(navigation.prevEl) }); }, renderNextButton: function renderNextButton(_ref4) { var navigation = _ref4.navigation; return _react2.default.createElement('div', { className: (0, _utils.cn)(navigation.nextEl) }); } }; ReactIdSwiper.propTypes = { // react-id-swiper original parameters ContainerEl: _propTypes2.default.string, WrapperEl: _propTypes2.default.string, containerClass: _propTypes2.default.string, wrapperClass: _propTypes2.default.string, children: _propTypes2.default.any, rebuildOnUpdate: _propTypes2.default.bool, shouldSwiperUpdate: _propTypes2.default.bool, activeSlideKey: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]), renderScrollbar: _propTypes2.default.func, renderPagination: _propTypes2.default.func, renderPrevButton: _propTypes2.default.func, renderNextButton: _propTypes2.default.func, renderParallax: _propTypes2.default.func, // swiper parameter init: _propTypes2.default.bool, initialSlide: _propTypes2.default.number, direction: _propTypes2.default.string, rtl: _propTypes2.default.bool, speed: _propTypes2.default.number, setWrapperSize: _propTypes2.default.bool, width: _propTypes2.default.number, height: _propTypes2.default.number, autoHeight: _propTypes2.default.bool, roundLengths: _propTypes2.default.bool, nested: _propTypes2.default.bool, uniqueNavElements: _propTypes2.default.bool, effect: _propTypes2.default.string, runCallbacksOnInit: _propTypes2.default.bool, // slides grid spaceBetween: _propTypes2.default.number, slidesPerView: _propTypes2.default.any, slidesPerColumn: _propTypes2.default.number, slidesPerColumnFill: _propTypes2.default.string, slidesPerGroup: _propTypes2.default.number, centeredSlides: _propTypes2.default.bool, slidesOffsetBefore: _propTypes2.default.number, slidesOffsetAfter: _propTypes2.default.number, normalizeSlideIndex: _propTypes2.default.bool, // grab cursor grabCursor: _propTypes2.default.bool, // touches touchEventsTarget: _propTypes2.default.string, touchRatio: _propTypes2.default.number, touchAngle: _propTypes2.default.number, simulateTouch: _propTypes2.default.bool, shortSwipes: _propTypes2.default.bool, longSwipes: _propTypes2.default.bool, longSwipesRatio: _propTypes2.default.number, longSwipesMs: _propTypes2.default.number, followFinger: _propTypes2.default.bool, allowTouchMove: _propTypes2.default.bool, threshold: _propTypes2.default.number, touchMoveStopPropagation: _propTypes2.default.bool, iOSEdgeSwipeDetection: _propTypes2.default.bool, iOSEdgeSwipeThreshold: _propTypes2.default.number, touchReleaseOnEdges: _propTypes2.default.bool, passiveListeners: _propTypes2.default.bool, // touch resistance resistance: _propTypes2.default.bool, resistanceRatio: _propTypes2.default.number, // swiping / no swiping allowSlidePrev: _propTypes2.default.bool, allowSlideNext: _propTypes2.default.bool, noSwiping: _propTypes2.default.bool, noSwipingClass: _propTypes2.default.string, swipeHandler: _propTypes2.default.any, // clicks preventClicks: _propTypes2.default.bool, preventClicksPropagation: _propTypes2.default.bool, slideToClickedSlide: _propTypes2.default.bool, // freemode freeMode: _propTypes2.default.bool, freeModeMomentum: _propTypes2.default.bool, freeModeMomentumRatio: _propTypes2.default.number, freeModeMomentumVelocityRatio: _propTypes2.default.number, freeModeMomentumBounce: _propTypes2.default.bool, freeModeMomentumBounceRatio: _propTypes2.default.number, freeModeMinimumVelocity: _propTypes2.default.number, freeModeSticky: _propTypes2.default.bool, // progress watchSlidesProgress: _propTypes2.default.bool, watchSlidesVisibility: _propTypes2.default.bool, // images preloadImages: _propTypes2.default.bool, updateOnImagesReady: _propTypes2.default.bool, // loop loop: _propTypes2.default.bool, loopAdditionalSlides: _propTypes2.default.number, loopedSlides: _propTypes2.default.number, loopFillGroupWithBlank: _propTypes2.default.bool, // breakpoints breakpoints: _propTypes2.default.object, // observer observer: _propTypes2.default.bool, observeParents: _propTypes2.default.bool, // namespace containerModifierClass: _propTypes2.default.string, slideClass: _propTypes2.default.string, slideActiveClass: _propTypes2.default.string, slideDuplicatedActiveClass: _propTypes2.default.string, slideVisibleClass: _propTypes2.default.string, slideDuplicateClass: _propTypes2.default.string, slideNextClass: _propTypes2.default.string, slideDuplicatedNextClass: _propTypes2.default.string, slidePrevClass: _propTypes2.default.string, slideDuplicatedPrevClass: _propTypes2.default.string, // autoplay autoplay: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.shape({ delay: _propTypes2.default.number, stopOnLast: _propTypes2.default.bool, disableOnInteraction: _propTypes2.default.bool })]), // pagination pagination: _propTypes2.default.shape({ el: _propTypes2.default.string, type: _propTypes2.default.string, bulletElement: _propTypes2.default.string, dynamicBullets: _propTypes2.default.bool, hideOnClick: _propTypes2.default.bool, clickable: _propTypes2.default.bool, renderBullet: _propTypes2.default.func, renderFraction: _propTypes2.default.func, renderProgressbar: _propTypes2.default.func, renderCustom: _propTypes2.default.func, bulletClass: _propTypes2.default.string, bulletActiveClass: _propTypes2.default.string, modifierClass: _propTypes2.default.string, currentClass: _propTypes2.default.string, totalClass: _propTypes2.default.string, hiddenClass: _propTypes2.default.string, progressbarFillClass: _propTypes2.default.string, clickableClass: _propTypes2.default.string }), // scrollbar scrollbar: _propTypes2.default.shape({ el: _propTypes2.default.any, hide: _propTypes2.default.bool, draggable: _propTypes2.default.bool, snapOnRelease: _propTypes2.default.bool, dragSize: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]) }), // navigation navigation: _propTypes2.default.shape({ nextEl: _propTypes2.default.string, prevEl: _propTypes2.default.string, hideOnClick: _propTypes2.default.bool, disabledClass: _propTypes2.default.string, hiddenClass: _propTypes2.default.string }), // fadeEffect fadeEffect: _propTypes2.default.shape({ crossFade: _propTypes2.default.bool }), // controller controller: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.shape({ control: _propTypes2.default.any, inverse: _propTypes2.default.bool, by: _propTypes2.default.string })]), // events on: _propTypes2.default.shape({ init: _propTypes2.default.func, beforeDestroy: _propTypes2.default.func, slideChange: _propTypes2.default.func, slideChangeTransitionStart: _propTypes2.default.func, slideChangeTransitionEnd: _propTypes2.default.func, slideNextTransitionStart: _propTypes2.default.func, slideNextTransitionEnd: _propTypes2.default.func, slidePrevTransitionStart: _propTypes2.default.func, slidePrevTransitionEnd: _propTypes2.default.func, transitionStart: _propTypes2.default.func, onTransitionEnd: _propTypes2.default.func, touchStart: _propTypes2.default.func, touchMove: _propTypes2.default.func, touchMoveOpposite: _propTypes2.default.func, sliderMove: _propTypes2.default.func, touchEnd: _propTypes2.default.func, click: _propTypes2.default.func, tap: _propTypes2.default.func, doubleTap: _propTypes2.default.func, imagesReady: _propTypes2.default.func, progress: _propTypes2.default.func, reachBeginning: _propTypes2.default.func, reachEnd: _propTypes2.default.func, fromEdge: _propTypes2.default.func, setTranslate: _propTypes2.default.func, setTransition: _propTypes2.default.func, resize: _propTypes2.default.func }) }; exports.default = ReactIdSwiper;