react-lory
Version:
[Deprecated] Use react-slidy instead.
220 lines (184 loc) • 8.12 kB
JavaScript
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 _server = require('react-dom/server');
var _server2 = _interopRequireDefault(_server);
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; }
var NO_OP = function NO_OP() {};
// in order to make react-slidy compatible with server-rendering
// by default slidy and imagesLoaded are empty functions
var slidy = NO_OP;
var imagesLoaded = NO_OP;
// if window is present, then we get the needed library
if (typeof window !== 'undefined' && window.document) {
slidy = require('./slidy/slidy.js').slidy;
imagesLoaded = require('imagesloaded');
}
var ReactSlidySlider = function (_Component) {
_inherits(ReactSlidySlider, _Component);
function ReactSlidySlider() {
var _ref;
_classCallCheck(this, ReactSlidySlider);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var _this = _possibleConstructorReturn(this, (_ref = ReactSlidySlider.__proto__ || Object.getPrototypeOf(ReactSlidySlider)).call.apply(_ref, [this].concat(args)));
_this.getFrameNode = _this.getFrameNode.bind(_this);
_this.getSliderNode = _this.getSliderNode.bind(_this);
_this.handleAfterSlide = _this.handleAfterSlide.bind(_this);
_this.nextSlider = _this.nextSlider.bind(_this);
_this.prevSlider = _this.prevSlider.bind(_this);
_this.slidyInstance = null;
_this.DOM = {};
_this.classes = {
classNameItem: _this.getClassName('item'),
classNameFrame: _this.getClassName('frame'),
classNameSlideContainer: _this.getClassName('slides'),
classNamePrevCtrl: _this.getClassName('prev'),
classNameNextCtrl: _this.getClassName('next')
};
var children = _this.props.children;
_this.listItems = Array.isArray(children) ? children : [children];
var sliderItems = _react2.default.Children.map(_this.listItems, function (child) {
return _server2.default.renderToStaticMarkup(child);
});
_this.sliderOptions = _extends({}, _this.classes, {
items: sliderItems,
doAfterSlide: _this.handleAfterSlide,
// fix if the user try to use a `true` value for infinite
infinite: _this.props.infinite === true ? 1 : _this.props.infinite,
// if infinite, rewindOnResize is always true
rewindOnResize: _this.props.rewindOnResize || _this.props.infinite
});
return _this;
}
_createClass(ReactSlidySlider, [{
key: 'componentDidMount',
value: function componentDidMount() {
var _this2 = this;
// wait to load the images in order to start some stuff only when needed
imagesLoaded(this.DOM['slider'], function () {
var slidyOptions = _extends({}, _this2.props, _this2.sliderOptions, {
frameDOMEl: _this2.DOM['frame']
});
// start slidy slider instance
_this2.slidyInstance = slidy(_this2.DOM['slider'], slidyOptions);
});
}
}, {
key: 'componentWillUnmount',
value: function componentWillUnmount() {
this.slidyInstance && this.slidyInstance.destroy();
}
}, {
key: 'shouldComponentUpdate',
value: function shouldComponentUpdate(nextProps) {
return false;
}
}, {
key: 'getClassName',
value: function getClassName(element) {
return this.props.classNameBase + '-' + element;
}
}, {
key: 'getFrameNode',
value: function getFrameNode(node) {
this.DOM['frame'] = node;
}
}, {
key: 'getSliderNode',
value: function getSliderNode(node) {
this.DOM['slider'] = node;
}
}, {
key: 'handleAfterSlide',
value: function handleAfterSlide(_ref2) {
var currentSlide = _ref2.currentSlide;
this.props.doAfterSlide({ currentSlide: currentSlide });
}
}, {
key: 'nextSlider',
value: function nextSlider(e) {
e.preventDefault();
this.slidyInstance.next();
}
}, {
key: 'prevSlider',
value: function prevSlider(e) {
e.preventDefault();
this.slidyInstance.prev();
}
}, {
key: 'renderItems',
value: function renderItems() {
var _this3 = this;
return this.listItems.slice(0, 2).map(function (item, index) {
return _react2.default.createElement(
'li',
{ key: index, className: _this3.sliderOptions.classNameItem },
item
);
});
}
}, {
key: 'render',
value: function render() {
var showArrows = this.props.showArrows;
return _react2.default.createElement(
'div',
{ ref: this.getSliderNode },
_react2.default.createElement(
'div',
{ ref: this.getFrameNode, className: this.sliderOptions.classNameFrame },
showArrows && _react2.default.createElement('span', { className: this.classes.classNamePrevCtrl, onClick: this.prevSlider }),
showArrows && _react2.default.createElement('span', { className: this.classes.classNameNextCtrl, onClick: this.nextSlider }),
_react2.default.createElement(
'ul',
{ className: this.sliderOptions.classNameSlideContainer },
this.renderItems()
)
)
);
}
}]);
return ReactSlidySlider;
}(_react.Component);
exports.default = ReactSlidySlider;
ReactSlidySlider.propTypes = {
children: _react.PropTypes.oneOfType([_react.PropTypes.array, _react.PropTypes.object]).isRequired,
classNameBase: _react.PropTypes.string,
doAfterSlide: _react.PropTypes.func,
ease: _react.PropTypes.string,
enableMouseEvents: _react.PropTypes.bool,
infinite: _react.PropTypes.oneOfType([_react.PropTypes.bool, _react.PropTypes.number]),
onReady: _react.PropTypes.func,
rewind: _react.PropTypes.bool,
rewindOnResize: _react.PropTypes.bool,
rewindSpeed: _react.PropTypes.number,
showArrows: _react.PropTypes.bool,
slideSpeed: _react.PropTypes.number,
slidesToScroll: _react.PropTypes.number,
snapBackSpeed: _react.PropTypes.number
};
ReactSlidySlider.defaultProps = {
doAfterSlide: NO_OP,
ease: 'ease',
enableMouseEvents: true,
infinite: 1,
onReady: NO_OP,
rewind: false,
rewindOnResize: false,
rewindSpeed: 500,
showArrows: true,
slideSpeed: 500,
slidesToScroll: 1,
snapBackSpeed: 500
};
;