UNPKG

ant-design-vue

Version:

An enterprise-class UI design language and Vue-based implementation

88 lines (77 loc) 2.71 kB
import { createVNode as _createVNode } from "vue"; function _extends() { _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; }; return _extends.apply(this, arguments); } import classnames from '../../_util/classNames'; import { cloneElement } from '../../_util/vnode'; var getDotCount = function getDotCount(spec) { var dots; if (spec.infinite) { dots = Math.ceil(spec.slideCount / spec.slidesToScroll); } else { dots = Math.ceil((spec.slideCount - spec.slidesToShow) / spec.slidesToScroll) + 1; } return dots; }; var Dots = function Dots(_, _ref) { var attrs = _ref.attrs; var slideCount = attrs.slideCount, slidesToScroll = attrs.slidesToScroll, slidesToShow = attrs.slidesToShow, infinite = attrs.infinite, currentSlide = attrs.currentSlide, appendDots = attrs.appendDots, customPaging = attrs.customPaging, clickHandler = attrs.clickHandler, dotsClass = attrs.dotsClass, onMouseenter = attrs.onMouseenter, onMouseover = attrs.onMouseover, onMouseleave = attrs.onMouseleave; var dotCount = getDotCount({ slideCount: slideCount, slidesToScroll: slidesToScroll, slidesToShow: slidesToShow, infinite: infinite }); // Apply join & split to Array to pre-fill it for IE8 // // Credit: http://stackoverflow.com/a/13735425/1849458 var mouseEvents = { onMouseenter: onMouseenter, onMouseover: onMouseover, onMouseleave: onMouseleave }; var dots = Array.apply(null, Array(dotCount + 1).join('0').split('')).map(function (x, i) { var leftBound = i * slidesToScroll; var rightBound = i * slidesToScroll + (slidesToScroll - 1); var className = classnames({ 'slick-active': currentSlide >= leftBound && currentSlide <= rightBound }); var dotOptions = { message: 'dots', index: i, slidesToScroll: slidesToScroll, currentSlide: currentSlide }; function onClick(e) { // In Autoplay the focus stays on clicked button even after transition // to next slide. That only goes away by click somewhere outside if (e) { e.preventDefault(); } clickHandler(dotOptions); } return _createVNode("li", { "key": i, "class": className }, [cloneElement(customPaging({ i: i }), { onClick: onClick })]); }); return cloneElement(appendDots({ dots: dots }), _extends({ class: dotsClass }, mouseEvents)); }; Dots.inheritAttrs = false; export default Dots;