track.js 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = void 0;
  7. var _vue = require("vue");
  8. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  9. var _classNames = _interopRequireDefault(require("../_util/classNames"));
  10. var _vnode = require("../_util/vnode");
  11. var _propsUtil = require("../_util/props-util");
  12. var _innerSliderUtils = require("./utils/innerSliderUtils");
  13. // given specifications/props for a slide, fetch all the classes that need to be applied to the slide
  14. var getSlideClasses = function getSlideClasses(spec) {
  15. var slickActive, slickCenter;
  16. var centerOffset, index;
  17. if (spec.rtl) {
  18. index = spec.slideCount - 1 - spec.index;
  19. } else {
  20. index = spec.index;
  21. }
  22. var slickCloned = index < 0 || index >= spec.slideCount;
  23. if (spec.centerMode) {
  24. centerOffset = Math.floor(spec.slidesToShow / 2);
  25. slickCenter = (index - spec.currentSlide) % spec.slideCount === 0;
  26. if (index > spec.currentSlide - centerOffset - 1 && index <= spec.currentSlide + centerOffset) {
  27. slickActive = true;
  28. }
  29. } else {
  30. slickActive = spec.currentSlide <= index && index < spec.currentSlide + spec.slidesToShow;
  31. }
  32. var focusedSlide;
  33. if (spec.targetSlide < 0) {
  34. focusedSlide = spec.targetSlide + spec.slideCount;
  35. } else if (spec.targetSlide >= spec.slideCount) {
  36. focusedSlide = spec.targetSlide - spec.slideCount;
  37. } else {
  38. focusedSlide = spec.targetSlide;
  39. }
  40. var slickCurrent = index === focusedSlide;
  41. return {
  42. 'slick-slide': true,
  43. 'slick-active': slickActive,
  44. 'slick-center': slickCenter,
  45. 'slick-cloned': slickCloned,
  46. 'slick-current': slickCurrent // dubious in case of RTL
  47. };
  48. };
  49. var getSlideStyle = function getSlideStyle(spec) {
  50. var style = {};
  51. if (spec.variableWidth === undefined || spec.variableWidth === false) {
  52. style.width = spec.slideWidth + (typeof spec.slideWidth === 'number' ? 'px' : '');
  53. }
  54. if (spec.fade) {
  55. style.position = 'relative';
  56. if (spec.vertical) {
  57. style.top = -spec.index * parseInt(spec.slideHeight) + 'px';
  58. } else {
  59. style.left = -spec.index * parseInt(spec.slideWidth) + 'px';
  60. }
  61. style.opacity = spec.currentSlide === spec.index ? 1 : 0;
  62. if (spec.useCSS) {
  63. style.transition = 'opacity ' + spec.speed + 'ms ' + spec.cssEase + ', ' + 'visibility ' + spec.speed + 'ms ' + spec.cssEase;
  64. }
  65. }
  66. return style;
  67. };
  68. var getKey = function getKey(child, fallbackKey) {
  69. return child.key + '-' + fallbackKey;
  70. };
  71. var renderSlides = function renderSlides(spec, children) {
  72. var key;
  73. var slides = [];
  74. var preCloneSlides = [];
  75. var postCloneSlides = [];
  76. var childrenCount = children.length;
  77. var startIndex = (0, _innerSliderUtils.lazyStartIndex)(spec);
  78. var endIndex = (0, _innerSliderUtils.lazyEndIndex)(spec);
  79. children.forEach(function (elem, index) {
  80. var child;
  81. var childOnClickOptions = {
  82. message: 'children',
  83. index: index,
  84. slidesToScroll: spec.slidesToScroll,
  85. currentSlide: spec.currentSlide
  86. };
  87. // in case of lazyLoad, whether or not we want to fetch the slide
  88. if (!spec.lazyLoad || spec.lazyLoad && spec.lazyLoadedList.indexOf(index) >= 0) {
  89. child = elem;
  90. } else {
  91. child = (0, _vue.createVNode)('div');
  92. }
  93. var childStyle = getSlideStyle((0, _objectSpread2.default)((0, _objectSpread2.default)({}, spec), {}, {
  94. index: index
  95. }));
  96. var slideClass = child.props.class || '';
  97. var slideClasses = getSlideClasses((0, _objectSpread2.default)((0, _objectSpread2.default)({}, spec), {}, {
  98. index: index
  99. }));
  100. // push a cloned element of the desired slide
  101. slides.push((0, _vnode.cloneElement)(child, {
  102. key: 'original' + getKey(child, index),
  103. tabindex: '-1',
  104. 'data-index': index,
  105. 'aria-hidden': !slideClasses['slick-active'],
  106. class: (0, _classNames.default)(slideClasses, slideClass),
  107. style: (0, _objectSpread2.default)((0, _objectSpread2.default)({
  108. outline: 'none'
  109. }, child.props.style || {}), childStyle),
  110. onClick: function onClick() {
  111. // child.props && child.props.onClick && child.props.onClick(e)
  112. if (spec.focusOnSelect) {
  113. spec.focusOnSelect(childOnClickOptions);
  114. }
  115. }
  116. }));
  117. // if slide needs to be precloned or postcloned
  118. if (spec.infinite && spec.fade === false) {
  119. var preCloneNo = childrenCount - index;
  120. if (preCloneNo <= (0, _innerSliderUtils.getPreClones)(spec) && childrenCount !== spec.slidesToShow) {
  121. key = -preCloneNo;
  122. if (key >= startIndex) {
  123. child = elem;
  124. }
  125. slideClasses = getSlideClasses((0, _objectSpread2.default)((0, _objectSpread2.default)({}, spec), {}, {
  126. index: key
  127. }));
  128. preCloneSlides.push((0, _vnode.cloneElement)(child, {
  129. key: 'precloned' + getKey(child, key),
  130. class: (0, _classNames.default)(slideClasses, slideClass),
  131. tabindex: '-1',
  132. 'data-index': key,
  133. 'aria-hidden': !slideClasses['slick-active'],
  134. style: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, child.props.style || {}), childStyle),
  135. onClick: function onClick() {
  136. // child.props && child.props.onClick && child.props.onClick(e)
  137. if (spec.focusOnSelect) {
  138. spec.focusOnSelect(childOnClickOptions);
  139. }
  140. }
  141. }));
  142. }
  143. if (childrenCount !== spec.slidesToShow) {
  144. key = childrenCount + index;
  145. if (key < endIndex) {
  146. child = elem;
  147. }
  148. slideClasses = getSlideClasses((0, _objectSpread2.default)((0, _objectSpread2.default)({}, spec), {}, {
  149. index: key
  150. }));
  151. postCloneSlides.push((0, _vnode.cloneElement)(child, {
  152. key: 'postcloned' + getKey(child, key),
  153. tabindex: '-1',
  154. 'data-index': key,
  155. 'aria-hidden': !slideClasses['slick-active'],
  156. class: (0, _classNames.default)(slideClasses, slideClass),
  157. style: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, child.props.style || {}), childStyle),
  158. onClick: function onClick() {
  159. // child.props && child.props.onClick && child.props.onClick(e)
  160. if (spec.focusOnSelect) {
  161. spec.focusOnSelect(childOnClickOptions);
  162. }
  163. }
  164. }));
  165. }
  166. }
  167. });
  168. if (spec.rtl) {
  169. return preCloneSlides.concat(slides, postCloneSlides).reverse();
  170. } else {
  171. return preCloneSlides.concat(slides, postCloneSlides);
  172. }
  173. };
  174. var Track = function Track(_, _ref) {
  175. var attrs = _ref.attrs,
  176. slots = _ref.slots;
  177. var slides = renderSlides(attrs, (0, _propsUtil.flattenChildren)(slots === null || slots === void 0 ? void 0 : slots.default()));
  178. var onMouseenter = attrs.onMouseenter,
  179. onMouseover = attrs.onMouseover,
  180. onMouseleave = attrs.onMouseleave;
  181. var mouseEvents = {
  182. onMouseenter: onMouseenter,
  183. onMouseover: onMouseover,
  184. onMouseleave: onMouseleave
  185. };
  186. var trackProps = (0, _objectSpread2.default)({
  187. class: 'slick-track',
  188. style: attrs.trackStyle
  189. }, mouseEvents);
  190. return (0, _vue.createVNode)("div", trackProps, [slides]);
  191. };
  192. Track.inheritAttrs = false;
  193. var _default = Track;
  194. exports.default = _default;