Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

928 строки
28 KiB

  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.canUseDOM = exports.slidesOnLeft = exports.slidesOnRight = exports.siblingDirection = exports.getTotalSlides = exports.getPostClones = exports.getPreClones = exports.getTrackLeft = exports.getTrackAnimateCSS = exports.getTrackCSS = exports.checkSpecKeys = exports.getSlideCount = exports.checkNavigable = exports.getNavigableIndexes = exports.swipeEnd = exports.swipeMove = exports.swipeStart = exports.keyHandler = exports.changeSlide = exports.slideHandler = exports.initializedState = exports.extractObject = exports.canGoNext = exports.getSwipeDirection = exports.getHeight = exports.getWidth = exports.lazySlidesOnRight = exports.lazySlidesOnLeft = exports.lazyEndIndex = exports.lazyStartIndex = exports.getRequiredLazySlides = exports.getOnDemandLazySlides = void 0;
  6. var _react = _interopRequireDefault(require("react"));
  7. var _reactDom = _interopRequireDefault(require("react-dom"));
  8. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  9. function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
  10. function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  11. var getOnDemandLazySlides = function getOnDemandLazySlides(spec) {
  12. var onDemandSlides = [];
  13. var startIndex = lazyStartIndex(spec);
  14. var endIndex = lazyEndIndex(spec);
  15. for (var slideIndex = startIndex; slideIndex < endIndex; slideIndex++) {
  16. if (spec.lazyLoadedList.indexOf(slideIndex) < 0) {
  17. onDemandSlides.push(slideIndex);
  18. }
  19. }
  20. return onDemandSlides;
  21. }; // return list of slides that need to be present
  22. exports.getOnDemandLazySlides = getOnDemandLazySlides;
  23. var getRequiredLazySlides = function getRequiredLazySlides(spec) {
  24. var requiredSlides = [];
  25. var startIndex = lazyStartIndex(spec);
  26. var endIndex = lazyEndIndex(spec);
  27. for (var slideIndex = startIndex; slideIndex < endIndex; slideIndex++) {
  28. requiredSlides.push(slideIndex);
  29. }
  30. return requiredSlides;
  31. }; // startIndex that needs to be present
  32. exports.getRequiredLazySlides = getRequiredLazySlides;
  33. var lazyStartIndex = function lazyStartIndex(spec) {
  34. return spec.currentSlide - lazySlidesOnLeft(spec);
  35. };
  36. exports.lazyStartIndex = lazyStartIndex;
  37. var lazyEndIndex = function lazyEndIndex(spec) {
  38. return spec.currentSlide + lazySlidesOnRight(spec);
  39. };
  40. exports.lazyEndIndex = lazyEndIndex;
  41. var lazySlidesOnLeft = function lazySlidesOnLeft(spec) {
  42. return spec.centerMode ? Math.floor(spec.slidesToShow / 2) + (parseInt(spec.centerPadding) > 0 ? 1 : 0) : 0;
  43. };
  44. exports.lazySlidesOnLeft = lazySlidesOnLeft;
  45. var lazySlidesOnRight = function lazySlidesOnRight(spec) {
  46. return spec.centerMode ? Math.floor((spec.slidesToShow - 1) / 2) + 1 + (parseInt(spec.centerPadding) > 0 ? 1 : 0) : spec.slidesToShow;
  47. }; // get width of an element
  48. exports.lazySlidesOnRight = lazySlidesOnRight;
  49. var getWidth = function getWidth(elem) {
  50. return elem && elem.offsetWidth || 0;
  51. };
  52. exports.getWidth = getWidth;
  53. var getHeight = function getHeight(elem) {
  54. return elem && elem.offsetHeight || 0;
  55. };
  56. exports.getHeight = getHeight;
  57. var getSwipeDirection = function getSwipeDirection(touchObject) {
  58. var verticalSwiping = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
  59. var xDist, yDist, r, swipeAngle;
  60. xDist = touchObject.startX - touchObject.curX;
  61. yDist = touchObject.startY - touchObject.curY;
  62. r = Math.atan2(yDist, xDist);
  63. swipeAngle = Math.round(r * 180 / Math.PI);
  64. if (swipeAngle < 0) {
  65. swipeAngle = 360 - Math.abs(swipeAngle);
  66. }
  67. if (swipeAngle <= 45 && swipeAngle >= 0 || swipeAngle <= 360 && swipeAngle >= 315) {
  68. return "left";
  69. }
  70. if (swipeAngle >= 135 && swipeAngle <= 225) {
  71. return "right";
  72. }
  73. if (verticalSwiping === true) {
  74. if (swipeAngle >= 35 && swipeAngle <= 135) {
  75. return "up";
  76. } else {
  77. return "down";
  78. }
  79. }
  80. return "vertical";
  81. }; // whether or not we can go next
  82. exports.getSwipeDirection = getSwipeDirection;
  83. var canGoNext = function canGoNext(spec) {
  84. var canGo = true;
  85. if (!spec.infinite) {
  86. if (spec.centerMode && spec.currentSlide >= spec.slideCount - 1) {
  87. canGo = false;
  88. } else if (spec.slideCount <= spec.slidesToShow || spec.currentSlide >= spec.slideCount - spec.slidesToShow) {
  89. canGo = false;
  90. }
  91. }
  92. return canGo;
  93. }; // given an object and a list of keys, return new object with given keys
  94. exports.canGoNext = canGoNext;
  95. var extractObject = function extractObject(spec, keys) {
  96. var newObject = {};
  97. keys.forEach(function (key) {
  98. return newObject[key] = spec[key];
  99. });
  100. return newObject;
  101. }; // get initialized state
  102. exports.extractObject = extractObject;
  103. var initializedState = function initializedState(spec) {
  104. // spec also contains listRef, trackRef
  105. var slideCount = _react.default.Children.count(spec.children);
  106. var listWidth = Math.ceil(getWidth(_reactDom.default.findDOMNode(spec.listRef)));
  107. var trackWidth = Math.ceil(getWidth(_reactDom.default.findDOMNode(spec.trackRef)));
  108. var slideWidth;
  109. if (!spec.vertical) {
  110. var centerPaddingAdj = spec.centerMode && parseInt(spec.centerPadding) * 2;
  111. if (typeof spec.centerPadding === "string" && spec.centerPadding.slice(-1) === "%") {
  112. centerPaddingAdj *= listWidth / 100;
  113. }
  114. slideWidth = Math.ceil((listWidth - centerPaddingAdj) / spec.slidesToShow);
  115. } else {
  116. slideWidth = listWidth;
  117. }
  118. var slideHeight = _reactDom.default.findDOMNode(spec.listRef) && getHeight(_reactDom.default.findDOMNode(spec.listRef).querySelector('[data-index="0"]'));
  119. var listHeight = slideHeight * spec.slidesToShow;
  120. var currentSlide = spec.currentSlide === undefined ? spec.initialSlide : spec.currentSlide;
  121. if (spec.rtl && spec.currentSlide === undefined) {
  122. currentSlide = slideCount - 1 - spec.initialSlide;
  123. }
  124. var lazyLoadedList = spec.lazyLoadedList || [];
  125. var slidesToLoad = getOnDemandLazySlides({
  126. currentSlide: currentSlide,
  127. lazyLoadedList: lazyLoadedList
  128. }, spec);
  129. lazyLoadedList.concat(slidesToLoad);
  130. var state = {
  131. slideCount: slideCount,
  132. slideWidth: slideWidth,
  133. listWidth: listWidth,
  134. trackWidth: trackWidth,
  135. currentSlide: currentSlide,
  136. slideHeight: slideHeight,
  137. listHeight: listHeight,
  138. lazyLoadedList: lazyLoadedList
  139. };
  140. if (spec.autoplaying === null && spec.autoplay) {
  141. state["autoplaying"] = "playing";
  142. }
  143. return state;
  144. };
  145. exports.initializedState = initializedState;
  146. var slideHandler = function slideHandler(spec) {
  147. var waitForAnimate = spec.waitForAnimate,
  148. animating = spec.animating,
  149. fade = spec.fade,
  150. infinite = spec.infinite,
  151. index = spec.index,
  152. slideCount = spec.slideCount,
  153. lazyLoadedList = spec.lazyLoadedList,
  154. lazyLoad = spec.lazyLoad,
  155. currentSlide = spec.currentSlide,
  156. centerMode = spec.centerMode,
  157. slidesToScroll = spec.slidesToScroll,
  158. slidesToShow = spec.slidesToShow,
  159. useCSS = spec.useCSS;
  160. if (waitForAnimate && animating) return {};
  161. var animationSlide = index,
  162. finalSlide,
  163. animationLeft,
  164. finalLeft;
  165. var state = {},
  166. nextState = {};
  167. if (fade) {
  168. if (!infinite && (index < 0 || index >= slideCount)) return {};
  169. if (index < 0) {
  170. animationSlide = index + slideCount;
  171. } else if (index >= slideCount) {
  172. animationSlide = index - slideCount;
  173. }
  174. if (lazyLoad && lazyLoadedList.indexOf(animationSlide) < 0) {
  175. lazyLoadedList.push(animationSlide);
  176. }
  177. state = {
  178. animating: true,
  179. currentSlide: animationSlide,
  180. lazyLoadedList: lazyLoadedList
  181. };
  182. nextState = {
  183. animating: false
  184. };
  185. } else {
  186. finalSlide = animationSlide;
  187. if (animationSlide < 0) {
  188. finalSlide = animationSlide + slideCount;
  189. if (!infinite) finalSlide = 0;else if (slideCount % slidesToScroll !== 0) finalSlide = slideCount - slideCount % slidesToScroll;
  190. } else if (!canGoNext(spec) && animationSlide > currentSlide) {
  191. animationSlide = finalSlide = currentSlide;
  192. } else if (centerMode && animationSlide >= slideCount) {
  193. animationSlide = infinite ? slideCount : slideCount - 1;
  194. finalSlide = infinite ? 0 : slideCount - 1;
  195. } else if (animationSlide >= slideCount) {
  196. finalSlide = animationSlide - slideCount;
  197. if (!infinite) finalSlide = slideCount - slidesToShow;else if (slideCount % slidesToScroll !== 0) finalSlide = 0;
  198. }
  199. animationLeft = getTrackLeft(_objectSpread({}, spec, {
  200. slideIndex: animationSlide
  201. }));
  202. finalLeft = getTrackLeft(_objectSpread({}, spec, {
  203. slideIndex: finalSlide
  204. }));
  205. if (!infinite) {
  206. if (animationLeft === finalLeft) animationSlide = finalSlide;
  207. animationLeft = finalLeft;
  208. }
  209. lazyLoad && lazyLoadedList.concat(getOnDemandLazySlides(_objectSpread({}, spec, {
  210. currentSlide: animationSlide
  211. })));
  212. if (!useCSS) {
  213. state = {
  214. currentSlide: finalSlide,
  215. trackStyle: getTrackCSS(_objectSpread({}, spec, {
  216. left: finalLeft
  217. })),
  218. lazyLoadedList: lazyLoadedList
  219. };
  220. } else {
  221. state = {
  222. animating: true,
  223. currentSlide: finalSlide,
  224. trackStyle: getTrackAnimateCSS(_objectSpread({}, spec, {
  225. left: animationLeft
  226. })),
  227. lazyLoadedList: lazyLoadedList
  228. };
  229. nextState = {
  230. animating: false,
  231. currentSlide: finalSlide,
  232. trackStyle: getTrackCSS(_objectSpread({}, spec, {
  233. left: finalLeft
  234. })),
  235. swipeLeft: null
  236. };
  237. }
  238. }
  239. return {
  240. state: state,
  241. nextState: nextState
  242. };
  243. };
  244. exports.slideHandler = slideHandler;
  245. var changeSlide = function changeSlide(spec, options) {
  246. var indexOffset, previousInt, slideOffset, unevenOffset, targetSlide;
  247. var slidesToScroll = spec.slidesToScroll,
  248. slidesToShow = spec.slidesToShow,
  249. slideCount = spec.slideCount,
  250. currentSlide = spec.currentSlide,
  251. lazyLoad = spec.lazyLoad,
  252. infinite = spec.infinite;
  253. unevenOffset = slideCount % slidesToScroll !== 0;
  254. indexOffset = unevenOffset ? 0 : (slideCount - currentSlide) % slidesToScroll;
  255. if (options.message === "previous") {
  256. slideOffset = indexOffset === 0 ? slidesToScroll : slidesToShow - indexOffset;
  257. targetSlide = currentSlide - slideOffset;
  258. if (lazyLoad && !infinite) {
  259. previousInt = currentSlide - slideOffset;
  260. targetSlide = previousInt === -1 ? slideCount - 1 : previousInt;
  261. }
  262. } else if (options.message === "next") {
  263. slideOffset = indexOffset === 0 ? slidesToScroll : indexOffset;
  264. targetSlide = currentSlide + slideOffset;
  265. if (lazyLoad && !infinite) {
  266. targetSlide = (currentSlide + slidesToScroll) % slideCount + indexOffset;
  267. }
  268. } else if (options.message === "dots") {
  269. // Click on dots
  270. targetSlide = options.index * options.slidesToScroll;
  271. if (targetSlide === options.currentSlide) {
  272. return null;
  273. }
  274. } else if (options.message === "children") {
  275. // Click on the slides
  276. targetSlide = options.index;
  277. if (targetSlide === options.currentSlide) {
  278. return null;
  279. }
  280. if (infinite) {
  281. var direction = siblingDirection(_objectSpread({}, spec, {
  282. targetSlide: targetSlide
  283. }));
  284. if (targetSlide > options.currentSlide && direction === "left") {
  285. targetSlide = targetSlide - slideCount;
  286. } else if (targetSlide < options.currentSlide && direction === "right") {
  287. targetSlide = targetSlide + slideCount;
  288. }
  289. }
  290. } else if (options.message === "index") {
  291. targetSlide = Number(options.index);
  292. if (targetSlide === options.currentSlide) {
  293. return null;
  294. }
  295. }
  296. return targetSlide;
  297. };
  298. exports.changeSlide = changeSlide;
  299. var keyHandler = function keyHandler(e, accessibility, rtl) {
  300. if (e.target.tagName.match("TEXTAREA|INPUT|SELECT") || !accessibility) return "";
  301. if (e.keyCode === 37) return rtl ? "next" : "previous";
  302. if (e.keyCode === 39) return rtl ? "previous" : "next";
  303. return "";
  304. };
  305. exports.keyHandler = keyHandler;
  306. var swipeStart = function swipeStart(e, swipe, draggable) {
  307. e.target.tagName === "IMG" && e.preventDefault();
  308. if (!swipe || !draggable && e.type.indexOf("mouse") !== -1) return "";
  309. return {
  310. dragging: true,
  311. touchObject: {
  312. startX: e.touches ? e.touches[0].pageX : e.clientX,
  313. startY: e.touches ? e.touches[0].pageY : e.clientY,
  314. curX: e.touches ? e.touches[0].pageX : e.clientX,
  315. curY: e.touches ? e.touches[0].pageY : e.clientY
  316. }
  317. };
  318. };
  319. exports.swipeStart = swipeStart;
  320. var swipeMove = function swipeMove(e, spec) {
  321. // spec also contains, trackRef and slideIndex
  322. var scrolling = spec.scrolling,
  323. animating = spec.animating,
  324. vertical = spec.vertical,
  325. swipeToSlide = spec.swipeToSlide,
  326. verticalSwiping = spec.verticalSwiping,
  327. rtl = spec.rtl,
  328. currentSlide = spec.currentSlide,
  329. edgeFriction = spec.edgeFriction,
  330. edgeDragged = spec.edgeDragged,
  331. onEdge = spec.onEdge,
  332. swiped = spec.swiped,
  333. swiping = spec.swiping,
  334. slideCount = spec.slideCount,
  335. slidesToScroll = spec.slidesToScroll,
  336. infinite = spec.infinite,
  337. touchObject = spec.touchObject,
  338. swipeEvent = spec.swipeEvent,
  339. listHeight = spec.listHeight,
  340. listWidth = spec.listWidth;
  341. if (scrolling) return;
  342. if (animating) return e.preventDefault();
  343. if (vertical && swipeToSlide && verticalSwiping) e.preventDefault();
  344. var swipeLeft,
  345. state = {};
  346. var curLeft = getTrackLeft(spec);
  347. touchObject.curX = e.touches ? e.touches[0].pageX : e.clientX;
  348. touchObject.curY = e.touches ? e.touches[0].pageY : e.clientY;
  349. touchObject.swipeLength = Math.round(Math.sqrt(Math.pow(touchObject.curX - touchObject.startX, 2)));
  350. var verticalSwipeLength = Math.round(Math.sqrt(Math.pow(touchObject.curY - touchObject.startY, 2)));
  351. if (!verticalSwiping && !swiping && verticalSwipeLength > 10) {
  352. return {
  353. scrolling: true
  354. };
  355. }
  356. if (verticalSwiping) touchObject.swipeLength = verticalSwipeLength;
  357. var positionOffset = (!rtl ? 1 : -1) * (touchObject.curX > touchObject.startX ? 1 : -1);
  358. if (verticalSwiping) positionOffset = touchObject.curY > touchObject.startY ? 1 : -1;
  359. var dotCount = Math.ceil(slideCount / slidesToScroll);
  360. var swipeDirection = getSwipeDirection(spec.touchObject, verticalSwiping);
  361. var touchSwipeLength = touchObject.swipeLength;
  362. if (!infinite) {
  363. if (currentSlide === 0 && swipeDirection === "right" || currentSlide + 1 >= dotCount && swipeDirection === "left" || !canGoNext(spec) && swipeDirection === "left") {
  364. touchSwipeLength = touchObject.swipeLength * edgeFriction;
  365. if (edgeDragged === false && onEdge) {
  366. onEdge(swipeDirection);
  367. state["edgeDragged"] = true;
  368. }
  369. }
  370. }
  371. if (!swiped && swipeEvent) {
  372. swipeEvent(swipeDirection);
  373. state["swiped"] = true;
  374. }
  375. if (!vertical) {
  376. if (!rtl) {
  377. swipeLeft = curLeft + touchSwipeLength * positionOffset;
  378. } else {
  379. swipeLeft = curLeft - touchSwipeLength * positionOffset;
  380. }
  381. } else {
  382. swipeLeft = curLeft + touchSwipeLength * (listHeight / listWidth) * positionOffset;
  383. }
  384. if (verticalSwiping) {
  385. swipeLeft = curLeft + touchSwipeLength * positionOffset;
  386. }
  387. state = _objectSpread({}, state, {
  388. touchObject: touchObject,
  389. swipeLeft: swipeLeft,
  390. trackStyle: getTrackCSS(_objectSpread({}, spec, {
  391. left: swipeLeft
  392. }))
  393. });
  394. if (Math.abs(touchObject.curX - touchObject.startX) < Math.abs(touchObject.curY - touchObject.startY) * 0.8) {
  395. return state;
  396. }
  397. if (touchObject.swipeLength > 10) {
  398. state["swiping"] = true;
  399. e.preventDefault();
  400. }
  401. return state;
  402. };
  403. exports.swipeMove = swipeMove;
  404. var swipeEnd = function swipeEnd(e, spec) {
  405. var dragging = spec.dragging,
  406. swipe = spec.swipe,
  407. touchObject = spec.touchObject,
  408. listWidth = spec.listWidth,
  409. touchThreshold = spec.touchThreshold,
  410. verticalSwiping = spec.verticalSwiping,
  411. listHeight = spec.listHeight,
  412. currentSlide = spec.currentSlide,
  413. swipeToSlide = spec.swipeToSlide,
  414. scrolling = spec.scrolling,
  415. onSwipe = spec.onSwipe;
  416. if (!dragging) {
  417. if (swipe) e.preventDefault();
  418. return {};
  419. }
  420. var minSwipe = verticalSwiping ? listHeight / touchThreshold : listWidth / touchThreshold;
  421. var swipeDirection = getSwipeDirection(touchObject, verticalSwiping); // reset the state of touch related state variables.
  422. var state = {
  423. dragging: false,
  424. edgeDragged: false,
  425. scrolling: false,
  426. swiping: false,
  427. swiped: false,
  428. swipeLeft: null,
  429. touchObject: {}
  430. };
  431. if (scrolling) {
  432. return state;
  433. }
  434. if (!touchObject.swipeLength) {
  435. return state;
  436. }
  437. if (touchObject.swipeLength > minSwipe) {
  438. e.preventDefault();
  439. if (onSwipe) {
  440. onSwipe(swipeDirection);
  441. }
  442. var slideCount, newSlide;
  443. switch (swipeDirection) {
  444. case "left":
  445. case "up":
  446. newSlide = currentSlide + getSlideCount(spec);
  447. slideCount = swipeToSlide ? checkNavigable(spec, newSlide) : newSlide;
  448. state["currentDirection"] = 0;
  449. break;
  450. case "right":
  451. case "down":
  452. newSlide = currentSlide - getSlideCount(spec);
  453. slideCount = swipeToSlide ? checkNavigable(spec, newSlide) : newSlide;
  454. state["currentDirection"] = 1;
  455. break;
  456. default:
  457. slideCount = currentSlide;
  458. }
  459. state["triggerSlideHandler"] = slideCount;
  460. } else {
  461. // Adjust the track back to it's original position.
  462. var currentLeft = getTrackLeft(spec);
  463. state["trackStyle"] = getTrackAnimateCSS(_objectSpread({}, spec, {
  464. left: currentLeft
  465. }));
  466. }
  467. return state;
  468. };
  469. exports.swipeEnd = swipeEnd;
  470. var getNavigableIndexes = function getNavigableIndexes(spec) {
  471. var max = spec.infinite ? spec.slideCount * 2 : spec.slideCount;
  472. var breakpoint = spec.infinite ? spec.slidesToShow * -1 : 0;
  473. var counter = spec.infinite ? spec.slidesToShow * -1 : 0;
  474. var indexes = [];
  475. while (breakpoint < max) {
  476. indexes.push(breakpoint);
  477. breakpoint = counter + spec.slidesToScroll;
  478. counter += Math.min(spec.slidesToScroll, spec.slidesToShow);
  479. }
  480. return indexes;
  481. };
  482. exports.getNavigableIndexes = getNavigableIndexes;
  483. var checkNavigable = function checkNavigable(spec, index) {
  484. var navigables = getNavigableIndexes(spec);
  485. var prevNavigable = 0;
  486. if (index > navigables[navigables.length - 1]) {
  487. index = navigables[navigables.length - 1];
  488. } else {
  489. for (var n in navigables) {
  490. if (index < navigables[n]) {
  491. index = prevNavigable;
  492. break;
  493. }
  494. prevNavigable = navigables[n];
  495. }
  496. }
  497. return index;
  498. };
  499. exports.checkNavigable = checkNavigable;
  500. var getSlideCount = function getSlideCount(spec) {
  501. var centerOffset = spec.centerMode ? spec.slideWidth * Math.floor(spec.slidesToShow / 2) : 0;
  502. if (spec.swipeToSlide) {
  503. var swipedSlide;
  504. var slickList = _reactDom.default.findDOMNode(spec.listRef);
  505. var slides = slickList.querySelectorAll(".slick-slide");
  506. Array.from(slides).every(function (slide) {
  507. if (!spec.vertical) {
  508. if (slide.offsetLeft - centerOffset + getWidth(slide) / 2 > spec.swipeLeft * -1) {
  509. swipedSlide = slide;
  510. return false;
  511. }
  512. } else {
  513. if (slide.offsetTop + getHeight(slide) / 2 > spec.swipeLeft * -1) {
  514. swipedSlide = slide;
  515. return false;
  516. }
  517. }
  518. return true;
  519. });
  520. if (!swipedSlide) {
  521. return 0;
  522. }
  523. var currentIndex = spec.rtl === true ? spec.slideCount - spec.currentSlide : spec.currentSlide;
  524. var slidesTraversed = Math.abs(swipedSlide.dataset.index - currentIndex) || 1;
  525. return slidesTraversed;
  526. } else {
  527. return spec.slidesToScroll;
  528. }
  529. };
  530. exports.getSlideCount = getSlideCount;
  531. var checkSpecKeys = function checkSpecKeys(spec, keysArray) {
  532. return keysArray.reduce(function (value, key) {
  533. return value && spec.hasOwnProperty(key);
  534. }, true) ? null : console.error("Keys Missing:", spec);
  535. };
  536. exports.checkSpecKeys = checkSpecKeys;
  537. var getTrackCSS = function getTrackCSS(spec) {
  538. checkSpecKeys(spec, ["left", "variableWidth", "slideCount", "slidesToShow", "slideWidth"]);
  539. var trackWidth, trackHeight;
  540. var trackChildren = spec.slideCount + 2 * spec.slidesToShow;
  541. if (!spec.vertical) {
  542. trackWidth = getTotalSlides(spec) * spec.slideWidth;
  543. } else {
  544. trackHeight = trackChildren * spec.slideHeight;
  545. }
  546. var style = {
  547. opacity: 1,
  548. transition: "",
  549. WebkitTransition: ""
  550. };
  551. if (spec.useTransform) {
  552. var WebkitTransform = !spec.vertical ? "translate3d(" + spec.left + "px, 0px, 0px)" : "translate3d(0px, " + spec.left + "px, 0px)";
  553. var transform = !spec.vertical ? "translate3d(" + spec.left + "px, 0px, 0px)" : "translate3d(0px, " + spec.left + "px, 0px)";
  554. var msTransform = !spec.vertical ? "translateX(" + spec.left + "px)" : "translateY(" + spec.left + "px)";
  555. style = _objectSpread({}, style, {
  556. WebkitTransform: WebkitTransform,
  557. transform: transform,
  558. msTransform: msTransform
  559. });
  560. } else {
  561. if (spec.vertical) {
  562. style["top"] = spec.left;
  563. } else {
  564. style["left"] = spec.left;
  565. }
  566. }
  567. if (spec.fade) style = {
  568. opacity: 1
  569. };
  570. if (trackWidth) style.width = trackWidth;
  571. if (trackHeight) style.height = trackHeight; // Fallback for IE8
  572. if (window && !window.addEventListener && window.attachEvent) {
  573. if (!spec.vertical) {
  574. style.marginLeft = spec.left + "px";
  575. } else {
  576. style.marginTop = spec.left + "px";
  577. }
  578. }
  579. return style;
  580. };
  581. exports.getTrackCSS = getTrackCSS;
  582. var getTrackAnimateCSS = function getTrackAnimateCSS(spec) {
  583. checkSpecKeys(spec, ["left", "variableWidth", "slideCount", "slidesToShow", "slideWidth", "speed", "cssEase"]);
  584. var style = getTrackCSS(spec); // useCSS is true by default so it can be undefined
  585. if (spec.useTransform) {
  586. style.WebkitTransition = "-webkit-transform " + spec.speed + "ms " + spec.cssEase;
  587. style.transition = "transform " + spec.speed + "ms " + spec.cssEase;
  588. } else {
  589. if (spec.vertical) {
  590. style.transition = "top " + spec.speed + "ms " + spec.cssEase;
  591. } else {
  592. style.transition = "left " + spec.speed + "ms " + spec.cssEase;
  593. }
  594. }
  595. return style;
  596. };
  597. exports.getTrackAnimateCSS = getTrackAnimateCSS;
  598. var getTrackLeft = function getTrackLeft(spec) {
  599. if (spec.unslick) {
  600. return 0;
  601. }
  602. checkSpecKeys(spec, ["slideIndex", "trackRef", "infinite", "centerMode", "slideCount", "slidesToShow", "slidesToScroll", "slideWidth", "listWidth", "variableWidth", "slideHeight"]);
  603. var slideIndex = spec.slideIndex,
  604. trackRef = spec.trackRef,
  605. infinite = spec.infinite,
  606. centerMode = spec.centerMode,
  607. slideCount = spec.slideCount,
  608. slidesToShow = spec.slidesToShow,
  609. slidesToScroll = spec.slidesToScroll,
  610. slideWidth = spec.slideWidth,
  611. listWidth = spec.listWidth,
  612. variableWidth = spec.variableWidth,
  613. slideHeight = spec.slideHeight,
  614. fade = spec.fade,
  615. vertical = spec.vertical;
  616. var slideOffset = 0;
  617. var targetLeft;
  618. var targetSlide;
  619. var verticalOffset = 0;
  620. if (fade || spec.slideCount === 1) {
  621. return 0;
  622. }
  623. var slidesToOffset = 0;
  624. if (infinite) {
  625. slidesToOffset = -getPreClones(spec); // bring active slide to the beginning of visual area
  626. // if next scroll doesn't have enough children, just reach till the end of original slides instead of shifting slidesToScroll children
  627. if (slideCount % slidesToScroll !== 0 && slideIndex + slidesToScroll > slideCount) {
  628. slidesToOffset = -(slideIndex > slideCount ? slidesToShow - (slideIndex - slideCount) : slideCount % slidesToScroll);
  629. } // shift current slide to center of the frame
  630. if (centerMode) {
  631. slidesToOffset += parseInt(slidesToShow / 2);
  632. }
  633. } else {
  634. if (slideCount % slidesToScroll !== 0 && slideIndex + slidesToScroll > slideCount) {
  635. slidesToOffset = slidesToShow - slideCount % slidesToScroll;
  636. }
  637. if (centerMode) {
  638. slidesToOffset = parseInt(slidesToShow / 2);
  639. }
  640. }
  641. slideOffset = slidesToOffset * slideWidth;
  642. verticalOffset = slidesToOffset * slideHeight;
  643. if (!vertical) {
  644. targetLeft = slideIndex * slideWidth * -1 + slideOffset;
  645. } else {
  646. targetLeft = slideIndex * slideHeight * -1 + verticalOffset;
  647. }
  648. if (variableWidth === true) {
  649. var targetSlideIndex;
  650. var trackElem = _reactDom.default.findDOMNode(trackRef);
  651. targetSlideIndex = slideIndex + getPreClones(spec);
  652. targetSlide = trackElem && trackElem.childNodes[targetSlideIndex];
  653. targetLeft = targetSlide ? targetSlide.offsetLeft * -1 : 0;
  654. if (centerMode === true) {
  655. targetSlideIndex = infinite ? slideIndex + getPreClones(spec) : slideIndex;
  656. targetSlide = trackElem && trackElem.children[targetSlideIndex];
  657. targetLeft = 0;
  658. for (var slide = 0; slide < targetSlideIndex; slide++) {
  659. targetLeft -= trackElem && trackElem.children[slide] && trackElem.children[slide].offsetWidth;
  660. }
  661. targetLeft -= parseInt(spec.centerPadding);
  662. targetLeft += targetSlide && (listWidth - targetSlide.offsetWidth) / 2;
  663. }
  664. }
  665. return targetLeft;
  666. };
  667. exports.getTrackLeft = getTrackLeft;
  668. var getPreClones = function getPreClones(spec) {
  669. if (spec.unslick || !spec.infinite) {
  670. return 0;
  671. }
  672. if (spec.variableWidth) {
  673. return spec.slideCount;
  674. }
  675. return spec.slidesToShow + (spec.centerMode ? 1 : 0);
  676. };
  677. exports.getPreClones = getPreClones;
  678. var getPostClones = function getPostClones(spec) {
  679. if (spec.unslick || !spec.infinite) {
  680. return 0;
  681. }
  682. return spec.slideCount;
  683. };
  684. exports.getPostClones = getPostClones;
  685. var getTotalSlides = function getTotalSlides(spec) {
  686. return spec.slideCount === 1 ? 1 : getPreClones(spec) + spec.slideCount + getPostClones(spec);
  687. };
  688. exports.getTotalSlides = getTotalSlides;
  689. var siblingDirection = function siblingDirection(spec) {
  690. if (spec.targetSlide > spec.currentSlide) {
  691. if (spec.targetSlide > spec.currentSlide + slidesOnRight(spec)) {
  692. return "left";
  693. }
  694. return "right";
  695. } else {
  696. if (spec.targetSlide < spec.currentSlide - slidesOnLeft(spec)) {
  697. return "right";
  698. }
  699. return "left";
  700. }
  701. };
  702. exports.siblingDirection = siblingDirection;
  703. var slidesOnRight = function slidesOnRight(_ref) {
  704. var slidesToShow = _ref.slidesToShow,
  705. centerMode = _ref.centerMode,
  706. rtl = _ref.rtl,
  707. centerPadding = _ref.centerPadding;
  708. // returns no of slides on the right of active slide
  709. if (centerMode) {
  710. var right = (slidesToShow - 1) / 2 + 1;
  711. if (parseInt(centerPadding) > 0) right += 1;
  712. if (rtl && slidesToShow % 2 === 0) right += 1;
  713. return right;
  714. }
  715. if (rtl) {
  716. return 0;
  717. }
  718. return slidesToShow - 1;
  719. };
  720. exports.slidesOnRight = slidesOnRight;
  721. var slidesOnLeft = function slidesOnLeft(_ref2) {
  722. var slidesToShow = _ref2.slidesToShow,
  723. centerMode = _ref2.centerMode,
  724. rtl = _ref2.rtl,
  725. centerPadding = _ref2.centerPadding;
  726. // returns no of slides on the left of active slide
  727. if (centerMode) {
  728. var left = (slidesToShow - 1) / 2 + 1;
  729. if (parseInt(centerPadding) > 0) left += 1;
  730. if (!rtl && slidesToShow % 2 === 0) left += 1;
  731. return left;
  732. }
  733. if (rtl) {
  734. return slidesToShow - 1;
  735. }
  736. return 0;
  737. };
  738. exports.slidesOnLeft = slidesOnLeft;
  739. var canUseDOM = function canUseDOM() {
  740. return !!(typeof window !== "undefined" && window.document && window.document.createElement);
  741. };
  742. exports.canUseDOM = canUseDOM;