From fb8164233c76ca5de4c3186ffafeaefcb993a3a7 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 7 Oct 2021 23:30:53 +1100 Subject: [PATCH] Merge pull request #184 from inventree/splide-fix Lock specific version of splide (cherry picked from commit 3f81da4f184c56d59af31006a80b837590eadc95) --- docs/assets/images/appgallery/screen_1.jpg | Bin 125266 -> 0 bytes docs/assets/images/appgallery/screen_1.png | Bin 0 -> 94073 bytes docs/javascripts/splide.esm.js | 5909 +++++++++++++++++ docs/javascripts/splide.js | 5859 ++++++++++++++++ docs/javascripts/splide.min.js | 6 + docs/javascripts/splide.min.js.gz | Bin 0 -> 10607 bytes docs/stylesheets/splide-core.min.css | 1 + docs/stylesheets/splide.min.css | 1 + .../stylesheets/themes/splide-default.min.css | 1 + .../themes/splide-sea-green.min.css | 1 + .../stylesheets/themes/splide-skyblue.min.css | 1 + mkdocs.yml | 4 +- 12 files changed, 11781 insertions(+), 2 deletions(-) delete mode 100644 docs/assets/images/appgallery/screen_1.jpg create mode 100644 docs/assets/images/appgallery/screen_1.png create mode 100644 docs/javascripts/splide.esm.js create mode 100644 docs/javascripts/splide.js create mode 100644 docs/javascripts/splide.min.js create mode 100644 docs/javascripts/splide.min.js.gz create mode 100644 docs/stylesheets/splide-core.min.css create mode 100644 docs/stylesheets/splide.min.css create mode 100644 docs/stylesheets/themes/splide-default.min.css create mode 100644 docs/stylesheets/themes/splide-sea-green.min.css create mode 100644 docs/stylesheets/themes/splide-skyblue.min.css diff --git a/docs/assets/images/appgallery/screen_1.jpg b/docs/assets/images/appgallery/screen_1.jpg deleted file mode 100644 index fabac24b9d083129c54abb14f00b24d8fb8a6f00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125266 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� 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 z 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"sq)l*vUElZQdA76CAu5g#l0W*eW8#^BVQ3Izjy z@AloXA#730UL}h+?e>alHLCF=)QR&a!$bCI&hb3G=!fIRp6jBf*ATg}sh7?pyoE+TeZH5ni?@;&X4g8t;j-`^)ql?;-Z16N-Fyj{@X8`Oi}cwKJC1A* zxU`{1nnE00AS7rOh|u|phrENzG=RDF zIo#N>cAfBhWxxkGW-LQG-A$$;y%#*(nDgJtn!Se)UE%SAjA2C}5wmGS#_FRZ^1;25 znC9>w{WzK)i$j8h>qk`MM<-jv`;6uo!SM<`29IxnD>;Pd4b&+;RNQBL%3MeN(3wRf zY0mX#a{7(oZ^8(YQ@$UEwt8R_bvVk4T5bpfduzH2YH&HqTSzrvJU;Y;o8|GzOHT91 zX1z47RY9lUoTpT4D}K()0>CKw+AJZ5x54Q38&7;b+NyJF4~YDM+^ZveNW)Q~8A%PH zh&PRCOYmPTtDd(br(41&w~b!i_HE$;Bv@ZrjSR>cSwXXiWX#*S`jgRAXl@*0+>W}z zEN*JDd3SJ~pgL7=0kvL<5nyJ&ex3L@d#N-!GYo9lV*5T{lbNG5bS`HV4qRojmGgOVuG02=WeK4CFUp8N%AdY z3Il|cs&sXIkM8Q<2IMXT3a!$~omviCfU3Fvy!7b_yLMYt$em#BLCryrjMS=u497Uy zC1xUWY@*tsZwu}!30nCEc4oP%qXO1CY7Qd+pQDT&!2)7-2QVWB(@=-+oj6^g4p_c@ z0AXJtwgEqjS0X?V4Q|_TCY(E6^~{pe%tHug0|NS4Ks_ z+kzHJ4|7XrH6POog1;rW5u!k9wiTuH1p9C%aO0^BC8rkWvJT%NNbY+D%uSTfNuZW{G}Bnfgny)~riB zyBSi9T%4|E>*O9o)BODf_^+e)ll)GcAv=qSCufr$@~A{9^M%Wu$phf!jJAmL>#=cn zVmAE+7RbZ&mm_ybD6N&zP;}AGsuF1v@9n37nUG=r!32$d#Y{dP5l%`PrTKD?#-W0p zYN5>tLT;h`IKQoI@{*Rq11;kzOGw%x80~z=XI1!jI1D!<4(=ivWOUw)!2f1yh+TgL zmd(R|-E$Kmh2vcuZRBm|yHfYw1Y2-0qt`v09w`fl%dMI@i0#7qcC}kN#OsS=fToQ$ zTlM-tBjtkky9Mw?n4MP1ka7h!+D{fwVtoOi$vdPp4UW+^4ZBA8^Iux-CVLi}ZoQQ# zQQFzvX*V3J8!LSByBa17p>lnmZ@JOxkn%PO+Y#f`$17uqkXS}LxlS4#zM zn!6K=((QgVVmEFa3^aEauOslgIq$-m2u}t?Ξ?hQrO9b?5y@uhLo^{UjrzEFFN% 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 Ap^s6Lf#llX26{ctm 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 NbMoSeXD;3O-vCnXgl7N% literal 0 HcmV?d00001 diff --git a/docs/javascripts/splide.esm.js b/docs/javascripts/splide.esm.js new file mode 100644 index 0000000..c404125 --- /dev/null +++ b/docs/javascripts/splide.esm.js @@ -0,0 +1,5909 @@ +/*! + * Splide.js + * Version : 2.4.20 + * License : MIT + * Copyright: 2020 Naotoshi Fujita + */ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["Splide"] = factory(); + else + root["Splide"] = factory(); +})(self, function() { +return /******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ 311: +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +// ESM COMPAT FLAG +__webpack_require__.r(__webpack_exports__); + +// EXPORTS +__webpack_require__.d(__webpack_exports__, { + "default": () => /* binding */ module_Splide +}); + +// NAMESPACE OBJECT: ./src/js/constants/states.js +var states_namespaceObject = {}; +__webpack_require__.r(states_namespaceObject); +__webpack_require__.d(states_namespaceObject, { + "CREATED": () => CREATED, + "DESTROYED": () => DESTROYED, + "IDLE": () => IDLE, + "MOUNTED": () => MOUNTED, + "MOVING": () => MOVING +}); + +;// CONCATENATED MODULE: ./src/js/core/event.js +/** + * The function for providing an Event object simply managing events. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * The function for providing an Event object simply managing events. + */ +/* harmony default export */ const core_event = (function () { + /** + * Store all event data. + * + * @type {Array} + */ + var data = []; + var Event = { + /** + * Subscribe the given event(s). + * + * @param {string} events - An event name. Use space to separate multiple events. + * Also, namespace is accepted by dot, such as 'resize.{namespace}'. + * @param {function} handler - A callback function. + * @param {Element} elm - Optional. Native event will be listened to when this arg is provided. + * @param {Object} options - Optional. Options for addEventListener. + */ + on: function on(events, handler, elm, options) { + if (elm === void 0) { + elm = null; + } + + if (options === void 0) { + options = {}; + } + + events.split(' ').forEach(function (event) { + if (elm) { + elm.addEventListener(event, handler, options); + } + + data.push({ + event: event, + handler: handler, + elm: elm, + options: options + }); + }); + }, + + /** + * Unsubscribe the given event(s). + * + * @param {string} events - A event name or names split by space. + * @param {Element} elm - Optional. removeEventListener() will be called when this arg is provided. + */ + off: function off(events, elm) { + if (elm === void 0) { + elm = null; + } + + events.split(' ').forEach(function (event) { + data = data.filter(function (item) { + if (item && item.event === event && item.elm === elm) { + unsubscribe(item); + return false; + } + + return true; + }); + }); + }, + + /** + * Emit an event. + * This method is only for custom events. + * + * @param {string} event - An event name. + * @param {*} args - Any number of arguments passed to handlers. + */ + emit: function emit(event) { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + data.forEach(function (item) { + if (!item.elm && item.event.split('.')[0] === event) { + item.handler.apply(item, args); + } + }); + }, + + /** + * Clear event data. + */ + destroy: function destroy() { + data.forEach(unsubscribe); + data = []; + } + }; + /** + * Remove the registered event listener. + * + * @param {Object} item - An object containing event data. + */ + + function unsubscribe(item) { + if (item.elm) { + item.elm.removeEventListener(item.event, item.handler, item.options); + } + } + + return Event; +}); +;// CONCATENATED MODULE: ./src/js/core/state.js +/** + * The function providing a super simple state system. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * The function providing a super simple state system. + * + * @param {string|number} initialState - Provide the initial state value. + */ +/* harmony default export */ const state = (function (initialState) { + /** + * Store the current state. + * + * @type {string|number} + */ + var curr = initialState; + return { + /** + * Change state. + * + * @param {string|number} state - A new state. + */ + set: function set(state) { + curr = state; + }, + + /** + * Verify if the current state is given one or not. + * + * @param {string|number} state - A state name to be verified. + * + * @return {boolean} - True if the current state is the given one. + */ + is: function is(state) { + return state === curr; + } + }; +}); +;// CONCATENATED MODULE: ./src/js/utils/object.js +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); } + +/** + * Some utility functions related with Object, supporting IE. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ +var keys = Object.keys; +/** + * Iterate an object like Array.forEach. + * IE doesn't support forEach of HTMLCollection. + * + * @param {Object} obj - An object. + * @param {function} callback - A function handling each value. Arguments are value, property and index. + */ + +function each(obj, callback) { + keys(obj).some(function (key, index) { + return callback(obj[key], key, index); + }); +} +/** + * Return values of the given object as an array. + * IE doesn't support Object.values. + * + * @param {Object} obj - An object. + * + * @return {Array} - An array containing all values of the given object. + */ + +function values(obj) { + return keys(obj).map(function (key) { + return obj[key]; + }); +} +/** + * Check if the given subject is object or not. + * + * @param {*} subject - A subject to be verified. + * + * @return {boolean} - True if object, false otherwise. + */ + +function isObject(subject) { + return typeof subject === 'object'; +} +/** + * Merge two objects deeply. + * + * @param {Object} to - An object where "from" is merged. + * @param {Object} from - An object merged to "to". + * + * @return {Object} - A merged object. + */ + +function merge(_ref, from) { + var to = _extends({}, _ref); + + each(from, function (value, key) { + if (isObject(value)) { + if (!isObject(to[key])) { + to[key] = {}; + } + + to[key] = merge(to[key], value); + } else { + to[key] = value; + } + }); + return to; +} +/** + * Assign all properties "from" to "to" object. + * + * @param {Object} to - An object where properties are assigned. + * @param {Object} from - An object whose properties are assigned to "to". + * + * @return {Object} - An assigned object. + */ + +function object_assign(to, from) { + keys(from).forEach(function (key) { + if (!to[key]) { + Object.defineProperty(to, key, Object.getOwnPropertyDescriptor(from, key)); + } + }); + return to; +} +;// CONCATENATED MODULE: ./src/js/utils/utils.js +/** + * A package of some miscellaneous utility functions. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * Convert the given value to array. + * + * @param {*} value - Any value. + * + * @return {*[]} - Array containing the given value. + */ + +function toArray(value) { + return Array.isArray(value) ? value : [value]; +} +/** + * Check if the given value is between min and max. + * Min will be returned when the value is less than min or max will do when greater than max. + * + * @param {number} value - A number to be checked. + * @param {number} m1 - Minimum or maximum number. + * @param {number} m2 - Maximum or minimum number. + * + * @return {number} - A value itself, min or max. + */ + +function between(value, m1, m2) { + return Math.min(Math.max(value, m1 > m2 ? m2 : m1), m1 > m2 ? m1 : m2); +} +/** + * The sprintf method with minimum functionality. + * + * @param {string} format - The string format. + * @param {string|Array} replacements - Replacements accepting multiple arguments. + * + * @returns {string} - Converted string. + */ + +function sprintf(format, replacements) { + var i = 0; + return format.replace(/%s/g, function () { + return toArray(replacements)[i++]; + }); +} +/** + * Append px unit to the given subject if necessary. + * + * @param {number|string} value - A value that may not include an unit. + * + * @return {string} - If the value is string, return itself. + * If number, do value + "px". An empty string, otherwise. + */ + +function unit(value) { + var type = typeof value; + + if (type === 'number' && value > 0) { + return parseFloat(value) + 'px'; + } + + return type === 'string' ? value : ''; +} +/** + * Pad start with 0. + * + * @param {number} number - A number to be filled with 0. + * + * @return {string|number} - Padded number. + */ + +function pad(number) { + return number < 10 ? '0' + number : number; +} +/** + * Convert the given value to pixel. + * + * @param {Element} root - Root element where a dummy div is appended. + * @param {string|number} value - CSS value to be converted, such as 10rem. + * + * @return {number} - Pixel. + */ + +function toPixel(root, value) { + if (typeof value === 'string') { + var div = create('div', {}); + applyStyle(div, { + position: 'absolute', + width: value + }); + append(root, div); + value = div.clientWidth; + dom_remove(div); + } + + return +value || 0; +} +;// CONCATENATED MODULE: ./src/js/utils/dom.js +/** + * Some utility functions related with DOM. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + +/** + * Find the first element matching the given selector. + * Be aware that all selectors after a space are ignored. + * + * @param {Element|Node} elm - An ancestor element. + * @param {string} selector - DOMString. + * + * @return {Element|null} - A found element or null. + */ + +function find(elm, selector) { + return elm ? elm.querySelector(selector.split(' ')[0]) : null; +} +/** + * Find a first child having the given tag or class name. + * + * @param {Element} parent - A parent element. + * @param {string} tagOrClassName - A tag or class name. + * + * @return {Element|undefined} - A found element on success or undefined on failure. + */ + +function child(parent, tagOrClassName) { + return children(parent, tagOrClassName)[0]; +} +/** + * Return chile elements that matches the provided tag or class name. + * + * @param {Element} parent - A parent element. + * @param {string} tagOrClassName - A tag or class name. + * + * @return {Element[]} - Found elements. + */ + +function children(parent, tagOrClassName) { + if (parent) { + return values(parent.children).filter(function (child) { + return hasClass(child, tagOrClassName.split(' ')[0]) || child.tagName === tagOrClassName; + }); + } + + return []; +} +/** + * Create an element with some optional attributes. + * + * @param {string} tag - A tag name. + * @param {Object} attrs - An object any attribute pairs of name and value. + * + * @return {Element} - A created element. + */ + +function create(tag, attrs) { + var elm = document.createElement(tag); + each(attrs, function (value, key) { + return setAttribute(elm, key, value); + }); + return elm; +} +/** + * Convert HTML string to DOM node. + * + * @param {string} html - HTML string. + * + * @return {Node} - A created node. + */ + +function domify(html) { + var div = create('div', {}); + div.innerHTML = html; + return div.firstChild; +} +/** + * Remove a given element from a DOM tree. + * + * @param {Element|Element[]} elms - Element(s) to be removed. + */ + +function dom_remove(elms) { + toArray(elms).forEach(function (elm) { + if (elm) { + var parent = elm.parentElement; + parent && parent.removeChild(elm); + } + }); +} +/** + * Append a child to a given element. + * + * @param {Element} parent - A parent element. + * @param {Element} child - An element to be appended. + */ + +function append(parent, child) { + if (parent) { + parent.appendChild(child); + } +} +/** + * Insert an element before the reference element. + * + * @param {Element|Node} ref - A reference element. + * @param {Element} elm - An element to be inserted. + */ + +function before(elm, ref) { + if (elm && ref) { + var parent = ref.parentElement; + parent && parent.insertBefore(elm, ref); + } +} +/** + * Apply styles to the given element. + * + * @param {Element} elm - An element where styles are applied. + * @param {Object} styles - Object containing styles. + */ + +function applyStyle(elm, styles) { + if (elm) { + each(styles, function (value, prop) { + if (value !== null) { + elm.style[prop] = value; + } + }); + } +} +/** + * Add or remove classes to/from the element. + * This function is for internal usage. + * + * @param {Element} elm - An element where classes are added. + * @param {string|string[]} classes - Class names being added. + * @param {boolean} remove - Whether to remove or add classes. + */ + +function addOrRemoveClasses(elm, classes, remove) { + if (elm) { + toArray(classes).forEach(function (name) { + if (name) { + elm.classList[remove ? 'remove' : 'add'](name); + } + }); + } +} +/** + * Add classes to the element. + * + * @param {Element} elm - An element where classes are added. + * @param {string|string[]} classes - Class names being added. + */ + + +function addClass(elm, classes) { + addOrRemoveClasses(elm, classes, false); +} +/** + * Remove a class from the element. + * + * @param {Element} elm - An element where classes are removed. + * @param {string|string[]} classes - A class name being removed. + */ + +function removeClass(elm, classes) { + addOrRemoveClasses(elm, classes, true); +} +/** + * Verify if the provided element has the class or not. + * + * @param {Element} elm - An element. + * @param {string} className - A class name. + * + * @return {boolean} - True if the element has the class or false if not. + */ + +function hasClass(elm, className) { + return !!elm && elm.classList.contains(className); +} +/** + * Set attribute to the given element. + * + * @param {Element} elm - An element where an attribute is assigned. + * @param {string} name - Attribute name. + * @param {string|number|boolean} value - Attribute value. + */ + +function setAttribute(elm, name, value) { + if (elm) { + elm.setAttribute(name, value); + } +} +/** + * Get attribute from the given element. + * + * @param {Element} elm - An element where an attribute is assigned. + * @param {string} name - Attribute name. + * + * @return {string} - The value of the given attribute if available. An empty string if not. + */ + +function getAttribute(elm, name) { + return elm ? elm.getAttribute(name) : ''; +} +/** + * Remove attribute from the given element. + * + * @param {Element|Element[]} elms - An element where an attribute is removed. + * @param {string|string[]} names - Attribute name. + */ + +function removeAttribute(elms, names) { + toArray(names).forEach(function (name) { + toArray(elms).forEach(function (elm) { + return elm && elm.removeAttribute(name); + }); + }); +} +/** + * Return the Rect object of the provided object. + * + * @param {Element} elm - An element. + * + * @return {ClientRect|DOMRect} - A rect object. + */ + +function getRect(elm) { + return elm.getBoundingClientRect(); +} +/** + * Trigger the given callback after all images contained by the element are loaded. + * + * @param {Element} elm - Element that may contain images. + * @param {Function} callback - Callback function fired right after all images are loaded. + */ + +function loaded(elm, callback) { + var images = elm.querySelectorAll('img'); + var length = images.length; + + if (length) { + var count = 0; + each(images, function (img) { + img.onload = img.onerror = function () { + if (++count === length) { + callback(); + } + }; + }); + } else { + // Trigger the callback immediately if there is no image. + callback(); + } +} +;// CONCATENATED MODULE: ./src/js/constants/types.js +/** + * Export slider types. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * Normal slider. + * + * @type {string} + */ +var SLIDE = 'slide'; +/** + * Loop after the last slide and before the first one. + * + * @type {string} + */ + +var LOOP = 'loop'; +/** + * The track doesn't move. + * + * @type {string} + */ + +var FADE = 'fade'; +;// CONCATENATED MODULE: ./src/js/transitions/slide/index.js +/** + * The component for general slide effect transition. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + +/** + * The component for general slide effect transition. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const slide = (function (Splide, Components) { + /** + * Hold the list element. + * + * @type {Element} + */ + var list; + /** + * Hold the onEnd callback function. + * + * @type {function} + */ + + var endCallback; + return { + /** + * Called when the component is mounted. + */ + mount: function mount() { + list = Components.Elements.list; + Splide.on('transitionend', function (e) { + if (e.target === list && endCallback) { + endCallback(); + } + }, list); + }, + + /** + * Start transition. + * + * @param {number} destIndex - Destination slide index that might be clone's. + * @param {number} newIndex - New index. + * @param {number} prevIndex - Previous index. + * @param {Object} coord - Destination coordinates. + * @param {function} done - Callback function must be invoked when transition is completed. + */ + start: function start(destIndex, newIndex, prevIndex, coord, done) { + var options = Splide.options; + var edgeIndex = Components.Controller.edgeIndex; + var speed = options.speed; + endCallback = done; + + if (Splide.is(SLIDE)) { + if (prevIndex === 0 && newIndex >= edgeIndex || prevIndex >= edgeIndex && newIndex === 0) { + speed = options.rewindSpeed || speed; + } + } + + applyStyle(list, { + transition: "transform " + speed + "ms " + options.easing, + transform: "translate(" + coord.x + "px," + coord.y + "px)" + }); + } + }; +}); +;// CONCATENATED MODULE: ./src/js/transitions/fade/index.js +/** + * The component for fade transition. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + +/** + * The component for fade transition. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const fade = (function (Splide, Components) { + var Fade = { + /** + * Called when the component is mounted. + * Apply transition style to the first slide. + */ + mount: function mount() { + apply(Splide.index); + }, + + /** + * Start transition. + * + * @param {number} destIndex - Destination slide index that might be clone's. + * @param {number} newIndex - New index. + * @param {number} prevIndex - Previous index. + * @param {Object} coord - Destination coordinates. + * @param {function} done - Callback function must be invoked when transition is completed. + */ + start: function start(destIndex, newIndex, prevIndex, coord, done) { + var track = Components.Elements.track; + applyStyle(track, { + height: unit(track.clientHeight) + }); + apply(newIndex); + setTimeout(function () { + done(); + applyStyle(track, { + height: '' + }); + }); + } + }; + /** + * Apply transition style to the slide specified by the given index. + * + * @param {number} index - A slide index. + */ + + function apply(index) { + var options = Splide.options; + applyStyle(Components.Elements.slides[index], { + transition: "opacity " + options.speed + "ms " + options.easing + }); + } + + return Fade; +}); +;// CONCATENATED MODULE: ./src/js/transitions/index.js +/** + * Export transition components. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + +;// CONCATENATED MODULE: ./src/js/core/composer.js +/** + * Provide a function for composing components. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + +/** + * Compose components. + * + * @param {Splide} Splide - Splide instance. + * @param {Object} Components - Additional components. + * @param {function} Transition - Change component for transition. + * + * @return {Object} - An object containing all components. + */ + +function compose(Splide, Components, Transition) { + var components = {}; + each(Components, function (Component, name) { + components[name] = Component(Splide, components, name.toLowerCase()); + }); + + if (!Transition) { + Transition = Splide.is(FADE) ? fade : slide; + } + + components.Transition = Transition(Splide, components); + return components; +} +;// CONCATENATED MODULE: ./src/js/utils/error.js +/** + * Utility functions for outputting logs. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * Prefix of an error massage. + * + * @type {string} + */ +var MESSAGE_PREFIX = '[SPLIDE]'; +/** + * Display an error message on the browser console. + * + * @param {string} message - An error message. + */ + +function error(message) { + console.error(MESSAGE_PREFIX + " " + message); +} +/** + * Check existence of the given object and throw an error if it doesn't. + * + * @throws {Error} + * + * @param {*} subject - A subject to be confirmed. + * @param {string} message - An error message. + */ + +function exist(subject, message) { + if (!subject) { + throw new Error(message); + } +} +;// CONCATENATED MODULE: ./src/js/constants/classes.js +/** + * Export class names. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * A root class name. + * + * @type {string} + */ +var ROOT = 'splide'; +/** + * The definition table of all classes for elements. + * They might be modified by options. + * + * @type {Object} + */ + +var ELEMENT_CLASSES = { + root: ROOT, + slider: ROOT + "__slider", + track: ROOT + "__track", + list: ROOT + "__list", + slide: ROOT + "__slide", + container: ROOT + "__slide__container", + arrows: ROOT + "__arrows", + arrow: ROOT + "__arrow", + prev: ROOT + "__arrow--prev", + next: ROOT + "__arrow--next", + pagination: ROOT + "__pagination", + page: ROOT + "__pagination__page", + clone: ROOT + "__slide--clone", + progress: ROOT + "__progress", + bar: ROOT + "__progress__bar", + autoplay: ROOT + "__autoplay", + play: ROOT + "__play", + pause: ROOT + "__pause", + spinner: ROOT + "__spinner", + sr: ROOT + "__sr" +}; +/** + * Definitions of status classes. + * + * @type {Object} + */ + +var STATUS_CLASSES = { + active: 'is-active', + visible: 'is-visible', + loading: 'is-loading' +}; +;// CONCATENATED MODULE: ./src/js/constants/i18n.js +/** + * Export i18n texts as object. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * Texts for i18n. + * + * @type {Object} + */ +var I18N = { + prev: 'Previous slide', + next: 'Next slide', + first: 'Go to first slide', + last: 'Go to last slide', + slideX: 'Go to slide %s', + pageX: 'Go to page %s', + play: 'Start autoplay', + pause: 'Pause autoplay' +}; +;// CONCATENATED MODULE: ./src/js/constants/defaults.js +/** + * Export default options. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + +var DEFAULTS = { + /** + * Determine a slider type. + * - 'slide': Regular slider. + * - 'loop' : Carousel slider. + * - 'fade' : Change slides with fade transition. perPage, drag options are ignored. + * + * @type {string} + */ + type: 'slide', + + /** + * Whether to rewind a slider before the first slide or after the last one. + * In "loop" mode, this option is ignored. + * + * @type {boolean} + */ + rewind: false, + + /** + * Transition speed in milliseconds. + * + * @type {number} + */ + speed: 400, + + /** + * Transition speed on rewind in milliseconds. + * + * @type {number} + */ + rewindSpeed: 0, + + /** + * Whether to prevent any actions while a slider is transitioning. + * If false, navigation, drag and swipe work while the slider is running. + * Even so, it will be forced to wait for transition in some cases in the loop mode to shift a slider. + * + * @type {boolean} + */ + waitForTransition: true, + + /** + * Define slider max width. + * + * @type {number} + */ + width: 0, + + /** + * Define slider height. + * + * @type {number} + */ + height: 0, + + /** + * Fix width of slides. CSS format is allowed such as 10em, 80% or 80vw. + * perPage number will be ignored when this option is falsy. + * + * @type {number|string} + */ + fixedWidth: 0, + + /** + * Fix height of slides. CSS format is allowed such as 10em, 80vh but % unit is not accepted. + * heightRatio option will be ignored when this option is falsy. + * + * @type {number|string} + */ + fixedHeight: 0, + + /** + * Determine height of slides by ratio to a slider width. + * This will be ignored when the fixedHeight is provided. + * + * @type {number} + */ + heightRatio: 0, + + /** + * If true, slide width will be determined by the element width itself. + * - perPage/perMove should be 1. + * + * @type {boolean} + */ + autoWidth: false, + + /** + * If true, slide height will be determined by the element width itself. + * - perPage/perMove should be 1. + * + * @type {boolean} + */ + autoHeight: false, + + /** + * Determine how many slides should be displayed per page. + * + * @type {number} + */ + perPage: 1, + + /** + * Determine how many slides should be moved when a slider goes to next or perv. + * + * @type {number} + */ + perMove: 0, + + /** + * Determine manually how many clones should be generated on the left and right side. + * The total number of clones will be twice of this number. + * + * @type {number} + */ + clones: 0, + + /** + * Start index. + * + * @type {number} + */ + start: 0, + + /** + * Determine which slide should be focused if there are multiple slides in a page. + * A string "center" is acceptable for centering slides. + * + * @type {boolean|number|string} + */ + focus: false, + + /** + * Gap between slides. CSS format is allowed such as 1em. + * + * @type {number|string} + */ + gap: 0, + + /** + * Set padding-left/right in horizontal mode or padding-top/bottom in vertical one. + * Give a single value to set a same size for both sides or + * do an object for different sizes. + * Also, CSS format is allowed such as 1em. + * + * @example + * - 10: Number + * - '1em': CSS format. + * - { left: 0, right: 20 }: Object for different sizes in horizontal mode. + * - { top: 0, bottom: 20 }: Object for different sizes in vertical mode. + * + * @type {number|string|Object} + */ + padding: 0, + + /** + * Whether to append arrows. + * + * @type {boolean} + */ + arrows: true, + + /** + * Change the arrow SVG path like 'm7.61 0.807-2.12...'. + * + * @type {string} + */ + arrowPath: '', + + /** + * Whether to append pagination(indicator dots) or not. + * + * @type {boolean} + */ + pagination: true, + + /** + * Activate autoplay. + * + * @type {boolean} + */ + autoplay: false, + + /** + * Autoplay interval in milliseconds. + * + * @type {number} + */ + interval: 5000, + + /** + * Whether to stop autoplay when a slider is hovered. + * + * @type {boolean} + */ + pauseOnHover: true, + + /** + * Whether to stop autoplay when a slider elements are focused. + * True is recommended for accessibility. + * + * @type {boolean} + */ + pauseOnFocus: true, + + /** + * Whether to reset progress of the autoplay timer when resumed. + * + * @type {boolean} + */ + resetProgress: true, + + /** + * Loading images lazily. + * Image src must be provided by a data-splide-lazy attribute. + * + * - false: Do nothing. + * - 'nearby': Only images around an active slide will be loaded. + * - 'sequential': All images will be sequentially loaded. + * + * @type {boolean|string} + */ + lazyLoad: false, + + /** + * This option works only when a lazyLoad option is "nearby". + * Determine how many pages(not slides) around an active slide should be loaded beforehand. + * + * @type {number} + */ + preloadPages: 1, + + /** + * Easing for CSS transition. For example, linear, ease or cubic-bezier(). + * + * @type {string} + */ + easing: 'cubic-bezier(.42,.65,.27,.99)', + + /** + * Whether to enable keyboard shortcuts + * - true or 'global': Listen to keydown event of the document. + * - 'focused': Listen to the keydown event of the slider root element. tabindex="0" will be added to the element. + * - false: Disable keyboard shortcuts. + * + * @type {boolean|string} + */ + keyboard: 'global', + + /** + * Whether to allow mouse drag and touch swipe. + * + * @type {boolean} + */ + drag: true, + + /** + * The angle threshold for drag. + * The slider starts moving only when the drag angle is less than this threshold. + * + * @type {number} + */ + dragAngleThreshold: 30, + + /** + * Distance threshold for determining if the action is "flick" or "swipe". + * When a drag distance is over this value, the action will be treated as "swipe", not "flick". + * + * @type {number} + */ + swipeDistanceThreshold: 150, + + /** + * Velocity threshold for determining if the action is "flick" or "swipe". + * Around 0.5 is recommended. + * + * @type {number} + */ + flickVelocityThreshold: .6, + + /** + * Determine power of flick. The larger number this is, the farther a slider runs by flick. + * Around 500 is recommended. + * + * @type {number} + */ + flickPower: 600, + + /** + * Limit a number of pages to move by flick. + * + * @type {number} + */ + flickMaxPages: 1, + + /** + * Slider direction. + * - 'ltr': Left to right. + * - 'rtl': Right to left. + * - 'ttb': Top to bottom. + * + * @type {string} + */ + direction: 'ltr', + + /** + * Set img src to background-image of its parent element. + * Images with various sizes can be displayed as same dimension without cropping work. + * fixedHeight or heightRatio is required. + * + * @type {boolean} + */ + cover: false, + + /** + * Whether to enable accessibility(aria and screen reader texts) or not. + * + * @type {boolean} + */ + accessibility: true, + + /** + * Whether to add tabindex="0" to visible slides or not. + * + * @type {boolean} + */ + slideFocus: true, + + /** + * Determine if a slider is navigation for another. + * Use "sync" API to synchronize two sliders. + * + * @type {boolean} + */ + isNavigation: false, + + /** + * Whether to trim spaces before the fist slide or after the last one when "focus" is not 0. + * + * @type {boolean} + */ + trimSpace: true, + + /** + * The "is-active" class is added after transition as default. + * If true, it will be added before move. + * + * @type {boolean} + */ + updateOnMove: false, + + /** + * Throttle duration in milliseconds for the resize event. + * + * @type {number} + */ + throttle: 100, + + /** + * Whether to destroy a slider or not. + * + * @type {boolean} + */ + destroy: false, + + /** + * Options for specific breakpoints. + * + * @example + * { + * 1000: { + * perPage: 3, + * gap: 20 + * }, + * 600: { + * perPage: 1, + * gap: 5, + * } + * } + * + * @type {boolean|Object} + */ + breakpoints: false, + + /** + * Collection of class names. + * + * @see ./classes.js + * + * @type {Object} + */ + classes: ELEMENT_CLASSES, + + /** + * Collection of i18n texts. + * + * @see ./i18n.js + * + * @type {Object} + */ + i18n: I18N +}; +;// CONCATENATED MODULE: ./src/js/constants/states.js +/** + * Export state constants. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * Splide has been just created. + * + * @type {number} + */ +var CREATED = 1; +/** + * All components have been mounted and initialized. + * + * @type {number} + */ + +var MOUNTED = 2; +/** + * Splide is ready for transition. + * + * @type {number} + */ + +var IDLE = 3; +/** + * Splide is moving. + * + * @type {number} + */ + +var MOVING = 4; +/** + * Splide is moving. + * + * @type {number} + */ + +var DESTROYED = 5; +;// CONCATENATED MODULE: ./src/js/splide.js +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); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +/** + * The main class for applying Splide to an element. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + + + + + + +/** + * The main class for applying Splide to an element, + * providing some APIs to control the behavior. + */ + +var Splide = /*#__PURE__*/function () { + /** + * Splide constructor. + * + * @throws {Error} When the given root element or selector is invalid. + * + * @param {Element|string} root - A selector for a root element or an element itself. + * @param {Object} options - Optional. Options to change default behaviour. + * @param {Object} Components - Optional. Components. + */ + function Splide(root, options, Components) { + if (options === void 0) { + options = {}; + } + + if (Components === void 0) { + Components = {}; + } + + this.root = root instanceof Element ? root : document.querySelector(root); + exist(this.root, 'An invalid element/selector was given.'); + this.Components = null; + this.Event = core_event(); + this.State = state(CREATED); + this.STATES = states_namespaceObject; + this._o = merge(DEFAULTS, options); + this._i = 0; + this._c = Components; + this._e = {}; // Extensions + + this._t = null; // Transition + } + /** + * Compose and mount components. + * + * @param {Object} Extensions - Optional. Additional components. + * @param {function} Transition - Optional. Set a custom transition component. + * + * @return {Splide|undefined} - This instance or undefined if an exception occurred. + */ + + + var _proto = Splide.prototype; + + _proto.mount = function mount(Extensions, Transition) { + var _this = this; + + if (Extensions === void 0) { + Extensions = this._e; + } + + if (Transition === void 0) { + Transition = this._t; + } + + // Reset the state. + this.State.set(CREATED); + this._e = Extensions; + this._t = Transition; + this.Components = compose(this, merge(this._c, Extensions), Transition); + + try { + each(this.Components, function (component, key) { + var required = component.required; + + if (required === undefined || required) { + component.mount && component.mount(); + } else { + delete _this.Components[key]; + } + }); + } catch (e) { + error(e.message); + return; + } + + var State = this.State; + State.set(MOUNTED); + each(this.Components, function (component) { + component.mounted && component.mounted(); + }); + this.emit('mounted'); + State.set(IDLE); + this.emit('ready'); + applyStyle(this.root, { + visibility: 'visible' + }); + this.on('move drag', function () { + return State.set(MOVING); + }).on('moved dragged', function () { + return State.set(IDLE); + }); + return this; + } + /** + * Set sync target. + * + * @param {Splide} splide - A Splide instance. + * + * @return {Splide} - This instance. + */ + ; + + _proto.sync = function sync(splide) { + this.sibling = splide; + return this; + } + /** + * Register callback fired on the given event(s). + * + * @param {string} events - An event name. Use space to separate multiple events. + * Also, namespace is accepted by dot, such as 'resize.{namespace}'. + * @param {function} handler - A callback function. + * @param {Element} elm - Optional. Native event will be listened to when this arg is provided. + * @param {Object} options - Optional. Options for addEventListener. + * + * @return {Splide} - This instance. + */ + ; + + _proto.on = function on(events, handler, elm, options) { + if (elm === void 0) { + elm = null; + } + + if (options === void 0) { + options = {}; + } + + this.Event.on(events, handler, elm, options); + return this; + } + /** + * Unsubscribe the given event. + * + * @param {string} events - A event name. + * @param {Element} elm - Optional. removeEventListener() will be called when this arg is provided. + * + * @return {Splide} - This instance. + */ + ; + + _proto.off = function off(events, elm) { + if (elm === void 0) { + elm = null; + } + + this.Event.off(events, elm); + return this; + } + /** + * Emit an event. + * + * @param {string} event - An event name. + * @param {*} args - Any number of arguments passed to handlers. + */ + ; + + _proto.emit = function emit(event) { + var _this$Event; + + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + (_this$Event = this.Event).emit.apply(_this$Event, [event].concat(args)); + + return this; + } + /** + * Go to the slide specified by the given control. + * + * @param {string|number} control - A control pattern. + * @param {boolean} wait - Optional. Whether to wait for transition. + */ + ; + + _proto.go = function go(control, wait) { + if (wait === void 0) { + wait = this.options.waitForTransition; + } + + if (this.State.is(IDLE) || this.State.is(MOVING) && !wait) { + this.Components.Controller.go(control, false); + } + + return this; + } + /** + * Verify whether the slider type is the given one or not. + * + * @param {string} type - A slider type. + * + * @return {boolean} - True if the slider type is the provided type or false if not. + */ + ; + + _proto.is = function is(type) { + return type === this._o.type; + } + /** + * Insert a slide. + * + * @param {Element|string} slide - A slide element to be added. + * @param {number} index - A slide will be added at the position. + */ + ; + + _proto.add = function add(slide, index) { + if (index === void 0) { + index = -1; + } + + this.Components.Elements.add(slide, index, this.refresh.bind(this)); + return this; + } + /** + * Remove the slide designated by the index. + * + * @param {number} index - A slide index. + */ + ; + + _proto.remove = function remove(index) { + this.Components.Elements.remove(index); + this.refresh(); + return this; + } + /** + * Destroy all Slide objects and clones and recreate them again. + */ + ; + + _proto.refresh = function refresh() { + this.emit('refresh:before').emit('refresh').emit('resize'); + return this; + } + /** + * Destroy the Splide. + * "Completely" boolean is mainly for breakpoints. + * + * @param {boolean} completely - Destroy completely. + */ + ; + + _proto.destroy = function destroy(completely) { + var _this2 = this; + + if (completely === void 0) { + completely = true; + } + + // Postpone destroy because it should be done after mount. + if (this.State.is(CREATED)) { + this.on('ready', function () { + return _this2.destroy(completely); + }); + return; + } + + values(this.Components).reverse().forEach(function (component) { + component.destroy && component.destroy(completely); + }); + this.emit('destroy', completely); // Destroy all event handlers, including ones for native events. + + this.Event.destroy(); + this.State.set(DESTROYED); + return this; + } + /** + * Return the current slide index. + * + * @return {number} - The current slide index. + // */ + ; + + _createClass(Splide, [{ + key: "index", + get: function get() { + return this._i; + } + /** + * Set the current slide index. + * + * @param {number|string} index - A new index. + */ + , + set: function set(index) { + this._i = parseInt(index); + } + /** + * Return length of slides. + * This is an alias of Elements.length. + * + * @return {number} - A number of slides. + */ + + }, { + key: "length", + get: function get() { + return this.Components.Elements.length; + } + /** + * Return options. + * + * @return {Object} - Options object. + */ + + }, { + key: "options", + get: function get() { + return this._o; + } + /** + * Set options with merging the given object to the current one. + * + * @param {Object} options - New options. + */ + , + set: function set(options) { + var created = this.State.is(CREATED); + + if (!created) { + this.emit('update'); + } + + this._o = merge(this._o, options); + + if (!created) { + this.emit('updated', this._o); + } + } + /** + * Return the class list. + * This is an alias of Splide.options.classList. + * + * @return {Object} - An object containing all class list. + */ + + }, { + key: "classes", + get: function get() { + return this._o.classes; + } + /** + * Return the i18n strings. + * This is an alias of Splide.options.i18n. + * + * @return {Object} - An object containing all i18n strings. + */ + + }, { + key: "i18n", + get: function get() { + return this._o.i18n; + } + }]); + + return Splide; +}(); + + +;// CONCATENATED MODULE: ./src/js/components/options/index.js +/** + * The component for initializing options. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + +/** + * The component for initializing options. + * + * @param {Splide} Splide - A Splide instance. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const options = (function (Splide) { + /** + * Retrieve options from the data attribute. + * Note that IE10 doesn't support dataset property. + * + * @type {string} + */ + var options = getAttribute(Splide.root, 'data-splide'); + + if (options) { + try { + Splide.options = JSON.parse(options); + } catch (e) { + error(e.message); + } + } + + return { + /** + * Called when the component is mounted. + */ + mount: function mount() { + if (Splide.State.is(CREATED)) { + Splide.index = Splide.options.start; + } + } + }; +}); +;// CONCATENATED MODULE: ./src/js/constants/directions.js +/** + * Export layout modes. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * Enumerate slides from left to right. + * + * @type {string} + */ +var LTR = 'ltr'; +/** + * Enumerate slides from right to left. + * + * @type {string} + */ + +var RTL = 'rtl'; +/** + * Enumerate slides in a col. + * + * @type {string} + */ + +var TTB = 'ttb'; +;// CONCATENATED MODULE: ./src/js/components/elements/slide.js +/** + * The sub component for handling each slide. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + + + + +/** + * Events for restoring original styles. + * + * @type {string} + */ + +var STYLE_RESTORE_EVENTS = 'update.slide'; +/** + * The sub component for handling each slide. + * + * @param {Splide} Splide - A Splide instance. + * @param {number} index - An unique slide index. + * @param {number} realIndex - Clones should pass a real slide index. + * @param {Element} slide - A slide element. + * + * @return {Object} - The sub component object. + */ + +/* harmony default export */ const elements_slide = (function (Splide, index, realIndex, slide) { + /** + * Whether to update "is-active" class before or after transition. + * + * @type {boolean} + */ + var updateOnMove = Splide.options.updateOnMove; + /** + * Events when the slide status is updated. + * Append a namespace to remove listeners later. + * + * @type {string} + */ + + var STATUS_UPDATE_EVENTS = 'ready.slide updated.slide resized.slide moved.slide' + (updateOnMove ? ' move.slide' : ''); + /** + * Slide sub component object. + * + * @type {Object} + */ + + var Slide = { + /** + * Slide element. + * + * @type {Element} + */ + slide: slide, + + /** + * Slide index. + * + * @type {number} + */ + index: index, + + /** + * Real index for clones. + * + * @type {number} + */ + realIndex: realIndex, + + /** + * Container element if available. + * + * @type {Element|undefined} + */ + container: child(slide, Splide.classes.container), + + /** + * Whether this is a cloned slide or not. + * + * @type {boolean} + */ + isClone: realIndex > -1, + + /** + * Called when the component is mounted. + */ + mount: function mount() { + var _this = this; + + if (!this.isClone) { + slide.id = Splide.root.id + "-slide" + pad(index + 1); + } + + Splide.on(STATUS_UPDATE_EVENTS, function () { + return _this.update(); + }).on(STYLE_RESTORE_EVENTS, restoreStyles).on('click', function () { + return Splide.emit('click', _this); + }, slide); + /* + * Add "is-active" class to a clone element temporarily + * and it will be removed on "moved" event. + */ + + if (updateOnMove) { + Splide.on('move.slide', function (newIndex) { + if (newIndex === realIndex) { + _update(true, false); + } + }); + } // Make sure the slide is shown. + + + applyStyle(slide, { + display: '' + }); // Hold the original styles. + + this.styles = getAttribute(slide, 'style') || ''; + }, + + /** + * Destroy. + */ + destroy: function destroy() { + Splide.off(STATUS_UPDATE_EVENTS).off(STYLE_RESTORE_EVENTS).off('click', slide); + removeClass(slide, values(STATUS_CLASSES)); + restoreStyles(); + removeAttribute(this.container, 'style'); + }, + + /** + * Update active and visible status. + */ + update: function update() { + _update(this.isActive(), false); + + _update(this.isVisible(), true); + }, + + /** + * Check whether this slide is active or not. + * + * @return {boolean} - True if the slide is active or false if not. + */ + isActive: function isActive() { + return Splide.index === index; + }, + + /** + * Check whether this slide is visible in the viewport or not. + * + * @return {boolean} - True if the slide is visible or false if not. + */ + isVisible: function isVisible() { + var active = this.isActive(); + + if (Splide.is(FADE) || active) { + return active; + } + + var ceil = Math.ceil; + var trackRect = getRect(Splide.Components.Elements.track); + var slideRect = getRect(slide); + + if (Splide.options.direction === TTB) { + return trackRect.top <= slideRect.top && slideRect.bottom <= ceil(trackRect.bottom); + } + + return trackRect.left <= slideRect.left && slideRect.right <= ceil(trackRect.right); + }, + + /** + * Calculate how far this slide is from another slide and + * return true if the distance is within the given number. + * + * @param {number} from - Index of a target slide. + * @param {number} within - True if the slide is within this number. + * + * @return {boolean} - True if the slide is within the number or false otherwise. + */ + isWithin: function isWithin(from, within) { + var diff = Math.abs(from - index); + + if (!Splide.is(SLIDE) && !this.isClone) { + diff = Math.min(diff, Splide.length - diff); + } + + return diff < within; + } + }; + /** + * Update classes for activity or visibility. + * + * @param {boolean} active - Is active/visible or not. + * @param {boolean} forVisibility - Toggle classes for activity or visibility. + */ + + function _update(active, forVisibility) { + var type = forVisibility ? 'visible' : 'active'; + var className = STATUS_CLASSES[type]; + + if (active) { + addClass(slide, className); + Splide.emit("" + type, Slide); + } else { + if (hasClass(slide, className)) { + removeClass(slide, className); + Splide.emit("" + (forVisibility ? 'hidden' : 'inactive'), Slide); + } + } + } + /** + * Restore the original styles. + */ + + + function restoreStyles() { + setAttribute(slide, 'style', Slide.styles); + } + + return Slide; +}); +;// CONCATENATED MODULE: ./src/js/components/elements/index.js +/** + * The component for main elements. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + + + +/** + * The property name for UID stored in a window object. + * + * @type {string} + */ + +var UID_NAME = 'uid'; +/** + * The component for main elements. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const components_elements = (function (Splide, Components) { + /** + * Hold the root element. + * + * @type {Element} + */ + var root = Splide.root; + /** + * Hold the class list. + * + * @type {Object} + */ + + var classes = Splide.classes; + /** + * Store Slide objects. + * + * @type {Array} + */ + + var Slides = []; + /* + * Assign unique ID to the root element if it doesn't have the one. + * Note that IE doesn't support padStart() to fill the uid by 0. + */ + + if (!root.id) { + window.splide = window.splide || {}; + var uid = window.splide[UID_NAME] || 0; + window.splide[UID_NAME] = ++uid; + root.id = "splide" + pad(uid); + } + /** + * Elements component object. + * + * @type {Object} + */ + + + var Elements = { + /** + * Called when the component is mounted. + * Collect main elements and store them as member properties. + */ + mount: function mount() { + var _this = this; + + this.init(); + Splide.on('refresh', function () { + _this.destroy(); + + _this.init(); + }).on('updated', function () { + removeClass(root, getClasses()); + addClass(root, getClasses()); + }); + }, + + /** + * Destroy. + */ + destroy: function destroy() { + Slides.forEach(function (Slide) { + Slide.destroy(); + }); + Slides = []; + removeClass(root, getClasses()); + }, + + /** + * Initialization. + */ + init: function init() { + var _this2 = this; + + collect(); + addClass(root, getClasses()); + this.slides.forEach(function (slide, index) { + _this2.register(slide, index, -1); + }); + }, + + /** + * Register a slide to create a Slide object and handle its behavior. + * + * @param {Element} slide - A slide element. + * @param {number} index - A unique index. This can be negative. + * @param {number} realIndex - A real index for clones. Set -1 for real slides. + */ + register: function register(slide, index, realIndex) { + var SlideObject = elements_slide(Splide, index, realIndex, slide); + SlideObject.mount(); + Slides.push(SlideObject); + }, + + /** + * Return the Slide object designated by the index. + * Note that "find" is not supported by IE. + * + * @return {Object|undefined} - A Slide object if available. Undefined if not. + */ + getSlide: function getSlide(index) { + return Slides.filter(function (Slide) { + return Slide.index === index; + })[0]; + }, + + /** + * Return all Slide objects. + * + * @param {boolean} includeClones - Whether to include cloned slides or not. + * + * @return {Object[]} - Slide objects. + */ + getSlides: function getSlides(includeClones) { + return includeClones ? Slides : Slides.filter(function (Slide) { + return !Slide.isClone; + }); + }, + + /** + * Return Slide objects belonging to the given page. + * + * @param {number} page - A page number. + * + * @return {Object[]} - An array containing Slide objects. + */ + getSlidesByPage: function getSlidesByPage(page) { + var idx = Components.Controller.toIndex(page); + var options = Splide.options; + var max = options.focus !== false ? 1 : options.perPage; + return Slides.filter(function (_ref) { + var index = _ref.index; + return idx <= index && index < idx + max; + }); + }, + + /** + * Insert a slide to a slider. + * Need to refresh Splide after adding a slide. + * + * @param {Node|string} slide - A slide element to be added. + * @param {number} index - A slide will be added at the position. + * @param {Function} callback - Called right after the slide is added to the DOM tree. + */ + add: function add(slide, index, callback) { + if (typeof slide === 'string') { + slide = domify(slide); + } + + if (slide instanceof Element) { + var ref = this.slides[index]; // This will be removed in mount() of a Slide component. + + applyStyle(slide, { + display: 'none' + }); + + if (ref) { + before(slide, ref); + this.slides.splice(index, 0, slide); + } else { + append(this.list, slide); + this.slides.push(slide); + } + + loaded(slide, function () { + callback && callback(slide); + }); + } + }, + + /** + * Remove a slide from a slider. + * Need to refresh Splide after removing a slide. + * + * @param index - Slide index. + */ + remove: function remove(index) { + dom_remove(this.slides.splice(index, 1)[0]); + }, + + /** + * Trigger the provided callback for each Slide object. + * + * @param {Function} callback - A callback function. The first argument will be the Slide object. + */ + each: function each(callback) { + Slides.forEach(callback); + }, + + /** + * Return slides length without clones. + * + * @return {number} - Slide length. + */ + get length() { + return this.slides.length; + }, + + /** + * Return "SlideObjects" length including clones. + * + * @return {number} - Slide length including clones. + */ + get total() { + return Slides.length; + } + + }; + /** + * Collect elements. + */ + + function collect() { + Elements.slider = child(root, classes.slider); + Elements.track = find(root, "." + classes.track); + Elements.list = child(Elements.track, classes.list); + exist(Elements.track && Elements.list, 'Track or list was not found.'); + Elements.slides = children(Elements.list, classes.slide); + var arrows = findParts(classes.arrows); + Elements.arrows = { + prev: find(arrows, "." + classes.prev), + next: find(arrows, "." + classes.next) + }; + var autoplay = findParts(classes.autoplay); + Elements.bar = find(findParts(classes.progress), "." + classes.bar); + Elements.play = find(autoplay, "." + classes.play); + Elements.pause = find(autoplay, "." + classes.pause); + Elements.track.id = Elements.track.id || root.id + "-track"; + Elements.list.id = Elements.list.id || root.id + "-list"; + } + /** + * Return class names for the root element. + */ + + + function getClasses() { + var rootClass = classes.root; + var options = Splide.options; + return [rootClass + "--" + options.type, rootClass + "--" + options.direction, options.drag ? rootClass + "--draggable" : '', options.isNavigation ? rootClass + "--nav" : '', STATUS_CLASSES.active]; + } + /** + * Find parts only from children of the root or track. + * + * @return {Element} - A found element or undefined. + */ + + + function findParts(className) { + return child(root, className) || child(Elements.slider, className); + } + + return Elements; +}); +;// CONCATENATED MODULE: ./src/js/components/controller/index.js +/** + * The component for controlling the track. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + +var floor = Math.floor; +/** + * The component for controlling the track. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const controller = (function (Splide, Components) { + /** + * Store current options. + * + * @type {Object} + */ + var options; + /** + * True if the slide is LOOP mode. + * + * @type {boolean} + */ + + var isLoop; + /** + * Controller component object. + * + * @type {Object} + */ + + var Controller = { + /** + * Called when the component is mounted. + */ + mount: function mount() { + options = Splide.options; + isLoop = Splide.is(LOOP); + bind(); + }, + + /** + * Make track run by the given control. + * - "+{i}" : Increment the slide index by i. + * - "-{i}" : Decrement the slide index by i. + * - "{i}" : Go to the slide whose index is i. + * - ">" : Go to next page. + * - "<" : Go to prev page. + * - ">{i}" : Go to page i. + * + * @param {string|number} control - A control pattern. + * @param {boolean} silently - Go to the destination without event emission. + */ + go: function go(control, silently) { + var destIndex = this.trim(this.parse(control)); + Components.Track.go(destIndex, this.rewind(destIndex), silently); + }, + + /** + * Parse the given control and return the destination index for the track. + * + * @param {string} control - A control target pattern. + * + * @return {number} - A parsed target. + */ + parse: function parse(control) { + var index = Splide.index; + var matches = String(control).match(/([+\-<>]+)(\d+)?/); + var indicator = matches ? matches[1] : ''; + var number = matches ? parseInt(matches[2]) : 0; + + switch (indicator) { + case '+': + index += number || 1; + break; + + case '-': + index -= number || 1; + break; + + case '>': + case '<': + index = parsePage(number, index, indicator === '<'); + break; + + default: + index = parseInt(control); + } + + return index; + }, + + /** + * Compute index from the given page number. + * + * @param {number} page - Page number. + * + * @return {number} - A computed page number. + */ + toIndex: function toIndex(page) { + if (hasFocus()) { + return page; + } + + var length = Splide.length; + var perPage = options.perPage; + var index = page * perPage; + index = index - (this.pageLength * perPage - length) * floor(index / length); // Adjustment for the last page. + + if (length - perPage <= index && index < length) { + index = length - perPage; + } + + return index; + }, + + /** + * Compute page number from the given slide index. + * + * @param {number} index - Slide index. + * + * @return {number} - A computed page number. + */ + toPage: function toPage(index) { + if (hasFocus()) { + return index; + } + + var length = Splide.length; + var perPage = options.perPage; // Make the last "perPage" number of slides belong to the last page. + + if (length - perPage <= index && index < length) { + return floor((length - 1) / perPage); + } + + return floor(index / perPage); + }, + + /** + * Trim the given index according to the current mode. + * Index being returned could be less than 0 or greater than the length in Loop mode. + * + * @param {number} index - An index being trimmed. + * + * @return {number} - A trimmed index. + */ + trim: function trim(index) { + if (!isLoop) { + index = options.rewind ? this.rewind(index) : between(index, 0, this.edgeIndex); + } + + return index; + }, + + /** + * Rewind the given index if it's out of range. + * + * @param {number} index - An index. + * + * @return {number} - A rewound index. + */ + rewind: function rewind(index) { + var edge = this.edgeIndex; + + if (isLoop) { + while (index > edge) { + index -= edge + 1; + } + + while (index < 0) { + index += edge + 1; + } + } else { + if (index > edge) { + index = 0; + } else if (index < 0) { + index = edge; + } + } + + return index; + }, + + /** + * Check if the direction is "rtl" or not. + * + * @return {boolean} - True if "rtl" or false if not. + */ + isRtl: function isRtl() { + return options.direction === RTL; + }, + + /** + * Return the page length. + * + * @return {number} - Max page number. + */ + get pageLength() { + var length = Splide.length; + return hasFocus() ? length : Math.ceil(length / options.perPage); + }, + + /** + * Return the edge index. + * + * @return {number} - Edge index. + */ + get edgeIndex() { + var length = Splide.length; + + if (!length) { + return 0; + } + + if (hasFocus() || options.isNavigation || isLoop) { + return length - 1; + } + + return length - options.perPage; + }, + + /** + * Return the index of the previous slide. + * + * @return {number} - The index of the previous slide if available. -1 otherwise. + */ + get prevIndex() { + var prev = Splide.index - 1; + + if (isLoop || options.rewind) { + prev = this.rewind(prev); + } + + return prev > -1 ? prev : -1; + }, + + /** + * Return the index of the next slide. + * + * @return {number} - The index of the next slide if available. -1 otherwise. + */ + get nextIndex() { + var next = Splide.index + 1; + + if (isLoop || options.rewind) { + next = this.rewind(next); + } + + return Splide.index < next && next <= this.edgeIndex || next === 0 ? next : -1; + } + + }; + /** + * Listen to some events. + */ + + function bind() { + Splide.on('move', function (newIndex) { + Splide.index = newIndex; + }).on('updated refresh', function (newOptions) { + options = newOptions || options; + Splide.index = between(Splide.index, 0, Controller.edgeIndex); + }); + } + /** + * Verify if the focus option is available or not. + * + * @return {boolean} - True if a slider has the focus option. + */ + + + function hasFocus() { + return options.focus !== false; + } + /** + * Return the next or previous page index computed by the page number and current index. + * + * @param {number} number - Specify the page number. + * @param {number} index - Current index. + * @param {boolean} prev - Prev or next. + * + * @return {number} - Slide index. + */ + + + function parsePage(number, index, prev) { + if (number > -1) { + return Controller.toIndex(number); + } + + var perMove = options.perMove; + var sign = prev ? -1 : 1; + + if (perMove) { + return index + perMove * sign; + } + + return Controller.toIndex(Controller.toPage(index) + sign); + } + + return Controller; +}); +;// CONCATENATED MODULE: ./src/js/components/track/index.js +/** + * The component for moving list in the track. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + + + +var abs = Math.abs; +/** + * The component for moving list in the track. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const track = (function (Splide, Components) { + /** + * Hold the Layout component. + * + * @type {Object} + */ + var Layout; + /** + * Hold the Layout component. + * + * @type {Object} + */ + + var Elements; + /** + * Store the list element. + * + * @type {Element} + */ + + var list; + /** + * Whether the current direction is vertical or not. + * + * @type {boolean} + */ + + var isVertical = Splide.options.direction === TTB; + /** + * Whether the slider type is FADE or not. + * + * @type {boolean} + */ + + var isFade = Splide.is(FADE); + /** + * Whether the slider direction is RTL or not. + * + * @type {boolean} + */ + + var isRTL = Splide.options.direction === RTL; + /** + * This will be true while transitioning from the last index to the first one. + * + * @type {boolean} + */ + + var isLoopPending = false; + /** + * Sign for the direction. Only RTL mode uses the positive sign. + * + * @type {number} + */ + + var sign = isRTL ? 1 : -1; + /** + * Track component object. + * + * @type {Object} + */ + + var Track = { + /** + * Make public the sign defined locally. + * + * @type {number} + */ + sign: sign, + + /** + * Called when the component is mounted. + */ + mount: function mount() { + Elements = Components.Elements; + Layout = Components.Layout; + list = Elements.list; + }, + + /** + * Called after the component is mounted. + * The resize event must be registered after the Layout's one is done. + */ + mounted: function mounted() { + var _this = this; + + if (!isFade) { + this.jump(0); + Splide.on('mounted resize updated', function () { + _this.jump(Splide.index); + }); + } + }, + + /** + * Go to the given destination index. + * After arriving there, the track is jump to the new index without animation, mainly for loop mode. + * + * @param {number} destIndex - A destination index. + * This can be negative or greater than slides length for reaching clones. + * @param {number} newIndex - An actual new index. They are always same in Slide and Rewind mode. + * @param {boolean} silently - If true, suppress emitting events. + */ + go: function go(destIndex, newIndex, silently) { + var newPosition = getTrimmedPosition(destIndex); + var prevIndex = Splide.index; // Prevent any actions while transitioning from the last index to the first one for jump. + + if (Splide.State.is(MOVING) && isLoopPending) { + return; + } + + isLoopPending = destIndex !== newIndex; + + if (!silently) { + Splide.emit('move', newIndex, prevIndex, destIndex); + } + + if (Math.abs(newPosition - this.position) >= 1 || isFade) { + Components.Transition.start(destIndex, newIndex, prevIndex, this.toCoord(newPosition), function () { + onTransitionEnd(destIndex, newIndex, prevIndex, silently); + }); + } else { + if (destIndex !== prevIndex && Splide.options.trimSpace === 'move') { + Components.Controller.go(destIndex + destIndex - prevIndex, silently); + } else { + onTransitionEnd(destIndex, newIndex, prevIndex, silently); + } + } + }, + + /** + * Move the track to the specified index. + * + * @param {number} index - A destination index where the track jumps. + */ + jump: function jump(index) { + this.translate(getTrimmedPosition(index)); + }, + + /** + * Set the list position by CSS translate property. + * + * @param {number} position - A new position value. + */ + translate: function translate(position) { + applyStyle(list, { + transform: "translate" + (isVertical ? 'Y' : 'X') + "(" + position + "px)" + }); + }, + + /** + * Cancel the transition and set the list position. + * Also, loop the slider if necessary. + */ + cancel: function cancel() { + if (Splide.is(LOOP)) { + this.shift(); + } else { + // Ensure the current position. + this.translate(this.position); + } + + applyStyle(list, { + transition: '' + }); + }, + + /** + * Shift the slider if it exceeds borders on the edge. + */ + shift: function shift() { + var position = abs(this.position); + var left = abs(this.toPosition(0)); + var right = abs(this.toPosition(Splide.length)); + var innerSize = right - left; + + if (position < left) { + position += innerSize; + } else if (position > right) { + position -= innerSize; + } + + this.translate(sign * position); + }, + + /** + * Trim redundant spaces on the left or right edge if necessary. + * + * @param {number} position - Position value to be trimmed. + * + * @return {number} - Trimmed position. + */ + trim: function trim(position) { + if (!Splide.options.trimSpace || Splide.is(LOOP)) { + return position; + } + + var edge = sign * (Layout.totalSize() - Layout.size - Layout.gap); + return between(position, edge, 0); + }, + + /** + * Calculate the closest slide index from the given position. + * + * @param {number} position - A position converted to an slide index. + * + * @return {number} - The closest slide index. + */ + toIndex: function toIndex(position) { + var _this2 = this; + + var index = 0; + var minDistance = Infinity; + Elements.getSlides(true).forEach(function (Slide) { + var slideIndex = Slide.index; + var distance = abs(_this2.toPosition(slideIndex) - position); + + if (distance < minDistance) { + minDistance = distance; + index = slideIndex; + } + }); + return index; + }, + + /** + * Return coordinates object by the given position. + * + * @param {number} position - A position value. + * + * @return {Object} - A coordinates object. + */ + toCoord: function toCoord(position) { + return { + x: isVertical ? 0 : position, + y: isVertical ? position : 0 + }; + }, + + /** + * Calculate the track position by a slide index. + * + * @param {number} index - Slide index. + * + * @return {Object} - Calculated position. + */ + toPosition: function toPosition(index) { + var position = Layout.totalSize(index) - Layout.slideSize(index) - Layout.gap; + return sign * (position + this.offset(index)); + }, + + /** + * Return the current offset value, considering direction. + * + * @return {number} - Offset amount. + */ + offset: function offset(index) { + var focus = Splide.options.focus; + var slideSize = Layout.slideSize(index); + + if (focus === 'center') { + return -(Layout.size - slideSize) / 2; + } + + return -(parseInt(focus) || 0) * (slideSize + Layout.gap); + }, + + /** + * Return the current position. + * This returns the correct position even while transitioning by CSS. + * + * @return {number} - Current position. + */ + get position() { + var prop = isVertical ? 'top' : isRTL ? 'right' : 'left'; + return getRect(list)[prop] - (getRect(Elements.track)[prop] - Layout.padding[prop] * sign); + } + + }; + /** + * Called whenever slides arrive at a destination. + * + * @param {number} destIndex - A destination index. + * @param {number} newIndex - A new index. + * @param {number} prevIndex - A previous index. + * @param {boolean} silently - If true, suppress emitting events. + */ + + function onTransitionEnd(destIndex, newIndex, prevIndex, silently) { + applyStyle(list, { + transition: '' + }); + isLoopPending = false; + + if (!isFade) { + Track.jump(newIndex); + } + + if (!silently) { + Splide.emit('moved', newIndex, prevIndex, destIndex); + } + } + /** + * Convert index to the trimmed position. + * + * @return {number} - Trimmed position. + */ + + + function getTrimmedPosition(index) { + return Track.trim(Track.toPosition(index)); + } + + return Track; +}); +;// CONCATENATED MODULE: ./src/js/components/clones/index.js +/** + * The component for cloning some slides for "loop" mode of the track. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + + +/** + * The component for cloning some slides for "loop" mode of the track. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const clones = (function (Splide, Components) { + /** + * Store information of all clones. + * + * @type {Array} + */ + var clones = []; + /** + * Store the current clone count on one side. + * + * @type {number} + */ + + var cloneCount = 0; + /** + * Keep Elements component. + * + * @type {Object} + */ + + var Elements = Components.Elements; + /** + * Clones component object. + * + * @type {Object} + */ + + var Clones = { + /** + * Called when the component is mounted. + */ + mount: function mount() { + var _this = this; + + if (Splide.is(LOOP)) { + init(); + Splide.on('refresh:before', function () { + _this.destroy(); + }).on('refresh', init).on('resize', function () { + if (cloneCount !== getCloneCount()) { + // Destroy before refresh not to collect clones by the Elements component. + _this.destroy(); + + Splide.refresh(); + } + }); + } + }, + + /** + * Destroy. + */ + destroy: function destroy() { + dom_remove(clones); + clones = []; + }, + + /** + * Return all clones. + * + * @return {Element[]} - Cloned elements. + */ + get clones() { + return clones; + }, + + /** + * Return clone length. + * + * @return {number} - A length of clones. + */ + get length() { + return clones.length; + } + + }; + /** + * Initialization. + */ + + function init() { + Clones.destroy(); + cloneCount = getCloneCount(); + generateClones(cloneCount); + } + /** + * Generate and append/prepend clones. + * + * @param {number} count - The half number of clones. + */ + + + function generateClones(count) { + var length = Elements.length, + register = Elements.register; + + if (length) { + var slides = Elements.slides; + + while (slides.length < count) { + slides = slides.concat(slides); + } // Clones after the last element. + + + slides.slice(0, count).forEach(function (elm, index) { + var clone = cloneDeeply(elm); + append(Elements.list, clone); + clones.push(clone); + register(clone, index + length, index % length); + }); // Clones before the first element. + + slides.slice(-count).forEach(function (elm, index) { + var clone = cloneDeeply(elm); + before(clone, slides[0]); + clones.push(clone); + register(clone, index - count, (length + index - count % length) % length); + }); + } + } + /** + * Return half count of clones to be generated. + * Clone count is determined by: + * - "clones" value in the options. + * - Number of slides that can be placed in a view in "fixed" mode. + * - Max pages a flick action can move. + * - Whether the slide length is enough for perPage. + * + * @return {number} - Count for clones. + */ + + + function getCloneCount() { + var options = Splide.options; + + if (options.clones) { + return options.clones; + } // Use the slide length in autoWidth mode because the number cannot be calculated. + + + var baseCount = options.autoWidth || options.autoHeight ? Elements.length : options.perPage; + var dimension = options.direction === TTB ? 'Height' : 'Width'; + var fixedSize = toPixel(Splide.root, options["fixed" + dimension]); + + if (fixedSize) { + // Roughly calculate the count. This needs not to be strict. + baseCount = Math.ceil(Elements.track["client" + dimension] / fixedSize); + } + + return baseCount * (options.drag ? options.flickMaxPages + 1 : 1); + } + /** + * Clone deeply the given element. + * + * @param {Element} elm - An element being duplicated. + * + * @return {Node} - A cloned node(element). + */ + + + function cloneDeeply(elm) { + var clone = elm.cloneNode(true); + addClass(clone, Splide.classes.clone); // ID should not be duplicated. + + removeAttribute(clone, 'id'); + return clone; + } + + return Clones; +}); +;// CONCATENATED MODULE: ./src/js/components/layout/directions/horizontal.js +/** + * The resolver component for horizontal layout. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + +/** + * The resolver component for horizontal layout. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The resolver object. + */ + +/* harmony default export */ const horizontal = (function (Splide, Components) { + /** + * Keep the Elements component. + * + * @type {string} + */ + var Elements = Components.Elements; + /** + * Keep the root element. + * + * @type {Element} + */ + + var root = Splide.root; + /** + * Keep the track element. + * + * @type {Element} + */ + + var track; + /** + * Keep the latest options. + * + * @type {Element} + */ + + var options = Splide.options; + return { + /** + * Margin property name. + * + * @type {string} + */ + margin: 'margin' + (options.direction === RTL ? 'Left' : 'Right'), + + /** + * Always 0 because the height will be determined by inner contents. + * + * @type {number} + */ + height: 0, + + /** + * Initialization. + */ + init: function init() { + this.resize(); + }, + + /** + * Resize gap and padding. + * This must be called on init. + */ + resize: function resize() { + options = Splide.options; + track = Elements.track; + this.gap = toPixel(root, options.gap); + var padding = options.padding; + var left = toPixel(root, padding.left || padding); + var right = toPixel(root, padding.right || padding); + this.padding = { + left: left, + right: right + }; + applyStyle(track, { + paddingLeft: unit(left), + paddingRight: unit(right) + }); + }, + + /** + * Return total width from the left of the list to the right of the slide specified by the provided index. + * + * @param {number} index - Optional. A slide index. If undefined, total width of the slider will be returned. + * + * @return {number} - Total width to the right side of the specified slide, or 0 for an invalid index. + */ + totalWidth: function totalWidth(index) { + if (index === void 0) { + index = Splide.length - 1; + } + + var Slide = Elements.getSlide(index); + var width = 0; + + if (Slide) { + var slideRect = getRect(Slide.slide); + var listRect = getRect(Elements.list); + + if (options.direction === RTL) { + width = listRect.right - slideRect.left; + } else { + width = slideRect.right - listRect.left; + } + + width += this.gap; + } + + return width; + }, + + /** + * Return the slide width in px. + * + * @param {number} index - Slide index. + * + * @return {number} - The slide width. + */ + slideWidth: function slideWidth(index) { + if (options.autoWidth) { + var Slide = Elements.getSlide(index); + return Slide ? Slide.slide.offsetWidth : 0; + } + + var width = options.fixedWidth || (this.width + this.gap) / options.perPage - this.gap; + return toPixel(root, width); + }, + + /** + * Return the slide height in px. + * + * @return {number} - The slide height. + */ + slideHeight: function slideHeight() { + var height = options.height || options.fixedHeight || this.width * options.heightRatio; + return toPixel(root, height); + }, + + /** + * Return slider width without padding. + * + * @return {number} - Current slider width. + */ + get width() { + return track.clientWidth - this.padding.left - this.padding.right; + } + + }; +}); +;// CONCATENATED MODULE: ./src/js/components/layout/directions/vertical.js +/** + * The resolver component for vertical layout. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + +/** + * The resolver component for vertical layout. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The resolver object. + */ + +/* harmony default export */ const vertical = (function (Splide, Components) { + /** + * Keep the Elements component. + * + * @type {string} + */ + var Elements = Components.Elements; + /** + * Keep the root element. + * + * @type {Element} + */ + + var root = Splide.root; + /** + * Keep the track element. + * + * @type {Element} + */ + + var track; + /** + * Keep the latest options. + * + * @type {Element} + */ + + var options; + return { + /** + * Margin property name. + * + * @type {string} + */ + margin: 'marginBottom', + + /** + * Initialization. + */ + init: function init() { + this.resize(); + }, + + /** + * Resize gap and padding. + * This must be called on init. + */ + resize: function resize() { + options = Splide.options; + track = Elements.track; + this.gap = toPixel(root, options.gap); + var padding = options.padding; + var top = toPixel(root, padding.top || padding); + var bottom = toPixel(root, padding.bottom || padding); + this.padding = { + top: top, + bottom: bottom + }; + applyStyle(track, { + paddingTop: unit(top), + paddingBottom: unit(bottom) + }); + }, + + /** + * Return total height from the top of the list to the bottom of the slide specified by the provided index. + * + * @param {number} index - Optional. A slide index. If undefined, total height of the slider will be returned. + * + * @return {number} - Total height to the bottom of the specified slide, or 0 for an invalid index. + */ + totalHeight: function totalHeight(index) { + if (index === void 0) { + index = Splide.length - 1; + } + + var Slide = Elements.getSlide(index); + + if (Slide) { + return getRect(Slide.slide).bottom - getRect(Elements.list).top + this.gap; + } + + return 0; + }, + + /** + * Return the slide width in px. + * + * @return {number} - The slide width. + */ + slideWidth: function slideWidth() { + return toPixel(root, options.fixedWidth || this.width); + }, + + /** + * Return the slide height in px. + * + * @param {number} index - Slide index. + * + * @return {number} - The slide height. + */ + slideHeight: function slideHeight(index) { + if (options.autoHeight) { + var Slide = Elements.getSlide(index); + return Slide ? Slide.slide.offsetHeight : 0; + } + + var height = options.fixedHeight || (this.height + this.gap) / options.perPage - this.gap; + return toPixel(root, height); + }, + + /** + * Return slider width without padding. + * + * @return {number} - Current slider width. + */ + get width() { + return track.clientWidth; + }, + + /** + * Return slide height without padding. + * + * @return {number} - Slider height. + */ + get height() { + var height = options.height || this.width * options.heightRatio; + exist(height, '"height" or "heightRatio" is missing.'); + return toPixel(root, height) - this.padding.top - this.padding.bottom; + } + + }; +}); +;// CONCATENATED MODULE: ./src/js/utils/time.js +/** + * A package of utility functions related with time. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * Simple throttle function that controls how often the given function is executed. + * + * @param {function} func - A function to be throttled. + * @param {number} wait - Time in millisecond for interval of execution. + * + * @return {Function} - A debounced function. + */ +function throttle(func, wait) { + var timeout; // Declare function by the "function" keyword to prevent "this" from being inherited. + + return function () { + if (!timeout) { + timeout = setTimeout(function () { + func(); + timeout = null; + }, wait); + } + }; +} +/** + * Custom setInterval function that provides progress rate as callback. + * + * @param {function} callback - A callback function fired every time the interval time passes. + * @param {number} interval - Interval duration in milliseconds. + * @param {function} progress - A callback function fired whenever the progress goes. + * + * @return {Object} - An object containing play() and pause() functions. + */ + +function createInterval(callback, interval, progress) { + var _window = window, + requestAnimationFrame = _window.requestAnimationFrame; + var start, + elapse, + rate, + _pause = true; + + var step = function step(timestamp) { + if (!_pause) { + if (!start) { + start = timestamp; + + if (rate && rate < 1) { + start -= rate * interval; + } + } + + elapse = timestamp - start; + rate = elapse / interval; + + if (elapse >= interval) { + start = 0; + rate = 1; + callback(); + } + + if (progress) { + progress(rate); + } + + requestAnimationFrame(step); + } + }; + + return { + pause: function pause() { + _pause = true; + start = 0; + }, + play: function play(reset) { + start = 0; + + if (reset) { + rate = 0; + } + + if (_pause) { + _pause = false; + requestAnimationFrame(step); + } + } + }; +} +;// CONCATENATED MODULE: ./src/js/components/layout/index.js +/** + * The component for handing slide layouts and their sizes. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + + + + + +/** + * The component for handing slide layouts and their sizes. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const layout = (function (Splide, Components) { + /** + * Keep the Elements component. + * + * @type {string} + */ + var Elements = Components.Elements; + /** + * Whether the slider is vertical or not. + * + * @type {boolean} + */ + + var isVertical = Splide.options.direction === TTB; + /** + * Layout component object. + * + * @type {Object} + */ + + var Layout = object_assign({ + /** + * Called when the component is mounted. + */ + mount: function mount() { + bind(); + init(); // The word "size" means width for a horizontal slider and height for a vertical slider. + + this.totalSize = isVertical ? this.totalHeight : this.totalWidth; + this.slideSize = isVertical ? this.slideHeight : this.slideWidth; + }, + + /** + * Destroy the component. + */ + destroy: function destroy() { + removeAttribute([Elements.list, Elements.track], 'style'); + }, + + /** + * Return the slider height on the vertical mode or width on the horizontal mode. + * + * @return {number} + */ + get size() { + return isVertical ? this.height : this.width; + } + + }, isVertical ? vertical(Splide, Components) : horizontal(Splide, Components)); + /** + * Init slider styles according to options. + */ + + function init() { + Layout.init(); + applyStyle(Splide.root, { + maxWidth: unit(Splide.options.width) + }); + Elements.each(function (Slide) { + Slide.slide.style[Layout.margin] = unit(Layout.gap); + }); + resize(); + } + /** + * Listen the resize native event with throttle. + * Initialize when the component is mounted or options are updated. + */ + + + function bind() { + Splide.on('resize load', throttle(function () { + Splide.emit('resize'); + }, Splide.options.throttle), window).on('resize', resize).on('updated refresh', init); + } + /** + * Resize the track and slide elements. + */ + + + function resize() { + var options = Splide.options; + Layout.resize(); + applyStyle(Elements.track, { + height: unit(Layout.height) + }); + var slideHeight = options.autoHeight ? null : unit(Layout.slideHeight()); + Elements.each(function (Slide) { + applyStyle(Slide.container, { + height: slideHeight + }); + applyStyle(Slide.slide, { + width: options.autoWidth ? null : unit(Layout.slideWidth(Slide.index)), + height: Slide.container ? null : slideHeight + }); + }); + Splide.emit('resized'); + } + + return Layout; +}); +;// CONCATENATED MODULE: ./src/js/components/drag/index.js +/** + * The component for supporting mouse drag and swipe. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + + + +var drag_abs = Math.abs; +/** + * If the absolute velocity is greater thant this value, + * a slider always goes to a different slide after drag, not allowed to stay on a current slide. + */ + +var MIN_VELOCITY = 0.1; +/** + * Adjust how much the track can be pulled on the first or last page. + * The larger number this is, the farther the track moves. + * This should be around 5 - 9. + * + * @type {number} + */ + +var FRICTION_REDUCER = 7; +/** + * The component supporting mouse drag and swipe. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const drag = (function (Splide, Components) { + /** + * Store the Move component. + * + * @type {Object} + */ + var Track = Components.Track; + /** + * Store the Controller component. + * + * @type {Object} + */ + + var Controller = Components.Controller; + /** + * Coordinate of the track on starting drag. + * + * @type {Object} + */ + + var startCoord; + /** + * Analyzed info on starting drag. + * + * @type {Object|null} + */ + + var startInfo; + /** + * Analyzed info being updated while dragging/swiping. + * + * @type {Object} + */ + + var currentInfo; + /** + * Determine whether slides are being dragged or not. + * + * @type {boolean} + */ + + var isDragging; + /** + * Whether the slider direction is vertical or not. + * + * @type {boolean} + */ + + var isVertical = Splide.options.direction === TTB; + /** + * Axis for the direction. + * + * @type {string} + */ + + var axis = isVertical ? 'y' : 'x'; + /** + * Drag component object. + * + * @type {Object} + */ + + var Drag = { + /** + * Whether dragging is disabled or not. + * + * @type {boolean} + */ + disabled: false, + + /** + * Called when the component is mounted. + */ + mount: function mount() { + var _this = this; + + var Elements = Components.Elements; + var track = Elements.track; + Splide.on('touchstart mousedown', start, track).on('touchmove mousemove', move, track, { + passive: false + }).on('touchend touchcancel mouseleave mouseup dragend', end, track).on('mounted refresh', function () { + // Prevent dragging an image or anchor itself. + each(Elements.list.querySelectorAll('img, a'), function (elm) { + Splide.off('dragstart', elm).on('dragstart', function (e) { + e.preventDefault(); + }, elm, { + passive: false + }); + }); + }).on('mounted updated', function () { + _this.disabled = !Splide.options.drag; + }); + } + }; + /** + * Called when the track starts to be dragged. + * + * @param {TouchEvent|MouseEvent} e - TouchEvent or MouseEvent object. + */ + + function start(e) { + if (!Drag.disabled && !isDragging) { + // These prams are used to evaluate whether the slider should start moving. + init(e); + } + } + /** + * Initialize parameters. + * + * @param {TouchEvent|MouseEvent} e - TouchEvent or MouseEvent object. + */ + + + function init(e) { + startCoord = Track.toCoord(Track.position); + startInfo = analyze(e, {}); + currentInfo = startInfo; + } + /** + * Called while the track being dragged. + * + * @param {TouchEvent|MouseEvent} e - TouchEvent or MouseEvent object. + */ + + + function move(e) { + if (startInfo) { + currentInfo = analyze(e, startInfo); + + if (isDragging) { + if (e.cancelable) { + e.preventDefault(); + } + + if (!Splide.is(FADE)) { + var position = startCoord[axis] + currentInfo.offset[axis]; + Track.translate(resist(position)); + } + } else { + if (shouldMove(currentInfo)) { + Splide.emit('drag', startInfo); + isDragging = true; + Track.cancel(); // These params are actual drag data. + + init(e); + } + } + } + } + /** + * Determine whether to start moving the track or not by drag angle. + * + * @param {Object} info - An information object. + * + * @return {boolean} - True if the track should be moved or false if not. + */ + + + function shouldMove(_ref) { + var offset = _ref.offset; + + if (Splide.State.is(MOVING) && Splide.options.waitForTransition) { + return false; + } + + var angle = Math.atan(drag_abs(offset.y) / drag_abs(offset.x)) * 180 / Math.PI; + + if (isVertical) { + angle = 90 - angle; + } + + return angle < Splide.options.dragAngleThreshold; + } + /** + * Resist dragging the track on the first/last page because there is no more. + * + * @param {number} position - A position being applied to the track. + * + * @return {Object} - Adjusted position. + */ + + + function resist(position) { + if (Splide.is(SLIDE)) { + var sign = Track.sign; + + var _start = sign * Track.trim(Track.toPosition(0)); + + var _end = sign * Track.trim(Track.toPosition(Controller.edgeIndex)); + + position *= sign; + + if (position < _start) { + position = _start - FRICTION_REDUCER * Math.log(_start - position); + } else if (position > _end) { + position = _end + FRICTION_REDUCER * Math.log(position - _end); + } + + position *= sign; + } + + return position; + } + /** + * Called when dragging ends. + */ + + + function end() { + startInfo = null; + + if (isDragging) { + Splide.emit('dragged', currentInfo); + go(currentInfo); + isDragging = false; + } + } + /** + * Go to the slide determined by the analyzed data. + * + * @param {Object} info - An info object. + */ + + + function go(info) { + var velocity = info.velocity[axis]; + var absV = drag_abs(velocity); + + if (absV > 0) { + var options = Splide.options; + var index = Splide.index; + var sign = velocity < 0 ? -1 : 1; + var destIndex = index; + + if (!Splide.is(FADE)) { + var destination = Track.position; + + if (absV > options.flickVelocityThreshold && drag_abs(info.offset[axis]) < options.swipeDistanceThreshold) { + destination += sign * Math.min(absV * options.flickPower, Components.Layout.size * (options.flickMaxPages || 1)); + } + + destIndex = Track.toIndex(destination); + } + /* + * Do not allow the track to go to a previous position if there is enough velocity. + * Always use the adjacent index for the fade mode. + */ + + + if (destIndex === index && absV > MIN_VELOCITY) { + destIndex = index + sign * Track.sign; + } + + if (Splide.is(SLIDE)) { + destIndex = between(destIndex, 0, Controller.edgeIndex); + } + + Controller.go(destIndex, options.isNavigation); + } + } + /** + * Analyze the given event object and return important information for handling swipe behavior. + * + * @param {Event} e - Touch or Mouse event object. + * @param {Object} startInfo - Information analyzed on start for calculating difference from the current one. + * + * @return {Object} - An object containing analyzed information, such as offset, velocity, etc. + */ + + + function analyze(e, startInfo) { + var timeStamp = e.timeStamp, + touches = e.touches; + + var _ref2 = touches ? touches[0] : e, + clientX = _ref2.clientX, + clientY = _ref2.clientY; + + var _ref3 = startInfo.to || {}, + _ref3$x = _ref3.x, + fromX = _ref3$x === void 0 ? clientX : _ref3$x, + _ref3$y = _ref3.y, + fromY = _ref3$y === void 0 ? clientY : _ref3$y; + + var startTime = startInfo.time || 0; + var offset = { + x: clientX - fromX, + y: clientY - fromY + }; + var duration = timeStamp - startTime; + var velocity = { + x: offset.x / duration, + y: offset.y / duration + }; + return { + to: { + x: clientX, + y: clientY + }, + offset: offset, + time: timeStamp, + velocity: velocity + }; + } + + return Drag; +}); +;// CONCATENATED MODULE: ./src/js/components/click/index.js +/** + * The component for handling a click event. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * The component for handling a click event. + * Click should be disabled during drag/swipe. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The component object. + */ +/* harmony default export */ const click = (function (Splide, Components) { + /** + * Whether click is disabled or not. + * + * @type {boolean} + */ + var disabled = false; + /** + * Click component object. + * + * @type {Object} + */ + + var Click = { + /** + * Mount only when the drag is activated and the slide type is not "fade". + * + * @type {boolean} + */ + required: Splide.options.drag, + + /** + * Called when the component is mounted. + */ + mount: function mount() { + Splide.on('click', onClick, Components.Elements.track, { + capture: true + }).on('drag', function () { + disabled = true; + }).on('dragged', function () { + // Make sure the flag is released after the click event is fired. + setTimeout(function () { + disabled = false; + }); + }); + } + }; + /** + * Called when a track element is clicked. + * + * @param {Event} e - A click event. + */ + + function onClick(e) { + if (disabled) { + e.preventDefault(); + e.stopPropagation(); + e.stopImmediatePropagation(); + } + } + + return Click; +}); +;// CONCATENATED MODULE: ./src/js/components/autoplay/index.js +/** + * The component for playing slides automatically. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + +/** + * Set of pause flags. + */ + +var PAUSE_FLAGS = { + HOVER: 1, + FOCUS: 2, + MANUAL: 3 +}; +/** + * The component for playing slides automatically. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * @param {string} name - A component name as a lowercase string. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const autoplay = (function (Splide, Components, name) { + /** + * Store pause flags. + * + * @type {Array} + */ + var flags = []; + /** + * Store an interval object. + * + * @type {Object}; + */ + + var interval; + /** + * Keep the Elements component. + * + * @type {string} + */ + + var Elements = Components.Elements; + /** + * Autoplay component object. + * + * @type {Object} + */ + + var Autoplay = { + /** + * Required only when the autoplay option is true. + * + * @type {boolean} + */ + required: Splide.options.autoplay, + + /** + * Called when the component is mounted. + * Note that autoplay starts only if there are slides over perPage number. + */ + mount: function mount() { + var options = Splide.options; + + if (Elements.slides.length > options.perPage) { + interval = createInterval(function () { + Splide.go('>'); + }, options.interval, function (rate) { + Splide.emit(name + ":playing", rate); + + if (Elements.bar) { + applyStyle(Elements.bar, { + width: rate * 100 + "%" + }); + } + }); + bind(); + this.play(); + } + }, + + /** + * Start autoplay. + * + * @param {number} flag - A pause flag to be removed. + */ + play: function play(flag) { + if (flag === void 0) { + flag = 0; + } + + flags = flags.filter(function (f) { + return f !== flag; + }); + + if (!flags.length) { + Splide.emit(name + ":play"); + interval.play(Splide.options.resetProgress); + } + }, + + /** + * Pause autoplay. + * Note that Array.includes is not supported by IE. + * + * @param {number} flag - A pause flag to be added. + */ + pause: function pause(flag) { + if (flag === void 0) { + flag = 0; + } + + interval.pause(); + + if (flags.indexOf(flag) === -1) { + flags.push(flag); + } + + if (flags.length === 1) { + Splide.emit(name + ":pause"); + } + } + }; + /** + * Listen some events. + */ + + function bind() { + var options = Splide.options; + var sibling = Splide.sibling; + var elms = [Splide.root, sibling ? sibling.root : null]; + + if (options.pauseOnHover) { + switchOn(elms, 'mouseleave', PAUSE_FLAGS.HOVER, true); + switchOn(elms, 'mouseenter', PAUSE_FLAGS.HOVER, false); + } + + if (options.pauseOnFocus) { + switchOn(elms, 'focusout', PAUSE_FLAGS.FOCUS, true); + switchOn(elms, 'focusin', PAUSE_FLAGS.FOCUS, false); + } + + if (Elements.play) { + Splide.on('click', function () { + // Need to be removed a focus flag at first. + Autoplay.play(PAUSE_FLAGS.FOCUS); + Autoplay.play(PAUSE_FLAGS.MANUAL); + }, Elements.play); + } + + if (Elements.pause) { + switchOn([Elements.pause], 'click', PAUSE_FLAGS.MANUAL, false); + } + + Splide.on('move refresh', function () { + Autoplay.play(); + }) // Rewind the timer. + .on('destroy', function () { + Autoplay.pause(); + }); + } + /** + * Play or pause on the given event. + * + * @param {Element[]} elms - Elements. + * @param {string} event - An event name or names. + * @param {number} flag - A pause flag defined on the top. + * @param {boolean} play - Determine whether to play or pause. + */ + + + function switchOn(elms, event, flag, play) { + elms.forEach(function (elm) { + Splide.on(event, function () { + Autoplay[play ? 'play' : 'pause'](flag); + }, elm); + }); + } + + return Autoplay; +}); +;// CONCATENATED MODULE: ./src/js/components/cover/index.js +/** + * The component for change an img element to background image of its wrapper. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * The component for change an img element to background image of its wrapper. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const cover = (function (Splide, Components) { + /** + * Hold options. + * + * @type {Object} + */ + var options = Splide.options; + /** + * Cover component object. + * + * @type {Object} + */ + + var Cover = { + /** + * Required only when "cover" option is true. + * + * @type {boolean} + */ + required: options.cover, + + /** + * Called when the component is mounted. + */ + mount: function mount() { + Splide.on('lazyload:loaded', function (img) { + cover(img, false); + }); + Splide.on('mounted updated refresh', function () { + return apply(false); + }); + }, + + /** + * Destroy. + */ + destroy: function destroy() { + apply(true); + } + }; + /** + * Apply "cover" to all slides. + * + * @param {boolean} uncover - If true, "cover" will be clear. + */ + + function apply(uncover) { + Components.Elements.each(function (Slide) { + var img = child(Slide.slide, 'IMG') || child(Slide.container, 'IMG'); + + if (img && img.src) { + cover(img, uncover); + } + }); + } + /** + * Set background image of the parent element, using source of the given image element. + * + * @param {Element} img - An image element. + * @param {boolean} uncover - Reset "cover". + */ + + + function cover(img, uncover) { + applyStyle(img.parentElement, { + background: uncover ? '' : "center/cover no-repeat url(\"" + img.src + "\")" + }); + applyStyle(img, { + display: uncover ? '' : 'none' + }); + } + + return Cover; +}); +;// CONCATENATED MODULE: ./src/js/components/arrows/path.js +/** + * Export vector path for an arrow. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + +/** + * Namespace definition for SVG element. + * + * @type {string} + */ +var XML_NAME_SPACE = 'http://www.w3.org/2000/svg'; +/** + * The arrow vector path. + * + * @type {number} + */ + +var PATH = 'm15.5 0.932-4.3 4.38 14.5 14.6-14.5 14.5 4.3 4.4 14.6-14.6 4.4-4.3-4.4-4.4-14.6-14.6z'; +/** + * SVG width and height. + * + * @type {number} + */ + +var SIZE = 40; +;// CONCATENATED MODULE: ./src/js/components/arrows/index.js +/** + * The component for appending prev/next arrows. + * + * @author Naotoshi Fujita + * @copyright Naotoshi Fujita. All rights reserved. + */ + + + +/** + * The component for appending prev/next arrows. + * + * @param {Splide} Splide - A Splide instance. + * @param {Object} Components - An object containing components. + * @param {string} name - A component name as a lowercase string. + * + * @return {Object} - The component object. + */ + +/* harmony default export */ const arrows = (function (Splide, Components, name) { + /** + * Previous arrow element. + * + * @type {Element|undefined} + */ + var prev; + /** + * Next arrow element. + * + * @type {Element|undefined} + */ + + var next; + /** + * Store the class list. + * + * @type {Object} + */ + + var classes = Splide.classes; + /** + * Hold the root element. + * + * @type {Element} + */ + + var root = Splide.root; + /** + * Whether arrows are created programmatically or not. + * + * @type {boolean} + */ + + var created; + /** + * Hold the Elements component. + * + * @type {Object} + */ + + var Elements = Components.Elements; + /** + * Arrows component object. + * + * @type {Object} + */ + + var Arrows = { + /** + * Required when the arrows option is true. + * + * @type {boolean} + */ + required: Splide.options.arrows, + + /** + * Called when the component is mounted. + */ + mount: function mount() { + // Attempt to get arrows from HTML source. + prev = Elements.arrows.prev; + next = Elements.arrows.next; // If arrows were not found in HTML, let's generate them. + + if ((!prev || !next) && Splide.options.arrows) { + prev = createArrow(true); + next = createArrow(false); + created = true; + appendArrows(); + } + + if (prev && next) { + bind(); + } + + this.arrows = { + prev: prev, + next: next + }; + }, + + /** + * Called after all components are mounted. + */ + mounted: function mounted() { + Splide.emit(name + ":mounted", prev, next); + }, + + /** + * Destroy. + */ + destroy: function destroy() { + removeAttribute([prev, next], 'disabled'); + + if (created) { + dom_remove(prev.parentElement); + } + } + }; + /** + * Listen to native and custom events. + */ + + function bind() { + Splide.on('click', function () { + Splide.go('<'); + }, prev).on('click', function () { + Splide.go('>'); + }, next).on('mounted move updated refresh', updateDisabled); + } + /** + * Update a disabled attribute. + */ + + + function updateDisabled() { + var _Components$Controlle = Components.Controller, + prevIndex = _Components$Controlle.prevIndex, + nextIndex = _Components$Controlle.nextIndex; + var isEnough = Splide.length > Splide.options.perPage || Splide.is(LOOP); + prev.disabled = prevIndex < 0 || !isEnough; + next.disabled = nextIndex < 0 || !isEnough; + Splide.emit(name + ":updated", prev, next, prevIndex, nextIndex); + } + /** + * Create a wrapper element and append arrows. + */ + + + function appendArrows() { + var wrapper = create('div', { + "class": classes.arrows + }); + append(wrapper, prev); + append(wrapper, next); + var slider = Elements.slider; + var parent = Splide.options.arrows === 'slider' && slider ? slider : root; + before(wrapper, parent.firstElementChild); + } + /** + * Create an arrow element. + * + * @param {boolean} prev - Determine to create a prev arrow or next arrow. + * + * @return {Element} - A created arrow element. + */ + + + function createArrow(prev) { + var arrow = "