react-id-swiper
Version:
ReactJs component for iDangerous Swiper
430 lines (370 loc) • 23.7 kB
JavaScript
'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;