'use strict'; exports.__esModule = true; exports.getTrackLeft = exports.getTrackAnimateCSS = exports.getTrackCSS = undefined; var _reactDom = require('react-dom'); var _reactDom2 = _interopRequireDefault(_reactDom); var _objectAssign = require('object-assign'); var _objectAssign2 = _interopRequireDefault(_objectAssign); var _trackUtils = require('../utils/trackUtils'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // checks if spec is the superset of keys in keysArray, i.e., spec contains all the keys from keysArray var checkSpecKeys = function checkSpecKeys(spec, keysArray) { return keysArray.reduce(function (value, key) { return value && spec.hasOwnProperty(key); }, true) ? null : console.error('Keys Missing', spec); }; var getTrackCSS = exports.getTrackCSS = function getTrackCSS(spec) { checkSpecKeys(spec, ['left', 'variableWidth', 'slideCount', 'slidesToShow', 'slideWidth']); var trackWidth, trackHeight; var trackChildren = spec.slideCount + 2 * spec.slidesToShow; // this should probably be getTotalSlides if (!spec.vertical) { trackWidth = (0, _trackUtils.getTotalSlides)(spec) * spec.slideWidth; } else { trackHeight = trackChildren * spec.slideHeight; } var style = { opacity: 1, WebkitTransform: !spec.vertical ? 'translate3d(' + spec.left + 'px, 0px, 0px)' : 'translate3d(0px, ' + spec.left + 'px, 0px)', transform: !spec.vertical ? 'translate3d(' + spec.left + 'px, 0px, 0px)' : 'translate3d(0px, ' + spec.left + 'px, 0px)', transition: '', WebkitTransition: '', msTransform: !spec.vertical ? 'translateX(' + spec.left + 'px)' : 'translateY(' + spec.left + 'px)' }; if (spec.fade) { style = { opacity: 1 }; } if (trackWidth) { (0, _objectAssign2.default)(style, { width: trackWidth }); } if (trackHeight) { (0, _objectAssign2.default)(style, { height: trackHeight }); } // Fallback for IE8 if (window && !window.addEventListener && window.attachEvent) { if (!spec.vertical) { style.marginLeft = spec.left + 'px'; } else { style.marginTop = spec.left + 'px'; } } return style; }; var getTrackAnimateCSS = exports.getTrackAnimateCSS = function getTrackAnimateCSS(spec) { checkSpecKeys(spec, ['left', 'variableWidth', 'slideCount', 'slidesToShow', 'slideWidth', 'speed', 'cssEase']); var style = getTrackCSS(spec); // useCSS is true by default so it can be undefined style.WebkitTransition = '-webkit-transform ' + spec.speed + 'ms ' + spec.cssEase; style.transition = 'transform ' + spec.speed + 'ms ' + spec.cssEase; return style; }; // gets total length of track that's on the left side of current slide var getTrackLeft = exports.getTrackLeft = function getTrackLeft(spec) { if (spec.unslick) { return 0; } checkSpecKeys(spec, ['slideIndex', 'trackRef', 'infinite', 'centerMode', 'slideCount', 'slidesToShow', 'slidesToScroll', 'slideWidth', 'listWidth', 'variableWidth', 'slideHeight']); var slideIndex = spec.slideIndex, trackRef = spec.trackRef, infinite = spec.infinite, centerMode = spec.centerMode, slideCount = spec.slideCount, slidesToShow = spec.slidesToShow, slidesToScroll = spec.slidesToScroll, slideWidth = spec.slideWidth, listWidth = spec.listWidth, variableWidth = spec.variableWidth, slideHeight = spec.slideHeight, fade = spec.fade, vertical = spec.vertical; var slideOffset = 0; var targetLeft; var targetSlide; var verticalOffset = 0; if (fade || spec.slideCount === 1) { return 0; } var slidesToOffset = 0; if (infinite) { slidesToOffset = -(0, _trackUtils.getPreClones)(spec); // bring active slide to the beginning of visual area // if next scroll doesn't have enough children, just reach till the end of original slides instead of shifting slidesToScroll children if (slideCount % slidesToScroll !== 0 && slideIndex + slidesToScroll > slideCount) { slidesToOffset = -(slideIndex > slideCount ? slidesToShow - (slideIndex - slideCount) : slideCount % slidesToScroll); } // shift current slide to center of the frame if (centerMode) { slidesToOffset += parseInt(slidesToShow / 2); } } else { if (slideCount % slidesToScroll !== 0 && slideIndex + slidesToScroll > slideCount) { slidesToOffset = slidesToShow - slideCount % slidesToScroll; } if (centerMode) { slidesToOffset = parseInt(slidesToShow / 2); } } slideOffset = slidesToOffset * slideWidth; verticalOffset = slidesToOffset * slideHeight; if (!vertical) { targetLeft = slideIndex * slideWidth * -1 + slideOffset; } else { targetLeft = slideIndex * slideHeight * -1 + verticalOffset; } if (variableWidth === true) { var targetSlideIndex; var lastSlide = _reactDom2.default.findDOMNode(trackRef).children[slideCount - 1]; targetSlideIndex = slideIndex + (0, _trackUtils.getPreClones)(spec); targetSlide = _reactDom2.default.findDOMNode(trackRef).childNodes[targetSlideIndex]; targetLeft = targetSlide ? targetSlide.offsetLeft * -1 : 0; if (centerMode === true) { targetSlideIndex = infinite ? slideIndex + (0, _trackUtils.getPreClones)(spec) : slideIndex; targetSlide = _reactDom2.default.findDOMNode(trackRef).children[targetSlideIndex]; targetLeft = 0; for (var slide = 0; slide < targetSlideIndex; slide++) { targetLeft -= _reactDom2.default.findDOMNode(trackRef).children[slide].offsetWidth; } targetLeft -= parseInt(spec.centerPadding); targetLeft += (listWidth - targetSlide.offsetWidth) / 2; } } return targetLeft; };