diff --git a/README.md b/README.md index f56ae451c..7a41a0df7 100644 --- a/README.md +++ b/README.md @@ -143,7 +143,7 @@ var sortable = new Sortable(el, { forceFallback: false, // ignore the HTML5 DnD behaviour and force the fallback to kick in fallbackClass: "sortable-fallback", // Class name for the cloned DOM Element when using forceFallback - fallbackOnBody: false, // Appends the cloned DOM Element into the Document's Body + getFallbackParent: null, // Getter function that returns the parent for the cloned DOM Element fallbackTolerance: 0, // Specify in pixels how far the mouse should move before it's considered as a drag. dragoverBubble: false, diff --git a/Sortable.js b/Sortable.js index c394160e7..80996843a 100644 --- a/Sortable.js +++ b/Sortable.js @@ -10,75 +10,6 @@ (global = global || self, global.Sortable = factory()); }(this, (function () { 'use strict'; - function ownKeys(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - - if (enumerableOnly) { - symbols = symbols.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - } - - keys.push.apply(keys, symbols); - } - - return keys; - } - - function _objectSpread2(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - - if (i % 2) { - ownKeys(Object(source), true).forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys(Object(source)).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - - return target; - } - - function _typeof(obj) { - "@babel/helpers - typeof"; - - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } - - return _typeof(obj); - } - - function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; - } - function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { @@ -97,75 +28,6 @@ return _extends.apply(this, arguments); } - function _objectWithoutPropertiesLoose(source, excluded) { - if (source == null) return {}; - var target = {}; - var sourceKeys = Object.keys(source); - var key, i; - - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - target[key] = source[key]; - } - - return target; - } - - function _objectWithoutProperties(source, excluded) { - if (source == null) return {}; - - var target = _objectWithoutPropertiesLoose(source, excluded); - - var key, i; - - if (Object.getOwnPropertySymbols) { - var sourceSymbolKeys = Object.getOwnPropertySymbols(source); - - for (i = 0; i < sourceSymbolKeys.length; i++) { - key = sourceSymbolKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; - target[key] = source[key]; - } - } - - return target; - } - - function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); - } - - function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray(arr); - } - - function _iterableToArray(iter) { - if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); - } - - function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); - } - - function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - - return arr2; - } - - function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); - } - var version = "1.15.0"; function userAgent(pattern) { @@ -174,14 +36,14 @@ } } - var IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i); - var Edge = userAgent(/Edge/i); - var FireFox = userAgent(/firefox/i); - var Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i); - var IOS = userAgent(/iP(ad|od|hone)/i); - var ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i); + const IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i); + const Edge = userAgent(/Edge/i); + const FireFox = userAgent(/firefox/i); + const Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i); + const IOS = userAgent(/iP(ad|od|hone)/i); + const ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i); - var captureMode = { + const captureMode = { capture: false, passive: false }; @@ -246,21 +108,21 @@ return null; } - var R_SPACE = /\s+/g; + const R_SPACE = /\s+/g; function toggleClass(el, name, state) { if (el && name) { if (el.classList) { el.classList[state ? 'add' : 'remove'](name); } else { - var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' '); + let className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' '); el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' '); } } } function css(el, prop, val) { - var style = el && el.style; + let style = el && el.style; if (style) { if (val === void 0) { @@ -282,13 +144,13 @@ } function matrix(el, selfOnly) { - var appliedTransforms = ''; + let appliedTransforms = ''; if (typeof el === 'string') { appliedTransforms = el; } else { do { - var transform = css(el, 'transform'); + let transform = css(el, 'transform'); if (transform && transform !== 'none') { appliedTransforms = transform + ' ' + appliedTransforms; @@ -298,7 +160,7 @@ } while (!selfOnly && (el = el.parentNode)); } - var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix; + const matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix; /*jshint -W056 */ return matrixFn && new matrixFn(appliedTransforms); @@ -306,7 +168,7 @@ function find(ctx, tagName, iterator) { if (ctx) { - var list = ctx.getElementsByTagName(tagName), + let list = ctx.getElementsByTagName(tagName), i = 0, n = list.length; @@ -323,7 +185,7 @@ } function getWindowScrollingElement() { - var scrollingElement = document.scrollingElement; + let scrollingElement = document.scrollingElement; if (scrollingElement) { return scrollingElement; @@ -344,7 +206,7 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) { if (!el.getBoundingClientRect && el !== window) return; - var elRect, top, left, bottom, right, height, width; + let elRect, top, left, bottom, right, height, width; if (el !== window && el.parentNode && el !== getWindowScrollingElement()) { elRect = el.getBoundingClientRect(); @@ -371,7 +233,7 @@ if (!IE11OrLess) { do { if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) { - var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container + let containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container top -= containerRect.top + parseInt(css(container, 'border-top-width')); left -= containerRect.left + parseInt(css(container, 'border-left-width')); @@ -387,7 +249,7 @@ if (undoScale && el !== window) { // Adjust for scale() - var elMatrix = matrix(container || el), + let elMatrix = matrix(container || el), scaleX = elMatrix && elMatrix.a, scaleY = elMatrix && elMatrix.d; @@ -420,13 +282,13 @@ function isScrolledPast(el, elSide, parentSide) { - var parent = getParentAutoScrollElement(el, true), + let parent = getParentAutoScrollElement(el, true), elSideVal = getRect(el)[elSide]; /* jshint boss:true */ while (parent) { - var parentSideVal = getRect(parent)[parentSide], - visible = void 0; + let parentSideVal = getRect(parent)[parentSide], + visible; if (parentSide === 'top' || parentSide === 'left') { visible = elSideVal >= parentSideVal; @@ -452,7 +314,7 @@ function getChild(el, childNum, options, includeDragEl) { - var currentChild = 0, + let currentChild = 0, i = 0, children = el.children; @@ -479,7 +341,7 @@ function lastChild(el, selector) { - var last = el.lastElementChild; + let last = el.lastElementChild; while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) { last = last.previousElementSibling; @@ -497,7 +359,7 @@ function index(el, selector) { - var index = 0; + let index = 0; if (!el || !el.parentNode) { return -1; @@ -522,13 +384,13 @@ function getRelativeScrollOffset(el) { - var offsetLeft = 0, + let offsetLeft = 0, offsetTop = 0, winScroller = getWindowScrollingElement(); if (el) { do { - var elMatrix = matrix(el), + let elMatrix = matrix(el), scaleX = elMatrix.a, scaleY = elMatrix.d; offsetLeft += el.scrollLeft * scaleX; @@ -547,10 +409,10 @@ function indexOfObject(arr, obj) { - for (var i in arr) { + for (let i in arr) { if (!arr.hasOwnProperty(i)) continue; - for (var key in obj) { + for (let key in obj) { if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i); } } @@ -561,13 +423,13 @@ function getParentAutoScrollElement(el, includeSelf) { // skip to window if (!el || !el.getBoundingClientRect) return getWindowScrollingElement(); - var elem = el; - var gotSelf = false; + let elem = el; + let gotSelf = false; do { // we don't need to get elem css if it isn't even overflowing in the first place (performance) if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) { - var elemCSS = css(elem); + let elemCSS = css(elem); if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) { if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement(); @@ -584,7 +446,7 @@ function extend(dst, src) { if (dst && src) { - for (var key in src) { + for (let key in src) { if (src.hasOwnProperty(key)) { dst[key] = src[key]; } @@ -598,12 +460,12 @@ return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width); } - var _throttleTimeout; + let _throttleTimeout; function throttle(callback, ms) { return function () { if (!_throttleTimeout) { - var args = arguments, + let args = arguments, _this = this; if (args.length === 1) { @@ -630,8 +492,8 @@ } function clone(el) { - var Polymer = window.Polymer; - var $ = window.jQuery || window.Zepto; + let Polymer = window.Polymer; + let $ = window.jQuery || window.Zepto; if (Polymer && Polymer.dom) { return Polymer.dom(el).cloneNode(true); @@ -658,28 +520,27 @@ css(el, 'height', ''); } - var expando = 'Sortable' + new Date().getTime(); + const expando = 'Sortable' + new Date().getTime(); function AnimationStateManager() { - var animationStates = [], + let animationStates = [], animationCallbackId; return { - captureAnimationState: function captureAnimationState() { + captureAnimationState() { animationStates = []; if (!this.options.animation) return; - var children = [].slice.call(this.el.children); - children.forEach(function (child) { + let children = [].slice.call(this.el.children); + children.forEach(child => { if (css(child, 'display') === 'none' || child === Sortable.ghost) return; animationStates.push({ target: child, rect: getRect(child) }); - - var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation - + let fromRect = { ...animationStates[animationStates.length - 1].rect + }; // If animating: compensate for current animation if (child.thisAnimationDuration) { - var childMatrix = matrix(child, true); + let childMatrix = matrix(child, true); if (childMatrix) { fromRect.top -= childMatrix.f; @@ -690,27 +551,28 @@ child.fromRect = fromRect; }); }, - addAnimationState: function addAnimationState(state) { + + addAnimationState(state) { animationStates.push(state); }, - removeAnimationState: function removeAnimationState(target) { + + removeAnimationState(target) { animationStates.splice(indexOfObject(animationStates, { - target: target + target }), 1); }, - animateAll: function animateAll(callback) { - var _this = this; + animateAll(callback) { if (!this.options.animation) { clearTimeout(animationCallbackId); if (typeof callback === 'function') callback(); return; } - var animating = false, + let animating = false, animationTime = 0; - animationStates.forEach(function (state) { - var time = 0, + animationStates.forEach(state => { + let time = 0, target = state.target, fromRect = target.fromRect, toRect = getRect(target), @@ -732,7 +594,7 @@ if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) { // If returning to same place as started from animation and on same axis - time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options); + time = calculateRealTime(animatingRect, prevFromRect, prevToRect, this.options); } } // if fromRect != toRect: animate @@ -742,10 +604,10 @@ target.prevToRect = toRect; if (!time) { - time = _this.options.animation; + time = this.options.animation; } - _this.animate(target, animatingRect, toRect, time); + this.animate(target, animatingRect, toRect, time); } if (time) { @@ -774,11 +636,12 @@ animationStates = []; }, - animate: function animate(target, currentRect, toRect, duration) { + + animate(target, currentRect, toRect, duration) { if (duration) { css(target, 'transition', ''); css(target, 'transform', ''); - var elMatrix = matrix(this.el), + let elMatrix = matrix(this.el), scaleX = elMatrix && elMatrix.a, scaleY = elMatrix && elMatrix.d, translateX = (currentRect.left - toRect.left) / (scaleX || 1), @@ -800,6 +663,7 @@ }, duration); } } + }; } @@ -811,59 +675,61 @@ return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation; } - var plugins = []; - var defaults = { + let plugins = []; + const defaults = { initializeByDefault: true }; var PluginManager = { - mount: function mount(plugin) { + mount(plugin) { // Set default static properties - for (var option in defaults) { + for (let option in defaults) { if (defaults.hasOwnProperty(option) && !(option in plugin)) { plugin[option] = defaults[option]; } } - plugins.forEach(function (p) { + plugins.forEach(p => { if (p.pluginName === plugin.pluginName) { - throw "Sortable: Cannot mount plugin ".concat(plugin.pluginName, " more than once"); + throw `Sortable: Cannot mount plugin ${plugin.pluginName} more than once`; } }); plugins.push(plugin); }, - pluginEvent: function pluginEvent(eventName, sortable, evt) { - var _this = this; + pluginEvent(eventName, sortable, evt) { this.eventCanceled = false; - evt.cancel = function () { - _this.eventCanceled = true; + evt.cancel = () => { + this.eventCanceled = true; }; - var eventNameGlobal = eventName + 'Global'; - plugins.forEach(function (plugin) { + const eventNameGlobal = eventName + 'Global'; + plugins.forEach(plugin => { if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable if (sortable[plugin.pluginName][eventNameGlobal]) { - sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({ - sortable: sortable - }, evt)); + sortable[plugin.pluginName][eventNameGlobal]({ + sortable, + ...evt + }); } // Only fire plugin event if plugin is enabled in this sortable, // and plugin has event defined if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) { - sortable[plugin.pluginName][eventName](_objectSpread2({ - sortable: sortable - }, evt)); + sortable[plugin.pluginName][eventName]({ + sortable, + ...evt + }); } }); }, - initializePlugins: function initializePlugins(sortable, el, defaults, options) { - plugins.forEach(function (plugin) { - var pluginName = plugin.pluginName; + + initializePlugins(sortable, el, defaults, options) { + plugins.forEach(plugin => { + const pluginName = plugin.pluginName; if (!sortable.options[pluginName] && !plugin.initializeByDefault) return; - var initialized = new plugin(sortable, el, sortable.options); + let initialized = new plugin(sortable, el, sortable.options); initialized.sortable = sortable; initialized.options = sortable.options; sortable[pluginName] = initialized; // Add default options from plugin @@ -871,27 +737,29 @@ _extends(defaults, initialized.defaults); }); - for (var option in sortable.options) { + for (let option in sortable.options) { if (!sortable.options.hasOwnProperty(option)) continue; - var modified = this.modifyOption(sortable, option, sortable.options[option]); + let modified = this.modifyOption(sortable, option, sortable.options[option]); if (typeof modified !== 'undefined') { sortable.options[option] = modified; } } }, - getEventProperties: function getEventProperties(name, sortable) { - var eventProperties = {}; - plugins.forEach(function (plugin) { + + getEventProperties(name, sortable) { + let eventProperties = {}; + plugins.forEach(plugin => { if (typeof plugin.eventProperties !== 'function') return; _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name)); }); return eventProperties; }, - modifyOption: function modifyOption(sortable, name, value) { - var modifiedValue; - plugins.forEach(function (plugin) { + + modifyOption(sortable, name, value) { + let modifiedValue; + plugins.forEach(plugin => { // Plugin must exist on the Sortable if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin @@ -901,26 +769,28 @@ }); return modifiedValue; } + }; - function dispatchEvent(_ref) { - var sortable = _ref.sortable, - rootEl = _ref.rootEl, - name = _ref.name, - targetEl = _ref.targetEl, - cloneEl = _ref.cloneEl, - toEl = _ref.toEl, - fromEl = _ref.fromEl, - oldIndex = _ref.oldIndex, - newIndex = _ref.newIndex, - oldDraggableIndex = _ref.oldDraggableIndex, - newDraggableIndex = _ref.newDraggableIndex, - originalEvent = _ref.originalEvent, - putSortable = _ref.putSortable, - extraEventProperties = _ref.extraEventProperties; + function dispatchEvent({ + sortable, + rootEl, + name, + targetEl, + cloneEl, + toEl, + fromEl, + oldIndex, + newIndex, + oldDraggableIndex, + newDraggableIndex, + originalEvent, + putSortable, + extraEventProperties + }) { sortable = sortable || rootEl && rootEl[expando]; if (!sortable) return; - var evt, + let evt, options = sortable.options, onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature @@ -944,10 +814,11 @@ evt.newDraggableIndex = newDraggableIndex; evt.originalEvent = originalEvent; evt.pullMode = putSortable ? putSortable.lastPutMode : undefined; + let allEventProperties = { ...extraEventProperties, + ...PluginManager.getEventProperties(name, sortable) + }; - var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable)); - - for (var option in allEventProperties) { + for (let option in allEventProperties) { evt[option] = allEventProperties[option]; } @@ -960,62 +831,65 @@ } } - var _excluded = ["evt"]; - - var pluginEvent = function pluginEvent(eventName, sortable) { - var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, - originalEvent = _ref.evt, - data = _objectWithoutProperties(_ref, _excluded); - - PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({ - dragEl: dragEl, - parentEl: parentEl, - ghostEl: ghostEl, - rootEl: rootEl, - nextEl: nextEl, - lastDownEl: lastDownEl, - cloneEl: cloneEl, - cloneHidden: cloneHidden, + let pluginEvent = function (eventName, sortable, { + evt: originalEvent, + ...data + } = {}) { + PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, { + dragEl, + parentEl, + ghostEl, + rootEl, + nextEl, + lastDownEl, + cloneEl, + cloneHidden, dragStarted: moved, - putSortable: putSortable, + putSortable, activeSortable: Sortable.active, - originalEvent: originalEvent, - oldIndex: oldIndex, - oldDraggableIndex: oldDraggableIndex, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex, + originalEvent, + oldIndex, + oldDraggableIndex, + newIndex, + newDraggableIndex, hideGhostForTarget: _hideGhostForTarget, unhideGhostForTarget: _unhideGhostForTarget, - cloneNowHidden: function cloneNowHidden() { + + cloneNowHidden() { cloneHidden = true; }, - cloneNowShown: function cloneNowShown() { + + cloneNowShown() { cloneHidden = false; }, - dispatchSortableEvent: function dispatchSortableEvent(name) { + + dispatchSortableEvent(name) { _dispatchEvent({ - sortable: sortable, - name: name, - originalEvent: originalEvent + sortable, + name, + originalEvent }); - } - }, data)); + }, + + ...data + }); }; function _dispatchEvent(info) { - dispatchEvent(_objectSpread2({ - putSortable: putSortable, - cloneEl: cloneEl, + dispatchEvent({ + putSortable, + cloneEl, targetEl: dragEl, - rootEl: rootEl, - oldIndex: oldIndex, - oldDraggableIndex: oldDraggableIndex, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex - }, info)); + rootEl, + oldIndex, + oldDraggableIndex, + newIndex, + newDraggableIndex, + ...info + }); } - var dragEl, + let dragEl, parentEl, ghostEl, rootEl, @@ -1052,24 +926,24 @@ savedInputChecked = []; /** @const */ - var documentExists = typeof document !== 'undefined', - PositionGhostAbsolutely = IOS, - CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float', - // This will not pass for IE9, because IE9 DnD only works on anchors + const documentExists = typeof document !== 'undefined', + PositionGhostAbsolutely = IOS, + CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float', + // This will not pass for IE9, because IE9 DnD only works on anchors supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'), - supportCssPointerEvents = function () { + supportCssPointerEvents = function () { if (!documentExists) return; // false when <= IE11 if (IE11OrLess) { return false; } - var el = document.createElement('x'); + let el = document.createElement('x'); el.style.cssText = 'pointer-events:auto'; return el.style.pointerEvents === 'auto'; }(), - _detectDirection = function _detectDirection(el, options) { - var elCSS = css(el), + _detectDirection = function (el, options) { + let elCSS = css(el), elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth), child1 = getChild(el, 0, options), child2 = getChild(el, 1, options), @@ -1086,15 +960,15 @@ return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal'; } - if (child1 && firstChildCSS["float"] && firstChildCSS["float"] !== 'none') { - var touchingSideChild2 = firstChildCSS["float"] === 'left' ? 'left' : 'right'; + if (child1 && firstChildCSS.float && firstChildCSS.float !== 'none') { + let touchingSideChild2 = firstChildCSS.float === 'left' ? 'left' : 'right'; return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal'; } return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal'; }, - _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) { - var dragElS1Opp = vertical ? dragRect.left : dragRect.top, + _dragElInRowColumn = function (dragRect, targetRect, vertical) { + let dragElS1Opp = vertical ? dragRect.left : dragRect.top, dragElS2Opp = vertical ? dragRect.right : dragRect.bottom, dragElOppLength = vertical ? dragRect.width : dragRect.height, targetS1Opp = vertical ? targetRect.left : targetRect.top, @@ -1109,14 +983,14 @@ * @param {Number} y Y position * @return {HTMLElement} Element of the first found nearest Sortable */ - _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) { - var ret; - sortables.some(function (sortable) { - var threshold = sortable[expando].options.emptyInsertThreshold; + _detectNearestEmptySortable = function (x, y) { + let ret; + sortables.some(sortable => { + const threshold = sortable[expando].options.emptyInsertThreshold; if (!threshold || lastChild(sortable)) return; - var rect = getRect(sortable), - insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold, - insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold; + const rect = getRect(sortable), + insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold, + insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold; if (insideHorizontally && insideVertically) { return ret = sortable; @@ -1124,10 +998,10 @@ }); return ret; }, - _prepareGroup = function _prepareGroup(options) { + _prepareGroup = function (options) { function toFn(value, pull) { return function (to, from, dragEl, evt) { - var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name; + let sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name; if (value == null && (pull || sameGroup)) { // Default pull value @@ -1140,16 +1014,16 @@ } else if (typeof value === 'function') { return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt); } else { - var otherGroup = (pull ? to : from).options.group.name; + let otherGroup = (pull ? to : from).options.group.name; return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1; } }; } - var group = {}; - var originalGroup = options.group; + let group = {}; + let originalGroup = options.group; - if (!originalGroup || _typeof(originalGroup) != 'object') { + if (!originalGroup || typeof originalGroup != 'object') { originalGroup = { name: originalGroup }; @@ -1161,12 +1035,12 @@ group.revertClone = originalGroup.revertClone; options.group = group; }, - _hideGhostForTarget = function _hideGhostForTarget() { + _hideGhostForTarget = function () { if (!supportCssPointerEvents && ghostEl) { css(ghostEl, 'display', 'none'); } }, - _unhideGhostForTarget = function _unhideGhostForTarget() { + _unhideGhostForTarget = function () { if (!supportCssPointerEvents && ghostEl) { css(ghostEl, 'display', ''); } @@ -1185,17 +1059,17 @@ }, true); } - var nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) { + let nearestEmptyInsertDetectEvent = function (evt) { if (dragEl) { evt = evt.touches ? evt.touches[0] : evt; - var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY); + let nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY); if (nearest) { // Create imitation event - var event = {}; + let event = {}; - for (var i in evt) { + for (let i in evt) { if (evt.hasOwnProperty(i)) { event[i] = evt[i]; } @@ -1210,7 +1084,7 @@ } }; - var _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) { + let _checkOutsideTargetEl = function (evt) { if (dragEl) { dragEl.parentNode[expando]._isOutsideThisEl(evt.target); } @@ -1224,15 +1098,20 @@ function Sortable(el, options) { if (!(el && el.nodeType && el.nodeType === 1)) { - throw "Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(el)); + throw `Sortable: \`el\` must be an HTMLElement, not ${{}.toString.call(el)}`; } this.el = el; // root element - this.options = options = _extends({}, options); // Export instance + this.options = options = _extends({}, options); + + if (this.options.fallbackOnBody) { + this.options.getFallbackParent = () => document.body; + } // Export instance + el[expando] = this; - var defaults = { + let defaults = { group: null, sort: true, disabled: false, @@ -1246,7 +1125,7 @@ invertedSwapThreshold: null, // will be set to same as swapThreshold if default removeCloneOnHide: true, - direction: function direction() { + direction: function () { return _detectDirection(el, this.options); }, ghostClass: 'sortable-ghost', @@ -1257,7 +1136,7 @@ preventOnFilter: true, animation: 0, easing: null, - setData: function setData(dataTransfer, dragEl) { + setData: function (dataTransfer, dragEl) { dataTransfer.setData('Text', dragEl.textContent); }, dropBubble: false, @@ -1268,7 +1147,9 @@ touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1, forceFallback: false, fallbackClass: 'sortable-fallback', + // @obsolete use `getFallbackParent: () => (document.body)` fallbackOnBody: false, + getFallbackParent: null, fallbackTolerance: 0, fallbackOffset: { x: 0, @@ -1279,14 +1160,14 @@ }; PluginManager.initializePlugins(this, el, defaults); // Set default options - for (var name in defaults) { + for (let name in defaults) { !(name in options) && (options[name] = defaults[name]); } _prepareGroup(options); // Bind all private methods - for (var fn in this) { + for (let fn in this) { if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { this[fn] = this[fn].bind(this); } @@ -1324,20 +1205,20 @@ /** @lends Sortable.prototype */ { constructor: Sortable, - _isOutsideThisEl: function _isOutsideThisEl(target) { + _isOutsideThisEl: function (target) { if (!this.el.contains(target) && target !== this.el) { lastTarget = null; } }, - _getDirection: function _getDirection(evt, target) { + _getDirection: function (evt, target) { return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction; }, - _onTapStart: function _onTapStart( + _onTapStart: function ( /** Event|TouchEvent */ evt) { if (!evt.cancelable) return; - var _this = this, + let _this = this, el = this.el, options = this.options, preventOnFilter = options.preventOnFilter, @@ -1395,7 +1276,7 @@ }); pluginEvent('filter', _this, { - evt: evt + evt }); preventOnFilter && evt.cancelable && evt.preventDefault(); return; // cancel dnd @@ -1415,7 +1296,7 @@ }); pluginEvent('filter', _this, { - evt: evt + evt }); return true; } @@ -1434,21 +1315,21 @@ this._prepareDragStart(evt, touch, target); }, - _prepareDragStart: function _prepareDragStart( + _prepareDragStart: function ( /** Event */ evt, /** Touch */ touch, /** HTMLElement */ target) { - var _this = this, + let _this = this, el = _this.el, options = _this.options, ownerDocument = el.ownerDocument, dragStartFn; if (target && !dragEl && target.parentNode === el) { - var dragRect = getRect(target); + let dragRect = getRect(target); rootEl = el; dragEl = target; parentEl = dragEl.parentNode; @@ -1467,9 +1348,9 @@ this._lastY = (touch || evt).clientY; dragEl.style['will-change'] = 'all'; - dragStartFn = function dragStartFn() { + dragStartFn = function () { pluginEvent('delayEnded', _this, { - evt: evt + evt }); if (Sortable.eventCanceled) { @@ -1517,7 +1398,7 @@ } pluginEvent('delayStart', this, { - evt: evt + evt }); // Delay is impossible for native DnD in Edge or IE if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) { @@ -1542,23 +1423,23 @@ } } }, - _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( + _delayedDragTouchMoveHandler: function ( /** TouchEvent|PointerEvent **/ e) { - var touch = e.touches ? e.touches[0] : e; + let touch = e.touches ? e.touches[0] : e; if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) { this._disableDelayedDrag(); } }, - _disableDelayedDrag: function _disableDelayedDrag() { + _disableDelayedDrag: function () { dragEl && _disableDraggable(dragEl); clearTimeout(this._dragStartTimer); this._disableDelayedDragEvents(); }, - _disableDelayedDragEvents: function _disableDelayedDragEvents() { - var ownerDocument = this.el.ownerDocument; + _disableDelayedDragEvents: function () { + let ownerDocument = this.el.ownerDocument; off(ownerDocument, 'mouseup', this._disableDelayedDrag); off(ownerDocument, 'touchend', this._disableDelayedDrag); off(ownerDocument, 'touchcancel', this._disableDelayedDrag); @@ -1566,7 +1447,7 @@ off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler); off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler); }, - _triggerDragStart: function _triggerDragStart( + _triggerDragStart: function ( /** Event */ evt, /** Touch */ @@ -1597,20 +1478,20 @@ } } catch (err) {} }, - _dragStarted: function _dragStarted(fallback, evt) { + _dragStarted: function (fallback, evt) { awaitingDragStarted = false; if (rootEl && dragEl) { pluginEvent('dragStarted', this, { - evt: evt + evt }); if (this.nativeDraggable) { on(document, 'dragover', _checkOutsideTargetEl); } - var options = this.options; // Apply effect + let options = this.options; // Apply effect !fallback && toggleClass(dragEl, options.dragClass, false); toggleClass(dragEl, options.ghostClass, true); @@ -1626,15 +1507,15 @@ this._nulling(); } }, - _emulateDragOver: function _emulateDragOver() { + _emulateDragOver: function () { if (touchEvt) { this._lastX = touchEvt.clientX; this._lastY = touchEvt.clientY; _hideGhostForTarget(); - var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY); - var parent = target; + let target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY); + let parent = target; while (target && target.shadowRoot) { target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY); @@ -1647,7 +1528,7 @@ if (parent) { do { if (parent[expando]) { - var inserted = void 0; + let inserted; inserted = parent[expando]._onDragOver({ clientX: touchEvt.clientX, clientY: touchEvt.clientY, @@ -1669,11 +1550,11 @@ _unhideGhostForTarget(); } }, - _onTouchMove: function _onTouchMove( + _onTouchMove: function ( /**TouchEvent*/ evt) { if (tapEvt) { - var options = this.options, + let options = this.options, fallbackTolerance = options.fallbackTolerance, fallbackOffset = options.fallbackOffset, touch = evt.touches ? evt.touches[0] : evt, @@ -1707,7 +1588,7 @@ }; } - var cssMatrix = "matrix(".concat(ghostMatrix.a, ",").concat(ghostMatrix.b, ",").concat(ghostMatrix.c, ",").concat(ghostMatrix.d, ",").concat(ghostMatrix.e, ",").concat(ghostMatrix.f, ")"); + let cssMatrix = `matrix(${ghostMatrix.a},${ghostMatrix.b},${ghostMatrix.c},${ghostMatrix.d},${ghostMatrix.e},${ghostMatrix.f})`; css(ghostEl, 'webkitTransform', cssMatrix); css(ghostEl, 'mozTransform', cssMatrix); css(ghostEl, 'msTransform', cssMatrix); @@ -1720,11 +1601,12 @@ evt.cancelable && evt.preventDefault(); } }, - _appendGhost: function _appendGhost() { + _appendGhost: function () { // Bug if using scale(): https://stackoverflow.com/questions/2637058 // Not being adjusted for if (!ghostEl) { - var container = this.options.fallbackOnBody ? document.body : rootEl, + let fallbackParent = typeof this.options.getFallbackParent === 'function' ? this.options.getFallbackParent() : null; + let container = fallbackParent ?? rootEl, rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container), options = this.options; // Position absolutely @@ -1769,17 +1651,17 @@ css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%'); } }, - _onDragStart: function _onDragStart( + _onDragStart: function ( /**Event*/ evt, /**boolean*/ fallback) { - var _this = this; + let _this = this; - var dataTransfer = evt.dataTransfer; - var options = _this.options; + let dataTransfer = evt.dataTransfer; + let options = _this.options; pluginEvent('dragStart', this, { - evt: evt + evt }); if (Sortable.eventCanceled) { @@ -1849,10 +1731,10 @@ } }, // Returns true - if no further action is needed (either inserted or another condition) - _onDragOver: function _onDragOver( + _onDragOver: function ( /**Event*/ evt) { - var el = this.el, + let el = this.el, target = evt.target, dragRect, targetRect, @@ -1870,22 +1752,25 @@ if (_silent) return; function dragOverEvent(name, extra) { - pluginEvent(name, _this, _objectSpread2({ - evt: evt, - isOwner: isOwner, + pluginEvent(name, _this, { + evt, + isOwner, axis: vertical ? 'vertical' : 'horizontal', - revert: revert, - dragRect: dragRect, - targetRect: targetRect, - canSort: canSort, - fromSortable: fromSortable, - target: target, - completed: completed, - onMove: function onMove(target, after) { - return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after); + revert, + dragRect, + targetRect, + canSort, + fromSortable, + target, + completed, + + onMove(target, after) { + return onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after); }, - changed: changed - }, extra)); + + changed, + ...extra + }); } // Capture animation state @@ -1902,7 +1787,7 @@ function completed(insertion) { dragOverEvent('dragOverCompleted', { - insertion: insertion + insertion }); if (insertion) { @@ -1967,8 +1852,8 @@ sortable: _this, name: 'change', toEl: el, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex, + newIndex, + newDraggableIndex, originalEvent: evt }); } @@ -2014,7 +1899,7 @@ return completed(true); } - var elLastChild = lastChild(el, options.draggable); + let elLastChild = lastChild(el, options.draggable); if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) { // Insert to end of list @@ -2032,7 +1917,7 @@ targetRect = getRect(target); } - if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) { + if (onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) { capture(); if (elLastChild && elLastChild.nextSibling) { @@ -2049,7 +1934,7 @@ } } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) { // Insert to start of list - var firstChild = getChild(el, 0, options, true); + let firstChild = getChild(el, 0, options, true); if (firstChild === dragEl) { return completed(false); @@ -2058,7 +1943,7 @@ target = firstChild; targetRect = getRect(target); - if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) { + if (onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) { capture(); el.insertBefore(dragEl, firstChild); parentEl = el; // actualization @@ -2068,7 +1953,7 @@ } } else if (target.parentNode === el) { targetRect = getRect(target); - var direction = 0, + let direction = 0, targetBeforeFirstSwap, differentLevel = dragEl.parentNode !== el, differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical), @@ -2083,11 +1968,11 @@ } direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target); - var sibling; + let sibling; if (direction !== 0) { // Check if target is beside dragEl in respective direction (ignoring hidden elements) - var dragIndex = index(dragEl); + let dragIndex = index(dragEl); do { dragIndex -= direction; @@ -2102,11 +1987,10 @@ lastTarget = target; lastDirection = direction; - var nextSibling = target.nextElementSibling, + let nextSibling = target.nextElementSibling, after = false; after = direction === 1; - - var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after); + let moveVector = onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after); if (moveVector !== false) { if (moveVector === 1 || moveVector === -1) { @@ -2148,7 +2032,7 @@ return false; }, _ignoreWhileAnimating: null, - _offMoveEvents: function _offMoveEvents() { + _offMoveEvents: function () { off(document, 'mousemove', this._onTouchMove); off(document, 'touchmove', this._onTouchMove); off(document, 'pointermove', this._onTouchMove); @@ -2156,24 +2040,24 @@ off(document, 'mousemove', nearestEmptyInsertDetectEvent); off(document, 'touchmove', nearestEmptyInsertDetectEvent); }, - _offUpEvents: function _offUpEvents() { - var ownerDocument = this.el.ownerDocument; + _offUpEvents: function () { + let ownerDocument = this.el.ownerDocument; off(ownerDocument, 'mouseup', this._onDrop); off(ownerDocument, 'touchend', this._onDrop); off(ownerDocument, 'pointerup', this._onDrop); off(ownerDocument, 'touchcancel', this._onDrop); off(document, 'selectstart', this); }, - _onDrop: function _onDrop( + _onDrop: function ( /**Event*/ evt) { - var el = this.el, + let el = this.el, options = this.options; // Get the index of the dragged element within its parent newIndex = index(dragEl); newDraggableIndex = index(dragEl, options.draggable); pluginEvent('drop', this, { - evt: evt + evt }); parentEl = dragEl && dragEl.parentNode; // Get again after plugin event @@ -2330,7 +2214,7 @@ this._nulling(); }, - _nulling: function _nulling() { + _nulling: function () { pluginEvent('nulling', this); rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null; savedInputChecked.forEach(function (el) { @@ -2338,7 +2222,7 @@ }); savedInputChecked.length = lastDx = lastDy = 0; }, - handleEvent: function handleEvent( + handleEvent: function ( /**Event*/ evt) { switch (evt.type) { @@ -2368,8 +2252,8 @@ * Serializes the item into an array of string. * @returns {String[]} */ - toArray: function toArray() { - var order = [], + toArray: function () { + let order = [], el, children = this.el.children, i = 0, @@ -2391,11 +2275,11 @@ * Sorts the elements according to the array. * @param {String[]} order order of the items */ - sort: function sort(order, useAnimation) { - var items = {}, + sort: function (order, useAnimation) { + let items = {}, rootEl = this.el; this.toArray().forEach(function (id, i) { - var el = rootEl.children[i]; + let el = rootEl.children[i]; if (closest(el, this.options.draggable, rootEl, false)) { items[id] = el; @@ -2414,8 +2298,8 @@ /** * Save the current sorting */ - save: function save() { - var store = this.options.store; + save: function () { + let store = this.options.store; store && store.set && store.set(this); }, @@ -2425,7 +2309,7 @@ * @param {String} [selector] default: `options.draggable` * @returns {HTMLElement|null} */ - closest: function closest$1(el, selector) { + closest: function (el, selector) { return closest(el, selector || this.options.draggable, this.el, false); }, @@ -2435,13 +2319,13 @@ * @param {*} [value] * @returns {*} */ - option: function option(name, value) { - var options = this.options; + option: function (name, value) { + let options = this.options; if (value === void 0) { return options[name]; } else { - var modifiedValue = PluginManager.modifyOption(this, name, value); + let modifiedValue = PluginManager.modifyOption(this, name, value); if (typeof modifiedValue !== 'undefined') { options[name] = modifiedValue; @@ -2458,9 +2342,9 @@ /** * Destroy */ - destroy: function destroy() { + destroy: function () { pluginEvent('destroy', this); - var el = this.el; + let el = this.el; el[expando] = null; off(el, 'mousedown', this._onTapStart); off(el, 'touchstart', this._onTapStart); @@ -2483,7 +2367,7 @@ sortables.splice(sortables.indexOf(this.el), 1); this.el = el = null; }, - _hideClone: function _hideClone() { + _hideClone: function () { if (!cloneHidden) { pluginEvent('hideClone', this); if (Sortable.eventCanceled) return; @@ -2496,7 +2380,7 @@ cloneHidden = true; } }, - _showClone: function _showClone(putSortable) { + _showClone: function (putSortable) { if (putSortable.lastPutMode !== 'clone') { this._hideClone(); @@ -2535,8 +2419,8 @@ evt.cancelable && evt.preventDefault(); } - function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) { - var evt, + function onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) { + let evt, sortable = fromEl[expando], onMoveFn = sortable.options.onMove, retVal; // Support for new CustomEvent feature @@ -2577,19 +2461,19 @@ } function _ghostIsFirst(evt, vertical, sortable) { - var rect = getRect(getChild(sortable.el, 0, sortable.options, true)); - var spacer = 10; + let rect = getRect(getChild(sortable.el, 0, sortable.options, true)); + const spacer = 10; return vertical ? evt.clientX < rect.left - spacer || evt.clientY < rect.top && evt.clientX < rect.right : evt.clientY < rect.top - spacer || evt.clientY < rect.bottom && evt.clientX < rect.left; } function _ghostIsLast(evt, vertical, sortable) { - var rect = getRect(lastChild(sortable.el, sortable.options.draggable)); - var spacer = 10; + let rect = getRect(lastChild(sortable.el, sortable.options.draggable)); + const spacer = 10; return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer; } function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) { - var mouseOnAxis = vertical ? evt.clientY : evt.clientX, + let mouseOnAxis = vertical ? evt.clientY : evt.clientX, targetLength = vertical ? targetRect.height : targetRect.width, targetS1 = vertical ? targetRect.top : targetRect.left, targetS2 = vertical ? targetRect.bottom : targetRect.right, @@ -2657,7 +2541,7 @@ function _generateId(el) { - var str = el.tagName + el.className + el.src + el.href + el.textContent, + let str = el.tagName + el.className + el.src + el.href + el.textContent, i = str.length, sum = 0; @@ -2670,11 +2554,11 @@ function _saveInputCheckedState(root) { savedInputChecked.length = 0; - var inputs = root.getElementsByTagName('input'); - var idx = inputs.length; + let inputs = root.getElementsByTagName('input'); + let idx = inputs.length; while (idx--) { - var el = inputs[idx]; + let el = inputs[idx]; el.checked && savedInputChecked.push(el); } } @@ -2702,7 +2586,7 @@ off: off, css: css, find: find, - is: function is(el, selector) { + is: function (el, selector) { return !!closest(el, selector, el, false); }, extend: extend, @@ -2731,18 +2615,16 @@ */ - Sortable.mount = function () { - for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) { - plugins[_key] = arguments[_key]; - } - + Sortable.mount = function (...plugins) { if (plugins[0].constructor === Array) plugins = plugins[0]; - plugins.forEach(function (plugin) { + plugins.forEach(plugin => { if (!plugin.prototype || !plugin.prototype.constructor) { - throw "Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(plugin)); + throw `Sortable: Mounted plugin must be a constructor function, not ${{}.toString.call(plugin)}`; } - if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils); + if (plugin.utils) Sortable.utils = { ...Sortable.utils, + ...plugin.utils + }; PluginManager.mount(plugin); }); }; @@ -2760,7 +2642,7 @@ Sortable.version = version; - var autoScrolls = [], + let autoScrolls = [], scrollEl, scrollRootEl, scrolling = false, @@ -2779,7 +2661,7 @@ bubbleScroll: true }; // Bind all private methods - for (var fn in this) { + for (let fn in this) { if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { this[fn] = this[fn].bind(this); } @@ -2787,9 +2669,9 @@ } AutoScroll.prototype = { - dragStarted: function dragStarted(_ref) { - var originalEvent = _ref.originalEvent; - + dragStarted({ + originalEvent + }) { if (this.sortable.nativeDraggable) { on(document, 'dragover', this._handleAutoScroll); } else { @@ -2802,15 +2684,17 @@ } } }, - dragOverCompleted: function dragOverCompleted(_ref2) { - var originalEvent = _ref2.originalEvent; + dragOverCompleted({ + originalEvent + }) { // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached) if (!this.options.dragOverBubble && !originalEvent.rootEl) { this._handleAutoScroll(originalEvent); } }, - drop: function drop() { + + drop() { if (this.sortable.nativeDraggable) { off(document, 'dragover', this._handleAutoScroll); } else { @@ -2823,19 +2707,20 @@ clearAutoScrolls(); cancelThrottle(); }, - nulling: function nulling() { + + nulling() { touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null; autoScrolls.length = 0; }, - _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) { + + _handleFallbackAutoScroll(evt) { this._handleAutoScroll(evt, true); }, - _handleAutoScroll: function _handleAutoScroll(evt, fallback) { - var _this = this; - var x = (evt.touches ? evt.touches[0] : evt).clientX, - y = (evt.touches ? evt.touches[0] : evt).clientY, - elem = document.elementFromPoint(x, y); + _handleAutoScroll(evt, fallback) { + const x = (evt.touches ? evt.touches[0] : evt).clientX, + y = (evt.touches ? evt.touches[0] : evt).clientY, + elem = document.elementFromPoint(x, y); touchEvt$1 = evt; // IE does not seem to have native autoscroll, // Edge's autoscroll seems too conditional, // MACOS Safari does not have autoscroll, @@ -2844,20 +2729,20 @@ if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) { autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change - var ogElemScroller = getParentAutoScrollElement(elem, true); + let ogElemScroller = getParentAutoScrollElement(elem, true); if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) { pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour - pointerElemChangedInterval = setInterval(function () { - var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true); + pointerElemChangedInterval = setInterval(() => { + let newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true); if (newElem !== ogElemScroller) { ogElemScroller = newElem; clearAutoScrolls(); } - autoScroll(evt, _this.options, newElem, fallback); + autoScroll(evt, this.options, newElem, fallback); }, 10); lastAutoScrollX = x; lastAutoScrollY = y; @@ -2872,6 +2757,7 @@ autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false); } } + }; return _extends(AutoScroll, { pluginName: 'scroll', @@ -2890,15 +2776,15 @@ clearInterval(pointerElemChangedInterval); } - var autoScroll = throttle(function (evt, options, rootEl, isFallback) { + const autoScroll = throttle(function (evt, options, rootEl, isFallback) { // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521 if (!options.scroll) return; - var x = (evt.touches ? evt.touches[0] : evt).clientX, - y = (evt.touches ? evt.touches[0] : evt).clientY, - sens = options.scrollSensitivity, - speed = options.scrollSpeed, - winScroller = getWindowScrollingElement(); - var scrollThisInstance = false, + const x = (evt.touches ? evt.touches[0] : evt).clientX, + y = (evt.touches ? evt.touches[0] : evt).clientY, + sens = options.scrollSensitivity, + speed = options.scrollSpeed, + winScroller = getWindowScrollingElement(); + let scrollThisInstance = false, scrollCustomFn; // New scroll root, set scrollEl if (scrollRootEl !== rootEl) { @@ -2912,11 +2798,11 @@ } } - var layersOut = 0; - var currentParent = scrollEl; + let layersOut = 0; + let currentParent = scrollEl; do { - var el = currentParent, + let el = currentParent, rect = getRect(el), top = rect.top, bottom = rect.bottom, @@ -2924,8 +2810,8 @@ right = rect.right, width = rect.width, height = rect.height, - canScrollX = void 0, - canScrollY = void 0, + canScrollX, + canScrollY, scrollWidth = el.scrollWidth, scrollHeight = el.scrollHeight, elCSS = css(el), @@ -2940,11 +2826,11 @@ canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll'); } - var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX); - var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY); + let vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX); + let vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY); if (!autoScrolls[layersOut]) { - for (var i = 0; i <= layersOut; i++) { + for (let i = 0; i <= layersOut; i++) { if (!autoScrolls[i]) { autoScrolls[i] = {}; } @@ -2968,8 +2854,8 @@ } - var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0; - var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0; + let scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0; + let scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0; if (typeof scrollCustomFn === 'function') { if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') { @@ -2990,26 +2876,27 @@ scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not }, 30); - var drop = function drop(_ref) { - var originalEvent = _ref.originalEvent, - putSortable = _ref.putSortable, - dragEl = _ref.dragEl, - activeSortable = _ref.activeSortable, - dispatchSortableEvent = _ref.dispatchSortableEvent, - hideGhostForTarget = _ref.hideGhostForTarget, - unhideGhostForTarget = _ref.unhideGhostForTarget; + const drop = function ({ + originalEvent, + putSortable, + dragEl, + activeSortable, + dispatchSortableEvent, + hideGhostForTarget, + unhideGhostForTarget + }) { if (!originalEvent) return; - var toSortable = putSortable || activeSortable; + let toSortable = putSortable || activeSortable; hideGhostForTarget(); - var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent; - var target = document.elementFromPoint(touch.clientX, touch.clientY); + let touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent; + let target = document.elementFromPoint(touch.clientX, touch.clientY); unhideGhostForTarget(); if (toSortable && !toSortable.el.contains(target)) { dispatchSortableEvent('spill'); this.onSpill({ - dragEl: dragEl, - putSortable: putSortable + dragEl, + putSortable }); } }; @@ -3018,20 +2905,24 @@ Revert.prototype = { startIndex: null, - dragStart: function dragStart(_ref2) { - var oldDraggableIndex = _ref2.oldDraggableIndex; + + dragStart({ + oldDraggableIndex + }) { this.startIndex = oldDraggableIndex; }, - onSpill: function onSpill(_ref3) { - var dragEl = _ref3.dragEl, - putSortable = _ref3.putSortable; + + onSpill({ + dragEl, + putSortable + }) { this.sortable.captureAnimationState(); if (putSortable) { putSortable.captureAnimationState(); } - var nextSibling = getChild(this.sortable.el, this.startIndex, this.options); + let nextSibling = getChild(this.sortable.el, this.startIndex, this.options); if (nextSibling) { this.sortable.el.insertBefore(dragEl, nextSibling); @@ -3045,7 +2936,8 @@ putSortable.animateAll(); } }, - drop: drop + + drop }; _extends(Revert, { @@ -3055,22 +2947,24 @@ function Remove() {} Remove.prototype = { - onSpill: function onSpill(_ref4) { - var dragEl = _ref4.dragEl, - putSortable = _ref4.putSortable; - var parentSortable = putSortable || this.sortable; + onSpill({ + dragEl, + putSortable + }) { + const parentSortable = putSortable || this.sortable; parentSortable.captureAnimationState(); dragEl.parentNode && dragEl.parentNode.removeChild(dragEl); parentSortable.animateAll(); }, - drop: drop + + drop }; _extends(Remove, { pluginName: 'removeOnSpill' }); - var lastSwapEl; + let lastSwapEl; function SwapPlugin() { function Swap() { @@ -3080,23 +2974,26 @@ } Swap.prototype = { - dragStart: function dragStart(_ref) { - var dragEl = _ref.dragEl; + dragStart({ + dragEl + }) { lastSwapEl = dragEl; }, - dragOverValid: function dragOverValid(_ref2) { - var completed = _ref2.completed, - target = _ref2.target, - onMove = _ref2.onMove, - activeSortable = _ref2.activeSortable, - changed = _ref2.changed, - cancel = _ref2.cancel; + + dragOverValid({ + completed, + target, + onMove, + activeSortable, + changed, + cancel + }) { if (!activeSortable.options.swap) return; - var el = this.sortable.el, + let el = this.sortable.el, options = this.options; if (target && target !== el) { - var prevSwapEl = lastSwapEl; + let prevSwapEl = lastSwapEl; if (onMove(target) !== false) { toggleClass(target, options.swapClass, true); @@ -3114,12 +3011,14 @@ completed(true); cancel(); }, - drop: function drop(_ref3) { - var activeSortable = _ref3.activeSortable, - putSortable = _ref3.putSortable, - dragEl = _ref3.dragEl; - var toSortable = putSortable || this.sortable; - var options = this.options; + + drop({ + activeSortable, + putSortable, + dragEl + }) { + let toSortable = putSortable || this.sortable; + let options = this.options; lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false); if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) { @@ -3132,22 +3031,26 @@ } } }, - nulling: function nulling() { + + nulling() { lastSwapEl = null; } + }; return _extends(Swap, { pluginName: 'swap', - eventProperties: function eventProperties() { + + eventProperties() { return { swapItem: lastSwapEl }; } + }); } function swapNodes(n1, n2) { - var p1 = n1.parentNode, + let p1 = n1.parentNode, p2 = n2.parentNode, i1, i2; @@ -3163,7 +3066,7 @@ p2.insertBefore(n1, p2.children[i2]); } - var multiDragElements = [], + let multiDragElements = [], multiDragClones = [], lastMultiDragSelect, // for selection with modifier key down (SHIFT) @@ -3180,7 +3083,7 @@ function MultiDragPlugin() { function MultiDrag(sortable) { // Bind all private methods - for (var fn in this) { + for (let fn in this) { if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { this[fn] = this[fn].bind(this); } @@ -3201,11 +3104,12 @@ selectedClass: 'sortable-selected', multiDragKey: null, avoidImplicitDeselect: false, - setData: function setData(dataTransfer, dragEl) { - var data = ''; + + setData(dataTransfer, dragEl) { + let data = ''; if (multiDragElements.length && multiDragSortable === sortable) { - multiDragElements.forEach(function (multiDragElement, i) { + multiDragElements.forEach((multiDragElement, i) => { data += (!i ? '' : ', ') + multiDragElement.textContent; }); } else { @@ -3214,25 +3118,31 @@ dataTransfer.setData('Text', data); } + }; } MultiDrag.prototype = { multiDragKeyDown: false, isMultiDrag: false, - delayStartGlobal: function delayStartGlobal(_ref) { - var dragged = _ref.dragEl; + + delayStartGlobal({ + dragEl: dragged + }) { dragEl$1 = dragged; }, - delayEnded: function delayEnded() { + + delayEnded() { this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1); }, - setupClone: function setupClone(_ref2) { - var sortable = _ref2.sortable, - cancel = _ref2.cancel; + + setupClone({ + sortable, + cancel + }) { if (!this.isMultiDrag) return; - for (var i = 0; i < multiDragElements.length; i++) { + for (let i = 0; i < multiDragElements.length; i++) { multiDragClones.push(clone(multiDragElements[i])); multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex; multiDragClones[i].draggable = false; @@ -3245,11 +3155,13 @@ cancel(); }, - clone: function clone(_ref3) { - var sortable = _ref3.sortable, - rootEl = _ref3.rootEl, - dispatchSortableEvent = _ref3.dispatchSortableEvent, - cancel = _ref3.cancel; + + clone({ + sortable, + rootEl, + dispatchSortableEvent, + cancel + }) { if (!this.isMultiDrag) return; if (!this.options.removeCloneOnHide) { @@ -3260,30 +3172,32 @@ } } }, - showClone: function showClone(_ref4) { - var cloneNowShown = _ref4.cloneNowShown, - rootEl = _ref4.rootEl, - cancel = _ref4.cancel; + + showClone({ + cloneNowShown, + rootEl, + cancel + }) { if (!this.isMultiDrag) return; insertMultiDragClones(false, rootEl); - multiDragClones.forEach(function (clone) { + multiDragClones.forEach(clone => { css(clone, 'display', ''); }); cloneNowShown(); clonesHidden = false; cancel(); }, - hideClone: function hideClone(_ref5) { - var _this = this; - var sortable = _ref5.sortable, - cloneNowHidden = _ref5.cloneNowHidden, - cancel = _ref5.cancel; + hideClone({ + sortable, + cloneNowHidden, + cancel + }) { if (!this.isMultiDrag) return; - multiDragClones.forEach(function (clone) { + multiDragClones.forEach(clone => { css(clone, 'display', 'none'); - if (_this.options.removeCloneOnHide && clone.parentNode) { + if (this.options.removeCloneOnHide && clone.parentNode) { clone.parentNode.removeChild(clone); } }); @@ -3291,14 +3205,15 @@ clonesHidden = true; cancel(); }, - dragStartGlobal: function dragStartGlobal(_ref6) { - var sortable = _ref6.sortable; + dragStartGlobal({ + sortable + }) { if (!this.isMultiDrag && multiDragSortable) { multiDragSortable.multiDrag._deselectMultiDrag(); } - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { multiDragElement.sortableIndex = index(multiDragElement); }); // Sort multi-drag elements @@ -3307,10 +3222,10 @@ }); dragStarted = true; }, - dragStarted: function dragStarted(_ref7) { - var _this2 = this; - var sortable = _ref7.sortable; + dragStarted({ + sortable + }) { if (!this.isMultiDrag) return; if (this.options.sort) { @@ -3323,12 +3238,12 @@ sortable.captureAnimationState(); if (this.options.animation) { - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { if (multiDragElement === dragEl$1) return; css(multiDragElement, 'position', 'absolute'); }); - var dragRect = getRect(dragEl$1, false, true, true); - multiDragElements.forEach(function (multiDragElement) { + let dragRect = getRect(dragEl$1, false, true, true); + multiDragElements.forEach(multiDragElement => { if (multiDragElement === dragEl$1) return; setRect(multiDragElement, dragRect); }); @@ -3337,41 +3252,43 @@ } } - sortable.animateAll(function () { + sortable.animateAll(() => { folding = false; initialFolding = false; - if (_this2.options.animation) { - multiDragElements.forEach(function (multiDragElement) { + if (this.options.animation) { + multiDragElements.forEach(multiDragElement => { unsetRect(multiDragElement); }); } // Remove all auxiliary multidrag items from el, if sorting enabled - if (_this2.options.sort) { + if (this.options.sort) { removeMultiDragElements(); } }); }, - dragOver: function dragOver(_ref8) { - var target = _ref8.target, - completed = _ref8.completed, - cancel = _ref8.cancel; + dragOver({ + target, + completed, + cancel + }) { if (folding && ~multiDragElements.indexOf(target)) { completed(false); cancel(); } }, - revert: function revert(_ref9) { - var fromSortable = _ref9.fromSortable, - rootEl = _ref9.rootEl, - sortable = _ref9.sortable, - dragRect = _ref9.dragRect; + revert({ + fromSortable, + rootEl, + sortable, + dragRect + }) { if (multiDragElements.length > 1) { // Setup unfold animation - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { sortable.addAnimationState({ target: multiDragElement, rect: folding ? getRect(multiDragElement) : dragRect @@ -3384,14 +3301,16 @@ insertMultiDragElements(!this.options.removeCloneOnHide, rootEl); } }, - dragOverCompleted: function dragOverCompleted(_ref10) { - var sortable = _ref10.sortable, - isOwner = _ref10.isOwner, - insertion = _ref10.insertion, - activeSortable = _ref10.activeSortable, - parentEl = _ref10.parentEl, - putSortable = _ref10.putSortable; - var options = this.options; + + dragOverCompleted({ + sortable, + isOwner, + insertion, + activeSortable, + parentEl, + putSortable + }) { + let options = this.options; if (insertion) { // Clones must be hidden before folding animation to capture dragRectAbsolute properly @@ -3403,8 +3322,8 @@ if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) { // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible - var dragRectAbsolute = getRect(dragEl$1, false, true, true); - multiDragElements.forEach(function (multiDragElement) { + let dragRectAbsolute = getRect(dragEl$1, false, true, true); + multiDragElements.forEach(multiDragElement => { if (multiDragElement === dragEl$1) return; setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted // while folding, and so that we can capture them again because old sortable will no longer be fromSortable @@ -3422,13 +3341,13 @@ } if (multiDragElements.length > 1) { - var clonesHiddenBefore = clonesHidden; + let clonesHiddenBefore = clonesHidden; activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) { - multiDragClones.forEach(function (clone) { + multiDragClones.forEach(clone => { activeSortable.addAnimationState({ target: clone, rect: clonesFromRect @@ -3443,38 +3362,43 @@ } } }, - dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) { - var dragRect = _ref11.dragRect, - isOwner = _ref11.isOwner, - activeSortable = _ref11.activeSortable; - multiDragElements.forEach(function (multiDragElement) { + + dragOverAnimationCapture({ + dragRect, + isOwner, + activeSortable + }) { + multiDragElements.forEach(multiDragElement => { multiDragElement.thisAnimationDuration = null; }); if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) { clonesFromRect = _extends({}, dragRect); - var dragMatrix = matrix(dragEl$1, true); + let dragMatrix = matrix(dragEl$1, true); clonesFromRect.top -= dragMatrix.f; clonesFromRect.left -= dragMatrix.e; } }, - dragOverAnimationComplete: function dragOverAnimationComplete() { + + dragOverAnimationComplete() { if (folding) { folding = false; removeMultiDragElements(); } }, - drop: function drop(_ref12) { - var evt = _ref12.originalEvent, - rootEl = _ref12.rootEl, - parentEl = _ref12.parentEl, - sortable = _ref12.sortable, - dispatchSortableEvent = _ref12.dispatchSortableEvent, - oldIndex = _ref12.oldIndex, - putSortable = _ref12.putSortable; - var toSortable = putSortable || this.sortable; + + drop({ + originalEvent: evt, + rootEl, + parentEl, + sortable, + dispatchSortableEvent, + oldIndex, + putSortable + }) { + let toSortable = putSortable || this.sortable; if (!evt) return; - var options = this.options, + let options = this.options, children = parentEl.children; // Multi-drag selection if (!dragStarted) { @@ -3487,21 +3411,21 @@ if (!~multiDragElements.indexOf(dragEl$1)) { multiDragElements.push(dragEl$1); dispatchEvent({ - sortable: sortable, - rootEl: rootEl, + sortable, + rootEl, name: 'select', targetEl: dragEl$1, originalEvent: evt }); // Modifier activated, select from last to dragEl if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) { - var lastIndex = index(lastMultiDragSelect), + let lastIndex = index(lastMultiDragSelect), currentIndex = index(dragEl$1); if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) { // Must include lastMultiDragSelect (select it), in case modified selection from no selection // (but previous selection existed) - var n, i; + let n, i; if (currentIndex > lastIndex) { i = lastIndex; @@ -3516,8 +3440,8 @@ toggleClass(children[i], options.selectedClass, true); multiDragElements.push(children[i]); dispatchEvent({ - sortable: sortable, - rootEl: rootEl, + sortable, + rootEl, name: 'select', targetEl: children[i], originalEvent: evt @@ -3533,8 +3457,8 @@ multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1); lastMultiDragSelect = null; dispatchEvent({ - sortable: sortable, - rootEl: rootEl, + sortable, + rootEl, name: 'deselect', targetEl: dragEl$1, originalEvent: evt @@ -3547,7 +3471,7 @@ folding = false; // Do not "unfold" after around dragEl if reverted if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) { - var dragRect = getRect(dragEl$1), + let dragRect = getRect(dragEl$1), multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')'); if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null; toSortable.captureAnimationState(); @@ -3555,11 +3479,11 @@ if (!initialFolding) { if (options.animation) { dragEl$1.fromRect = dragRect; - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { multiDragElement.thisAnimationDuration = null; if (multiDragElement !== dragEl$1) { - var rect = folding ? getRect(multiDragElement) : dragRect; + let rect = folding ? getRect(multiDragElement) : dragRect; multiDragElement.fromRect = rect; // Prepare unfold animation toSortable.addAnimationState({ @@ -3573,7 +3497,7 @@ removeMultiDragElements(); - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { if (children[multiDragIndex]) { parentEl.insertBefore(multiDragElement, children[multiDragIndex]); } else { @@ -3586,8 +3510,8 @@ // must be fired here as Sortable will not. if (oldIndex === index(dragEl$1)) { - var update = false; - multiDragElements.forEach(function (multiDragElement) { + let update = false; + multiDragElements.forEach(multiDragElement => { if (multiDragElement.sortableIndex !== index(multiDragElement)) { update = true; return; @@ -3601,7 +3525,7 @@ } // Must be done after capturing individual rects (scroll bar) - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { unsetRect(multiDragElement); }); toSortable.animateAll(); @@ -3612,16 +3536,18 @@ if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') { - multiDragClones.forEach(function (clone) { + multiDragClones.forEach(clone => { clone.parentNode && clone.parentNode.removeChild(clone); }); } }, - nullingGlobal: function nullingGlobal() { + + nullingGlobal() { this.isMultiDrag = dragStarted = false; multiDragClones.length = 0; }, - destroyGlobal: function destroyGlobal() { + + destroyGlobal() { this._deselectMultiDrag(); off(document, 'pointerup', this._deselectMultiDrag); @@ -3630,7 +3556,8 @@ off(document, 'keydown', this._checkKeyDown); off(document, 'keyup', this._checkKeyUp); }, - _deselectMultiDrag: function _deselectMultiDrag(evt) { + + _deselectMultiDrag(evt) { if (typeof dragStarted !== "undefined" && dragStarted) return; // Only deselect if selection is in this sortable if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable @@ -3640,7 +3567,7 @@ if (evt && evt.button !== 0) return; while (multiDragElements.length) { - var el = multiDragElements[0]; + let el = multiDragElements[0]; toggleClass(el, this.options.selectedClass, false); multiDragElements.shift(); dispatchEvent({ @@ -3652,16 +3579,19 @@ }); } }, - _checkKeyDown: function _checkKeyDown(evt) { + + _checkKeyDown(evt) { if (evt.key === this.options.multiDragKey) { this.multiDragKeyDown = true; } }, - _checkKeyUp: function _checkKeyUp(evt) { + + _checkKeyUp(evt) { if (evt.key === this.options.multiDragKey) { this.multiDragKeyDown = false; } } + }; return _extends(MultiDrag, { // Static methods & properties @@ -3671,8 +3601,8 @@ * Selects the provided multi-drag item * @param {HTMLElement} el The element to be selected */ - select: function select(el) { - var sortable = el.parentNode[expando]; + select(el) { + let sortable = el.parentNode[expando]; if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return; if (multiDragSortable && multiDragSortable !== sortable) { @@ -3689,49 +3619,50 @@ * Deselects the provided multi-drag item * @param {HTMLElement} el The element to be deselected */ - deselect: function deselect(el) { - var sortable = el.parentNode[expando], + deselect(el) { + let sortable = el.parentNode[expando], index = multiDragElements.indexOf(el); if (!sortable || !sortable.options.multiDrag || !~index) return; toggleClass(el, sortable.options.selectedClass, false); multiDragElements.splice(index, 1); } + }, - eventProperties: function eventProperties() { - var _this3 = this; - var oldIndicies = [], - newIndicies = []; - multiDragElements.forEach(function (multiDragElement) { + eventProperties() { + const oldIndicies = [], + newIndicies = []; + multiDragElements.forEach(multiDragElement => { oldIndicies.push({ - multiDragElement: multiDragElement, + multiDragElement, index: multiDragElement.sortableIndex }); // multiDragElements will already be sorted if folding - var newIndex; + let newIndex; if (folding && multiDragElement !== dragEl$1) { newIndex = -1; } else if (folding) { - newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')'); + newIndex = index(multiDragElement, ':not(.' + this.options.selectedClass + ')'); } else { newIndex = index(multiDragElement); } newIndicies.push({ - multiDragElement: multiDragElement, + multiDragElement, index: newIndex }); }); return { - items: _toConsumableArray(multiDragElements), - clones: [].concat(multiDragClones), - oldIndicies: oldIndicies, - newIndicies: newIndicies + items: [...multiDragElements], + clones: [...multiDragClones], + oldIndicies, + newIndicies }; }, + optionListeners: { - multiDragKey: function multiDragKey(key) { + multiDragKey(key) { key = key.toLowerCase(); if (key === 'ctrl') { @@ -3742,13 +3673,14 @@ return key; } + } }); } function insertMultiDragElements(clonesInserted, rootEl) { - multiDragElements.forEach(function (multiDragElement, i) { - var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)]; + multiDragElements.forEach((multiDragElement, i) => { + let target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)]; if (target) { rootEl.insertBefore(multiDragElement, target); @@ -3765,8 +3697,8 @@ function insertMultiDragClones(elementsInserted, rootEl) { - multiDragClones.forEach(function (clone, i) { - var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)]; + multiDragClones.forEach((clone, i) => { + let target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)]; if (target) { rootEl.insertBefore(clone, target); @@ -3777,7 +3709,7 @@ } function removeMultiDragElements() { - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { if (multiDragElement === dragEl$1) return; multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement); }); diff --git a/Sortable.min.js b/Sortable.min.js index 17bb16c73..be168ac65 100644 --- a/Sortable.min.js +++ b/Sortable.min.js @@ -1,2 +1,2 @@ /*! Sortable 1.15.0 - MIT | git://github.com/SortableJS/Sortable.git */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Sortable=e()}(this,function(){"use strict";function e(e,t){var n,o=Object.keys(e);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(e),t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),o.push.apply(o,n)),o}function M(o){for(var t=1;tt.length)&&(e=t.length);for(var n=0,o=new Array(e);n"===e[0]&&(e=e.substring(1)),t))try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return}}function N(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"!==e[0]||t.parentNode===n)&&p(t,e)||o&&t===n)return t}while(t!==n&&(t=(i=t).host&&i!==document&&i.host.nodeType?i.host:i.parentNode))}var i;return null}var g,m=/\s+/g;function I(t,e,n){var o;t&&e&&(t.classList?t.classList[n?"add":"remove"](e):(o=(" "+t.className+" ").replace(m," ").replace(" "+e+" "," "),t.className=(o+(n?" "+e:"")).replace(m," ")))}function P(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];o[e=!(e in o||-1!==e.indexOf("webkit"))?"-webkit-"+e:e]=n+("string"==typeof n?"":"px")}}function v(t,e){var n="";if("string"==typeof t)n=t;else do{var o=P(t,"transform")}while(o&&"none"!==o&&(n=o+" "+n),!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(n)}function b(t,e,n){if(t){var o=t.getElementsByTagName(e),i=0,r=o.length;if(n)for(;i=n.left-e&&i<=n.right+e,e=r>=n.top-e&&r<=n.bottom+e;return o&&e?a=t:void 0}}),a);if(e){var n,o={};for(n in t)t.hasOwnProperty(n)&&(o[n]=t[n]);o.target=o.rootEl=e,o.preventDefault=void 0,o.stopPropagation=void 0,e[j]._onDragOver(o)}}var i,r,a}function Yt(t){q&&q.parentNode[j]._isOutsideThisEl(t.target)}function Bt(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=a({},e),t[j]=this;var n,o,i={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return It(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Bt.supportPointer&&"PointerEvent"in window&&!u,emptyInsertThreshold:5};for(n in K.initializePlugins(this,t,i),i)n in e||(e[n]=i[n]);for(o in Pt(e),this)"_"===o.charAt(0)&&"function"==typeof this[o]&&(this[o]=this[o].bind(this));this.nativeDraggable=!e.forceFallback&&Mt,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?h(t,"pointerdown",this._onTapStart):(h(t,"mousedown",this._onTapStart),h(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(h(t,"dragover",this),h(t,"dragenter",this)),Et.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),a(this,x())}function Ft(t,e,n,o,i,r,a,l){var s,c,u=t[j],d=u.options.onMove;return!window.CustomEvent||y||w?(s=document.createEvent("Event")).initEvent("move",!0,!0):s=new CustomEvent("move",{bubbles:!0,cancelable:!0}),s.to=e,s.from=t,s.dragged=n,s.draggedRect=o,s.related=i||e,s.relatedRect=r||k(e),s.willInsertAfter=l,s.originalEvent=a,t.dispatchEvent(s),c=d?d.call(u,s,a):c}function jt(t){t.draggable=!1}function Ht(){Ct=!1}function Lt(t){return setTimeout(t,0)}function Kt(t){return clearTimeout(t)}Bt.prototype={constructor:Bt,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(gt=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,q):this.options.direction},_onTapStart:function(e){if(e.cancelable){var n=this,o=this.el,t=this.options,i=t.preventOnFilter,r=e.type,a=e.touches&&e.touches[0]||e.pointerType&&"touch"===e.pointerType&&e,l=(a||e).target,s=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||l,c=t.filter;if(!function(t){Tt.length=0;var e=t.getElementsByTagName("input"),n=e.length;for(;n--;){var o=e[n];o.checked&&Tt.push(o)}}(o),!q&&!(/mousedown|pointerdown/.test(r)&&0!==e.button||t.disabled)&&!s.isContentEditable&&(this.nativeDraggable||!u||!l||"SELECT"!==l.tagName.toUpperCase())&&!((l=N(l,t.draggable,o,!1))&&l.animated||J===l)){if(nt=B(l),it=B(l,t.draggable),"function"==typeof c){if(c.call(this,e,l,this))return U({sortable:n,rootEl:s,name:"filter",targetEl:l,toEl:o,fromEl:o}),z("filter",n,{evt:e}),void(i&&e.cancelable&&e.preventDefault())}else if(c=c&&c.split(",").some(function(t){if(t=N(s,t.trim(),o,!1))return U({sortable:n,rootEl:t,name:"filter",targetEl:l,fromEl:o,toEl:o}),z("filter",n,{evt:e}),!0}))return void(i&&e.cancelable&&e.preventDefault());t.handle&&!N(s,t.handle,o,!1)||this._prepareDragStart(e,a,l)}}},_prepareDragStart:function(t,e,n){var o,i=this,r=i.el,a=i.options,l=r.ownerDocument;n&&!q&&n.parentNode===r&&(o=k(n),$=r,V=(q=n).parentNode,Q=q.nextSibling,J=n,at=a.group,st={target:Bt.dragged=q,clientX:(e||t).clientX,clientY:(e||t).clientY},ht=st.clientX-o.left,ft=st.clientY-o.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,q.style["will-change"]="all",o=function(){z("delayEnded",i,{evt:t}),Bt.eventCanceled?i._onDrop():(i._disableDelayedDragEvents(),!s&&i.nativeDraggable&&(q.draggable=!0),i._triggerDragStart(t,e),U({sortable:i,name:"choose",originalEvent:t}),I(q,a.chosenClass,!0))},a.ignore.split(",").forEach(function(t){b(q,t.trim(),jt)}),h(l,"dragover",Xt),h(l,"mousemove",Xt),h(l,"touchmove",Xt),h(l,"mouseup",i._onDrop),h(l,"touchend",i._onDrop),h(l,"touchcancel",i._onDrop),s&&this.nativeDraggable&&(this.options.touchStartThreshold=4,q.draggable=!0),z("delayStart",this,{evt:t}),!a.delay||a.delayOnTouchOnly&&!e||this.nativeDraggable&&(w||y)?o():Bt.eventCanceled?this._onDrop():(h(l,"mouseup",i._disableDelayedDrag),h(l,"touchend",i._disableDelayedDrag),h(l,"touchcancel",i._disableDelayedDrag),h(l,"mousemove",i._delayedDragTouchMoveHandler),h(l,"touchmove",i._delayedDragTouchMoveHandler),a.supportPointer&&h(l,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(o,a.delay)))},_delayedDragTouchMoveHandler:function(t){t=t.touches?t.touches[0]:t;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){q&&jt(q),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;f(t,"mouseup",this._disableDelayedDrag),f(t,"touchend",this._disableDelayedDrag),f(t,"touchcancel",this._disableDelayedDrag),f(t,"mousemove",this._delayedDragTouchMoveHandler),f(t,"touchmove",this._delayedDragTouchMoveHandler),f(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?h(document,"pointermove",this._onTouchMove):h(document,e?"touchmove":"mousemove",this._onTouchMove):(h(q,"dragend",this),h($,"dragstart",this._onDragStart));try{document.selection?Lt(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){var n;yt=!1,$&&q?(z("dragStarted",this,{evt:e}),this.nativeDraggable&&h(document,"dragover",Yt),n=this.options,t||I(q,n.dragClass,!1),I(q,n.ghostClass,!0),Bt.active=this,t&&this._appendGhost(),U({sortable:this,name:"start",originalEvent:e})):this._nulling()},_emulateDragOver:function(){if(ct){this._lastX=ct.clientX,this._lastY=ct.clientY,kt();for(var t=document.elementFromPoint(ct.clientX,ct.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(ct.clientX,ct.clientY))!==e;)e=t;if(q.parentNode[j]._isOutsideThisEl(t),e)do{if(e[j])if(e[j]._onDragOver({clientX:ct.clientX,clientY:ct.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break}while(e=(t=e).parentNode);Rt()}},_onTouchMove:function(t){if(st){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,i=t.touches?t.touches[0]:t,r=Z&&v(Z,!0),a=Z&&r&&r.a,l=Z&&r&&r.d,e=Ot&&bt&&E(bt),a=(i.clientX-st.clientX+o.x)/(a||1)+(e?e[0]-_t[0]:0)/(a||1),l=(i.clientY-st.clientY+o.y)/(l||1)+(e?e[1]-_t[1]:0)/(l||1);if(!Bt.active&&!yt){if(n&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))n.right+10||t.clientX<=n.right&&t.clientY>n.bottom&&t.clientX>=n.left:t.clientX>n.right&&t.clientY>n.top||t.clientX<=n.right&&t.clientY>n.bottom+10}(n,r,this)&&!g.animated){if(g===q)return O(!1);if((l=g&&a===n.target?g:l)&&(w=k(l)),!1!==Ft($,a,q,o,l,w,n,!!l))return x(),g&&g.nextSibling?a.insertBefore(q,g.nextSibling):a.appendChild(q),V=a,A(),O(!0)}else if(g&&function(t,e,n){n=k(X(n.el,0,n.options,!0));return e?t.clientX"===e[0]&&(e=e.substring(1)),t))try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return}}function x(t,e,o,n){if(t){o=o||document;do{if(null!=e&&(">"!==e[0]||t.parentNode===o)&&l(t,e)||n&&t===o)return t}while(t!==o&&(t=(i=t).host&&i!==document&&i.host.nodeType?i.host:i.parentNode))}var i;return null}const i=/\s+/g;function M(t,e,o){var n;t&&e&&(t.classList?t.classList[o?"add":"remove"](e):(n=(" "+t.className+" ").replace(i," ").replace(" "+e+" "," "),t.className=(n+(o?" "+e:"")).replace(i," ")))}function N(t,e,o){let n=t&&t.style;if(n){if(void 0===o)return document.defaultView&&document.defaultView.getComputedStyle?o=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(o=t.currentStyle),void 0===e?o:o[e];e in n||-1!==e.indexOf("webkit")||(e="-webkit-"+e),n[e]=o+("string"==typeof o?"":"px")}}function f(t,e){let o="";if("string"==typeof t)o=t;else do{var n=N(t,"transform");n&&"none"!==n&&(o=n+" "+o)}while(!e&&(t=t.parentNode));const i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(o)}function u(n,i,r){if(n){let t=n.getElementsByTagName(i),e=0,o=t.length;if(r)for(;e{if("none"!==N(e,"display")&&e!==It.ghost){n.push({target:e,rect:A(e)});let t={...n[n.length-1].rect};var o;!e.thisAnimationDuration||(o=f(e,!0))&&(t.top-=o.f,t.left-=o.e),e.fromRect=t}})}},addAnimationState(t){n.push(t)},removeAnimationState(t){n.splice(function(t,e){for(var o in t)if(t.hasOwnProperty(o))for(var n in e)if(e.hasOwnProperty(n)&&e[n]===t[o][n])return Number(o);return-1}(n,{target:t}),1)},animateAll(t){if(!this.options.animation)return clearTimeout(e),void("function"==typeof t&&t());let u=!1,p=0;n.forEach(t=>{let e=0,o=t.target,n=o.fromRect,i=A(o),r=o.prevFromRect,a=o.prevToRect,l=t.rect,s=f(o,!0);var c,d,h;s&&(i.top-=s.f,i.left-=s.e),o.toRect=i,o.thisAnimationDuration&&m(r,i)&&!m(n,i)&&(l.top-i.top)/(l.left-i.left)==(n.top-i.top)/(n.left-i.left)&&(e=(c=l,d=r,h=a,t=this.options,Math.sqrt(Math.pow(d.top-c.top,2)+Math.pow(d.left-c.left,2))/Math.sqrt(Math.pow(d.top-h.top,2)+Math.pow(d.left-h.left,2))*t.animation)),m(i,n)||(o.prevFromRect=n,o.prevToRect=i,e=e||this.options.animation,this.animate(o,l,i,e)),e&&(u=!0,p=Math.max(p,e),clearTimeout(o.animationResetTimer),o.animationResetTimer=setTimeout(function(){o.animationTime=0,o.prevFromRect=null,o.fromRect=null,o.prevToRect=null,o.thisAnimationDuration=null},e),o.thisAnimationDuration=e)}),clearTimeout(e),u?e=setTimeout(function(){"function"==typeof t&&t()},p):"function"==typeof t&&t(),n=[]},animate(t,e,o,n){var i,r;n&&(N(t,"transition",""),N(t,"transform",""),i=(r=f(this.el))&&r.a,r=r&&r.d,i=(e.left-o.left)/(i||1),r=(e.top-o.top)/(r||1),t.animatingX=!!i,t.animatingY=!!r,N(t,"transform","translate3d("+i+"px,"+r+"px,0)"),this.forRepaintDummy=t.offsetWidth,N(t,"transition","transform "+n+"ms"+(this.options.easing?" "+this.options.easing:"")),N(t,"transform","translate3d(0,0,0)"),"number"==typeof t.animated&&clearTimeout(t.animated),t.animated=setTimeout(function(){N(t,"transition",""),N(t,"transform",""),t.animated=!1,t.animatingX=!1,t.animatingY=!1},n))}}}let C=[];const T={initializeByDefault:!0};var Y={mount(e){for(var t in T)!T.hasOwnProperty(t)||t in e||(e[t]=T[t]);C.forEach(t=>{if(t.pluginName===e.pluginName)throw`Sortable: Cannot mount plugin ${e.pluginName} more than once`}),C.push(e)},pluginEvent(e,o,n){this.eventCanceled=!1,n.cancel=()=>{this.eventCanceled=!0};const i=e+"Global";C.forEach(t=>{o[t.pluginName]&&(o[t.pluginName][i]&&o[t.pluginName][i]({sortable:o,...n}),o.options[t.pluginName]&&o[t.pluginName][e]&&o[t.pluginName][e]({sortable:o,...n}))})},initializePlugins(n,i,r,t){for(var e in C.forEach(e=>{var o=e.pluginName;if(n.options[o]||e.initializeByDefault){let t=new e(n,i,n.options);t.sortable=n,t.options=n.options,n[o]=t,a(r,t.defaults)}}),n.options){var o;n.options.hasOwnProperty(e)&&(void 0!==(o=this.modifyOption(n,e,n.options[e]))&&(n.options[e]=o))}},getEventProperties(e,o){let n={};return C.forEach(t=>{"function"==typeof t.eventProperties&&a(n,t.eventProperties.call(o[t.pluginName],e))}),n},modifyOption(e,o,n){let i;return C.forEach(t=>{e[t.pluginName]&&t.optionListeners&&"function"==typeof t.optionListeners[o]&&(i=t.optionListeners[o].call(e[t.pluginName],n))}),i}};function B({sortable:n,rootEl:i,name:r,targetEl:a,cloneEl:l,toEl:s,fromEl:c,oldIndex:d,newIndex:h,oldDraggableIndex:u,newDraggableIndex:p,originalEvent:f,putSortable:g,extraEventProperties:m}){if(n=n||i&&i[X]){let t,e=n.options,o="on"+r.charAt(0).toUpperCase()+r.substr(1);!window.CustomEvent||w||E?(t=document.createEvent("Event"),t.initEvent(r,!0,!0)):t=new CustomEvent(r,{bubbles:!0,cancelable:!0}),t.to=s||i,t.from=c||i,t.item=a||i,t.clone=l,t.oldIndex=d,t.newIndex=h,t.oldDraggableIndex=u,t.newDraggableIndex=p,t.originalEvent=f,t.pullMode=g?g.lastPutMode:void 0;var v,b={...m,...Y.getEventProperties(r,n)};for(v in b)t[v]=b[v];i&&i.dispatchEvent(t),e[o]&&e[o].call(n,t)}}let F=function(t,e,{evt:o,...n}={}){Y.pluginEvent.bind(It)(t,e,{dragEl:L,parentEl:K,ghostEl:W,rootEl:z,nextEl:G,lastDownEl:$,cloneEl:U,cloneHidden:j,dragStarted:dt,putSortable:tt,activeSortable:It.active,originalEvent:o,oldIndex:q,oldDraggableIndex:Z,newIndex:V,newDraggableIndex:Q,hideGhostForTarget:xt,unhideGhostForTarget:Mt,cloneNowHidden(){j=!0},cloneNowShown(){j=!1},dispatchSortableEvent(t){H({sortable:e,name:t,originalEvent:o})},...n})};function H(t){B({putSortable:tt,cloneEl:U,targetEl:L,rootEl:z,oldIndex:q,oldDraggableIndex:Z,newIndex:V,newDraggableIndex:Q,...t})}let L,K,W,z,G,$,U,j,q,V,Z,Q,J,tt,et=!1,ot=!1,nt=[],it,rt,at,lt,st,ct,dt,ht,ut,pt=!1,ft=!1,gt,mt,vt=[],bt=!1,wt=[];const Et="undefined"!=typeof document,yt=e,Dt=E||w?"cssFloat":"float",_t=Et&&!o&&!e&&"draggable"in document.createElement("div"),St=function(){if(Et){if(w)return!1;let t=document.createElement("x");return t.style.cssText="pointer-events:auto","auto"===t.style.pointerEvents}}(),Ct=function(t,e){let o=N(t),n=parseInt(o.width)-parseInt(o.paddingLeft)-parseInt(o.paddingRight)-parseInt(o.borderLeftWidth)-parseInt(o.borderRightWidth),i=O(t,0,e),r=O(t,1,e),a=i&&N(i),l=r&&N(r),s=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+A(i).width,c=l&&parseInt(l.marginLeft)+parseInt(l.marginRight)+A(r).width;if("flex"===o.display)return"column"===o.flexDirection||"column-reverse"===o.flexDirection?"vertical":"horizontal";if("grid"===o.display)return o.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(i&&a.float&&"none"!==a.float){e="left"===a.float?"left":"right";return!r||"both"!==l.clear&&l.clear!==e?"horizontal":"vertical"}return i&&("block"===a.display||"flex"===a.display||"table"===a.display||"grid"===a.display||n<=s&&"none"===o[Dt]||r&&"none"===o[Dt]&&n{var e=t[X].options.emptyInsertThreshold;if(e&&!P(t)){var o=A(t),n=i>=o.left-e&&i<=o.right+e,e=r>=o.top-e&&r<=o.bottom+e;return n&&e?a=t:void 0}}),a}((o=o.touches?o.touches[0]:o).clientX,o.clientY);if(e){let t={};for(var n in o)o.hasOwnProperty(n)&&(t[n]=o[n]);t.target=t.rootEl=e,t.preventDefault=void 0,t.stopPropagation=void 0,e[X]._onDragOver(t)}}},At=function(t){L&&L.parentNode[X]._isOutsideThisEl(t.target)};function It(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw`Sortable: \`el\` must be an HTMLElement, not ${{}.toString.call(t)}`;this.el=t,this.options=e=a({},e),this.options.fallbackOnBody&&(this.options.getFallbackParent=()=>document.body),t[X]=this;var o,n,i={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Ct(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,getFallbackParent:null,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==It.supportPointer&&"PointerEvent"in window&&!d,emptyInsertThreshold:5};for(o in Y.initializePlugins(this,t,i),i)o in e||(e[o]=i[o]);for(n in Tt(e),this)"_"===n.charAt(0)&&"function"==typeof this[n]&&(this[n]=this[n].bind(this));this.nativeDraggable=!e.forceFallback&&_t,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?h(t,"pointerdown",this._onTapStart):(h(t,"mousedown",this._onTapStart),h(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(h(t,"dragover",this),h(t,"dragenter",this)),nt.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),a(this,S())}function Ot(t,e,o,n,i,r,a,l){let s,c=t[X],d=c.options.onMove,h;return!window.CustomEvent||w||E?(s=document.createEvent("Event"),s.initEvent("move",!0,!0)):s=new CustomEvent("move",{bubbles:!0,cancelable:!0}),s.to=e,s.from=t,s.dragged=o,s.draggedRect=n,s.related=i||e,s.relatedRect=r||A(e),s.willInsertAfter=l,s.originalEvent=a,t.dispatchEvent(s),d&&(h=d.call(c,s,a)),h}function Pt(t){t.draggable=!1}function kt(){bt=!1}function Rt(t){return setTimeout(t,0)}function Xt(t){return clearTimeout(t)}It.prototype={constructor:It,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(ht=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,L):this.options.direction},_onTapStart:function(c){if(c.cancelable){let e=this,o=this.el,t=this.options,n=t.preventOnFilter,i=c.type,r=c.touches&&c.touches[0]||c.pointerType&&"touch"===c.pointerType&&c,a=(r||c).target,l=c.target.shadowRoot&&(c.path&&c.path[0]||c.composedPath&&c.composedPath()[0])||a,s=t.filter;if(!function(t){wt.length=0;let e=t.getElementsByTagName("input"),o=e.length;for(;o--;){var n=e[o];n.checked&&wt.push(n)}}(o),!L&&!(/mousedown|pointerdown/.test(i)&&0!==c.button||t.disabled)&&!l.isContentEditable&&(this.nativeDraggable||!d||!a||"SELECT"!==a.tagName.toUpperCase())&&(a=x(a,t.draggable,o,!1),!(a&&a.animated||$===a))){if(q=k(a),Z=k(a,t.draggable),"function"==typeof s){if(s.call(this,c,a,this))return H({sortable:e,rootEl:l,name:"filter",targetEl:a,toEl:o,fromEl:o}),F("filter",e,{evt:c}),void(n&&c.cancelable&&c.preventDefault())}else if(s&&(s=s.split(",").some(function(t){if(t=x(l,t.trim(),o,!1))return H({sortable:e,rootEl:t,name:"filter",targetEl:a,fromEl:o,toEl:o}),F("filter",e,{evt:c}),!0}),s))return void(n&&c.cancelable&&c.preventDefault());t.handle&&!x(l,t.handle,o,!1)||this._prepareDragStart(c,r,a)}}},_prepareDragStart:function(t,e,o){let n=this,i=n.el,r=n.options,a=i.ownerDocument,l;var s;o&&!L&&o.parentNode===i&&(s=A(o),z=i,L=o,K=L.parentNode,G=L.nextSibling,$=o,J=r.group,It.dragged=L,it={target:L,clientX:(e||t).clientX,clientY:(e||t).clientY},st=it.clientX-s.left,ct=it.clientY-s.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,L.style["will-change"]="all",l=function(){F("delayEnded",n,{evt:t}),It.eventCanceled?n._onDrop():(n._disableDelayedDragEvents(),!c&&n.nativeDraggable&&(L.draggable=!0),n._triggerDragStart(t,e),H({sortable:n,name:"choose",originalEvent:t}),M(L,r.chosenClass,!0))},r.ignore.split(",").forEach(function(t){u(L,t.trim(),Pt)}),h(a,"dragover",Nt),h(a,"mousemove",Nt),h(a,"touchmove",Nt),h(a,"mouseup",n._onDrop),h(a,"touchend",n._onDrop),h(a,"touchcancel",n._onDrop),c&&this.nativeDraggable&&(this.options.touchStartThreshold=4,L.draggable=!0),F("delayStart",this,{evt:t}),!r.delay||r.delayOnTouchOnly&&!e||this.nativeDraggable&&(E||w)?l():It.eventCanceled?this._onDrop():(h(a,"mouseup",n._disableDelayedDrag),h(a,"touchend",n._disableDelayedDrag),h(a,"touchcancel",n._disableDelayedDrag),h(a,"mousemove",n._delayedDragTouchMoveHandler),h(a,"touchmove",n._delayedDragTouchMoveHandler),r.supportPointer&&h(a,"pointermove",n._delayedDragTouchMoveHandler),n._dragStartTimer=setTimeout(l,r.delay)))},_delayedDragTouchMoveHandler:function(t){t=t.touches?t.touches[0]:t;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){L&&Pt(L),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;r(t,"mouseup",this._disableDelayedDrag),r(t,"touchend",this._disableDelayedDrag),r(t,"touchcancel",this._disableDelayedDrag),r(t,"mousemove",this._delayedDragTouchMoveHandler),r(t,"touchmove",this._delayedDragTouchMoveHandler),r(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?h(document,"pointermove",this._onTouchMove):h(document,e?"touchmove":"mousemove",this._onTouchMove):(h(L,"dragend",this),h(z,"dragstart",this._onDragStart));try{document.selection?Rt(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){var o;et=!1,z&&L?(F("dragStarted",this,{evt:e}),this.nativeDraggable&&h(document,"dragover",At),o=this.options,t||M(L,o.dragClass,!1),M(L,o.ghostClass,!0),It.active=this,t&&this._appendGhost(),H({sortable:this,name:"start",originalEvent:e})):this._nulling()},_emulateDragOver:function(){if(rt){this._lastX=rt.clientX,this._lastY=rt.clientY,xt();let t=document.elementFromPoint(rt.clientX,rt.clientY),e=t;for(;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(rt.clientX,rt.clientY),t!==e);)e=t;if(L.parentNode[X]._isOutsideThisEl(t),e)do{if(e[X])if(e[X]._onDragOver({clientX:rt.clientX,clientY:rt.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break}while(t=e,e=e.parentNode);Mt()}},_onTouchMove:function(d){if(it){let t=this.options,e=t.fallbackTolerance,o=t.fallbackOffset,n=d.touches?d.touches[0]:d,i=W&&f(W,!0),r=W&&i&&i.a,a=W&&i&&i.d,l=yt&&mt&&g(mt),s=(n.clientX-it.clientX+o.x)/(r||1)+(l?l[0]-vt[0]:0)/(r||1),c=(n.clientY-it.clientY+o.y)/(a||1)+(l?l[1]-vt[1]:0)/(a||1);if(!It.active&&!et){if(e&&Math.max(Math.abs(n.clientX-this._lastX),Math.abs(n.clientY-this._lastY))o.right+10||t.clientX<=o.right&&t.clientY>o.bottom&&t.clientX>=o.left:t.clientX>o.right&&t.clientY>o.top||t.clientX<=o.right&&t.clientY>o.bottom+10}(d,m,this)&&!v.animated){if(v===L)return C(!1);if(v&&h===d.target&&(u=v),u&&(f=A(u)),!1!==Ot(z,h,L,p,u,f,d,!!u))return S(),v&&v.nextSibling?h.insertBefore(L,v.nextSibling):h.appendChild(L),K=h,T(),C(!0)}else if(v&&function(t,e,o){o=A(O(o.el,0,o.options,!0));return e?t.clientXh-gt)return-ut}else if(d+c*(1-i)/2{if(!t.prototype||!t.prototype.constructor)throw`Sortable: Mounted plugin must be a constructor function, not ${{}.toString.call(t)}`;t.utils&&(It.utils={...It.utils,...t.utils}),Y.mount(t)})},It.create=function(t,e){return new It(t,e)};let Yt=[],Bt,Ft,Ht=!(It.version="1.15.0"),Lt,Kt,Wt,zt;function Gt(){Yt.forEach(function(t){clearInterval(t.pid)}),Yt=[]}function $t(){clearInterval(zt)}const Ut=b(function(w,t,e,E){if(t.scroll){const _=(w.touches?w.touches[0]:w).clientX,S=(w.touches?w.touches[0]:w).clientY,C=t.scrollSensitivity,T=t.scrollSpeed,x=p();let g=!1,m;Ft!==e&&(Ft=e,Gt(),Bt=t.scroll,m=t.scrollFn,!0===Bt&&(Bt=s(e,!0)));let v=0,b=Bt;do{let t=b,e=A(t),o=e.top,n=e.bottom,i=e.left,r=e.right,a=e.width,l=e.height,s,c,d=t.scrollWidth,h=t.scrollHeight,u=N(t),p=t.scrollLeft,f=t.scrollTop;c=t===x?(s=a{e=n.children[t.sortableIndex+(o?Number(e):0)];e?n.insertBefore(t,e):n.appendChild(t)})}function se(){Zt.forEach(t=>{t!==ie&&t.parentNode&&t.parentNode.removeChild(t)})}return It.mount(new function(){function t(){for(var t in this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0},this)"_"===t.charAt(0)&&"function"==typeof this[t]&&(this[t]=this[t].bind(this))}return t.prototype={dragStarted({originalEvent:t}){this.sortable.nativeDraggable?h(document,"dragover",this._handleAutoScroll):this.options.supportPointer?h(document,"pointermove",this._handleFallbackAutoScroll):t.touches?h(document,"touchmove",this._handleFallbackAutoScroll):h(document,"mousemove",this._handleFallbackAutoScroll)},dragOverCompleted({originalEvent:t}){this.options.dragOverBubble||t.rootEl||this._handleAutoScroll(t)},drop(){this.sortable.nativeDraggable?r(document,"dragover",this._handleAutoScroll):(r(document,"pointermove",this._handleFallbackAutoScroll),r(document,"touchmove",this._handleFallbackAutoScroll),r(document,"mousemove",this._handleFallbackAutoScroll)),$t(),Gt(),clearTimeout(v),v=void 0},nulling(){Wt=Ft=Bt=Ht=zt=Lt=Kt=null,Yt.length=0},_handleFallbackAutoScroll(t){this._handleAutoScroll(t,!0)},_handleAutoScroll(o,n){const i=(o.touches?o.touches[0]:o).clientX,r=(o.touches?o.touches[0]:o).clientY,t=document.elementFromPoint(i,r);if(Wt=o,n||this.options.forceAutoScrollFallback||E||w||d){Ut(o,this.options,t,n);let e=s(t,!0);!Ht||zt&&i===Lt&&r===Kt||(zt&&$t(),zt=setInterval(()=>{var t=s(document.elementFromPoint(i,r),!0);t!==e&&(e=t,Gt()),Ut(o,this.options,t,n)},10),Lt=i,Kt=r)}else this.options.bubbleScroll&&s(t,!0)!==p()?Ut(o,this.options,s(t,!1),!1):Gt()}},a(t,{pluginName:"scroll",initializeByDefault:!0})}),It.mount(qt,jt),It.mount(new function(){function t(){this.defaults={swapClass:"sortable-swap-highlight"}}return t.prototype={dragStart({dragEl:t}){Vt=t},dragOverValid({completed:t,target:e,onMove:o,activeSortable:n,changed:i,cancel:r}){var a;n.options.swap&&(a=this.sortable.el,n=this.options,e&&e!==a&&(a=Vt,Vt=!1!==o(e)?(M(e,n.swapClass,!0),e):null,a&&a!==Vt&&M(a,n.swapClass,!1)),i(),t(!0),r())},drop({activeSortable:t,putSortable:e,dragEl:o}){let n=e||this.sortable;var i=this.options;Vt&&M(Vt,i.swapClass,!1),Vt&&(i.swap||e&&e.options.swap)&&o!==Vt&&(n.captureAnimationState(),n!==t&&t.captureAnimationState(),function(t,e){let o=t.parentNode,n=e.parentNode,i,r;o&&n&&!o.isEqualNode(e)&&!n.isEqualNode(t)&&(i=k(t),r=k(e),o.isEqualNode(n)&&i{o+=(e?", ":"")+t.textContent}):o=e.textContent,t.setData("Text",o)}}}return t.prototype={multiDragKeyDown:!1,isMultiDrag:!1,delayStartGlobal({dragEl:t}){ie=t},delayEnded(){this.isMultiDrag=~Zt.indexOf(ie)},setupClone({sortable:t,cancel:e}){if(this.isMultiDrag){for(let t=0;t{N(t,"display","")}),t(),ae=!1,o())},hideClone({cloneNowHidden:t,cancel:e}){this.isMultiDrag&&(Qt.forEach(t=>{N(t,"display","none"),this.options.removeCloneOnHide&&t.parentNode&&t.parentNode.removeChild(t)}),t(),ae=!0,e())},dragStartGlobal({}){!this.isMultiDrag&&te&&te.multiDrag._deselectMultiDrag(),Zt.forEach(t=>{t.sortableIndex=k(t)}),Zt=Zt.sort(function(t,e){return t.sortableIndex-e.sortableIndex}),ne=!0},dragStarted({sortable:t}){if(this.isMultiDrag){if(this.options.sort&&(t.captureAnimationState(),this.options.animation)){Zt.forEach(t=>{t!==ie&&N(t,"position","absolute")});let e=A(ie,!1,!0,!0);Zt.forEach(t=>{t!==ie&&D(t,e)}),oe=!0,ee=!0}t.animateAll(()=>{oe=!1,ee=!1,this.options.animation&&Zt.forEach(t=>{_(t)}),this.options.sort&&se()})}},dragOver({target:t,completed:e,cancel:o}){oe&&~Zt.indexOf(t)&&(e(!1),o())},revert({fromSortable:e,rootEl:t,sortable:o,dragRect:n}){var i,r;1{o.addAnimationState({target:t,rect:oe?A(t):n}),_(t),t.fromRect=n,e.removeAnimationState(t)}),oe=!1,i=!this.options.removeCloneOnHide,r=t,Zt.forEach((t,e)=>{e=r.children[t.sortableIndex+(i?Number(e):0)];e?r.insertBefore(t,e):r.appendChild(t)}))},dragOverCompleted({sortable:t,isOwner:e,insertion:o,activeSortable:n,parentEl:i,putSortable:r}){var a=this.options;if(o){if(e&&n._hideClone(),ee=!1,a.animation&&1{t!==ie&&(D(t,e),i.appendChild(t))}),oe=!0}e||(oe||se(),1{n.addAnimationState({target:t,rect:re}),t.fromRect=re,t.thisAnimationDuration=null})):n._showClone(t))}},dragOverAnimationCapture({dragRect:t,isOwner:e,activeSortable:o}){Zt.forEach(t=>{t.thisAnimationDuration=null}),o.options.animation&&!e&&o.multiDrag.isMultiDrag&&(re=a({},t),t=f(ie,!0),re.top-=t.f,re.left-=t.e)},dragOverAnimationComplete(){oe&&(oe=!1,se())},drop({originalEvent:o,rootEl:r,parentEl:a,sortable:l,dispatchSortableEvent:t,oldIndex:s,putSortable:e}){let c=e||this.sortable;if(o){let n=this.options,i=a.children;if(!ne)if(n.multiDragKey&&!this.multiDragKeyDown&&this._deselectMultiDrag(),M(ie,n.selectedClass,!~Zt.indexOf(ie)),~Zt.indexOf(ie))Zt.splice(Zt.indexOf(ie),1),Jt=null,B({sortable:l,rootEl:r,name:"deselect",targetEl:ie,originalEvent:o});else{if(Zt.push(ie),B({sortable:l,rootEl:r,name:"select",targetEl:ie,originalEvent:o}),o.shiftKey&&Jt&&l.el.contains(Jt)){var d=k(Jt),h=k(ie);if(~d&&~h&&d!==h){let t,e;for(t=d{var e;t.thisAnimationDuration=null,t!==ie&&(e=oe?A(t):o,t.fromRect=e,c.addAnimationState({target:t,rect:e}))})),se(),Zt.forEach(t=>{i[e]?a.insertBefore(t,i[e]):a.appendChild(t),e++}),s===k(ie))){let e=!1;Zt.forEach(t=>{t.sortableIndex!==k(t)&&(e=!0)}),e&&t("update")}Zt.forEach(t=>{_(t)}),c.animateAll()}te=c}(r===a||e&&"clone"!==e.lastPutMode)&&Qt.forEach(t=>{t.parentNode&&t.parentNode.removeChild(t)})}},nullingGlobal(){this.isMultiDrag=ne=!1,Qt.length=0},destroyGlobal(){this._deselectMultiDrag(),r(document,"pointerup",this._deselectMultiDrag),r(document,"mouseup",this._deselectMultiDrag),r(document,"touchend",this._deselectMultiDrag),r(document,"keydown",this._checkKeyDown),r(document,"keyup",this._checkKeyUp)},_deselectMultiDrag(t){if(!(void 0!==ne&&ne||te!==this.sortable||t&&x(t.target,this.options.draggable,this.sortable.el,!1)||t&&0!==t.button))for(;Zt.length;){var e=Zt[0];M(e,this.options.selectedClass,!1),Zt.shift(),B({sortable:this.sortable,rootEl:this.sortable.el,name:"deselect",targetEl:e,originalEvent:t})}},_checkKeyDown(t){t.key===this.options.multiDragKey&&(this.multiDragKeyDown=!0)},_checkKeyUp(t){t.key===this.options.multiDragKey&&(this.multiDragKeyDown=!1)}},a(t,{pluginName:"multiDrag",utils:{select(t){var e=t.parentNode[X];e&&e.options.multiDrag&&!~Zt.indexOf(t)&&(te&&te!==e&&(te.multiDrag._deselectMultiDrag(),te=e),M(t,e.options.selectedClass,!0),Zt.push(t))},deselect(t){var e=t.parentNode[X],o=Zt.indexOf(t);e&&e.options.multiDrag&&~o&&(M(t,e.options.selectedClass,!1),Zt.splice(o,1))}},eventProperties(){const o=[],n=[];return Zt.forEach(t=>{o.push({multiDragElement:t,index:t.sortableIndex});let e;e=oe&&t!==ie?-1:oe?k(t,":not(."+this.options.selectedClass+")"):k(t),n.push({multiDragElement:t,index:e})}),{items:[...Zt],clones:[...Qt],oldIndicies:o,newIndicies:n}},optionListeners:{multiDragKey(t){return"ctrl"===(t=t.toLowerCase())?t="Control":1Grid Example

Nested Sortables Example

-

NOTE: When using nested Sortables with animation, it is recommended that the fallbackOnBody option is set to true.
It is also always recommended that either the invertSwap option is set to true, or the swapThreshold option is lower than the default value of 1 (eg 0.65).

+

NOTE: When using nested Sortables with animation, it is recommended that the getFallbackParent option is set to return document.body. (`() => (document.body)`).
It is also always recommended that either the invertSwap option is set to true, or the swapThreshold option is lower than the default value of 1 (eg 0.65).

Item 1.1
diff --git a/modular/sortable.complete.esm.js b/modular/sortable.complete.esm.js index 02e9f2d6b..d95bb86c1 100644 --- a/modular/sortable.complete.esm.js +++ b/modular/sortable.complete.esm.js @@ -4,75 +4,6 @@ * @author owenm * @license MIT */ -function ownKeys(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - - if (enumerableOnly) { - symbols = symbols.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - } - - keys.push.apply(keys, symbols); - } - - return keys; -} - -function _objectSpread2(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - - if (i % 2) { - ownKeys(Object(source), true).forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys(Object(source)).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - - return target; -} - -function _typeof(obj) { - "@babel/helpers - typeof"; - - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } - - return _typeof(obj); -} - -function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; -} - function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { @@ -91,75 +22,6 @@ function _extends() { return _extends.apply(this, arguments); } -function _objectWithoutPropertiesLoose(source, excluded) { - if (source == null) return {}; - var target = {}; - var sourceKeys = Object.keys(source); - var key, i; - - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - target[key] = source[key]; - } - - return target; -} - -function _objectWithoutProperties(source, excluded) { - if (source == null) return {}; - - var target = _objectWithoutPropertiesLoose(source, excluded); - - var key, i; - - if (Object.getOwnPropertySymbols) { - var sourceSymbolKeys = Object.getOwnPropertySymbols(source); - - for (i = 0; i < sourceSymbolKeys.length; i++) { - key = sourceSymbolKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; - target[key] = source[key]; - } - } - - return target; -} - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); -} - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray(arr); -} - -function _iterableToArray(iter) { - if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); -} - -function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); -} - -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - - return arr2; -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - var version = "1.15.0"; function userAgent(pattern) { @@ -168,14 +30,14 @@ function userAgent(pattern) { } } -var IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i); -var Edge = userAgent(/Edge/i); -var FireFox = userAgent(/firefox/i); -var Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i); -var IOS = userAgent(/iP(ad|od|hone)/i); -var ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i); +const IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i); +const Edge = userAgent(/Edge/i); +const FireFox = userAgent(/firefox/i); +const Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i); +const IOS = userAgent(/iP(ad|od|hone)/i); +const ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i); -var captureMode = { +const captureMode = { capture: false, passive: false }; @@ -240,21 +102,21 @@ ctx, includeCTX) { return null; } -var R_SPACE = /\s+/g; +const R_SPACE = /\s+/g; function toggleClass(el, name, state) { if (el && name) { if (el.classList) { el.classList[state ? 'add' : 'remove'](name); } else { - var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' '); + let className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' '); el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' '); } } } function css(el, prop, val) { - var style = el && el.style; + let style = el && el.style; if (style) { if (val === void 0) { @@ -276,13 +138,13 @@ function css(el, prop, val) { } function matrix(el, selfOnly) { - var appliedTransforms = ''; + let appliedTransforms = ''; if (typeof el === 'string') { appliedTransforms = el; } else { do { - var transform = css(el, 'transform'); + let transform = css(el, 'transform'); if (transform && transform !== 'none') { appliedTransforms = transform + ' ' + appliedTransforms; @@ -292,7 +154,7 @@ function matrix(el, selfOnly) { } while (!selfOnly && (el = el.parentNode)); } - var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix; + const matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix; /*jshint -W056 */ return matrixFn && new matrixFn(appliedTransforms); @@ -300,7 +162,7 @@ function matrix(el, selfOnly) { function find(ctx, tagName, iterator) { if (ctx) { - var list = ctx.getElementsByTagName(tagName), + let list = ctx.getElementsByTagName(tagName), i = 0, n = list.length; @@ -317,7 +179,7 @@ function find(ctx, tagName, iterator) { } function getWindowScrollingElement() { - var scrollingElement = document.scrollingElement; + let scrollingElement = document.scrollingElement; if (scrollingElement) { return scrollingElement; @@ -338,7 +200,7 @@ function getWindowScrollingElement() { function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) { if (!el.getBoundingClientRect && el !== window) return; - var elRect, top, left, bottom, right, height, width; + let elRect, top, left, bottom, right, height, width; if (el !== window && el.parentNode && el !== getWindowScrollingElement()) { elRect = el.getBoundingClientRect(); @@ -365,7 +227,7 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS if (!IE11OrLess) { do { if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) { - var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container + let containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container top -= containerRect.top + parseInt(css(container, 'border-top-width')); left -= containerRect.left + parseInt(css(container, 'border-left-width')); @@ -381,7 +243,7 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS if (undoScale && el !== window) { // Adjust for scale() - var elMatrix = matrix(container || el), + let elMatrix = matrix(container || el), scaleX = elMatrix && elMatrix.a, scaleY = elMatrix && elMatrix.d; @@ -414,13 +276,13 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS function isScrolledPast(el, elSide, parentSide) { - var parent = getParentAutoScrollElement(el, true), + let parent = getParentAutoScrollElement(el, true), elSideVal = getRect(el)[elSide]; /* jshint boss:true */ while (parent) { - var parentSideVal = getRect(parent)[parentSide], - visible = void 0; + let parentSideVal = getRect(parent)[parentSide], + visible; if (parentSide === 'top' || parentSide === 'left') { visible = elSideVal >= parentSideVal; @@ -446,7 +308,7 @@ function isScrolledPast(el, elSide, parentSide) { function getChild(el, childNum, options, includeDragEl) { - var currentChild = 0, + let currentChild = 0, i = 0, children = el.children; @@ -473,7 +335,7 @@ function getChild(el, childNum, options, includeDragEl) { function lastChild(el, selector) { - var last = el.lastElementChild; + let last = el.lastElementChild; while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) { last = last.previousElementSibling; @@ -491,7 +353,7 @@ function lastChild(el, selector) { function index(el, selector) { - var index = 0; + let index = 0; if (!el || !el.parentNode) { return -1; @@ -516,13 +378,13 @@ function index(el, selector) { function getRelativeScrollOffset(el) { - var offsetLeft = 0, + let offsetLeft = 0, offsetTop = 0, winScroller = getWindowScrollingElement(); if (el) { do { - var elMatrix = matrix(el), + let elMatrix = matrix(el), scaleX = elMatrix.a, scaleY = elMatrix.d; offsetLeft += el.scrollLeft * scaleX; @@ -541,10 +403,10 @@ function getRelativeScrollOffset(el) { function indexOfObject(arr, obj) { - for (var i in arr) { + for (let i in arr) { if (!arr.hasOwnProperty(i)) continue; - for (var key in obj) { + for (let key in obj) { if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i); } } @@ -555,13 +417,13 @@ function indexOfObject(arr, obj) { function getParentAutoScrollElement(el, includeSelf) { // skip to window if (!el || !el.getBoundingClientRect) return getWindowScrollingElement(); - var elem = el; - var gotSelf = false; + let elem = el; + let gotSelf = false; do { // we don't need to get elem css if it isn't even overflowing in the first place (performance) if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) { - var elemCSS = css(elem); + let elemCSS = css(elem); if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) { if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement(); @@ -578,7 +440,7 @@ function getParentAutoScrollElement(el, includeSelf) { function extend(dst, src) { if (dst && src) { - for (var key in src) { + for (let key in src) { if (src.hasOwnProperty(key)) { dst[key] = src[key]; } @@ -592,12 +454,12 @@ function isRectEqual(rect1, rect2) { return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width); } -var _throttleTimeout; +let _throttleTimeout; function throttle(callback, ms) { return function () { if (!_throttleTimeout) { - var args = arguments, + let args = arguments, _this = this; if (args.length === 1) { @@ -624,8 +486,8 @@ function scrollBy(el, x, y) { } function clone(el) { - var Polymer = window.Polymer; - var $ = window.jQuery || window.Zepto; + let Polymer = window.Polymer; + let $ = window.jQuery || window.Zepto; if (Polymer && Polymer.dom) { return Polymer.dom(el).cloneNode(true); @@ -652,28 +514,27 @@ function unsetRect(el) { css(el, 'height', ''); } -var expando = 'Sortable' + new Date().getTime(); +const expando = 'Sortable' + new Date().getTime(); function AnimationStateManager() { - var animationStates = [], + let animationStates = [], animationCallbackId; return { - captureAnimationState: function captureAnimationState() { + captureAnimationState() { animationStates = []; if (!this.options.animation) return; - var children = [].slice.call(this.el.children); - children.forEach(function (child) { + let children = [].slice.call(this.el.children); + children.forEach(child => { if (css(child, 'display') === 'none' || child === Sortable.ghost) return; animationStates.push({ target: child, rect: getRect(child) }); - - var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation - + let fromRect = { ...animationStates[animationStates.length - 1].rect + }; // If animating: compensate for current animation if (child.thisAnimationDuration) { - var childMatrix = matrix(child, true); + let childMatrix = matrix(child, true); if (childMatrix) { fromRect.top -= childMatrix.f; @@ -684,27 +545,28 @@ function AnimationStateManager() { child.fromRect = fromRect; }); }, - addAnimationState: function addAnimationState(state) { + + addAnimationState(state) { animationStates.push(state); }, - removeAnimationState: function removeAnimationState(target) { + + removeAnimationState(target) { animationStates.splice(indexOfObject(animationStates, { - target: target + target }), 1); }, - animateAll: function animateAll(callback) { - var _this = this; + animateAll(callback) { if (!this.options.animation) { clearTimeout(animationCallbackId); if (typeof callback === 'function') callback(); return; } - var animating = false, + let animating = false, animationTime = 0; - animationStates.forEach(function (state) { - var time = 0, + animationStates.forEach(state => { + let time = 0, target = state.target, fromRect = target.fromRect, toRect = getRect(target), @@ -726,7 +588,7 @@ function AnimationStateManager() { if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) { // If returning to same place as started from animation and on same axis - time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options); + time = calculateRealTime(animatingRect, prevFromRect, prevToRect, this.options); } } // if fromRect != toRect: animate @@ -736,10 +598,10 @@ function AnimationStateManager() { target.prevToRect = toRect; if (!time) { - time = _this.options.animation; + time = this.options.animation; } - _this.animate(target, animatingRect, toRect, time); + this.animate(target, animatingRect, toRect, time); } if (time) { @@ -768,11 +630,12 @@ function AnimationStateManager() { animationStates = []; }, - animate: function animate(target, currentRect, toRect, duration) { + + animate(target, currentRect, toRect, duration) { if (duration) { css(target, 'transition', ''); css(target, 'transform', ''); - var elMatrix = matrix(this.el), + let elMatrix = matrix(this.el), scaleX = elMatrix && elMatrix.a, scaleY = elMatrix && elMatrix.d, translateX = (currentRect.left - toRect.left) / (scaleX || 1), @@ -794,6 +657,7 @@ function AnimationStateManager() { }, duration); } } + }; } @@ -805,59 +669,61 @@ function calculateRealTime(animatingRect, fromRect, toRect, options) { return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation; } -var plugins = []; -var defaults = { +let plugins = []; +const defaults = { initializeByDefault: true }; var PluginManager = { - mount: function mount(plugin) { + mount(plugin) { // Set default static properties - for (var option in defaults) { + for (let option in defaults) { if (defaults.hasOwnProperty(option) && !(option in plugin)) { plugin[option] = defaults[option]; } } - plugins.forEach(function (p) { + plugins.forEach(p => { if (p.pluginName === plugin.pluginName) { - throw "Sortable: Cannot mount plugin ".concat(plugin.pluginName, " more than once"); + throw `Sortable: Cannot mount plugin ${plugin.pluginName} more than once`; } }); plugins.push(plugin); }, - pluginEvent: function pluginEvent(eventName, sortable, evt) { - var _this = this; + pluginEvent(eventName, sortable, evt) { this.eventCanceled = false; - evt.cancel = function () { - _this.eventCanceled = true; + evt.cancel = () => { + this.eventCanceled = true; }; - var eventNameGlobal = eventName + 'Global'; - plugins.forEach(function (plugin) { + const eventNameGlobal = eventName + 'Global'; + plugins.forEach(plugin => { if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable if (sortable[plugin.pluginName][eventNameGlobal]) { - sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({ - sortable: sortable - }, evt)); + sortable[plugin.pluginName][eventNameGlobal]({ + sortable, + ...evt + }); } // Only fire plugin event if plugin is enabled in this sortable, // and plugin has event defined if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) { - sortable[plugin.pluginName][eventName](_objectSpread2({ - sortable: sortable - }, evt)); + sortable[plugin.pluginName][eventName]({ + sortable, + ...evt + }); } }); }, - initializePlugins: function initializePlugins(sortable, el, defaults, options) { - plugins.forEach(function (plugin) { - var pluginName = plugin.pluginName; + + initializePlugins(sortable, el, defaults, options) { + plugins.forEach(plugin => { + const pluginName = plugin.pluginName; if (!sortable.options[pluginName] && !plugin.initializeByDefault) return; - var initialized = new plugin(sortable, el, sortable.options); + let initialized = new plugin(sortable, el, sortable.options); initialized.sortable = sortable; initialized.options = sortable.options; sortable[pluginName] = initialized; // Add default options from plugin @@ -865,27 +731,29 @@ var PluginManager = { _extends(defaults, initialized.defaults); }); - for (var option in sortable.options) { + for (let option in sortable.options) { if (!sortable.options.hasOwnProperty(option)) continue; - var modified = this.modifyOption(sortable, option, sortable.options[option]); + let modified = this.modifyOption(sortable, option, sortable.options[option]); if (typeof modified !== 'undefined') { sortable.options[option] = modified; } } }, - getEventProperties: function getEventProperties(name, sortable) { - var eventProperties = {}; - plugins.forEach(function (plugin) { + + getEventProperties(name, sortable) { + let eventProperties = {}; + plugins.forEach(plugin => { if (typeof plugin.eventProperties !== 'function') return; _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name)); }); return eventProperties; }, - modifyOption: function modifyOption(sortable, name, value) { - var modifiedValue; - plugins.forEach(function (plugin) { + + modifyOption(sortable, name, value) { + let modifiedValue; + plugins.forEach(plugin => { // Plugin must exist on the Sortable if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin @@ -895,26 +763,28 @@ var PluginManager = { }); return modifiedValue; } + }; -function dispatchEvent(_ref) { - var sortable = _ref.sortable, - rootEl = _ref.rootEl, - name = _ref.name, - targetEl = _ref.targetEl, - cloneEl = _ref.cloneEl, - toEl = _ref.toEl, - fromEl = _ref.fromEl, - oldIndex = _ref.oldIndex, - newIndex = _ref.newIndex, - oldDraggableIndex = _ref.oldDraggableIndex, - newDraggableIndex = _ref.newDraggableIndex, - originalEvent = _ref.originalEvent, - putSortable = _ref.putSortable, - extraEventProperties = _ref.extraEventProperties; +function dispatchEvent({ + sortable, + rootEl, + name, + targetEl, + cloneEl, + toEl, + fromEl, + oldIndex, + newIndex, + oldDraggableIndex, + newDraggableIndex, + originalEvent, + putSortable, + extraEventProperties +}) { sortable = sortable || rootEl && rootEl[expando]; if (!sortable) return; - var evt, + let evt, options = sortable.options, onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature @@ -938,10 +808,11 @@ function dispatchEvent(_ref) { evt.newDraggableIndex = newDraggableIndex; evt.originalEvent = originalEvent; evt.pullMode = putSortable ? putSortable.lastPutMode : undefined; + let allEventProperties = { ...extraEventProperties, + ...PluginManager.getEventProperties(name, sortable) + }; - var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable)); - - for (var option in allEventProperties) { + for (let option in allEventProperties) { evt[option] = allEventProperties[option]; } @@ -954,62 +825,65 @@ function dispatchEvent(_ref) { } } -var _excluded = ["evt"]; - -var pluginEvent = function pluginEvent(eventName, sortable) { - var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, - originalEvent = _ref.evt, - data = _objectWithoutProperties(_ref, _excluded); - - PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({ - dragEl: dragEl, - parentEl: parentEl, - ghostEl: ghostEl, - rootEl: rootEl, - nextEl: nextEl, - lastDownEl: lastDownEl, - cloneEl: cloneEl, - cloneHidden: cloneHidden, +let pluginEvent = function (eventName, sortable, { + evt: originalEvent, + ...data +} = {}) { + PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, { + dragEl, + parentEl, + ghostEl, + rootEl, + nextEl, + lastDownEl, + cloneEl, + cloneHidden, dragStarted: moved, - putSortable: putSortable, + putSortable, activeSortable: Sortable.active, - originalEvent: originalEvent, - oldIndex: oldIndex, - oldDraggableIndex: oldDraggableIndex, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex, + originalEvent, + oldIndex, + oldDraggableIndex, + newIndex, + newDraggableIndex, hideGhostForTarget: _hideGhostForTarget, unhideGhostForTarget: _unhideGhostForTarget, - cloneNowHidden: function cloneNowHidden() { + + cloneNowHidden() { cloneHidden = true; }, - cloneNowShown: function cloneNowShown() { + + cloneNowShown() { cloneHidden = false; }, - dispatchSortableEvent: function dispatchSortableEvent(name) { + + dispatchSortableEvent(name) { _dispatchEvent({ - sortable: sortable, - name: name, - originalEvent: originalEvent + sortable, + name, + originalEvent }); - } - }, data)); + }, + + ...data + }); }; function _dispatchEvent(info) { - dispatchEvent(_objectSpread2({ - putSortable: putSortable, - cloneEl: cloneEl, + dispatchEvent({ + putSortable, + cloneEl, targetEl: dragEl, - rootEl: rootEl, - oldIndex: oldIndex, - oldDraggableIndex: oldDraggableIndex, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex - }, info)); + rootEl, + oldIndex, + oldDraggableIndex, + newIndex, + newDraggableIndex, + ...info + }); } -var dragEl, +let dragEl, parentEl, ghostEl, rootEl, @@ -1046,24 +920,24 @@ _silent = false, savedInputChecked = []; /** @const */ -var documentExists = typeof document !== 'undefined', - PositionGhostAbsolutely = IOS, - CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float', - // This will not pass for IE9, because IE9 DnD only works on anchors +const documentExists = typeof document !== 'undefined', + PositionGhostAbsolutely = IOS, + CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float', + // This will not pass for IE9, because IE9 DnD only works on anchors supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'), - supportCssPointerEvents = function () { + supportCssPointerEvents = function () { if (!documentExists) return; // false when <= IE11 if (IE11OrLess) { return false; } - var el = document.createElement('x'); + let el = document.createElement('x'); el.style.cssText = 'pointer-events:auto'; return el.style.pointerEvents === 'auto'; }(), - _detectDirection = function _detectDirection(el, options) { - var elCSS = css(el), + _detectDirection = function (el, options) { + let elCSS = css(el), elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth), child1 = getChild(el, 0, options), child2 = getChild(el, 1, options), @@ -1080,15 +954,15 @@ supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal'; } - if (child1 && firstChildCSS["float"] && firstChildCSS["float"] !== 'none') { - var touchingSideChild2 = firstChildCSS["float"] === 'left' ? 'left' : 'right'; + if (child1 && firstChildCSS.float && firstChildCSS.float !== 'none') { + let touchingSideChild2 = firstChildCSS.float === 'left' ? 'left' : 'right'; return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal'; } return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal'; }, - _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) { - var dragElS1Opp = vertical ? dragRect.left : dragRect.top, + _dragElInRowColumn = function (dragRect, targetRect, vertical) { + let dragElS1Opp = vertical ? dragRect.left : dragRect.top, dragElS2Opp = vertical ? dragRect.right : dragRect.bottom, dragElOppLength = vertical ? dragRect.width : dragRect.height, targetS1Opp = vertical ? targetRect.left : targetRect.top, @@ -1103,14 +977,14 @@ supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in * @param {Number} y Y position * @return {HTMLElement} Element of the first found nearest Sortable */ -_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) { - var ret; - sortables.some(function (sortable) { - var threshold = sortable[expando].options.emptyInsertThreshold; +_detectNearestEmptySortable = function (x, y) { + let ret; + sortables.some(sortable => { + const threshold = sortable[expando].options.emptyInsertThreshold; if (!threshold || lastChild(sortable)) return; - var rect = getRect(sortable), - insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold, - insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold; + const rect = getRect(sortable), + insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold, + insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold; if (insideHorizontally && insideVertically) { return ret = sortable; @@ -1118,10 +992,10 @@ _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) { }); return ret; }, - _prepareGroup = function _prepareGroup(options) { + _prepareGroup = function (options) { function toFn(value, pull) { return function (to, from, dragEl, evt) { - var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name; + let sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name; if (value == null && (pull || sameGroup)) { // Default pull value @@ -1134,16 +1008,16 @@ _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) { } else if (typeof value === 'function') { return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt); } else { - var otherGroup = (pull ? to : from).options.group.name; + let otherGroup = (pull ? to : from).options.group.name; return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1; } }; } - var group = {}; - var originalGroup = options.group; + let group = {}; + let originalGroup = options.group; - if (!originalGroup || _typeof(originalGroup) != 'object') { + if (!originalGroup || typeof originalGroup != 'object') { originalGroup = { name: originalGroup }; @@ -1155,12 +1029,12 @@ _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) { group.revertClone = originalGroup.revertClone; options.group = group; }, - _hideGhostForTarget = function _hideGhostForTarget() { + _hideGhostForTarget = function () { if (!supportCssPointerEvents && ghostEl) { css(ghostEl, 'display', 'none'); } }, - _unhideGhostForTarget = function _unhideGhostForTarget() { + _unhideGhostForTarget = function () { if (!supportCssPointerEvents && ghostEl) { css(ghostEl, 'display', ''); } @@ -1179,17 +1053,17 @@ if (documentExists && !ChromeForAndroid) { }, true); } -var nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) { +let nearestEmptyInsertDetectEvent = function (evt) { if (dragEl) { evt = evt.touches ? evt.touches[0] : evt; - var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY); + let nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY); if (nearest) { // Create imitation event - var event = {}; + let event = {}; - for (var i in evt) { + for (let i in evt) { if (evt.hasOwnProperty(i)) { event[i] = evt[i]; } @@ -1204,7 +1078,7 @@ var nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) } }; -var _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) { +let _checkOutsideTargetEl = function (evt) { if (dragEl) { dragEl.parentNode[expando]._isOutsideThisEl(evt.target); } @@ -1218,15 +1092,20 @@ var _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) { function Sortable(el, options) { if (!(el && el.nodeType && el.nodeType === 1)) { - throw "Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(el)); + throw `Sortable: \`el\` must be an HTMLElement, not ${{}.toString.call(el)}`; } this.el = el; // root element - this.options = options = _extends({}, options); // Export instance + this.options = options = _extends({}, options); + + if (this.options.fallbackOnBody) { + this.options.getFallbackParent = () => document.body; + } // Export instance + el[expando] = this; - var defaults = { + let defaults = { group: null, sort: true, disabled: false, @@ -1240,7 +1119,7 @@ function Sortable(el, options) { invertedSwapThreshold: null, // will be set to same as swapThreshold if default removeCloneOnHide: true, - direction: function direction() { + direction: function () { return _detectDirection(el, this.options); }, ghostClass: 'sortable-ghost', @@ -1251,7 +1130,7 @@ function Sortable(el, options) { preventOnFilter: true, animation: 0, easing: null, - setData: function setData(dataTransfer, dragEl) { + setData: function (dataTransfer, dragEl) { dataTransfer.setData('Text', dragEl.textContent); }, dropBubble: false, @@ -1262,7 +1141,9 @@ function Sortable(el, options) { touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1, forceFallback: false, fallbackClass: 'sortable-fallback', + // @obsolete use `getFallbackParent: () => (document.body)` fallbackOnBody: false, + getFallbackParent: null, fallbackTolerance: 0, fallbackOffset: { x: 0, @@ -1273,14 +1154,14 @@ function Sortable(el, options) { }; PluginManager.initializePlugins(this, el, defaults); // Set default options - for (var name in defaults) { + for (let name in defaults) { !(name in options) && (options[name] = defaults[name]); } _prepareGroup(options); // Bind all private methods - for (var fn in this) { + for (let fn in this) { if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { this[fn] = this[fn].bind(this); } @@ -1318,20 +1199,20 @@ Sortable.prototype = /** @lends Sortable.prototype */ { constructor: Sortable, - _isOutsideThisEl: function _isOutsideThisEl(target) { + _isOutsideThisEl: function (target) { if (!this.el.contains(target) && target !== this.el) { lastTarget = null; } }, - _getDirection: function _getDirection(evt, target) { + _getDirection: function (evt, target) { return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction; }, - _onTapStart: function _onTapStart( + _onTapStart: function ( /** Event|TouchEvent */ evt) { if (!evt.cancelable) return; - var _this = this, + let _this = this, el = this.el, options = this.options, preventOnFilter = options.preventOnFilter, @@ -1389,7 +1270,7 @@ Sortable.prototype = }); pluginEvent('filter', _this, { - evt: evt + evt }); preventOnFilter && evt.cancelable && evt.preventDefault(); return; // cancel dnd @@ -1409,7 +1290,7 @@ Sortable.prototype = }); pluginEvent('filter', _this, { - evt: evt + evt }); return true; } @@ -1428,21 +1309,21 @@ Sortable.prototype = this._prepareDragStart(evt, touch, target); }, - _prepareDragStart: function _prepareDragStart( + _prepareDragStart: function ( /** Event */ evt, /** Touch */ touch, /** HTMLElement */ target) { - var _this = this, + let _this = this, el = _this.el, options = _this.options, ownerDocument = el.ownerDocument, dragStartFn; if (target && !dragEl && target.parentNode === el) { - var dragRect = getRect(target); + let dragRect = getRect(target); rootEl = el; dragEl = target; parentEl = dragEl.parentNode; @@ -1461,9 +1342,9 @@ Sortable.prototype = this._lastY = (touch || evt).clientY; dragEl.style['will-change'] = 'all'; - dragStartFn = function dragStartFn() { + dragStartFn = function () { pluginEvent('delayEnded', _this, { - evt: evt + evt }); if (Sortable.eventCanceled) { @@ -1511,7 +1392,7 @@ Sortable.prototype = } pluginEvent('delayStart', this, { - evt: evt + evt }); // Delay is impossible for native DnD in Edge or IE if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) { @@ -1536,23 +1417,23 @@ Sortable.prototype = } } }, - _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( + _delayedDragTouchMoveHandler: function ( /** TouchEvent|PointerEvent **/ e) { - var touch = e.touches ? e.touches[0] : e; + let touch = e.touches ? e.touches[0] : e; if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) { this._disableDelayedDrag(); } }, - _disableDelayedDrag: function _disableDelayedDrag() { + _disableDelayedDrag: function () { dragEl && _disableDraggable(dragEl); clearTimeout(this._dragStartTimer); this._disableDelayedDragEvents(); }, - _disableDelayedDragEvents: function _disableDelayedDragEvents() { - var ownerDocument = this.el.ownerDocument; + _disableDelayedDragEvents: function () { + let ownerDocument = this.el.ownerDocument; off(ownerDocument, 'mouseup', this._disableDelayedDrag); off(ownerDocument, 'touchend', this._disableDelayedDrag); off(ownerDocument, 'touchcancel', this._disableDelayedDrag); @@ -1560,7 +1441,7 @@ Sortable.prototype = off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler); off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler); }, - _triggerDragStart: function _triggerDragStart( + _triggerDragStart: function ( /** Event */ evt, /** Touch */ @@ -1591,20 +1472,20 @@ Sortable.prototype = } } catch (err) {} }, - _dragStarted: function _dragStarted(fallback, evt) { + _dragStarted: function (fallback, evt) { awaitingDragStarted = false; if (rootEl && dragEl) { pluginEvent('dragStarted', this, { - evt: evt + evt }); if (this.nativeDraggable) { on(document, 'dragover', _checkOutsideTargetEl); } - var options = this.options; // Apply effect + let options = this.options; // Apply effect !fallback && toggleClass(dragEl, options.dragClass, false); toggleClass(dragEl, options.ghostClass, true); @@ -1620,15 +1501,15 @@ Sortable.prototype = this._nulling(); } }, - _emulateDragOver: function _emulateDragOver() { + _emulateDragOver: function () { if (touchEvt) { this._lastX = touchEvt.clientX; this._lastY = touchEvt.clientY; _hideGhostForTarget(); - var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY); - var parent = target; + let target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY); + let parent = target; while (target && target.shadowRoot) { target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY); @@ -1641,7 +1522,7 @@ Sortable.prototype = if (parent) { do { if (parent[expando]) { - var inserted = void 0; + let inserted; inserted = parent[expando]._onDragOver({ clientX: touchEvt.clientX, clientY: touchEvt.clientY, @@ -1663,11 +1544,11 @@ Sortable.prototype = _unhideGhostForTarget(); } }, - _onTouchMove: function _onTouchMove( + _onTouchMove: function ( /**TouchEvent*/ evt) { if (tapEvt) { - var options = this.options, + let options = this.options, fallbackTolerance = options.fallbackTolerance, fallbackOffset = options.fallbackOffset, touch = evt.touches ? evt.touches[0] : evt, @@ -1701,7 +1582,7 @@ Sortable.prototype = }; } - var cssMatrix = "matrix(".concat(ghostMatrix.a, ",").concat(ghostMatrix.b, ",").concat(ghostMatrix.c, ",").concat(ghostMatrix.d, ",").concat(ghostMatrix.e, ",").concat(ghostMatrix.f, ")"); + let cssMatrix = `matrix(${ghostMatrix.a},${ghostMatrix.b},${ghostMatrix.c},${ghostMatrix.d},${ghostMatrix.e},${ghostMatrix.f})`; css(ghostEl, 'webkitTransform', cssMatrix); css(ghostEl, 'mozTransform', cssMatrix); css(ghostEl, 'msTransform', cssMatrix); @@ -1714,11 +1595,12 @@ Sortable.prototype = evt.cancelable && evt.preventDefault(); } }, - _appendGhost: function _appendGhost() { + _appendGhost: function () { // Bug if using scale(): https://stackoverflow.com/questions/2637058 // Not being adjusted for if (!ghostEl) { - var container = this.options.fallbackOnBody ? document.body : rootEl, + let fallbackParent = typeof this.options.getFallbackParent === 'function' ? this.options.getFallbackParent() : null; + let container = fallbackParent ?? rootEl, rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container), options = this.options; // Position absolutely @@ -1763,17 +1645,17 @@ Sortable.prototype = css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%'); } }, - _onDragStart: function _onDragStart( + _onDragStart: function ( /**Event*/ evt, /**boolean*/ fallback) { - var _this = this; + let _this = this; - var dataTransfer = evt.dataTransfer; - var options = _this.options; + let dataTransfer = evt.dataTransfer; + let options = _this.options; pluginEvent('dragStart', this, { - evt: evt + evt }); if (Sortable.eventCanceled) { @@ -1843,10 +1725,10 @@ Sortable.prototype = } }, // Returns true - if no further action is needed (either inserted or another condition) - _onDragOver: function _onDragOver( + _onDragOver: function ( /**Event*/ evt) { - var el = this.el, + let el = this.el, target = evt.target, dragRect, targetRect, @@ -1864,22 +1746,25 @@ Sortable.prototype = if (_silent) return; function dragOverEvent(name, extra) { - pluginEvent(name, _this, _objectSpread2({ - evt: evt, - isOwner: isOwner, + pluginEvent(name, _this, { + evt, + isOwner, axis: vertical ? 'vertical' : 'horizontal', - revert: revert, - dragRect: dragRect, - targetRect: targetRect, - canSort: canSort, - fromSortable: fromSortable, - target: target, - completed: completed, - onMove: function onMove(target, after) { - return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after); + revert, + dragRect, + targetRect, + canSort, + fromSortable, + target, + completed, + + onMove(target, after) { + return onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after); }, - changed: changed - }, extra)); + + changed, + ...extra + }); } // Capture animation state @@ -1896,7 +1781,7 @@ Sortable.prototype = function completed(insertion) { dragOverEvent('dragOverCompleted', { - insertion: insertion + insertion }); if (insertion) { @@ -1961,8 +1846,8 @@ Sortable.prototype = sortable: _this, name: 'change', toEl: el, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex, + newIndex, + newDraggableIndex, originalEvent: evt }); } @@ -2008,7 +1893,7 @@ Sortable.prototype = return completed(true); } - var elLastChild = lastChild(el, options.draggable); + let elLastChild = lastChild(el, options.draggable); if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) { // Insert to end of list @@ -2026,7 +1911,7 @@ Sortable.prototype = targetRect = getRect(target); } - if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) { + if (onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) { capture(); if (elLastChild && elLastChild.nextSibling) { @@ -2043,7 +1928,7 @@ Sortable.prototype = } } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) { // Insert to start of list - var firstChild = getChild(el, 0, options, true); + let firstChild = getChild(el, 0, options, true); if (firstChild === dragEl) { return completed(false); @@ -2052,7 +1937,7 @@ Sortable.prototype = target = firstChild; targetRect = getRect(target); - if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) { + if (onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) { capture(); el.insertBefore(dragEl, firstChild); parentEl = el; // actualization @@ -2062,7 +1947,7 @@ Sortable.prototype = } } else if (target.parentNode === el) { targetRect = getRect(target); - var direction = 0, + let direction = 0, targetBeforeFirstSwap, differentLevel = dragEl.parentNode !== el, differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical), @@ -2077,11 +1962,11 @@ Sortable.prototype = } direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target); - var sibling; + let sibling; if (direction !== 0) { // Check if target is beside dragEl in respective direction (ignoring hidden elements) - var dragIndex = index(dragEl); + let dragIndex = index(dragEl); do { dragIndex -= direction; @@ -2096,11 +1981,10 @@ Sortable.prototype = lastTarget = target; lastDirection = direction; - var nextSibling = target.nextElementSibling, + let nextSibling = target.nextElementSibling, after = false; after = direction === 1; - - var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after); + let moveVector = onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after); if (moveVector !== false) { if (moveVector === 1 || moveVector === -1) { @@ -2142,7 +2026,7 @@ Sortable.prototype = return false; }, _ignoreWhileAnimating: null, - _offMoveEvents: function _offMoveEvents() { + _offMoveEvents: function () { off(document, 'mousemove', this._onTouchMove); off(document, 'touchmove', this._onTouchMove); off(document, 'pointermove', this._onTouchMove); @@ -2150,24 +2034,24 @@ Sortable.prototype = off(document, 'mousemove', nearestEmptyInsertDetectEvent); off(document, 'touchmove', nearestEmptyInsertDetectEvent); }, - _offUpEvents: function _offUpEvents() { - var ownerDocument = this.el.ownerDocument; + _offUpEvents: function () { + let ownerDocument = this.el.ownerDocument; off(ownerDocument, 'mouseup', this._onDrop); off(ownerDocument, 'touchend', this._onDrop); off(ownerDocument, 'pointerup', this._onDrop); off(ownerDocument, 'touchcancel', this._onDrop); off(document, 'selectstart', this); }, - _onDrop: function _onDrop( + _onDrop: function ( /**Event*/ evt) { - var el = this.el, + let el = this.el, options = this.options; // Get the index of the dragged element within its parent newIndex = index(dragEl); newDraggableIndex = index(dragEl, options.draggable); pluginEvent('drop', this, { - evt: evt + evt }); parentEl = dragEl && dragEl.parentNode; // Get again after plugin event @@ -2324,7 +2208,7 @@ Sortable.prototype = this._nulling(); }, - _nulling: function _nulling() { + _nulling: function () { pluginEvent('nulling', this); rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null; savedInputChecked.forEach(function (el) { @@ -2332,7 +2216,7 @@ Sortable.prototype = }); savedInputChecked.length = lastDx = lastDy = 0; }, - handleEvent: function handleEvent( + handleEvent: function ( /**Event*/ evt) { switch (evt.type) { @@ -2362,8 +2246,8 @@ Sortable.prototype = * Serializes the item into an array of string. * @returns {String[]} */ - toArray: function toArray() { - var order = [], + toArray: function () { + let order = [], el, children = this.el.children, i = 0, @@ -2385,11 +2269,11 @@ Sortable.prototype = * Sorts the elements according to the array. * @param {String[]} order order of the items */ - sort: function sort(order, useAnimation) { - var items = {}, + sort: function (order, useAnimation) { + let items = {}, rootEl = this.el; this.toArray().forEach(function (id, i) { - var el = rootEl.children[i]; + let el = rootEl.children[i]; if (closest(el, this.options.draggable, rootEl, false)) { items[id] = el; @@ -2408,8 +2292,8 @@ Sortable.prototype = /** * Save the current sorting */ - save: function save() { - var store = this.options.store; + save: function () { + let store = this.options.store; store && store.set && store.set(this); }, @@ -2419,7 +2303,7 @@ Sortable.prototype = * @param {String} [selector] default: `options.draggable` * @returns {HTMLElement|null} */ - closest: function closest$1(el, selector) { + closest: function (el, selector) { return closest(el, selector || this.options.draggable, this.el, false); }, @@ -2429,13 +2313,13 @@ Sortable.prototype = * @param {*} [value] * @returns {*} */ - option: function option(name, value) { - var options = this.options; + option: function (name, value) { + let options = this.options; if (value === void 0) { return options[name]; } else { - var modifiedValue = PluginManager.modifyOption(this, name, value); + let modifiedValue = PluginManager.modifyOption(this, name, value); if (typeof modifiedValue !== 'undefined') { options[name] = modifiedValue; @@ -2452,9 +2336,9 @@ Sortable.prototype = /** * Destroy */ - destroy: function destroy() { + destroy: function () { pluginEvent('destroy', this); - var el = this.el; + let el = this.el; el[expando] = null; off(el, 'mousedown', this._onTapStart); off(el, 'touchstart', this._onTapStart); @@ -2477,7 +2361,7 @@ Sortable.prototype = sortables.splice(sortables.indexOf(this.el), 1); this.el = el = null; }, - _hideClone: function _hideClone() { + _hideClone: function () { if (!cloneHidden) { pluginEvent('hideClone', this); if (Sortable.eventCanceled) return; @@ -2490,7 +2374,7 @@ Sortable.prototype = cloneHidden = true; } }, - _showClone: function _showClone(putSortable) { + _showClone: function (putSortable) { if (putSortable.lastPutMode !== 'clone') { this._hideClone(); @@ -2529,8 +2413,8 @@ evt) { evt.cancelable && evt.preventDefault(); } -function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) { - var evt, +function onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) { + let evt, sortable = fromEl[expando], onMoveFn = sortable.options.onMove, retVal; // Support for new CustomEvent feature @@ -2571,19 +2455,19 @@ function _unsilent() { } function _ghostIsFirst(evt, vertical, sortable) { - var rect = getRect(getChild(sortable.el, 0, sortable.options, true)); - var spacer = 10; + let rect = getRect(getChild(sortable.el, 0, sortable.options, true)); + const spacer = 10; return vertical ? evt.clientX < rect.left - spacer || evt.clientY < rect.top && evt.clientX < rect.right : evt.clientY < rect.top - spacer || evt.clientY < rect.bottom && evt.clientX < rect.left; } function _ghostIsLast(evt, vertical, sortable) { - var rect = getRect(lastChild(sortable.el, sortable.options.draggable)); - var spacer = 10; + let rect = getRect(lastChild(sortable.el, sortable.options.draggable)); + const spacer = 10; return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer; } function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) { - var mouseOnAxis = vertical ? evt.clientY : evt.clientX, + let mouseOnAxis = vertical ? evt.clientY : evt.clientX, targetLength = vertical ? targetRect.height : targetRect.width, targetS1 = vertical ? targetRect.top : targetRect.left, targetS2 = vertical ? targetRect.bottom : targetRect.right, @@ -2651,7 +2535,7 @@ function _getInsertDirection(target) { function _generateId(el) { - var str = el.tagName + el.className + el.src + el.href + el.textContent, + let str = el.tagName + el.className + el.src + el.href + el.textContent, i = str.length, sum = 0; @@ -2664,11 +2548,11 @@ function _generateId(el) { function _saveInputCheckedState(root) { savedInputChecked.length = 0; - var inputs = root.getElementsByTagName('input'); - var idx = inputs.length; + let inputs = root.getElementsByTagName('input'); + let idx = inputs.length; while (idx--) { - var el = inputs[idx]; + let el = inputs[idx]; el.checked && savedInputChecked.push(el); } } @@ -2696,7 +2580,7 @@ Sortable.utils = { off: off, css: css, find: find, - is: function is(el, selector) { + is: function (el, selector) { return !!closest(el, selector, el, false); }, extend: extend, @@ -2725,18 +2609,16 @@ Sortable.get = function (element) { */ -Sortable.mount = function () { - for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) { - plugins[_key] = arguments[_key]; - } - +Sortable.mount = function (...plugins) { if (plugins[0].constructor === Array) plugins = plugins[0]; - plugins.forEach(function (plugin) { + plugins.forEach(plugin => { if (!plugin.prototype || !plugin.prototype.constructor) { - throw "Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(plugin)); + throw `Sortable: Mounted plugin must be a constructor function, not ${{}.toString.call(plugin)}`; } - if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils); + if (plugin.utils) Sortable.utils = { ...Sortable.utils, + ...plugin.utils + }; PluginManager.mount(plugin); }); }; @@ -2754,7 +2636,7 @@ Sortable.create = function (el, options) { Sortable.version = version; -var autoScrolls = [], +let autoScrolls = [], scrollEl, scrollRootEl, scrolling = false, @@ -2773,7 +2655,7 @@ function AutoScrollPlugin() { bubbleScroll: true }; // Bind all private methods - for (var fn in this) { + for (let fn in this) { if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { this[fn] = this[fn].bind(this); } @@ -2781,9 +2663,9 @@ function AutoScrollPlugin() { } AutoScroll.prototype = { - dragStarted: function dragStarted(_ref) { - var originalEvent = _ref.originalEvent; - + dragStarted({ + originalEvent + }) { if (this.sortable.nativeDraggable) { on(document, 'dragover', this._handleAutoScroll); } else { @@ -2796,15 +2678,17 @@ function AutoScrollPlugin() { } } }, - dragOverCompleted: function dragOverCompleted(_ref2) { - var originalEvent = _ref2.originalEvent; + dragOverCompleted({ + originalEvent + }) { // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached) if (!this.options.dragOverBubble && !originalEvent.rootEl) { this._handleAutoScroll(originalEvent); } }, - drop: function drop() { + + drop() { if (this.sortable.nativeDraggable) { off(document, 'dragover', this._handleAutoScroll); } else { @@ -2817,19 +2701,20 @@ function AutoScrollPlugin() { clearAutoScrolls(); cancelThrottle(); }, - nulling: function nulling() { + + nulling() { touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null; autoScrolls.length = 0; }, - _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) { + + _handleFallbackAutoScroll(evt) { this._handleAutoScroll(evt, true); }, - _handleAutoScroll: function _handleAutoScroll(evt, fallback) { - var _this = this; - var x = (evt.touches ? evt.touches[0] : evt).clientX, - y = (evt.touches ? evt.touches[0] : evt).clientY, - elem = document.elementFromPoint(x, y); + _handleAutoScroll(evt, fallback) { + const x = (evt.touches ? evt.touches[0] : evt).clientX, + y = (evt.touches ? evt.touches[0] : evt).clientY, + elem = document.elementFromPoint(x, y); touchEvt$1 = evt; // IE does not seem to have native autoscroll, // Edge's autoscroll seems too conditional, // MACOS Safari does not have autoscroll, @@ -2838,20 +2723,20 @@ function AutoScrollPlugin() { if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) { autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change - var ogElemScroller = getParentAutoScrollElement(elem, true); + let ogElemScroller = getParentAutoScrollElement(elem, true); if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) { pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour - pointerElemChangedInterval = setInterval(function () { - var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true); + pointerElemChangedInterval = setInterval(() => { + let newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true); if (newElem !== ogElemScroller) { ogElemScroller = newElem; clearAutoScrolls(); } - autoScroll(evt, _this.options, newElem, fallback); + autoScroll(evt, this.options, newElem, fallback); }, 10); lastAutoScrollX = x; lastAutoScrollY = y; @@ -2866,6 +2751,7 @@ function AutoScrollPlugin() { autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false); } } + }; return _extends(AutoScroll, { pluginName: 'scroll', @@ -2884,15 +2770,15 @@ function clearPointerElemChangedInterval() { clearInterval(pointerElemChangedInterval); } -var autoScroll = throttle(function (evt, options, rootEl, isFallback) { +const autoScroll = throttle(function (evt, options, rootEl, isFallback) { // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521 if (!options.scroll) return; - var x = (evt.touches ? evt.touches[0] : evt).clientX, - y = (evt.touches ? evt.touches[0] : evt).clientY, - sens = options.scrollSensitivity, - speed = options.scrollSpeed, - winScroller = getWindowScrollingElement(); - var scrollThisInstance = false, + const x = (evt.touches ? evt.touches[0] : evt).clientX, + y = (evt.touches ? evt.touches[0] : evt).clientY, + sens = options.scrollSensitivity, + speed = options.scrollSpeed, + winScroller = getWindowScrollingElement(); + let scrollThisInstance = false, scrollCustomFn; // New scroll root, set scrollEl if (scrollRootEl !== rootEl) { @@ -2906,11 +2792,11 @@ var autoScroll = throttle(function (evt, options, rootEl, isFallback) { } } - var layersOut = 0; - var currentParent = scrollEl; + let layersOut = 0; + let currentParent = scrollEl; do { - var el = currentParent, + let el = currentParent, rect = getRect(el), top = rect.top, bottom = rect.bottom, @@ -2918,8 +2804,8 @@ var autoScroll = throttle(function (evt, options, rootEl, isFallback) { right = rect.right, width = rect.width, height = rect.height, - canScrollX = void 0, - canScrollY = void 0, + canScrollX, + canScrollY, scrollWidth = el.scrollWidth, scrollHeight = el.scrollHeight, elCSS = css(el), @@ -2934,11 +2820,11 @@ var autoScroll = throttle(function (evt, options, rootEl, isFallback) { canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll'); } - var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX); - var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY); + let vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX); + let vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY); if (!autoScrolls[layersOut]) { - for (var i = 0; i <= layersOut; i++) { + for (let i = 0; i <= layersOut; i++) { if (!autoScrolls[i]) { autoScrolls[i] = {}; } @@ -2962,8 +2848,8 @@ var autoScroll = throttle(function (evt, options, rootEl, isFallback) { } - var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0; - var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0; + let scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0; + let scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0; if (typeof scrollCustomFn === 'function') { if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') { @@ -2984,26 +2870,27 @@ var autoScroll = throttle(function (evt, options, rootEl, isFallback) { scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not }, 30); -var drop = function drop(_ref) { - var originalEvent = _ref.originalEvent, - putSortable = _ref.putSortable, - dragEl = _ref.dragEl, - activeSortable = _ref.activeSortable, - dispatchSortableEvent = _ref.dispatchSortableEvent, - hideGhostForTarget = _ref.hideGhostForTarget, - unhideGhostForTarget = _ref.unhideGhostForTarget; +const drop = function ({ + originalEvent, + putSortable, + dragEl, + activeSortable, + dispatchSortableEvent, + hideGhostForTarget, + unhideGhostForTarget +}) { if (!originalEvent) return; - var toSortable = putSortable || activeSortable; + let toSortable = putSortable || activeSortable; hideGhostForTarget(); - var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent; - var target = document.elementFromPoint(touch.clientX, touch.clientY); + let touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent; + let target = document.elementFromPoint(touch.clientX, touch.clientY); unhideGhostForTarget(); if (toSortable && !toSortable.el.contains(target)) { dispatchSortableEvent('spill'); this.onSpill({ - dragEl: dragEl, - putSortable: putSortable + dragEl, + putSortable }); } }; @@ -3012,20 +2899,24 @@ function Revert() {} Revert.prototype = { startIndex: null, - dragStart: function dragStart(_ref2) { - var oldDraggableIndex = _ref2.oldDraggableIndex; + + dragStart({ + oldDraggableIndex + }) { this.startIndex = oldDraggableIndex; }, - onSpill: function onSpill(_ref3) { - var dragEl = _ref3.dragEl, - putSortable = _ref3.putSortable; + + onSpill({ + dragEl, + putSortable + }) { this.sortable.captureAnimationState(); if (putSortable) { putSortable.captureAnimationState(); } - var nextSibling = getChild(this.sortable.el, this.startIndex, this.options); + let nextSibling = getChild(this.sortable.el, this.startIndex, this.options); if (nextSibling) { this.sortable.el.insertBefore(dragEl, nextSibling); @@ -3039,7 +2930,8 @@ Revert.prototype = { putSortable.animateAll(); } }, - drop: drop + + drop }; _extends(Revert, { @@ -3049,22 +2941,24 @@ _extends(Revert, { function Remove() {} Remove.prototype = { - onSpill: function onSpill(_ref4) { - var dragEl = _ref4.dragEl, - putSortable = _ref4.putSortable; - var parentSortable = putSortable || this.sortable; + onSpill({ + dragEl, + putSortable + }) { + const parentSortable = putSortable || this.sortable; parentSortable.captureAnimationState(); dragEl.parentNode && dragEl.parentNode.removeChild(dragEl); parentSortable.animateAll(); }, - drop: drop + + drop }; _extends(Remove, { pluginName: 'removeOnSpill' }); -var lastSwapEl; +let lastSwapEl; function SwapPlugin() { function Swap() { @@ -3074,23 +2968,26 @@ function SwapPlugin() { } Swap.prototype = { - dragStart: function dragStart(_ref) { - var dragEl = _ref.dragEl; + dragStart({ + dragEl + }) { lastSwapEl = dragEl; }, - dragOverValid: function dragOverValid(_ref2) { - var completed = _ref2.completed, - target = _ref2.target, - onMove = _ref2.onMove, - activeSortable = _ref2.activeSortable, - changed = _ref2.changed, - cancel = _ref2.cancel; + + dragOverValid({ + completed, + target, + onMove, + activeSortable, + changed, + cancel + }) { if (!activeSortable.options.swap) return; - var el = this.sortable.el, + let el = this.sortable.el, options = this.options; if (target && target !== el) { - var prevSwapEl = lastSwapEl; + let prevSwapEl = lastSwapEl; if (onMove(target) !== false) { toggleClass(target, options.swapClass, true); @@ -3108,12 +3005,14 @@ function SwapPlugin() { completed(true); cancel(); }, - drop: function drop(_ref3) { - var activeSortable = _ref3.activeSortable, - putSortable = _ref3.putSortable, - dragEl = _ref3.dragEl; - var toSortable = putSortable || this.sortable; - var options = this.options; + + drop({ + activeSortable, + putSortable, + dragEl + }) { + let toSortable = putSortable || this.sortable; + let options = this.options; lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false); if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) { @@ -3126,22 +3025,26 @@ function SwapPlugin() { } } }, - nulling: function nulling() { + + nulling() { lastSwapEl = null; } + }; return _extends(Swap, { pluginName: 'swap', - eventProperties: function eventProperties() { + + eventProperties() { return { swapItem: lastSwapEl }; } + }); } function swapNodes(n1, n2) { - var p1 = n1.parentNode, + let p1 = n1.parentNode, p2 = n2.parentNode, i1, i2; @@ -3157,7 +3060,7 @@ function swapNodes(n1, n2) { p2.insertBefore(n1, p2.children[i2]); } -var multiDragElements = [], +let multiDragElements = [], multiDragClones = [], lastMultiDragSelect, // for selection with modifier key down (SHIFT) @@ -3174,7 +3077,7 @@ dragStarted = false, function MultiDragPlugin() { function MultiDrag(sortable) { // Bind all private methods - for (var fn in this) { + for (let fn in this) { if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { this[fn] = this[fn].bind(this); } @@ -3195,11 +3098,12 @@ function MultiDragPlugin() { selectedClass: 'sortable-selected', multiDragKey: null, avoidImplicitDeselect: false, - setData: function setData(dataTransfer, dragEl) { - var data = ''; + + setData(dataTransfer, dragEl) { + let data = ''; if (multiDragElements.length && multiDragSortable === sortable) { - multiDragElements.forEach(function (multiDragElement, i) { + multiDragElements.forEach((multiDragElement, i) => { data += (!i ? '' : ', ') + multiDragElement.textContent; }); } else { @@ -3208,25 +3112,31 @@ function MultiDragPlugin() { dataTransfer.setData('Text', data); } + }; } MultiDrag.prototype = { multiDragKeyDown: false, isMultiDrag: false, - delayStartGlobal: function delayStartGlobal(_ref) { - var dragged = _ref.dragEl; + + delayStartGlobal({ + dragEl: dragged + }) { dragEl$1 = dragged; }, - delayEnded: function delayEnded() { + + delayEnded() { this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1); }, - setupClone: function setupClone(_ref2) { - var sortable = _ref2.sortable, - cancel = _ref2.cancel; + + setupClone({ + sortable, + cancel + }) { if (!this.isMultiDrag) return; - for (var i = 0; i < multiDragElements.length; i++) { + for (let i = 0; i < multiDragElements.length; i++) { multiDragClones.push(clone(multiDragElements[i])); multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex; multiDragClones[i].draggable = false; @@ -3239,11 +3149,13 @@ function MultiDragPlugin() { cancel(); }, - clone: function clone(_ref3) { - var sortable = _ref3.sortable, - rootEl = _ref3.rootEl, - dispatchSortableEvent = _ref3.dispatchSortableEvent, - cancel = _ref3.cancel; + + clone({ + sortable, + rootEl, + dispatchSortableEvent, + cancel + }) { if (!this.isMultiDrag) return; if (!this.options.removeCloneOnHide) { @@ -3254,30 +3166,32 @@ function MultiDragPlugin() { } } }, - showClone: function showClone(_ref4) { - var cloneNowShown = _ref4.cloneNowShown, - rootEl = _ref4.rootEl, - cancel = _ref4.cancel; + + showClone({ + cloneNowShown, + rootEl, + cancel + }) { if (!this.isMultiDrag) return; insertMultiDragClones(false, rootEl); - multiDragClones.forEach(function (clone) { + multiDragClones.forEach(clone => { css(clone, 'display', ''); }); cloneNowShown(); clonesHidden = false; cancel(); }, - hideClone: function hideClone(_ref5) { - var _this = this; - var sortable = _ref5.sortable, - cloneNowHidden = _ref5.cloneNowHidden, - cancel = _ref5.cancel; + hideClone({ + sortable, + cloneNowHidden, + cancel + }) { if (!this.isMultiDrag) return; - multiDragClones.forEach(function (clone) { + multiDragClones.forEach(clone => { css(clone, 'display', 'none'); - if (_this.options.removeCloneOnHide && clone.parentNode) { + if (this.options.removeCloneOnHide && clone.parentNode) { clone.parentNode.removeChild(clone); } }); @@ -3285,14 +3199,15 @@ function MultiDragPlugin() { clonesHidden = true; cancel(); }, - dragStartGlobal: function dragStartGlobal(_ref6) { - var sortable = _ref6.sortable; + dragStartGlobal({ + sortable + }) { if (!this.isMultiDrag && multiDragSortable) { multiDragSortable.multiDrag._deselectMultiDrag(); } - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { multiDragElement.sortableIndex = index(multiDragElement); }); // Sort multi-drag elements @@ -3301,10 +3216,10 @@ function MultiDragPlugin() { }); dragStarted = true; }, - dragStarted: function dragStarted(_ref7) { - var _this2 = this; - var sortable = _ref7.sortable; + dragStarted({ + sortable + }) { if (!this.isMultiDrag) return; if (this.options.sort) { @@ -3317,12 +3232,12 @@ function MultiDragPlugin() { sortable.captureAnimationState(); if (this.options.animation) { - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { if (multiDragElement === dragEl$1) return; css(multiDragElement, 'position', 'absolute'); }); - var dragRect = getRect(dragEl$1, false, true, true); - multiDragElements.forEach(function (multiDragElement) { + let dragRect = getRect(dragEl$1, false, true, true); + multiDragElements.forEach(multiDragElement => { if (multiDragElement === dragEl$1) return; setRect(multiDragElement, dragRect); }); @@ -3331,41 +3246,43 @@ function MultiDragPlugin() { } } - sortable.animateAll(function () { + sortable.animateAll(() => { folding = false; initialFolding = false; - if (_this2.options.animation) { - multiDragElements.forEach(function (multiDragElement) { + if (this.options.animation) { + multiDragElements.forEach(multiDragElement => { unsetRect(multiDragElement); }); } // Remove all auxiliary multidrag items from el, if sorting enabled - if (_this2.options.sort) { + if (this.options.sort) { removeMultiDragElements(); } }); }, - dragOver: function dragOver(_ref8) { - var target = _ref8.target, - completed = _ref8.completed, - cancel = _ref8.cancel; + dragOver({ + target, + completed, + cancel + }) { if (folding && ~multiDragElements.indexOf(target)) { completed(false); cancel(); } }, - revert: function revert(_ref9) { - var fromSortable = _ref9.fromSortable, - rootEl = _ref9.rootEl, - sortable = _ref9.sortable, - dragRect = _ref9.dragRect; + revert({ + fromSortable, + rootEl, + sortable, + dragRect + }) { if (multiDragElements.length > 1) { // Setup unfold animation - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { sortable.addAnimationState({ target: multiDragElement, rect: folding ? getRect(multiDragElement) : dragRect @@ -3378,14 +3295,16 @@ function MultiDragPlugin() { insertMultiDragElements(!this.options.removeCloneOnHide, rootEl); } }, - dragOverCompleted: function dragOverCompleted(_ref10) { - var sortable = _ref10.sortable, - isOwner = _ref10.isOwner, - insertion = _ref10.insertion, - activeSortable = _ref10.activeSortable, - parentEl = _ref10.parentEl, - putSortable = _ref10.putSortable; - var options = this.options; + + dragOverCompleted({ + sortable, + isOwner, + insertion, + activeSortable, + parentEl, + putSortable + }) { + let options = this.options; if (insertion) { // Clones must be hidden before folding animation to capture dragRectAbsolute properly @@ -3397,8 +3316,8 @@ function MultiDragPlugin() { if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) { // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible - var dragRectAbsolute = getRect(dragEl$1, false, true, true); - multiDragElements.forEach(function (multiDragElement) { + let dragRectAbsolute = getRect(dragEl$1, false, true, true); + multiDragElements.forEach(multiDragElement => { if (multiDragElement === dragEl$1) return; setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted // while folding, and so that we can capture them again because old sortable will no longer be fromSortable @@ -3416,13 +3335,13 @@ function MultiDragPlugin() { } if (multiDragElements.length > 1) { - var clonesHiddenBefore = clonesHidden; + let clonesHiddenBefore = clonesHidden; activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) { - multiDragClones.forEach(function (clone) { + multiDragClones.forEach(clone => { activeSortable.addAnimationState({ target: clone, rect: clonesFromRect @@ -3437,38 +3356,43 @@ function MultiDragPlugin() { } } }, - dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) { - var dragRect = _ref11.dragRect, - isOwner = _ref11.isOwner, - activeSortable = _ref11.activeSortable; - multiDragElements.forEach(function (multiDragElement) { + + dragOverAnimationCapture({ + dragRect, + isOwner, + activeSortable + }) { + multiDragElements.forEach(multiDragElement => { multiDragElement.thisAnimationDuration = null; }); if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) { clonesFromRect = _extends({}, dragRect); - var dragMatrix = matrix(dragEl$1, true); + let dragMatrix = matrix(dragEl$1, true); clonesFromRect.top -= dragMatrix.f; clonesFromRect.left -= dragMatrix.e; } }, - dragOverAnimationComplete: function dragOverAnimationComplete() { + + dragOverAnimationComplete() { if (folding) { folding = false; removeMultiDragElements(); } }, - drop: function drop(_ref12) { - var evt = _ref12.originalEvent, - rootEl = _ref12.rootEl, - parentEl = _ref12.parentEl, - sortable = _ref12.sortable, - dispatchSortableEvent = _ref12.dispatchSortableEvent, - oldIndex = _ref12.oldIndex, - putSortable = _ref12.putSortable; - var toSortable = putSortable || this.sortable; + + drop({ + originalEvent: evt, + rootEl, + parentEl, + sortable, + dispatchSortableEvent, + oldIndex, + putSortable + }) { + let toSortable = putSortable || this.sortable; if (!evt) return; - var options = this.options, + let options = this.options, children = parentEl.children; // Multi-drag selection if (!dragStarted) { @@ -3481,21 +3405,21 @@ function MultiDragPlugin() { if (!~multiDragElements.indexOf(dragEl$1)) { multiDragElements.push(dragEl$1); dispatchEvent({ - sortable: sortable, - rootEl: rootEl, + sortable, + rootEl, name: 'select', targetEl: dragEl$1, originalEvent: evt }); // Modifier activated, select from last to dragEl if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) { - var lastIndex = index(lastMultiDragSelect), + let lastIndex = index(lastMultiDragSelect), currentIndex = index(dragEl$1); if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) { // Must include lastMultiDragSelect (select it), in case modified selection from no selection // (but previous selection existed) - var n, i; + let n, i; if (currentIndex > lastIndex) { i = lastIndex; @@ -3510,8 +3434,8 @@ function MultiDragPlugin() { toggleClass(children[i], options.selectedClass, true); multiDragElements.push(children[i]); dispatchEvent({ - sortable: sortable, - rootEl: rootEl, + sortable, + rootEl, name: 'select', targetEl: children[i], originalEvent: evt @@ -3527,8 +3451,8 @@ function MultiDragPlugin() { multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1); lastMultiDragSelect = null; dispatchEvent({ - sortable: sortable, - rootEl: rootEl, + sortable, + rootEl, name: 'deselect', targetEl: dragEl$1, originalEvent: evt @@ -3541,7 +3465,7 @@ function MultiDragPlugin() { folding = false; // Do not "unfold" after around dragEl if reverted if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) { - var dragRect = getRect(dragEl$1), + let dragRect = getRect(dragEl$1), multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')'); if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null; toSortable.captureAnimationState(); @@ -3549,11 +3473,11 @@ function MultiDragPlugin() { if (!initialFolding) { if (options.animation) { dragEl$1.fromRect = dragRect; - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { multiDragElement.thisAnimationDuration = null; if (multiDragElement !== dragEl$1) { - var rect = folding ? getRect(multiDragElement) : dragRect; + let rect = folding ? getRect(multiDragElement) : dragRect; multiDragElement.fromRect = rect; // Prepare unfold animation toSortable.addAnimationState({ @@ -3567,7 +3491,7 @@ function MultiDragPlugin() { removeMultiDragElements(); - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { if (children[multiDragIndex]) { parentEl.insertBefore(multiDragElement, children[multiDragIndex]); } else { @@ -3580,8 +3504,8 @@ function MultiDragPlugin() { // must be fired here as Sortable will not. if (oldIndex === index(dragEl$1)) { - var update = false; - multiDragElements.forEach(function (multiDragElement) { + let update = false; + multiDragElements.forEach(multiDragElement => { if (multiDragElement.sortableIndex !== index(multiDragElement)) { update = true; return; @@ -3595,7 +3519,7 @@ function MultiDragPlugin() { } // Must be done after capturing individual rects (scroll bar) - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { unsetRect(multiDragElement); }); toSortable.animateAll(); @@ -3606,16 +3530,18 @@ function MultiDragPlugin() { if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') { - multiDragClones.forEach(function (clone) { + multiDragClones.forEach(clone => { clone.parentNode && clone.parentNode.removeChild(clone); }); } }, - nullingGlobal: function nullingGlobal() { + + nullingGlobal() { this.isMultiDrag = dragStarted = false; multiDragClones.length = 0; }, - destroyGlobal: function destroyGlobal() { + + destroyGlobal() { this._deselectMultiDrag(); off(document, 'pointerup', this._deselectMultiDrag); @@ -3624,7 +3550,8 @@ function MultiDragPlugin() { off(document, 'keydown', this._checkKeyDown); off(document, 'keyup', this._checkKeyUp); }, - _deselectMultiDrag: function _deselectMultiDrag(evt) { + + _deselectMultiDrag(evt) { if (typeof dragStarted !== "undefined" && dragStarted) return; // Only deselect if selection is in this sortable if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable @@ -3634,7 +3561,7 @@ function MultiDragPlugin() { if (evt && evt.button !== 0) return; while (multiDragElements.length) { - var el = multiDragElements[0]; + let el = multiDragElements[0]; toggleClass(el, this.options.selectedClass, false); multiDragElements.shift(); dispatchEvent({ @@ -3646,16 +3573,19 @@ function MultiDragPlugin() { }); } }, - _checkKeyDown: function _checkKeyDown(evt) { + + _checkKeyDown(evt) { if (evt.key === this.options.multiDragKey) { this.multiDragKeyDown = true; } }, - _checkKeyUp: function _checkKeyUp(evt) { + + _checkKeyUp(evt) { if (evt.key === this.options.multiDragKey) { this.multiDragKeyDown = false; } } + }; return _extends(MultiDrag, { // Static methods & properties @@ -3665,8 +3595,8 @@ function MultiDragPlugin() { * Selects the provided multi-drag item * @param {HTMLElement} el The element to be selected */ - select: function select(el) { - var sortable = el.parentNode[expando]; + select(el) { + let sortable = el.parentNode[expando]; if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return; if (multiDragSortable && multiDragSortable !== sortable) { @@ -3683,49 +3613,50 @@ function MultiDragPlugin() { * Deselects the provided multi-drag item * @param {HTMLElement} el The element to be deselected */ - deselect: function deselect(el) { - var sortable = el.parentNode[expando], + deselect(el) { + let sortable = el.parentNode[expando], index = multiDragElements.indexOf(el); if (!sortable || !sortable.options.multiDrag || !~index) return; toggleClass(el, sortable.options.selectedClass, false); multiDragElements.splice(index, 1); } + }, - eventProperties: function eventProperties() { - var _this3 = this; - var oldIndicies = [], - newIndicies = []; - multiDragElements.forEach(function (multiDragElement) { + eventProperties() { + const oldIndicies = [], + newIndicies = []; + multiDragElements.forEach(multiDragElement => { oldIndicies.push({ - multiDragElement: multiDragElement, + multiDragElement, index: multiDragElement.sortableIndex }); // multiDragElements will already be sorted if folding - var newIndex; + let newIndex; if (folding && multiDragElement !== dragEl$1) { newIndex = -1; } else if (folding) { - newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')'); + newIndex = index(multiDragElement, ':not(.' + this.options.selectedClass + ')'); } else { newIndex = index(multiDragElement); } newIndicies.push({ - multiDragElement: multiDragElement, + multiDragElement, index: newIndex }); }); return { - items: _toConsumableArray(multiDragElements), - clones: [].concat(multiDragClones), - oldIndicies: oldIndicies, - newIndicies: newIndicies + items: [...multiDragElements], + clones: [...multiDragClones], + oldIndicies, + newIndicies }; }, + optionListeners: { - multiDragKey: function multiDragKey(key) { + multiDragKey(key) { key = key.toLowerCase(); if (key === 'ctrl') { @@ -3736,13 +3667,14 @@ function MultiDragPlugin() { return key; } + } }); } function insertMultiDragElements(clonesInserted, rootEl) { - multiDragElements.forEach(function (multiDragElement, i) { - var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)]; + multiDragElements.forEach((multiDragElement, i) => { + let target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)]; if (target) { rootEl.insertBefore(multiDragElement, target); @@ -3759,8 +3691,8 @@ function insertMultiDragElements(clonesInserted, rootEl) { function insertMultiDragClones(elementsInserted, rootEl) { - multiDragClones.forEach(function (clone, i) { - var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)]; + multiDragClones.forEach((clone, i) => { + let target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)]; if (target) { rootEl.insertBefore(clone, target); @@ -3771,7 +3703,7 @@ function insertMultiDragClones(elementsInserted, rootEl) { } function removeMultiDragElements() { - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { if (multiDragElement === dragEl$1) return; multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement); }); diff --git a/modular/sortable.core.esm.js b/modular/sortable.core.esm.js index b04c8b463..95481f97d 100644 --- a/modular/sortable.core.esm.js +++ b/modular/sortable.core.esm.js @@ -4,75 +4,6 @@ * @author owenm * @license MIT */ -function ownKeys(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - - if (enumerableOnly) { - symbols = symbols.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - } - - keys.push.apply(keys, symbols); - } - - return keys; -} - -function _objectSpread2(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - - if (i % 2) { - ownKeys(Object(source), true).forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys(Object(source)).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - - return target; -} - -function _typeof(obj) { - "@babel/helpers - typeof"; - - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } - - return _typeof(obj); -} - -function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; -} - function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { @@ -91,75 +22,6 @@ function _extends() { return _extends.apply(this, arguments); } -function _objectWithoutPropertiesLoose(source, excluded) { - if (source == null) return {}; - var target = {}; - var sourceKeys = Object.keys(source); - var key, i; - - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - target[key] = source[key]; - } - - return target; -} - -function _objectWithoutProperties(source, excluded) { - if (source == null) return {}; - - var target = _objectWithoutPropertiesLoose(source, excluded); - - var key, i; - - if (Object.getOwnPropertySymbols) { - var sourceSymbolKeys = Object.getOwnPropertySymbols(source); - - for (i = 0; i < sourceSymbolKeys.length; i++) { - key = sourceSymbolKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; - target[key] = source[key]; - } - } - - return target; -} - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); -} - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray(arr); -} - -function _iterableToArray(iter) { - if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); -} - -function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); -} - -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - - return arr2; -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - var version = "1.15.0"; function userAgent(pattern) { @@ -168,14 +30,14 @@ function userAgent(pattern) { } } -var IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i); -var Edge = userAgent(/Edge/i); -var FireFox = userAgent(/firefox/i); -var Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i); -var IOS = userAgent(/iP(ad|od|hone)/i); -var ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i); +const IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i); +const Edge = userAgent(/Edge/i); +const FireFox = userAgent(/firefox/i); +const Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i); +const IOS = userAgent(/iP(ad|od|hone)/i); +const ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i); -var captureMode = { +const captureMode = { capture: false, passive: false }; @@ -240,21 +102,21 @@ ctx, includeCTX) { return null; } -var R_SPACE = /\s+/g; +const R_SPACE = /\s+/g; function toggleClass(el, name, state) { if (el && name) { if (el.classList) { el.classList[state ? 'add' : 'remove'](name); } else { - var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' '); + let className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' '); el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' '); } } } function css(el, prop, val) { - var style = el && el.style; + let style = el && el.style; if (style) { if (val === void 0) { @@ -276,13 +138,13 @@ function css(el, prop, val) { } function matrix(el, selfOnly) { - var appliedTransforms = ''; + let appliedTransforms = ''; if (typeof el === 'string') { appliedTransforms = el; } else { do { - var transform = css(el, 'transform'); + let transform = css(el, 'transform'); if (transform && transform !== 'none') { appliedTransforms = transform + ' ' + appliedTransforms; @@ -292,7 +154,7 @@ function matrix(el, selfOnly) { } while (!selfOnly && (el = el.parentNode)); } - var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix; + const matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix; /*jshint -W056 */ return matrixFn && new matrixFn(appliedTransforms); @@ -300,7 +162,7 @@ function matrix(el, selfOnly) { function find(ctx, tagName, iterator) { if (ctx) { - var list = ctx.getElementsByTagName(tagName), + let list = ctx.getElementsByTagName(tagName), i = 0, n = list.length; @@ -317,7 +179,7 @@ function find(ctx, tagName, iterator) { } function getWindowScrollingElement() { - var scrollingElement = document.scrollingElement; + let scrollingElement = document.scrollingElement; if (scrollingElement) { return scrollingElement; @@ -338,7 +200,7 @@ function getWindowScrollingElement() { function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) { if (!el.getBoundingClientRect && el !== window) return; - var elRect, top, left, bottom, right, height, width; + let elRect, top, left, bottom, right, height, width; if (el !== window && el.parentNode && el !== getWindowScrollingElement()) { elRect = el.getBoundingClientRect(); @@ -365,7 +227,7 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS if (!IE11OrLess) { do { if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) { - var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container + let containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container top -= containerRect.top + parseInt(css(container, 'border-top-width')); left -= containerRect.left + parseInt(css(container, 'border-left-width')); @@ -381,7 +243,7 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS if (undoScale && el !== window) { // Adjust for scale() - var elMatrix = matrix(container || el), + let elMatrix = matrix(container || el), scaleX = elMatrix && elMatrix.a, scaleY = elMatrix && elMatrix.d; @@ -414,13 +276,13 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS function isScrolledPast(el, elSide, parentSide) { - var parent = getParentAutoScrollElement(el, true), + let parent = getParentAutoScrollElement(el, true), elSideVal = getRect(el)[elSide]; /* jshint boss:true */ while (parent) { - var parentSideVal = getRect(parent)[parentSide], - visible = void 0; + let parentSideVal = getRect(parent)[parentSide], + visible; if (parentSide === 'top' || parentSide === 'left') { visible = elSideVal >= parentSideVal; @@ -446,7 +308,7 @@ function isScrolledPast(el, elSide, parentSide) { function getChild(el, childNum, options, includeDragEl) { - var currentChild = 0, + let currentChild = 0, i = 0, children = el.children; @@ -473,7 +335,7 @@ function getChild(el, childNum, options, includeDragEl) { function lastChild(el, selector) { - var last = el.lastElementChild; + let last = el.lastElementChild; while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) { last = last.previousElementSibling; @@ -491,7 +353,7 @@ function lastChild(el, selector) { function index(el, selector) { - var index = 0; + let index = 0; if (!el || !el.parentNode) { return -1; @@ -516,13 +378,13 @@ function index(el, selector) { function getRelativeScrollOffset(el) { - var offsetLeft = 0, + let offsetLeft = 0, offsetTop = 0, winScroller = getWindowScrollingElement(); if (el) { do { - var elMatrix = matrix(el), + let elMatrix = matrix(el), scaleX = elMatrix.a, scaleY = elMatrix.d; offsetLeft += el.scrollLeft * scaleX; @@ -541,10 +403,10 @@ function getRelativeScrollOffset(el) { function indexOfObject(arr, obj) { - for (var i in arr) { + for (let i in arr) { if (!arr.hasOwnProperty(i)) continue; - for (var key in obj) { + for (let key in obj) { if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i); } } @@ -555,13 +417,13 @@ function indexOfObject(arr, obj) { function getParentAutoScrollElement(el, includeSelf) { // skip to window if (!el || !el.getBoundingClientRect) return getWindowScrollingElement(); - var elem = el; - var gotSelf = false; + let elem = el; + let gotSelf = false; do { // we don't need to get elem css if it isn't even overflowing in the first place (performance) if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) { - var elemCSS = css(elem); + let elemCSS = css(elem); if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) { if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement(); @@ -578,7 +440,7 @@ function getParentAutoScrollElement(el, includeSelf) { function extend(dst, src) { if (dst && src) { - for (var key in src) { + for (let key in src) { if (src.hasOwnProperty(key)) { dst[key] = src[key]; } @@ -592,12 +454,12 @@ function isRectEqual(rect1, rect2) { return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width); } -var _throttleTimeout; +let _throttleTimeout; function throttle(callback, ms) { return function () { if (!_throttleTimeout) { - var args = arguments, + let args = arguments, _this = this; if (args.length === 1) { @@ -624,8 +486,8 @@ function scrollBy(el, x, y) { } function clone(el) { - var Polymer = window.Polymer; - var $ = window.jQuery || window.Zepto; + let Polymer = window.Polymer; + let $ = window.jQuery || window.Zepto; if (Polymer && Polymer.dom) { return Polymer.dom(el).cloneNode(true); @@ -652,28 +514,27 @@ function unsetRect(el) { css(el, 'height', ''); } -var expando = 'Sortable' + new Date().getTime(); +const expando = 'Sortable' + new Date().getTime(); function AnimationStateManager() { - var animationStates = [], + let animationStates = [], animationCallbackId; return { - captureAnimationState: function captureAnimationState() { + captureAnimationState() { animationStates = []; if (!this.options.animation) return; - var children = [].slice.call(this.el.children); - children.forEach(function (child) { + let children = [].slice.call(this.el.children); + children.forEach(child => { if (css(child, 'display') === 'none' || child === Sortable.ghost) return; animationStates.push({ target: child, rect: getRect(child) }); - - var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation - + let fromRect = { ...animationStates[animationStates.length - 1].rect + }; // If animating: compensate for current animation if (child.thisAnimationDuration) { - var childMatrix = matrix(child, true); + let childMatrix = matrix(child, true); if (childMatrix) { fromRect.top -= childMatrix.f; @@ -684,27 +545,28 @@ function AnimationStateManager() { child.fromRect = fromRect; }); }, - addAnimationState: function addAnimationState(state) { + + addAnimationState(state) { animationStates.push(state); }, - removeAnimationState: function removeAnimationState(target) { + + removeAnimationState(target) { animationStates.splice(indexOfObject(animationStates, { - target: target + target }), 1); }, - animateAll: function animateAll(callback) { - var _this = this; + animateAll(callback) { if (!this.options.animation) { clearTimeout(animationCallbackId); if (typeof callback === 'function') callback(); return; } - var animating = false, + let animating = false, animationTime = 0; - animationStates.forEach(function (state) { - var time = 0, + animationStates.forEach(state => { + let time = 0, target = state.target, fromRect = target.fromRect, toRect = getRect(target), @@ -726,7 +588,7 @@ function AnimationStateManager() { if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) { // If returning to same place as started from animation and on same axis - time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options); + time = calculateRealTime(animatingRect, prevFromRect, prevToRect, this.options); } } // if fromRect != toRect: animate @@ -736,10 +598,10 @@ function AnimationStateManager() { target.prevToRect = toRect; if (!time) { - time = _this.options.animation; + time = this.options.animation; } - _this.animate(target, animatingRect, toRect, time); + this.animate(target, animatingRect, toRect, time); } if (time) { @@ -768,11 +630,12 @@ function AnimationStateManager() { animationStates = []; }, - animate: function animate(target, currentRect, toRect, duration) { + + animate(target, currentRect, toRect, duration) { if (duration) { css(target, 'transition', ''); css(target, 'transform', ''); - var elMatrix = matrix(this.el), + let elMatrix = matrix(this.el), scaleX = elMatrix && elMatrix.a, scaleY = elMatrix && elMatrix.d, translateX = (currentRect.left - toRect.left) / (scaleX || 1), @@ -794,6 +657,7 @@ function AnimationStateManager() { }, duration); } } + }; } @@ -805,59 +669,61 @@ function calculateRealTime(animatingRect, fromRect, toRect, options) { return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation; } -var plugins = []; -var defaults = { +let plugins = []; +const defaults = { initializeByDefault: true }; var PluginManager = { - mount: function mount(plugin) { + mount(plugin) { // Set default static properties - for (var option in defaults) { + for (let option in defaults) { if (defaults.hasOwnProperty(option) && !(option in plugin)) { plugin[option] = defaults[option]; } } - plugins.forEach(function (p) { + plugins.forEach(p => { if (p.pluginName === plugin.pluginName) { - throw "Sortable: Cannot mount plugin ".concat(plugin.pluginName, " more than once"); + throw `Sortable: Cannot mount plugin ${plugin.pluginName} more than once`; } }); plugins.push(plugin); }, - pluginEvent: function pluginEvent(eventName, sortable, evt) { - var _this = this; + pluginEvent(eventName, sortable, evt) { this.eventCanceled = false; - evt.cancel = function () { - _this.eventCanceled = true; + evt.cancel = () => { + this.eventCanceled = true; }; - var eventNameGlobal = eventName + 'Global'; - plugins.forEach(function (plugin) { + const eventNameGlobal = eventName + 'Global'; + plugins.forEach(plugin => { if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable if (sortable[plugin.pluginName][eventNameGlobal]) { - sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({ - sortable: sortable - }, evt)); + sortable[plugin.pluginName][eventNameGlobal]({ + sortable, + ...evt + }); } // Only fire plugin event if plugin is enabled in this sortable, // and plugin has event defined if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) { - sortable[plugin.pluginName][eventName](_objectSpread2({ - sortable: sortable - }, evt)); + sortable[plugin.pluginName][eventName]({ + sortable, + ...evt + }); } }); }, - initializePlugins: function initializePlugins(sortable, el, defaults, options) { - plugins.forEach(function (plugin) { - var pluginName = plugin.pluginName; + + initializePlugins(sortable, el, defaults, options) { + plugins.forEach(plugin => { + const pluginName = plugin.pluginName; if (!sortable.options[pluginName] && !plugin.initializeByDefault) return; - var initialized = new plugin(sortable, el, sortable.options); + let initialized = new plugin(sortable, el, sortable.options); initialized.sortable = sortable; initialized.options = sortable.options; sortable[pluginName] = initialized; // Add default options from plugin @@ -865,27 +731,29 @@ var PluginManager = { _extends(defaults, initialized.defaults); }); - for (var option in sortable.options) { + for (let option in sortable.options) { if (!sortable.options.hasOwnProperty(option)) continue; - var modified = this.modifyOption(sortable, option, sortable.options[option]); + let modified = this.modifyOption(sortable, option, sortable.options[option]); if (typeof modified !== 'undefined') { sortable.options[option] = modified; } } }, - getEventProperties: function getEventProperties(name, sortable) { - var eventProperties = {}; - plugins.forEach(function (plugin) { + + getEventProperties(name, sortable) { + let eventProperties = {}; + plugins.forEach(plugin => { if (typeof plugin.eventProperties !== 'function') return; _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name)); }); return eventProperties; }, - modifyOption: function modifyOption(sortable, name, value) { - var modifiedValue; - plugins.forEach(function (plugin) { + + modifyOption(sortable, name, value) { + let modifiedValue; + plugins.forEach(plugin => { // Plugin must exist on the Sortable if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin @@ -895,26 +763,28 @@ var PluginManager = { }); return modifiedValue; } + }; -function dispatchEvent(_ref) { - var sortable = _ref.sortable, - rootEl = _ref.rootEl, - name = _ref.name, - targetEl = _ref.targetEl, - cloneEl = _ref.cloneEl, - toEl = _ref.toEl, - fromEl = _ref.fromEl, - oldIndex = _ref.oldIndex, - newIndex = _ref.newIndex, - oldDraggableIndex = _ref.oldDraggableIndex, - newDraggableIndex = _ref.newDraggableIndex, - originalEvent = _ref.originalEvent, - putSortable = _ref.putSortable, - extraEventProperties = _ref.extraEventProperties; +function dispatchEvent({ + sortable, + rootEl, + name, + targetEl, + cloneEl, + toEl, + fromEl, + oldIndex, + newIndex, + oldDraggableIndex, + newDraggableIndex, + originalEvent, + putSortable, + extraEventProperties +}) { sortable = sortable || rootEl && rootEl[expando]; if (!sortable) return; - var evt, + let evt, options = sortable.options, onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature @@ -938,10 +808,11 @@ function dispatchEvent(_ref) { evt.newDraggableIndex = newDraggableIndex; evt.originalEvent = originalEvent; evt.pullMode = putSortable ? putSortable.lastPutMode : undefined; + let allEventProperties = { ...extraEventProperties, + ...PluginManager.getEventProperties(name, sortable) + }; - var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable)); - - for (var option in allEventProperties) { + for (let option in allEventProperties) { evt[option] = allEventProperties[option]; } @@ -954,62 +825,65 @@ function dispatchEvent(_ref) { } } -var _excluded = ["evt"]; - -var pluginEvent = function pluginEvent(eventName, sortable) { - var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, - originalEvent = _ref.evt, - data = _objectWithoutProperties(_ref, _excluded); - - PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({ - dragEl: dragEl, - parentEl: parentEl, - ghostEl: ghostEl, - rootEl: rootEl, - nextEl: nextEl, - lastDownEl: lastDownEl, - cloneEl: cloneEl, - cloneHidden: cloneHidden, +let pluginEvent = function (eventName, sortable, { + evt: originalEvent, + ...data +} = {}) { + PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, { + dragEl, + parentEl, + ghostEl, + rootEl, + nextEl, + lastDownEl, + cloneEl, + cloneHidden, dragStarted: moved, - putSortable: putSortable, + putSortable, activeSortable: Sortable.active, - originalEvent: originalEvent, - oldIndex: oldIndex, - oldDraggableIndex: oldDraggableIndex, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex, + originalEvent, + oldIndex, + oldDraggableIndex, + newIndex, + newDraggableIndex, hideGhostForTarget: _hideGhostForTarget, unhideGhostForTarget: _unhideGhostForTarget, - cloneNowHidden: function cloneNowHidden() { + + cloneNowHidden() { cloneHidden = true; }, - cloneNowShown: function cloneNowShown() { + + cloneNowShown() { cloneHidden = false; }, - dispatchSortableEvent: function dispatchSortableEvent(name) { + + dispatchSortableEvent(name) { _dispatchEvent({ - sortable: sortable, - name: name, - originalEvent: originalEvent + sortable, + name, + originalEvent }); - } - }, data)); + }, + + ...data + }); }; function _dispatchEvent(info) { - dispatchEvent(_objectSpread2({ - putSortable: putSortable, - cloneEl: cloneEl, + dispatchEvent({ + putSortable, + cloneEl, targetEl: dragEl, - rootEl: rootEl, - oldIndex: oldIndex, - oldDraggableIndex: oldDraggableIndex, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex - }, info)); + rootEl, + oldIndex, + oldDraggableIndex, + newIndex, + newDraggableIndex, + ...info + }); } -var dragEl, +let dragEl, parentEl, ghostEl, rootEl, @@ -1046,24 +920,24 @@ _silent = false, savedInputChecked = []; /** @const */ -var documentExists = typeof document !== 'undefined', - PositionGhostAbsolutely = IOS, - CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float', - // This will not pass for IE9, because IE9 DnD only works on anchors +const documentExists = typeof document !== 'undefined', + PositionGhostAbsolutely = IOS, + CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float', + // This will not pass for IE9, because IE9 DnD only works on anchors supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'), - supportCssPointerEvents = function () { + supportCssPointerEvents = function () { if (!documentExists) return; // false when <= IE11 if (IE11OrLess) { return false; } - var el = document.createElement('x'); + let el = document.createElement('x'); el.style.cssText = 'pointer-events:auto'; return el.style.pointerEvents === 'auto'; }(), - _detectDirection = function _detectDirection(el, options) { - var elCSS = css(el), + _detectDirection = function (el, options) { + let elCSS = css(el), elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth), child1 = getChild(el, 0, options), child2 = getChild(el, 1, options), @@ -1080,15 +954,15 @@ supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal'; } - if (child1 && firstChildCSS["float"] && firstChildCSS["float"] !== 'none') { - var touchingSideChild2 = firstChildCSS["float"] === 'left' ? 'left' : 'right'; + if (child1 && firstChildCSS.float && firstChildCSS.float !== 'none') { + let touchingSideChild2 = firstChildCSS.float === 'left' ? 'left' : 'right'; return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal'; } return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal'; }, - _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) { - var dragElS1Opp = vertical ? dragRect.left : dragRect.top, + _dragElInRowColumn = function (dragRect, targetRect, vertical) { + let dragElS1Opp = vertical ? dragRect.left : dragRect.top, dragElS2Opp = vertical ? dragRect.right : dragRect.bottom, dragElOppLength = vertical ? dragRect.width : dragRect.height, targetS1Opp = vertical ? targetRect.left : targetRect.top, @@ -1103,14 +977,14 @@ supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in * @param {Number} y Y position * @return {HTMLElement} Element of the first found nearest Sortable */ -_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) { - var ret; - sortables.some(function (sortable) { - var threshold = sortable[expando].options.emptyInsertThreshold; +_detectNearestEmptySortable = function (x, y) { + let ret; + sortables.some(sortable => { + const threshold = sortable[expando].options.emptyInsertThreshold; if (!threshold || lastChild(sortable)) return; - var rect = getRect(sortable), - insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold, - insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold; + const rect = getRect(sortable), + insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold, + insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold; if (insideHorizontally && insideVertically) { return ret = sortable; @@ -1118,10 +992,10 @@ _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) { }); return ret; }, - _prepareGroup = function _prepareGroup(options) { + _prepareGroup = function (options) { function toFn(value, pull) { return function (to, from, dragEl, evt) { - var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name; + let sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name; if (value == null && (pull || sameGroup)) { // Default pull value @@ -1134,16 +1008,16 @@ _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) { } else if (typeof value === 'function') { return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt); } else { - var otherGroup = (pull ? to : from).options.group.name; + let otherGroup = (pull ? to : from).options.group.name; return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1; } }; } - var group = {}; - var originalGroup = options.group; + let group = {}; + let originalGroup = options.group; - if (!originalGroup || _typeof(originalGroup) != 'object') { + if (!originalGroup || typeof originalGroup != 'object') { originalGroup = { name: originalGroup }; @@ -1155,12 +1029,12 @@ _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) { group.revertClone = originalGroup.revertClone; options.group = group; }, - _hideGhostForTarget = function _hideGhostForTarget() { + _hideGhostForTarget = function () { if (!supportCssPointerEvents && ghostEl) { css(ghostEl, 'display', 'none'); } }, - _unhideGhostForTarget = function _unhideGhostForTarget() { + _unhideGhostForTarget = function () { if (!supportCssPointerEvents && ghostEl) { css(ghostEl, 'display', ''); } @@ -1179,17 +1053,17 @@ if (documentExists && !ChromeForAndroid) { }, true); } -var nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) { +let nearestEmptyInsertDetectEvent = function (evt) { if (dragEl) { evt = evt.touches ? evt.touches[0] : evt; - var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY); + let nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY); if (nearest) { // Create imitation event - var event = {}; + let event = {}; - for (var i in evt) { + for (let i in evt) { if (evt.hasOwnProperty(i)) { event[i] = evt[i]; } @@ -1204,7 +1078,7 @@ var nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) } }; -var _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) { +let _checkOutsideTargetEl = function (evt) { if (dragEl) { dragEl.parentNode[expando]._isOutsideThisEl(evt.target); } @@ -1218,15 +1092,20 @@ var _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) { function Sortable(el, options) { if (!(el && el.nodeType && el.nodeType === 1)) { - throw "Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(el)); + throw `Sortable: \`el\` must be an HTMLElement, not ${{}.toString.call(el)}`; } this.el = el; // root element - this.options = options = _extends({}, options); // Export instance + this.options = options = _extends({}, options); + + if (this.options.fallbackOnBody) { + this.options.getFallbackParent = () => document.body; + } // Export instance + el[expando] = this; - var defaults = { + let defaults = { group: null, sort: true, disabled: false, @@ -1240,7 +1119,7 @@ function Sortable(el, options) { invertedSwapThreshold: null, // will be set to same as swapThreshold if default removeCloneOnHide: true, - direction: function direction() { + direction: function () { return _detectDirection(el, this.options); }, ghostClass: 'sortable-ghost', @@ -1251,7 +1130,7 @@ function Sortable(el, options) { preventOnFilter: true, animation: 0, easing: null, - setData: function setData(dataTransfer, dragEl) { + setData: function (dataTransfer, dragEl) { dataTransfer.setData('Text', dragEl.textContent); }, dropBubble: false, @@ -1262,7 +1141,9 @@ function Sortable(el, options) { touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1, forceFallback: false, fallbackClass: 'sortable-fallback', + // @obsolete use `getFallbackParent: () => (document.body)` fallbackOnBody: false, + getFallbackParent: null, fallbackTolerance: 0, fallbackOffset: { x: 0, @@ -1273,14 +1154,14 @@ function Sortable(el, options) { }; PluginManager.initializePlugins(this, el, defaults); // Set default options - for (var name in defaults) { + for (let name in defaults) { !(name in options) && (options[name] = defaults[name]); } _prepareGroup(options); // Bind all private methods - for (var fn in this) { + for (let fn in this) { if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { this[fn] = this[fn].bind(this); } @@ -1318,20 +1199,20 @@ Sortable.prototype = /** @lends Sortable.prototype */ { constructor: Sortable, - _isOutsideThisEl: function _isOutsideThisEl(target) { + _isOutsideThisEl: function (target) { if (!this.el.contains(target) && target !== this.el) { lastTarget = null; } }, - _getDirection: function _getDirection(evt, target) { + _getDirection: function (evt, target) { return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction; }, - _onTapStart: function _onTapStart( + _onTapStart: function ( /** Event|TouchEvent */ evt) { if (!evt.cancelable) return; - var _this = this, + let _this = this, el = this.el, options = this.options, preventOnFilter = options.preventOnFilter, @@ -1389,7 +1270,7 @@ Sortable.prototype = }); pluginEvent('filter', _this, { - evt: evt + evt }); preventOnFilter && evt.cancelable && evt.preventDefault(); return; // cancel dnd @@ -1409,7 +1290,7 @@ Sortable.prototype = }); pluginEvent('filter', _this, { - evt: evt + evt }); return true; } @@ -1428,21 +1309,21 @@ Sortable.prototype = this._prepareDragStart(evt, touch, target); }, - _prepareDragStart: function _prepareDragStart( + _prepareDragStart: function ( /** Event */ evt, /** Touch */ touch, /** HTMLElement */ target) { - var _this = this, + let _this = this, el = _this.el, options = _this.options, ownerDocument = el.ownerDocument, dragStartFn; if (target && !dragEl && target.parentNode === el) { - var dragRect = getRect(target); + let dragRect = getRect(target); rootEl = el; dragEl = target; parentEl = dragEl.parentNode; @@ -1461,9 +1342,9 @@ Sortable.prototype = this._lastY = (touch || evt).clientY; dragEl.style['will-change'] = 'all'; - dragStartFn = function dragStartFn() { + dragStartFn = function () { pluginEvent('delayEnded', _this, { - evt: evt + evt }); if (Sortable.eventCanceled) { @@ -1511,7 +1392,7 @@ Sortable.prototype = } pluginEvent('delayStart', this, { - evt: evt + evt }); // Delay is impossible for native DnD in Edge or IE if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) { @@ -1536,23 +1417,23 @@ Sortable.prototype = } } }, - _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( + _delayedDragTouchMoveHandler: function ( /** TouchEvent|PointerEvent **/ e) { - var touch = e.touches ? e.touches[0] : e; + let touch = e.touches ? e.touches[0] : e; if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) { this._disableDelayedDrag(); } }, - _disableDelayedDrag: function _disableDelayedDrag() { + _disableDelayedDrag: function () { dragEl && _disableDraggable(dragEl); clearTimeout(this._dragStartTimer); this._disableDelayedDragEvents(); }, - _disableDelayedDragEvents: function _disableDelayedDragEvents() { - var ownerDocument = this.el.ownerDocument; + _disableDelayedDragEvents: function () { + let ownerDocument = this.el.ownerDocument; off(ownerDocument, 'mouseup', this._disableDelayedDrag); off(ownerDocument, 'touchend', this._disableDelayedDrag); off(ownerDocument, 'touchcancel', this._disableDelayedDrag); @@ -1560,7 +1441,7 @@ Sortable.prototype = off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler); off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler); }, - _triggerDragStart: function _triggerDragStart( + _triggerDragStart: function ( /** Event */ evt, /** Touch */ @@ -1591,20 +1472,20 @@ Sortable.prototype = } } catch (err) {} }, - _dragStarted: function _dragStarted(fallback, evt) { + _dragStarted: function (fallback, evt) { awaitingDragStarted = false; if (rootEl && dragEl) { pluginEvent('dragStarted', this, { - evt: evt + evt }); if (this.nativeDraggable) { on(document, 'dragover', _checkOutsideTargetEl); } - var options = this.options; // Apply effect + let options = this.options; // Apply effect !fallback && toggleClass(dragEl, options.dragClass, false); toggleClass(dragEl, options.ghostClass, true); @@ -1620,15 +1501,15 @@ Sortable.prototype = this._nulling(); } }, - _emulateDragOver: function _emulateDragOver() { + _emulateDragOver: function () { if (touchEvt) { this._lastX = touchEvt.clientX; this._lastY = touchEvt.clientY; _hideGhostForTarget(); - var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY); - var parent = target; + let target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY); + let parent = target; while (target && target.shadowRoot) { target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY); @@ -1641,7 +1522,7 @@ Sortable.prototype = if (parent) { do { if (parent[expando]) { - var inserted = void 0; + let inserted; inserted = parent[expando]._onDragOver({ clientX: touchEvt.clientX, clientY: touchEvt.clientY, @@ -1663,11 +1544,11 @@ Sortable.prototype = _unhideGhostForTarget(); } }, - _onTouchMove: function _onTouchMove( + _onTouchMove: function ( /**TouchEvent*/ evt) { if (tapEvt) { - var options = this.options, + let options = this.options, fallbackTolerance = options.fallbackTolerance, fallbackOffset = options.fallbackOffset, touch = evt.touches ? evt.touches[0] : evt, @@ -1701,7 +1582,7 @@ Sortable.prototype = }; } - var cssMatrix = "matrix(".concat(ghostMatrix.a, ",").concat(ghostMatrix.b, ",").concat(ghostMatrix.c, ",").concat(ghostMatrix.d, ",").concat(ghostMatrix.e, ",").concat(ghostMatrix.f, ")"); + let cssMatrix = `matrix(${ghostMatrix.a},${ghostMatrix.b},${ghostMatrix.c},${ghostMatrix.d},${ghostMatrix.e},${ghostMatrix.f})`; css(ghostEl, 'webkitTransform', cssMatrix); css(ghostEl, 'mozTransform', cssMatrix); css(ghostEl, 'msTransform', cssMatrix); @@ -1714,11 +1595,12 @@ Sortable.prototype = evt.cancelable && evt.preventDefault(); } }, - _appendGhost: function _appendGhost() { + _appendGhost: function () { // Bug if using scale(): https://stackoverflow.com/questions/2637058 // Not being adjusted for if (!ghostEl) { - var container = this.options.fallbackOnBody ? document.body : rootEl, + let fallbackParent = typeof this.options.getFallbackParent === 'function' ? this.options.getFallbackParent() : null; + let container = fallbackParent ?? rootEl, rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container), options = this.options; // Position absolutely @@ -1763,17 +1645,17 @@ Sortable.prototype = css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%'); } }, - _onDragStart: function _onDragStart( + _onDragStart: function ( /**Event*/ evt, /**boolean*/ fallback) { - var _this = this; + let _this = this; - var dataTransfer = evt.dataTransfer; - var options = _this.options; + let dataTransfer = evt.dataTransfer; + let options = _this.options; pluginEvent('dragStart', this, { - evt: evt + evt }); if (Sortable.eventCanceled) { @@ -1843,10 +1725,10 @@ Sortable.prototype = } }, // Returns true - if no further action is needed (either inserted or another condition) - _onDragOver: function _onDragOver( + _onDragOver: function ( /**Event*/ evt) { - var el = this.el, + let el = this.el, target = evt.target, dragRect, targetRect, @@ -1864,22 +1746,25 @@ Sortable.prototype = if (_silent) return; function dragOverEvent(name, extra) { - pluginEvent(name, _this, _objectSpread2({ - evt: evt, - isOwner: isOwner, + pluginEvent(name, _this, { + evt, + isOwner, axis: vertical ? 'vertical' : 'horizontal', - revert: revert, - dragRect: dragRect, - targetRect: targetRect, - canSort: canSort, - fromSortable: fromSortable, - target: target, - completed: completed, - onMove: function onMove(target, after) { - return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after); + revert, + dragRect, + targetRect, + canSort, + fromSortable, + target, + completed, + + onMove(target, after) { + return onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after); }, - changed: changed - }, extra)); + + changed, + ...extra + }); } // Capture animation state @@ -1896,7 +1781,7 @@ Sortable.prototype = function completed(insertion) { dragOverEvent('dragOverCompleted', { - insertion: insertion + insertion }); if (insertion) { @@ -1961,8 +1846,8 @@ Sortable.prototype = sortable: _this, name: 'change', toEl: el, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex, + newIndex, + newDraggableIndex, originalEvent: evt }); } @@ -2008,7 +1893,7 @@ Sortable.prototype = return completed(true); } - var elLastChild = lastChild(el, options.draggable); + let elLastChild = lastChild(el, options.draggable); if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) { // Insert to end of list @@ -2026,7 +1911,7 @@ Sortable.prototype = targetRect = getRect(target); } - if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) { + if (onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) { capture(); if (elLastChild && elLastChild.nextSibling) { @@ -2043,7 +1928,7 @@ Sortable.prototype = } } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) { // Insert to start of list - var firstChild = getChild(el, 0, options, true); + let firstChild = getChild(el, 0, options, true); if (firstChild === dragEl) { return completed(false); @@ -2052,7 +1937,7 @@ Sortable.prototype = target = firstChild; targetRect = getRect(target); - if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) { + if (onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) { capture(); el.insertBefore(dragEl, firstChild); parentEl = el; // actualization @@ -2062,7 +1947,7 @@ Sortable.prototype = } } else if (target.parentNode === el) { targetRect = getRect(target); - var direction = 0, + let direction = 0, targetBeforeFirstSwap, differentLevel = dragEl.parentNode !== el, differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical), @@ -2077,11 +1962,11 @@ Sortable.prototype = } direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target); - var sibling; + let sibling; if (direction !== 0) { // Check if target is beside dragEl in respective direction (ignoring hidden elements) - var dragIndex = index(dragEl); + let dragIndex = index(dragEl); do { dragIndex -= direction; @@ -2096,11 +1981,10 @@ Sortable.prototype = lastTarget = target; lastDirection = direction; - var nextSibling = target.nextElementSibling, + let nextSibling = target.nextElementSibling, after = false; after = direction === 1; - - var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after); + let moveVector = onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after); if (moveVector !== false) { if (moveVector === 1 || moveVector === -1) { @@ -2142,7 +2026,7 @@ Sortable.prototype = return false; }, _ignoreWhileAnimating: null, - _offMoveEvents: function _offMoveEvents() { + _offMoveEvents: function () { off(document, 'mousemove', this._onTouchMove); off(document, 'touchmove', this._onTouchMove); off(document, 'pointermove', this._onTouchMove); @@ -2150,24 +2034,24 @@ Sortable.prototype = off(document, 'mousemove', nearestEmptyInsertDetectEvent); off(document, 'touchmove', nearestEmptyInsertDetectEvent); }, - _offUpEvents: function _offUpEvents() { - var ownerDocument = this.el.ownerDocument; + _offUpEvents: function () { + let ownerDocument = this.el.ownerDocument; off(ownerDocument, 'mouseup', this._onDrop); off(ownerDocument, 'touchend', this._onDrop); off(ownerDocument, 'pointerup', this._onDrop); off(ownerDocument, 'touchcancel', this._onDrop); off(document, 'selectstart', this); }, - _onDrop: function _onDrop( + _onDrop: function ( /**Event*/ evt) { - var el = this.el, + let el = this.el, options = this.options; // Get the index of the dragged element within its parent newIndex = index(dragEl); newDraggableIndex = index(dragEl, options.draggable); pluginEvent('drop', this, { - evt: evt + evt }); parentEl = dragEl && dragEl.parentNode; // Get again after plugin event @@ -2324,7 +2208,7 @@ Sortable.prototype = this._nulling(); }, - _nulling: function _nulling() { + _nulling: function () { pluginEvent('nulling', this); rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null; savedInputChecked.forEach(function (el) { @@ -2332,7 +2216,7 @@ Sortable.prototype = }); savedInputChecked.length = lastDx = lastDy = 0; }, - handleEvent: function handleEvent( + handleEvent: function ( /**Event*/ evt) { switch (evt.type) { @@ -2362,8 +2246,8 @@ Sortable.prototype = * Serializes the item into an array of string. * @returns {String[]} */ - toArray: function toArray() { - var order = [], + toArray: function () { + let order = [], el, children = this.el.children, i = 0, @@ -2385,11 +2269,11 @@ Sortable.prototype = * Sorts the elements according to the array. * @param {String[]} order order of the items */ - sort: function sort(order, useAnimation) { - var items = {}, + sort: function (order, useAnimation) { + let items = {}, rootEl = this.el; this.toArray().forEach(function (id, i) { - var el = rootEl.children[i]; + let el = rootEl.children[i]; if (closest(el, this.options.draggable, rootEl, false)) { items[id] = el; @@ -2408,8 +2292,8 @@ Sortable.prototype = /** * Save the current sorting */ - save: function save() { - var store = this.options.store; + save: function () { + let store = this.options.store; store && store.set && store.set(this); }, @@ -2419,7 +2303,7 @@ Sortable.prototype = * @param {String} [selector] default: `options.draggable` * @returns {HTMLElement|null} */ - closest: function closest$1(el, selector) { + closest: function (el, selector) { return closest(el, selector || this.options.draggable, this.el, false); }, @@ -2429,13 +2313,13 @@ Sortable.prototype = * @param {*} [value] * @returns {*} */ - option: function option(name, value) { - var options = this.options; + option: function (name, value) { + let options = this.options; if (value === void 0) { return options[name]; } else { - var modifiedValue = PluginManager.modifyOption(this, name, value); + let modifiedValue = PluginManager.modifyOption(this, name, value); if (typeof modifiedValue !== 'undefined') { options[name] = modifiedValue; @@ -2452,9 +2336,9 @@ Sortable.prototype = /** * Destroy */ - destroy: function destroy() { + destroy: function () { pluginEvent('destroy', this); - var el = this.el; + let el = this.el; el[expando] = null; off(el, 'mousedown', this._onTapStart); off(el, 'touchstart', this._onTapStart); @@ -2477,7 +2361,7 @@ Sortable.prototype = sortables.splice(sortables.indexOf(this.el), 1); this.el = el = null; }, - _hideClone: function _hideClone() { + _hideClone: function () { if (!cloneHidden) { pluginEvent('hideClone', this); if (Sortable.eventCanceled) return; @@ -2490,7 +2374,7 @@ Sortable.prototype = cloneHidden = true; } }, - _showClone: function _showClone(putSortable) { + _showClone: function (putSortable) { if (putSortable.lastPutMode !== 'clone') { this._hideClone(); @@ -2529,8 +2413,8 @@ evt) { evt.cancelable && evt.preventDefault(); } -function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) { - var evt, +function onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) { + let evt, sortable = fromEl[expando], onMoveFn = sortable.options.onMove, retVal; // Support for new CustomEvent feature @@ -2571,19 +2455,19 @@ function _unsilent() { } function _ghostIsFirst(evt, vertical, sortable) { - var rect = getRect(getChild(sortable.el, 0, sortable.options, true)); - var spacer = 10; + let rect = getRect(getChild(sortable.el, 0, sortable.options, true)); + const spacer = 10; return vertical ? evt.clientX < rect.left - spacer || evt.clientY < rect.top && evt.clientX < rect.right : evt.clientY < rect.top - spacer || evt.clientY < rect.bottom && evt.clientX < rect.left; } function _ghostIsLast(evt, vertical, sortable) { - var rect = getRect(lastChild(sortable.el, sortable.options.draggable)); - var spacer = 10; + let rect = getRect(lastChild(sortable.el, sortable.options.draggable)); + const spacer = 10; return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer; } function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) { - var mouseOnAxis = vertical ? evt.clientY : evt.clientX, + let mouseOnAxis = vertical ? evt.clientY : evt.clientX, targetLength = vertical ? targetRect.height : targetRect.width, targetS1 = vertical ? targetRect.top : targetRect.left, targetS2 = vertical ? targetRect.bottom : targetRect.right, @@ -2651,7 +2535,7 @@ function _getInsertDirection(target) { function _generateId(el) { - var str = el.tagName + el.className + el.src + el.href + el.textContent, + let str = el.tagName + el.className + el.src + el.href + el.textContent, i = str.length, sum = 0; @@ -2664,11 +2548,11 @@ function _generateId(el) { function _saveInputCheckedState(root) { savedInputChecked.length = 0; - var inputs = root.getElementsByTagName('input'); - var idx = inputs.length; + let inputs = root.getElementsByTagName('input'); + let idx = inputs.length; while (idx--) { - var el = inputs[idx]; + let el = inputs[idx]; el.checked && savedInputChecked.push(el); } } @@ -2696,7 +2580,7 @@ Sortable.utils = { off: off, css: css, find: find, - is: function is(el, selector) { + is: function (el, selector) { return !!closest(el, selector, el, false); }, extend: extend, @@ -2725,18 +2609,16 @@ Sortable.get = function (element) { */ -Sortable.mount = function () { - for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) { - plugins[_key] = arguments[_key]; - } - +Sortable.mount = function (...plugins) { if (plugins[0].constructor === Array) plugins = plugins[0]; - plugins.forEach(function (plugin) { + plugins.forEach(plugin => { if (!plugin.prototype || !plugin.prototype.constructor) { - throw "Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(plugin)); + throw `Sortable: Mounted plugin must be a constructor function, not ${{}.toString.call(plugin)}`; } - if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils); + if (plugin.utils) Sortable.utils = { ...Sortable.utils, + ...plugin.utils + }; PluginManager.mount(plugin); }); }; @@ -2754,7 +2636,7 @@ Sortable.create = function (el, options) { Sortable.version = version; -var autoScrolls = [], +let autoScrolls = [], scrollEl, scrollRootEl, scrolling = false, @@ -2773,7 +2655,7 @@ function AutoScrollPlugin() { bubbleScroll: true }; // Bind all private methods - for (var fn in this) { + for (let fn in this) { if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { this[fn] = this[fn].bind(this); } @@ -2781,9 +2663,9 @@ function AutoScrollPlugin() { } AutoScroll.prototype = { - dragStarted: function dragStarted(_ref) { - var originalEvent = _ref.originalEvent; - + dragStarted({ + originalEvent + }) { if (this.sortable.nativeDraggable) { on(document, 'dragover', this._handleAutoScroll); } else { @@ -2796,15 +2678,17 @@ function AutoScrollPlugin() { } } }, - dragOverCompleted: function dragOverCompleted(_ref2) { - var originalEvent = _ref2.originalEvent; + dragOverCompleted({ + originalEvent + }) { // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached) if (!this.options.dragOverBubble && !originalEvent.rootEl) { this._handleAutoScroll(originalEvent); } }, - drop: function drop() { + + drop() { if (this.sortable.nativeDraggable) { off(document, 'dragover', this._handleAutoScroll); } else { @@ -2817,19 +2701,20 @@ function AutoScrollPlugin() { clearAutoScrolls(); cancelThrottle(); }, - nulling: function nulling() { + + nulling() { touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null; autoScrolls.length = 0; }, - _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) { + + _handleFallbackAutoScroll(evt) { this._handleAutoScroll(evt, true); }, - _handleAutoScroll: function _handleAutoScroll(evt, fallback) { - var _this = this; - var x = (evt.touches ? evt.touches[0] : evt).clientX, - y = (evt.touches ? evt.touches[0] : evt).clientY, - elem = document.elementFromPoint(x, y); + _handleAutoScroll(evt, fallback) { + const x = (evt.touches ? evt.touches[0] : evt).clientX, + y = (evt.touches ? evt.touches[0] : evt).clientY, + elem = document.elementFromPoint(x, y); touchEvt$1 = evt; // IE does not seem to have native autoscroll, // Edge's autoscroll seems too conditional, // MACOS Safari does not have autoscroll, @@ -2838,20 +2723,20 @@ function AutoScrollPlugin() { if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) { autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change - var ogElemScroller = getParentAutoScrollElement(elem, true); + let ogElemScroller = getParentAutoScrollElement(elem, true); if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) { pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour - pointerElemChangedInterval = setInterval(function () { - var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true); + pointerElemChangedInterval = setInterval(() => { + let newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true); if (newElem !== ogElemScroller) { ogElemScroller = newElem; clearAutoScrolls(); } - autoScroll(evt, _this.options, newElem, fallback); + autoScroll(evt, this.options, newElem, fallback); }, 10); lastAutoScrollX = x; lastAutoScrollY = y; @@ -2866,6 +2751,7 @@ function AutoScrollPlugin() { autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false); } } + }; return _extends(AutoScroll, { pluginName: 'scroll', @@ -2884,15 +2770,15 @@ function clearPointerElemChangedInterval() { clearInterval(pointerElemChangedInterval); } -var autoScroll = throttle(function (evt, options, rootEl, isFallback) { +const autoScroll = throttle(function (evt, options, rootEl, isFallback) { // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521 if (!options.scroll) return; - var x = (evt.touches ? evt.touches[0] : evt).clientX, - y = (evt.touches ? evt.touches[0] : evt).clientY, - sens = options.scrollSensitivity, - speed = options.scrollSpeed, - winScroller = getWindowScrollingElement(); - var scrollThisInstance = false, + const x = (evt.touches ? evt.touches[0] : evt).clientX, + y = (evt.touches ? evt.touches[0] : evt).clientY, + sens = options.scrollSensitivity, + speed = options.scrollSpeed, + winScroller = getWindowScrollingElement(); + let scrollThisInstance = false, scrollCustomFn; // New scroll root, set scrollEl if (scrollRootEl !== rootEl) { @@ -2906,11 +2792,11 @@ var autoScroll = throttle(function (evt, options, rootEl, isFallback) { } } - var layersOut = 0; - var currentParent = scrollEl; + let layersOut = 0; + let currentParent = scrollEl; do { - var el = currentParent, + let el = currentParent, rect = getRect(el), top = rect.top, bottom = rect.bottom, @@ -2918,8 +2804,8 @@ var autoScroll = throttle(function (evt, options, rootEl, isFallback) { right = rect.right, width = rect.width, height = rect.height, - canScrollX = void 0, - canScrollY = void 0, + canScrollX, + canScrollY, scrollWidth = el.scrollWidth, scrollHeight = el.scrollHeight, elCSS = css(el), @@ -2934,11 +2820,11 @@ var autoScroll = throttle(function (evt, options, rootEl, isFallback) { canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll'); } - var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX); - var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY); + let vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX); + let vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY); if (!autoScrolls[layersOut]) { - for (var i = 0; i <= layersOut; i++) { + for (let i = 0; i <= layersOut; i++) { if (!autoScrolls[i]) { autoScrolls[i] = {}; } @@ -2962,8 +2848,8 @@ var autoScroll = throttle(function (evt, options, rootEl, isFallback) { } - var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0; - var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0; + let scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0; + let scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0; if (typeof scrollCustomFn === 'function') { if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') { @@ -2984,26 +2870,27 @@ var autoScroll = throttle(function (evt, options, rootEl, isFallback) { scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not }, 30); -var drop = function drop(_ref) { - var originalEvent = _ref.originalEvent, - putSortable = _ref.putSortable, - dragEl = _ref.dragEl, - activeSortable = _ref.activeSortable, - dispatchSortableEvent = _ref.dispatchSortableEvent, - hideGhostForTarget = _ref.hideGhostForTarget, - unhideGhostForTarget = _ref.unhideGhostForTarget; +const drop = function ({ + originalEvent, + putSortable, + dragEl, + activeSortable, + dispatchSortableEvent, + hideGhostForTarget, + unhideGhostForTarget +}) { if (!originalEvent) return; - var toSortable = putSortable || activeSortable; + let toSortable = putSortable || activeSortable; hideGhostForTarget(); - var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent; - var target = document.elementFromPoint(touch.clientX, touch.clientY); + let touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent; + let target = document.elementFromPoint(touch.clientX, touch.clientY); unhideGhostForTarget(); if (toSortable && !toSortable.el.contains(target)) { dispatchSortableEvent('spill'); this.onSpill({ - dragEl: dragEl, - putSortable: putSortable + dragEl, + putSortable }); } }; @@ -3012,20 +2899,24 @@ function Revert() {} Revert.prototype = { startIndex: null, - dragStart: function dragStart(_ref2) { - var oldDraggableIndex = _ref2.oldDraggableIndex; + + dragStart({ + oldDraggableIndex + }) { this.startIndex = oldDraggableIndex; }, - onSpill: function onSpill(_ref3) { - var dragEl = _ref3.dragEl, - putSortable = _ref3.putSortable; + + onSpill({ + dragEl, + putSortable + }) { this.sortable.captureAnimationState(); if (putSortable) { putSortable.captureAnimationState(); } - var nextSibling = getChild(this.sortable.el, this.startIndex, this.options); + let nextSibling = getChild(this.sortable.el, this.startIndex, this.options); if (nextSibling) { this.sortable.el.insertBefore(dragEl, nextSibling); @@ -3039,7 +2930,8 @@ Revert.prototype = { putSortable.animateAll(); } }, - drop: drop + + drop }; _extends(Revert, { @@ -3049,15 +2941,17 @@ _extends(Revert, { function Remove() {} Remove.prototype = { - onSpill: function onSpill(_ref4) { - var dragEl = _ref4.dragEl, - putSortable = _ref4.putSortable; - var parentSortable = putSortable || this.sortable; + onSpill({ + dragEl, + putSortable + }) { + const parentSortable = putSortable || this.sortable; parentSortable.captureAnimationState(); dragEl.parentNode && dragEl.parentNode.removeChild(dragEl); parentSortable.animateAll(); }, - drop: drop + + drop }; _extends(Remove, { @@ -3066,7 +2960,7 @@ _extends(Remove, { var OnSpill = [Remove, Revert]; -var lastSwapEl; +let lastSwapEl; function SwapPlugin() { function Swap() { @@ -3076,23 +2970,26 @@ function SwapPlugin() { } Swap.prototype = { - dragStart: function dragStart(_ref) { - var dragEl = _ref.dragEl; + dragStart({ + dragEl + }) { lastSwapEl = dragEl; }, - dragOverValid: function dragOverValid(_ref2) { - var completed = _ref2.completed, - target = _ref2.target, - onMove = _ref2.onMove, - activeSortable = _ref2.activeSortable, - changed = _ref2.changed, - cancel = _ref2.cancel; + + dragOverValid({ + completed, + target, + onMove, + activeSortable, + changed, + cancel + }) { if (!activeSortable.options.swap) return; - var el = this.sortable.el, + let el = this.sortable.el, options = this.options; if (target && target !== el) { - var prevSwapEl = lastSwapEl; + let prevSwapEl = lastSwapEl; if (onMove(target) !== false) { toggleClass(target, options.swapClass, true); @@ -3110,12 +3007,14 @@ function SwapPlugin() { completed(true); cancel(); }, - drop: function drop(_ref3) { - var activeSortable = _ref3.activeSortable, - putSortable = _ref3.putSortable, - dragEl = _ref3.dragEl; - var toSortable = putSortable || this.sortable; - var options = this.options; + + drop({ + activeSortable, + putSortable, + dragEl + }) { + let toSortable = putSortable || this.sortable; + let options = this.options; lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false); if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) { @@ -3128,22 +3027,26 @@ function SwapPlugin() { } } }, - nulling: function nulling() { + + nulling() { lastSwapEl = null; } + }; return _extends(Swap, { pluginName: 'swap', - eventProperties: function eventProperties() { + + eventProperties() { return { swapItem: lastSwapEl }; } + }); } function swapNodes(n1, n2) { - var p1 = n1.parentNode, + let p1 = n1.parentNode, p2 = n2.parentNode, i1, i2; @@ -3159,7 +3062,7 @@ function swapNodes(n1, n2) { p2.insertBefore(n1, p2.children[i2]); } -var multiDragElements = [], +let multiDragElements = [], multiDragClones = [], lastMultiDragSelect, // for selection with modifier key down (SHIFT) @@ -3176,7 +3079,7 @@ dragStarted = false, function MultiDragPlugin() { function MultiDrag(sortable) { // Bind all private methods - for (var fn in this) { + for (let fn in this) { if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { this[fn] = this[fn].bind(this); } @@ -3197,11 +3100,12 @@ function MultiDragPlugin() { selectedClass: 'sortable-selected', multiDragKey: null, avoidImplicitDeselect: false, - setData: function setData(dataTransfer, dragEl) { - var data = ''; + + setData(dataTransfer, dragEl) { + let data = ''; if (multiDragElements.length && multiDragSortable === sortable) { - multiDragElements.forEach(function (multiDragElement, i) { + multiDragElements.forEach((multiDragElement, i) => { data += (!i ? '' : ', ') + multiDragElement.textContent; }); } else { @@ -3210,25 +3114,31 @@ function MultiDragPlugin() { dataTransfer.setData('Text', data); } + }; } MultiDrag.prototype = { multiDragKeyDown: false, isMultiDrag: false, - delayStartGlobal: function delayStartGlobal(_ref) { - var dragged = _ref.dragEl; + + delayStartGlobal({ + dragEl: dragged + }) { dragEl$1 = dragged; }, - delayEnded: function delayEnded() { + + delayEnded() { this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1); }, - setupClone: function setupClone(_ref2) { - var sortable = _ref2.sortable, - cancel = _ref2.cancel; + + setupClone({ + sortable, + cancel + }) { if (!this.isMultiDrag) return; - for (var i = 0; i < multiDragElements.length; i++) { + for (let i = 0; i < multiDragElements.length; i++) { multiDragClones.push(clone(multiDragElements[i])); multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex; multiDragClones[i].draggable = false; @@ -3241,11 +3151,13 @@ function MultiDragPlugin() { cancel(); }, - clone: function clone(_ref3) { - var sortable = _ref3.sortable, - rootEl = _ref3.rootEl, - dispatchSortableEvent = _ref3.dispatchSortableEvent, - cancel = _ref3.cancel; + + clone({ + sortable, + rootEl, + dispatchSortableEvent, + cancel + }) { if (!this.isMultiDrag) return; if (!this.options.removeCloneOnHide) { @@ -3256,30 +3168,32 @@ function MultiDragPlugin() { } } }, - showClone: function showClone(_ref4) { - var cloneNowShown = _ref4.cloneNowShown, - rootEl = _ref4.rootEl, - cancel = _ref4.cancel; + + showClone({ + cloneNowShown, + rootEl, + cancel + }) { if (!this.isMultiDrag) return; insertMultiDragClones(false, rootEl); - multiDragClones.forEach(function (clone) { + multiDragClones.forEach(clone => { css(clone, 'display', ''); }); cloneNowShown(); clonesHidden = false; cancel(); }, - hideClone: function hideClone(_ref5) { - var _this = this; - var sortable = _ref5.sortable, - cloneNowHidden = _ref5.cloneNowHidden, - cancel = _ref5.cancel; + hideClone({ + sortable, + cloneNowHidden, + cancel + }) { if (!this.isMultiDrag) return; - multiDragClones.forEach(function (clone) { + multiDragClones.forEach(clone => { css(clone, 'display', 'none'); - if (_this.options.removeCloneOnHide && clone.parentNode) { + if (this.options.removeCloneOnHide && clone.parentNode) { clone.parentNode.removeChild(clone); } }); @@ -3287,14 +3201,15 @@ function MultiDragPlugin() { clonesHidden = true; cancel(); }, - dragStartGlobal: function dragStartGlobal(_ref6) { - var sortable = _ref6.sortable; + dragStartGlobal({ + sortable + }) { if (!this.isMultiDrag && multiDragSortable) { multiDragSortable.multiDrag._deselectMultiDrag(); } - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { multiDragElement.sortableIndex = index(multiDragElement); }); // Sort multi-drag elements @@ -3303,10 +3218,10 @@ function MultiDragPlugin() { }); dragStarted = true; }, - dragStarted: function dragStarted(_ref7) { - var _this2 = this; - var sortable = _ref7.sortable; + dragStarted({ + sortable + }) { if (!this.isMultiDrag) return; if (this.options.sort) { @@ -3319,12 +3234,12 @@ function MultiDragPlugin() { sortable.captureAnimationState(); if (this.options.animation) { - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { if (multiDragElement === dragEl$1) return; css(multiDragElement, 'position', 'absolute'); }); - var dragRect = getRect(dragEl$1, false, true, true); - multiDragElements.forEach(function (multiDragElement) { + let dragRect = getRect(dragEl$1, false, true, true); + multiDragElements.forEach(multiDragElement => { if (multiDragElement === dragEl$1) return; setRect(multiDragElement, dragRect); }); @@ -3333,41 +3248,43 @@ function MultiDragPlugin() { } } - sortable.animateAll(function () { + sortable.animateAll(() => { folding = false; initialFolding = false; - if (_this2.options.animation) { - multiDragElements.forEach(function (multiDragElement) { + if (this.options.animation) { + multiDragElements.forEach(multiDragElement => { unsetRect(multiDragElement); }); } // Remove all auxiliary multidrag items from el, if sorting enabled - if (_this2.options.sort) { + if (this.options.sort) { removeMultiDragElements(); } }); }, - dragOver: function dragOver(_ref8) { - var target = _ref8.target, - completed = _ref8.completed, - cancel = _ref8.cancel; + dragOver({ + target, + completed, + cancel + }) { if (folding && ~multiDragElements.indexOf(target)) { completed(false); cancel(); } }, - revert: function revert(_ref9) { - var fromSortable = _ref9.fromSortable, - rootEl = _ref9.rootEl, - sortable = _ref9.sortable, - dragRect = _ref9.dragRect; + revert({ + fromSortable, + rootEl, + sortable, + dragRect + }) { if (multiDragElements.length > 1) { // Setup unfold animation - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { sortable.addAnimationState({ target: multiDragElement, rect: folding ? getRect(multiDragElement) : dragRect @@ -3380,14 +3297,16 @@ function MultiDragPlugin() { insertMultiDragElements(!this.options.removeCloneOnHide, rootEl); } }, - dragOverCompleted: function dragOverCompleted(_ref10) { - var sortable = _ref10.sortable, - isOwner = _ref10.isOwner, - insertion = _ref10.insertion, - activeSortable = _ref10.activeSortable, - parentEl = _ref10.parentEl, - putSortable = _ref10.putSortable; - var options = this.options; + + dragOverCompleted({ + sortable, + isOwner, + insertion, + activeSortable, + parentEl, + putSortable + }) { + let options = this.options; if (insertion) { // Clones must be hidden before folding animation to capture dragRectAbsolute properly @@ -3399,8 +3318,8 @@ function MultiDragPlugin() { if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) { // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible - var dragRectAbsolute = getRect(dragEl$1, false, true, true); - multiDragElements.forEach(function (multiDragElement) { + let dragRectAbsolute = getRect(dragEl$1, false, true, true); + multiDragElements.forEach(multiDragElement => { if (multiDragElement === dragEl$1) return; setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted // while folding, and so that we can capture them again because old sortable will no longer be fromSortable @@ -3418,13 +3337,13 @@ function MultiDragPlugin() { } if (multiDragElements.length > 1) { - var clonesHiddenBefore = clonesHidden; + let clonesHiddenBefore = clonesHidden; activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) { - multiDragClones.forEach(function (clone) { + multiDragClones.forEach(clone => { activeSortable.addAnimationState({ target: clone, rect: clonesFromRect @@ -3439,38 +3358,43 @@ function MultiDragPlugin() { } } }, - dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) { - var dragRect = _ref11.dragRect, - isOwner = _ref11.isOwner, - activeSortable = _ref11.activeSortable; - multiDragElements.forEach(function (multiDragElement) { + + dragOverAnimationCapture({ + dragRect, + isOwner, + activeSortable + }) { + multiDragElements.forEach(multiDragElement => { multiDragElement.thisAnimationDuration = null; }); if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) { clonesFromRect = _extends({}, dragRect); - var dragMatrix = matrix(dragEl$1, true); + let dragMatrix = matrix(dragEl$1, true); clonesFromRect.top -= dragMatrix.f; clonesFromRect.left -= dragMatrix.e; } }, - dragOverAnimationComplete: function dragOverAnimationComplete() { + + dragOverAnimationComplete() { if (folding) { folding = false; removeMultiDragElements(); } }, - drop: function drop(_ref12) { - var evt = _ref12.originalEvent, - rootEl = _ref12.rootEl, - parentEl = _ref12.parentEl, - sortable = _ref12.sortable, - dispatchSortableEvent = _ref12.dispatchSortableEvent, - oldIndex = _ref12.oldIndex, - putSortable = _ref12.putSortable; - var toSortable = putSortable || this.sortable; + + drop({ + originalEvent: evt, + rootEl, + parentEl, + sortable, + dispatchSortableEvent, + oldIndex, + putSortable + }) { + let toSortable = putSortable || this.sortable; if (!evt) return; - var options = this.options, + let options = this.options, children = parentEl.children; // Multi-drag selection if (!dragStarted) { @@ -3483,21 +3407,21 @@ function MultiDragPlugin() { if (!~multiDragElements.indexOf(dragEl$1)) { multiDragElements.push(dragEl$1); dispatchEvent({ - sortable: sortable, - rootEl: rootEl, + sortable, + rootEl, name: 'select', targetEl: dragEl$1, originalEvent: evt }); // Modifier activated, select from last to dragEl if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) { - var lastIndex = index(lastMultiDragSelect), + let lastIndex = index(lastMultiDragSelect), currentIndex = index(dragEl$1); if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) { // Must include lastMultiDragSelect (select it), in case modified selection from no selection // (but previous selection existed) - var n, i; + let n, i; if (currentIndex > lastIndex) { i = lastIndex; @@ -3512,8 +3436,8 @@ function MultiDragPlugin() { toggleClass(children[i], options.selectedClass, true); multiDragElements.push(children[i]); dispatchEvent({ - sortable: sortable, - rootEl: rootEl, + sortable, + rootEl, name: 'select', targetEl: children[i], originalEvent: evt @@ -3529,8 +3453,8 @@ function MultiDragPlugin() { multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1); lastMultiDragSelect = null; dispatchEvent({ - sortable: sortable, - rootEl: rootEl, + sortable, + rootEl, name: 'deselect', targetEl: dragEl$1, originalEvent: evt @@ -3543,7 +3467,7 @@ function MultiDragPlugin() { folding = false; // Do not "unfold" after around dragEl if reverted if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) { - var dragRect = getRect(dragEl$1), + let dragRect = getRect(dragEl$1), multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')'); if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null; toSortable.captureAnimationState(); @@ -3551,11 +3475,11 @@ function MultiDragPlugin() { if (!initialFolding) { if (options.animation) { dragEl$1.fromRect = dragRect; - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { multiDragElement.thisAnimationDuration = null; if (multiDragElement !== dragEl$1) { - var rect = folding ? getRect(multiDragElement) : dragRect; + let rect = folding ? getRect(multiDragElement) : dragRect; multiDragElement.fromRect = rect; // Prepare unfold animation toSortable.addAnimationState({ @@ -3569,7 +3493,7 @@ function MultiDragPlugin() { removeMultiDragElements(); - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { if (children[multiDragIndex]) { parentEl.insertBefore(multiDragElement, children[multiDragIndex]); } else { @@ -3582,8 +3506,8 @@ function MultiDragPlugin() { // must be fired here as Sortable will not. if (oldIndex === index(dragEl$1)) { - var update = false; - multiDragElements.forEach(function (multiDragElement) { + let update = false; + multiDragElements.forEach(multiDragElement => { if (multiDragElement.sortableIndex !== index(multiDragElement)) { update = true; return; @@ -3597,7 +3521,7 @@ function MultiDragPlugin() { } // Must be done after capturing individual rects (scroll bar) - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { unsetRect(multiDragElement); }); toSortable.animateAll(); @@ -3608,16 +3532,18 @@ function MultiDragPlugin() { if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') { - multiDragClones.forEach(function (clone) { + multiDragClones.forEach(clone => { clone.parentNode && clone.parentNode.removeChild(clone); }); } }, - nullingGlobal: function nullingGlobal() { + + nullingGlobal() { this.isMultiDrag = dragStarted = false; multiDragClones.length = 0; }, - destroyGlobal: function destroyGlobal() { + + destroyGlobal() { this._deselectMultiDrag(); off(document, 'pointerup', this._deselectMultiDrag); @@ -3626,7 +3552,8 @@ function MultiDragPlugin() { off(document, 'keydown', this._checkKeyDown); off(document, 'keyup', this._checkKeyUp); }, - _deselectMultiDrag: function _deselectMultiDrag(evt) { + + _deselectMultiDrag(evt) { if (typeof dragStarted !== "undefined" && dragStarted) return; // Only deselect if selection is in this sortable if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable @@ -3636,7 +3563,7 @@ function MultiDragPlugin() { if (evt && evt.button !== 0) return; while (multiDragElements.length) { - var el = multiDragElements[0]; + let el = multiDragElements[0]; toggleClass(el, this.options.selectedClass, false); multiDragElements.shift(); dispatchEvent({ @@ -3648,16 +3575,19 @@ function MultiDragPlugin() { }); } }, - _checkKeyDown: function _checkKeyDown(evt) { + + _checkKeyDown(evt) { if (evt.key === this.options.multiDragKey) { this.multiDragKeyDown = true; } }, - _checkKeyUp: function _checkKeyUp(evt) { + + _checkKeyUp(evt) { if (evt.key === this.options.multiDragKey) { this.multiDragKeyDown = false; } } + }; return _extends(MultiDrag, { // Static methods & properties @@ -3667,8 +3597,8 @@ function MultiDragPlugin() { * Selects the provided multi-drag item * @param {HTMLElement} el The element to be selected */ - select: function select(el) { - var sortable = el.parentNode[expando]; + select(el) { + let sortable = el.parentNode[expando]; if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return; if (multiDragSortable && multiDragSortable !== sortable) { @@ -3685,49 +3615,50 @@ function MultiDragPlugin() { * Deselects the provided multi-drag item * @param {HTMLElement} el The element to be deselected */ - deselect: function deselect(el) { - var sortable = el.parentNode[expando], + deselect(el) { + let sortable = el.parentNode[expando], index = multiDragElements.indexOf(el); if (!sortable || !sortable.options.multiDrag || !~index) return; toggleClass(el, sortable.options.selectedClass, false); multiDragElements.splice(index, 1); } + }, - eventProperties: function eventProperties() { - var _this3 = this; - var oldIndicies = [], - newIndicies = []; - multiDragElements.forEach(function (multiDragElement) { + eventProperties() { + const oldIndicies = [], + newIndicies = []; + multiDragElements.forEach(multiDragElement => { oldIndicies.push({ - multiDragElement: multiDragElement, + multiDragElement, index: multiDragElement.sortableIndex }); // multiDragElements will already be sorted if folding - var newIndex; + let newIndex; if (folding && multiDragElement !== dragEl$1) { newIndex = -1; } else if (folding) { - newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')'); + newIndex = index(multiDragElement, ':not(.' + this.options.selectedClass + ')'); } else { newIndex = index(multiDragElement); } newIndicies.push({ - multiDragElement: multiDragElement, + multiDragElement, index: newIndex }); }); return { - items: _toConsumableArray(multiDragElements), - clones: [].concat(multiDragClones), - oldIndicies: oldIndicies, - newIndicies: newIndicies + items: [...multiDragElements], + clones: [...multiDragClones], + oldIndicies, + newIndicies }; }, + optionListeners: { - multiDragKey: function multiDragKey(key) { + multiDragKey(key) { key = key.toLowerCase(); if (key === 'ctrl') { @@ -3738,13 +3669,14 @@ function MultiDragPlugin() { return key; } + } }); } function insertMultiDragElements(clonesInserted, rootEl) { - multiDragElements.forEach(function (multiDragElement, i) { - var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)]; + multiDragElements.forEach((multiDragElement, i) => { + let target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)]; if (target) { rootEl.insertBefore(multiDragElement, target); @@ -3761,8 +3693,8 @@ function insertMultiDragElements(clonesInserted, rootEl) { function insertMultiDragClones(elementsInserted, rootEl) { - multiDragClones.forEach(function (clone, i) { - var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)]; + multiDragClones.forEach((clone, i) => { + let target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)]; if (target) { rootEl.insertBefore(clone, target); @@ -3773,7 +3705,7 @@ function insertMultiDragClones(elementsInserted, rootEl) { } function removeMultiDragElements() { - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { if (multiDragElement === dragEl$1) return; multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement); }); diff --git a/modular/sortable.esm.js b/modular/sortable.esm.js index 6ec7ed1bb..63ad12ca2 100644 --- a/modular/sortable.esm.js +++ b/modular/sortable.esm.js @@ -4,75 +4,6 @@ * @author owenm * @license MIT */ -function ownKeys(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - - if (enumerableOnly) { - symbols = symbols.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - } - - keys.push.apply(keys, symbols); - } - - return keys; -} - -function _objectSpread2(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - - if (i % 2) { - ownKeys(Object(source), true).forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys(Object(source)).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - - return target; -} - -function _typeof(obj) { - "@babel/helpers - typeof"; - - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } - - return _typeof(obj); -} - -function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; -} - function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { @@ -91,75 +22,6 @@ function _extends() { return _extends.apply(this, arguments); } -function _objectWithoutPropertiesLoose(source, excluded) { - if (source == null) return {}; - var target = {}; - var sourceKeys = Object.keys(source); - var key, i; - - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - target[key] = source[key]; - } - - return target; -} - -function _objectWithoutProperties(source, excluded) { - if (source == null) return {}; - - var target = _objectWithoutPropertiesLoose(source, excluded); - - var key, i; - - if (Object.getOwnPropertySymbols) { - var sourceSymbolKeys = Object.getOwnPropertySymbols(source); - - for (i = 0; i < sourceSymbolKeys.length; i++) { - key = sourceSymbolKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; - target[key] = source[key]; - } - } - - return target; -} - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); -} - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray(arr); -} - -function _iterableToArray(iter) { - if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); -} - -function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); -} - -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - - return arr2; -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - var version = "1.15.0"; function userAgent(pattern) { @@ -168,14 +30,14 @@ function userAgent(pattern) { } } -var IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i); -var Edge = userAgent(/Edge/i); -var FireFox = userAgent(/firefox/i); -var Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i); -var IOS = userAgent(/iP(ad|od|hone)/i); -var ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i); +const IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i); +const Edge = userAgent(/Edge/i); +const FireFox = userAgent(/firefox/i); +const Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i); +const IOS = userAgent(/iP(ad|od|hone)/i); +const ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i); -var captureMode = { +const captureMode = { capture: false, passive: false }; @@ -240,21 +102,21 @@ ctx, includeCTX) { return null; } -var R_SPACE = /\s+/g; +const R_SPACE = /\s+/g; function toggleClass(el, name, state) { if (el && name) { if (el.classList) { el.classList[state ? 'add' : 'remove'](name); } else { - var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' '); + let className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' '); el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' '); } } } function css(el, prop, val) { - var style = el && el.style; + let style = el && el.style; if (style) { if (val === void 0) { @@ -276,13 +138,13 @@ function css(el, prop, val) { } function matrix(el, selfOnly) { - var appliedTransforms = ''; + let appliedTransforms = ''; if (typeof el === 'string') { appliedTransforms = el; } else { do { - var transform = css(el, 'transform'); + let transform = css(el, 'transform'); if (transform && transform !== 'none') { appliedTransforms = transform + ' ' + appliedTransforms; @@ -292,7 +154,7 @@ function matrix(el, selfOnly) { } while (!selfOnly && (el = el.parentNode)); } - var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix; + const matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix; /*jshint -W056 */ return matrixFn && new matrixFn(appliedTransforms); @@ -300,7 +162,7 @@ function matrix(el, selfOnly) { function find(ctx, tagName, iterator) { if (ctx) { - var list = ctx.getElementsByTagName(tagName), + let list = ctx.getElementsByTagName(tagName), i = 0, n = list.length; @@ -317,7 +179,7 @@ function find(ctx, tagName, iterator) { } function getWindowScrollingElement() { - var scrollingElement = document.scrollingElement; + let scrollingElement = document.scrollingElement; if (scrollingElement) { return scrollingElement; @@ -338,7 +200,7 @@ function getWindowScrollingElement() { function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) { if (!el.getBoundingClientRect && el !== window) return; - var elRect, top, left, bottom, right, height, width; + let elRect, top, left, bottom, right, height, width; if (el !== window && el.parentNode && el !== getWindowScrollingElement()) { elRect = el.getBoundingClientRect(); @@ -365,7 +227,7 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS if (!IE11OrLess) { do { if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) { - var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container + let containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container top -= containerRect.top + parseInt(css(container, 'border-top-width')); left -= containerRect.left + parseInt(css(container, 'border-left-width')); @@ -381,7 +243,7 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS if (undoScale && el !== window) { // Adjust for scale() - var elMatrix = matrix(container || el), + let elMatrix = matrix(container || el), scaleX = elMatrix && elMatrix.a, scaleY = elMatrix && elMatrix.d; @@ -414,13 +276,13 @@ function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoS function isScrolledPast(el, elSide, parentSide) { - var parent = getParentAutoScrollElement(el, true), + let parent = getParentAutoScrollElement(el, true), elSideVal = getRect(el)[elSide]; /* jshint boss:true */ while (parent) { - var parentSideVal = getRect(parent)[parentSide], - visible = void 0; + let parentSideVal = getRect(parent)[parentSide], + visible; if (parentSide === 'top' || parentSide === 'left') { visible = elSideVal >= parentSideVal; @@ -446,7 +308,7 @@ function isScrolledPast(el, elSide, parentSide) { function getChild(el, childNum, options, includeDragEl) { - var currentChild = 0, + let currentChild = 0, i = 0, children = el.children; @@ -473,7 +335,7 @@ function getChild(el, childNum, options, includeDragEl) { function lastChild(el, selector) { - var last = el.lastElementChild; + let last = el.lastElementChild; while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) { last = last.previousElementSibling; @@ -491,7 +353,7 @@ function lastChild(el, selector) { function index(el, selector) { - var index = 0; + let index = 0; if (!el || !el.parentNode) { return -1; @@ -516,13 +378,13 @@ function index(el, selector) { function getRelativeScrollOffset(el) { - var offsetLeft = 0, + let offsetLeft = 0, offsetTop = 0, winScroller = getWindowScrollingElement(); if (el) { do { - var elMatrix = matrix(el), + let elMatrix = matrix(el), scaleX = elMatrix.a, scaleY = elMatrix.d; offsetLeft += el.scrollLeft * scaleX; @@ -541,10 +403,10 @@ function getRelativeScrollOffset(el) { function indexOfObject(arr, obj) { - for (var i in arr) { + for (let i in arr) { if (!arr.hasOwnProperty(i)) continue; - for (var key in obj) { + for (let key in obj) { if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i); } } @@ -555,13 +417,13 @@ function indexOfObject(arr, obj) { function getParentAutoScrollElement(el, includeSelf) { // skip to window if (!el || !el.getBoundingClientRect) return getWindowScrollingElement(); - var elem = el; - var gotSelf = false; + let elem = el; + let gotSelf = false; do { // we don't need to get elem css if it isn't even overflowing in the first place (performance) if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) { - var elemCSS = css(elem); + let elemCSS = css(elem); if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) { if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement(); @@ -578,7 +440,7 @@ function getParentAutoScrollElement(el, includeSelf) { function extend(dst, src) { if (dst && src) { - for (var key in src) { + for (let key in src) { if (src.hasOwnProperty(key)) { dst[key] = src[key]; } @@ -592,12 +454,12 @@ function isRectEqual(rect1, rect2) { return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width); } -var _throttleTimeout; +let _throttleTimeout; function throttle(callback, ms) { return function () { if (!_throttleTimeout) { - var args = arguments, + let args = arguments, _this = this; if (args.length === 1) { @@ -624,8 +486,8 @@ function scrollBy(el, x, y) { } function clone(el) { - var Polymer = window.Polymer; - var $ = window.jQuery || window.Zepto; + let Polymer = window.Polymer; + let $ = window.jQuery || window.Zepto; if (Polymer && Polymer.dom) { return Polymer.dom(el).cloneNode(true); @@ -652,28 +514,27 @@ function unsetRect(el) { css(el, 'height', ''); } -var expando = 'Sortable' + new Date().getTime(); +const expando = 'Sortable' + new Date().getTime(); function AnimationStateManager() { - var animationStates = [], + let animationStates = [], animationCallbackId; return { - captureAnimationState: function captureAnimationState() { + captureAnimationState() { animationStates = []; if (!this.options.animation) return; - var children = [].slice.call(this.el.children); - children.forEach(function (child) { + let children = [].slice.call(this.el.children); + children.forEach(child => { if (css(child, 'display') === 'none' || child === Sortable.ghost) return; animationStates.push({ target: child, rect: getRect(child) }); - - var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation - + let fromRect = { ...animationStates[animationStates.length - 1].rect + }; // If animating: compensate for current animation if (child.thisAnimationDuration) { - var childMatrix = matrix(child, true); + let childMatrix = matrix(child, true); if (childMatrix) { fromRect.top -= childMatrix.f; @@ -684,27 +545,28 @@ function AnimationStateManager() { child.fromRect = fromRect; }); }, - addAnimationState: function addAnimationState(state) { + + addAnimationState(state) { animationStates.push(state); }, - removeAnimationState: function removeAnimationState(target) { + + removeAnimationState(target) { animationStates.splice(indexOfObject(animationStates, { - target: target + target }), 1); }, - animateAll: function animateAll(callback) { - var _this = this; + animateAll(callback) { if (!this.options.animation) { clearTimeout(animationCallbackId); if (typeof callback === 'function') callback(); return; } - var animating = false, + let animating = false, animationTime = 0; - animationStates.forEach(function (state) { - var time = 0, + animationStates.forEach(state => { + let time = 0, target = state.target, fromRect = target.fromRect, toRect = getRect(target), @@ -726,7 +588,7 @@ function AnimationStateManager() { if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) { // If returning to same place as started from animation and on same axis - time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options); + time = calculateRealTime(animatingRect, prevFromRect, prevToRect, this.options); } } // if fromRect != toRect: animate @@ -736,10 +598,10 @@ function AnimationStateManager() { target.prevToRect = toRect; if (!time) { - time = _this.options.animation; + time = this.options.animation; } - _this.animate(target, animatingRect, toRect, time); + this.animate(target, animatingRect, toRect, time); } if (time) { @@ -768,11 +630,12 @@ function AnimationStateManager() { animationStates = []; }, - animate: function animate(target, currentRect, toRect, duration) { + + animate(target, currentRect, toRect, duration) { if (duration) { css(target, 'transition', ''); css(target, 'transform', ''); - var elMatrix = matrix(this.el), + let elMatrix = matrix(this.el), scaleX = elMatrix && elMatrix.a, scaleY = elMatrix && elMatrix.d, translateX = (currentRect.left - toRect.left) / (scaleX || 1), @@ -794,6 +657,7 @@ function AnimationStateManager() { }, duration); } } + }; } @@ -805,59 +669,61 @@ function calculateRealTime(animatingRect, fromRect, toRect, options) { return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation; } -var plugins = []; -var defaults = { +let plugins = []; +const defaults = { initializeByDefault: true }; var PluginManager = { - mount: function mount(plugin) { + mount(plugin) { // Set default static properties - for (var option in defaults) { + for (let option in defaults) { if (defaults.hasOwnProperty(option) && !(option in plugin)) { plugin[option] = defaults[option]; } } - plugins.forEach(function (p) { + plugins.forEach(p => { if (p.pluginName === plugin.pluginName) { - throw "Sortable: Cannot mount plugin ".concat(plugin.pluginName, " more than once"); + throw `Sortable: Cannot mount plugin ${plugin.pluginName} more than once`; } }); plugins.push(plugin); }, - pluginEvent: function pluginEvent(eventName, sortable, evt) { - var _this = this; + pluginEvent(eventName, sortable, evt) { this.eventCanceled = false; - evt.cancel = function () { - _this.eventCanceled = true; + evt.cancel = () => { + this.eventCanceled = true; }; - var eventNameGlobal = eventName + 'Global'; - plugins.forEach(function (plugin) { + const eventNameGlobal = eventName + 'Global'; + plugins.forEach(plugin => { if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable if (sortable[plugin.pluginName][eventNameGlobal]) { - sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({ - sortable: sortable - }, evt)); + sortable[plugin.pluginName][eventNameGlobal]({ + sortable, + ...evt + }); } // Only fire plugin event if plugin is enabled in this sortable, // and plugin has event defined if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) { - sortable[plugin.pluginName][eventName](_objectSpread2({ - sortable: sortable - }, evt)); + sortable[plugin.pluginName][eventName]({ + sortable, + ...evt + }); } }); }, - initializePlugins: function initializePlugins(sortable, el, defaults, options) { - plugins.forEach(function (plugin) { - var pluginName = plugin.pluginName; + + initializePlugins(sortable, el, defaults, options) { + plugins.forEach(plugin => { + const pluginName = plugin.pluginName; if (!sortable.options[pluginName] && !plugin.initializeByDefault) return; - var initialized = new plugin(sortable, el, sortable.options); + let initialized = new plugin(sortable, el, sortable.options); initialized.sortable = sortable; initialized.options = sortable.options; sortable[pluginName] = initialized; // Add default options from plugin @@ -865,27 +731,29 @@ var PluginManager = { _extends(defaults, initialized.defaults); }); - for (var option in sortable.options) { + for (let option in sortable.options) { if (!sortable.options.hasOwnProperty(option)) continue; - var modified = this.modifyOption(sortable, option, sortable.options[option]); + let modified = this.modifyOption(sortable, option, sortable.options[option]); if (typeof modified !== 'undefined') { sortable.options[option] = modified; } } }, - getEventProperties: function getEventProperties(name, sortable) { - var eventProperties = {}; - plugins.forEach(function (plugin) { + + getEventProperties(name, sortable) { + let eventProperties = {}; + plugins.forEach(plugin => { if (typeof plugin.eventProperties !== 'function') return; _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name)); }); return eventProperties; }, - modifyOption: function modifyOption(sortable, name, value) { - var modifiedValue; - plugins.forEach(function (plugin) { + + modifyOption(sortable, name, value) { + let modifiedValue; + plugins.forEach(plugin => { // Plugin must exist on the Sortable if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin @@ -895,26 +763,28 @@ var PluginManager = { }); return modifiedValue; } + }; -function dispatchEvent(_ref) { - var sortable = _ref.sortable, - rootEl = _ref.rootEl, - name = _ref.name, - targetEl = _ref.targetEl, - cloneEl = _ref.cloneEl, - toEl = _ref.toEl, - fromEl = _ref.fromEl, - oldIndex = _ref.oldIndex, - newIndex = _ref.newIndex, - oldDraggableIndex = _ref.oldDraggableIndex, - newDraggableIndex = _ref.newDraggableIndex, - originalEvent = _ref.originalEvent, - putSortable = _ref.putSortable, - extraEventProperties = _ref.extraEventProperties; +function dispatchEvent({ + sortable, + rootEl, + name, + targetEl, + cloneEl, + toEl, + fromEl, + oldIndex, + newIndex, + oldDraggableIndex, + newDraggableIndex, + originalEvent, + putSortable, + extraEventProperties +}) { sortable = sortable || rootEl && rootEl[expando]; if (!sortable) return; - var evt, + let evt, options = sortable.options, onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature @@ -938,10 +808,11 @@ function dispatchEvent(_ref) { evt.newDraggableIndex = newDraggableIndex; evt.originalEvent = originalEvent; evt.pullMode = putSortable ? putSortable.lastPutMode : undefined; + let allEventProperties = { ...extraEventProperties, + ...PluginManager.getEventProperties(name, sortable) + }; - var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable)); - - for (var option in allEventProperties) { + for (let option in allEventProperties) { evt[option] = allEventProperties[option]; } @@ -954,62 +825,65 @@ function dispatchEvent(_ref) { } } -var _excluded = ["evt"]; - -var pluginEvent = function pluginEvent(eventName, sortable) { - var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, - originalEvent = _ref.evt, - data = _objectWithoutProperties(_ref, _excluded); - - PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({ - dragEl: dragEl, - parentEl: parentEl, - ghostEl: ghostEl, - rootEl: rootEl, - nextEl: nextEl, - lastDownEl: lastDownEl, - cloneEl: cloneEl, - cloneHidden: cloneHidden, +let pluginEvent = function (eventName, sortable, { + evt: originalEvent, + ...data +} = {}) { + PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, { + dragEl, + parentEl, + ghostEl, + rootEl, + nextEl, + lastDownEl, + cloneEl, + cloneHidden, dragStarted: moved, - putSortable: putSortable, + putSortable, activeSortable: Sortable.active, - originalEvent: originalEvent, - oldIndex: oldIndex, - oldDraggableIndex: oldDraggableIndex, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex, + originalEvent, + oldIndex, + oldDraggableIndex, + newIndex, + newDraggableIndex, hideGhostForTarget: _hideGhostForTarget, unhideGhostForTarget: _unhideGhostForTarget, - cloneNowHidden: function cloneNowHidden() { + + cloneNowHidden() { cloneHidden = true; }, - cloneNowShown: function cloneNowShown() { + + cloneNowShown() { cloneHidden = false; }, - dispatchSortableEvent: function dispatchSortableEvent(name) { + + dispatchSortableEvent(name) { _dispatchEvent({ - sortable: sortable, - name: name, - originalEvent: originalEvent + sortable, + name, + originalEvent }); - } - }, data)); + }, + + ...data + }); }; function _dispatchEvent(info) { - dispatchEvent(_objectSpread2({ - putSortable: putSortable, - cloneEl: cloneEl, + dispatchEvent({ + putSortable, + cloneEl, targetEl: dragEl, - rootEl: rootEl, - oldIndex: oldIndex, - oldDraggableIndex: oldDraggableIndex, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex - }, info)); + rootEl, + oldIndex, + oldDraggableIndex, + newIndex, + newDraggableIndex, + ...info + }); } -var dragEl, +let dragEl, parentEl, ghostEl, rootEl, @@ -1046,24 +920,24 @@ _silent = false, savedInputChecked = []; /** @const */ -var documentExists = typeof document !== 'undefined', - PositionGhostAbsolutely = IOS, - CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float', - // This will not pass for IE9, because IE9 DnD only works on anchors +const documentExists = typeof document !== 'undefined', + PositionGhostAbsolutely = IOS, + CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float', + // This will not pass for IE9, because IE9 DnD only works on anchors supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'), - supportCssPointerEvents = function () { + supportCssPointerEvents = function () { if (!documentExists) return; // false when <= IE11 if (IE11OrLess) { return false; } - var el = document.createElement('x'); + let el = document.createElement('x'); el.style.cssText = 'pointer-events:auto'; return el.style.pointerEvents === 'auto'; }(), - _detectDirection = function _detectDirection(el, options) { - var elCSS = css(el), + _detectDirection = function (el, options) { + let elCSS = css(el), elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth), child1 = getChild(el, 0, options), child2 = getChild(el, 1, options), @@ -1080,15 +954,15 @@ supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal'; } - if (child1 && firstChildCSS["float"] && firstChildCSS["float"] !== 'none') { - var touchingSideChild2 = firstChildCSS["float"] === 'left' ? 'left' : 'right'; + if (child1 && firstChildCSS.float && firstChildCSS.float !== 'none') { + let touchingSideChild2 = firstChildCSS.float === 'left' ? 'left' : 'right'; return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal'; } return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal'; }, - _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) { - var dragElS1Opp = vertical ? dragRect.left : dragRect.top, + _dragElInRowColumn = function (dragRect, targetRect, vertical) { + let dragElS1Opp = vertical ? dragRect.left : dragRect.top, dragElS2Opp = vertical ? dragRect.right : dragRect.bottom, dragElOppLength = vertical ? dragRect.width : dragRect.height, targetS1Opp = vertical ? targetRect.left : targetRect.top, @@ -1103,14 +977,14 @@ supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in * @param {Number} y Y position * @return {HTMLElement} Element of the first found nearest Sortable */ -_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) { - var ret; - sortables.some(function (sortable) { - var threshold = sortable[expando].options.emptyInsertThreshold; +_detectNearestEmptySortable = function (x, y) { + let ret; + sortables.some(sortable => { + const threshold = sortable[expando].options.emptyInsertThreshold; if (!threshold || lastChild(sortable)) return; - var rect = getRect(sortable), - insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold, - insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold; + const rect = getRect(sortable), + insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold, + insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold; if (insideHorizontally && insideVertically) { return ret = sortable; @@ -1118,10 +992,10 @@ _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) { }); return ret; }, - _prepareGroup = function _prepareGroup(options) { + _prepareGroup = function (options) { function toFn(value, pull) { return function (to, from, dragEl, evt) { - var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name; + let sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name; if (value == null && (pull || sameGroup)) { // Default pull value @@ -1134,16 +1008,16 @@ _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) { } else if (typeof value === 'function') { return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt); } else { - var otherGroup = (pull ? to : from).options.group.name; + let otherGroup = (pull ? to : from).options.group.name; return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1; } }; } - var group = {}; - var originalGroup = options.group; + let group = {}; + let originalGroup = options.group; - if (!originalGroup || _typeof(originalGroup) != 'object') { + if (!originalGroup || typeof originalGroup != 'object') { originalGroup = { name: originalGroup }; @@ -1155,12 +1029,12 @@ _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) { group.revertClone = originalGroup.revertClone; options.group = group; }, - _hideGhostForTarget = function _hideGhostForTarget() { + _hideGhostForTarget = function () { if (!supportCssPointerEvents && ghostEl) { css(ghostEl, 'display', 'none'); } }, - _unhideGhostForTarget = function _unhideGhostForTarget() { + _unhideGhostForTarget = function () { if (!supportCssPointerEvents && ghostEl) { css(ghostEl, 'display', ''); } @@ -1179,17 +1053,17 @@ if (documentExists && !ChromeForAndroid) { }, true); } -var nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) { +let nearestEmptyInsertDetectEvent = function (evt) { if (dragEl) { evt = evt.touches ? evt.touches[0] : evt; - var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY); + let nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY); if (nearest) { // Create imitation event - var event = {}; + let event = {}; - for (var i in evt) { + for (let i in evt) { if (evt.hasOwnProperty(i)) { event[i] = evt[i]; } @@ -1204,7 +1078,7 @@ var nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) } }; -var _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) { +let _checkOutsideTargetEl = function (evt) { if (dragEl) { dragEl.parentNode[expando]._isOutsideThisEl(evt.target); } @@ -1218,15 +1092,20 @@ var _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) { function Sortable(el, options) { if (!(el && el.nodeType && el.nodeType === 1)) { - throw "Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(el)); + throw `Sortable: \`el\` must be an HTMLElement, not ${{}.toString.call(el)}`; } this.el = el; // root element - this.options = options = _extends({}, options); // Export instance + this.options = options = _extends({}, options); + + if (this.options.fallbackOnBody) { + this.options.getFallbackParent = () => document.body; + } // Export instance + el[expando] = this; - var defaults = { + let defaults = { group: null, sort: true, disabled: false, @@ -1240,7 +1119,7 @@ function Sortable(el, options) { invertedSwapThreshold: null, // will be set to same as swapThreshold if default removeCloneOnHide: true, - direction: function direction() { + direction: function () { return _detectDirection(el, this.options); }, ghostClass: 'sortable-ghost', @@ -1251,7 +1130,7 @@ function Sortable(el, options) { preventOnFilter: true, animation: 0, easing: null, - setData: function setData(dataTransfer, dragEl) { + setData: function (dataTransfer, dragEl) { dataTransfer.setData('Text', dragEl.textContent); }, dropBubble: false, @@ -1262,7 +1141,9 @@ function Sortable(el, options) { touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1, forceFallback: false, fallbackClass: 'sortable-fallback', + // @obsolete use `getFallbackParent: () => (document.body)` fallbackOnBody: false, + getFallbackParent: null, fallbackTolerance: 0, fallbackOffset: { x: 0, @@ -1273,14 +1154,14 @@ function Sortable(el, options) { }; PluginManager.initializePlugins(this, el, defaults); // Set default options - for (var name in defaults) { + for (let name in defaults) { !(name in options) && (options[name] = defaults[name]); } _prepareGroup(options); // Bind all private methods - for (var fn in this) { + for (let fn in this) { if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { this[fn] = this[fn].bind(this); } @@ -1318,20 +1199,20 @@ Sortable.prototype = /** @lends Sortable.prototype */ { constructor: Sortable, - _isOutsideThisEl: function _isOutsideThisEl(target) { + _isOutsideThisEl: function (target) { if (!this.el.contains(target) && target !== this.el) { lastTarget = null; } }, - _getDirection: function _getDirection(evt, target) { + _getDirection: function (evt, target) { return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction; }, - _onTapStart: function _onTapStart( + _onTapStart: function ( /** Event|TouchEvent */ evt) { if (!evt.cancelable) return; - var _this = this, + let _this = this, el = this.el, options = this.options, preventOnFilter = options.preventOnFilter, @@ -1389,7 +1270,7 @@ Sortable.prototype = }); pluginEvent('filter', _this, { - evt: evt + evt }); preventOnFilter && evt.cancelable && evt.preventDefault(); return; // cancel dnd @@ -1409,7 +1290,7 @@ Sortable.prototype = }); pluginEvent('filter', _this, { - evt: evt + evt }); return true; } @@ -1428,21 +1309,21 @@ Sortable.prototype = this._prepareDragStart(evt, touch, target); }, - _prepareDragStart: function _prepareDragStart( + _prepareDragStart: function ( /** Event */ evt, /** Touch */ touch, /** HTMLElement */ target) { - var _this = this, + let _this = this, el = _this.el, options = _this.options, ownerDocument = el.ownerDocument, dragStartFn; if (target && !dragEl && target.parentNode === el) { - var dragRect = getRect(target); + let dragRect = getRect(target); rootEl = el; dragEl = target; parentEl = dragEl.parentNode; @@ -1461,9 +1342,9 @@ Sortable.prototype = this._lastY = (touch || evt).clientY; dragEl.style['will-change'] = 'all'; - dragStartFn = function dragStartFn() { + dragStartFn = function () { pluginEvent('delayEnded', _this, { - evt: evt + evt }); if (Sortable.eventCanceled) { @@ -1511,7 +1392,7 @@ Sortable.prototype = } pluginEvent('delayStart', this, { - evt: evt + evt }); // Delay is impossible for native DnD in Edge or IE if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) { @@ -1536,23 +1417,23 @@ Sortable.prototype = } } }, - _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( + _delayedDragTouchMoveHandler: function ( /** TouchEvent|PointerEvent **/ e) { - var touch = e.touches ? e.touches[0] : e; + let touch = e.touches ? e.touches[0] : e; if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) { this._disableDelayedDrag(); } }, - _disableDelayedDrag: function _disableDelayedDrag() { + _disableDelayedDrag: function () { dragEl && _disableDraggable(dragEl); clearTimeout(this._dragStartTimer); this._disableDelayedDragEvents(); }, - _disableDelayedDragEvents: function _disableDelayedDragEvents() { - var ownerDocument = this.el.ownerDocument; + _disableDelayedDragEvents: function () { + let ownerDocument = this.el.ownerDocument; off(ownerDocument, 'mouseup', this._disableDelayedDrag); off(ownerDocument, 'touchend', this._disableDelayedDrag); off(ownerDocument, 'touchcancel', this._disableDelayedDrag); @@ -1560,7 +1441,7 @@ Sortable.prototype = off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler); off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler); }, - _triggerDragStart: function _triggerDragStart( + _triggerDragStart: function ( /** Event */ evt, /** Touch */ @@ -1591,20 +1472,20 @@ Sortable.prototype = } } catch (err) {} }, - _dragStarted: function _dragStarted(fallback, evt) { + _dragStarted: function (fallback, evt) { awaitingDragStarted = false; if (rootEl && dragEl) { pluginEvent('dragStarted', this, { - evt: evt + evt }); if (this.nativeDraggable) { on(document, 'dragover', _checkOutsideTargetEl); } - var options = this.options; // Apply effect + let options = this.options; // Apply effect !fallback && toggleClass(dragEl, options.dragClass, false); toggleClass(dragEl, options.ghostClass, true); @@ -1620,15 +1501,15 @@ Sortable.prototype = this._nulling(); } }, - _emulateDragOver: function _emulateDragOver() { + _emulateDragOver: function () { if (touchEvt) { this._lastX = touchEvt.clientX; this._lastY = touchEvt.clientY; _hideGhostForTarget(); - var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY); - var parent = target; + let target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY); + let parent = target; while (target && target.shadowRoot) { target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY); @@ -1641,7 +1522,7 @@ Sortable.prototype = if (parent) { do { if (parent[expando]) { - var inserted = void 0; + let inserted; inserted = parent[expando]._onDragOver({ clientX: touchEvt.clientX, clientY: touchEvt.clientY, @@ -1663,11 +1544,11 @@ Sortable.prototype = _unhideGhostForTarget(); } }, - _onTouchMove: function _onTouchMove( + _onTouchMove: function ( /**TouchEvent*/ evt) { if (tapEvt) { - var options = this.options, + let options = this.options, fallbackTolerance = options.fallbackTolerance, fallbackOffset = options.fallbackOffset, touch = evt.touches ? evt.touches[0] : evt, @@ -1701,7 +1582,7 @@ Sortable.prototype = }; } - var cssMatrix = "matrix(".concat(ghostMatrix.a, ",").concat(ghostMatrix.b, ",").concat(ghostMatrix.c, ",").concat(ghostMatrix.d, ",").concat(ghostMatrix.e, ",").concat(ghostMatrix.f, ")"); + let cssMatrix = `matrix(${ghostMatrix.a},${ghostMatrix.b},${ghostMatrix.c},${ghostMatrix.d},${ghostMatrix.e},${ghostMatrix.f})`; css(ghostEl, 'webkitTransform', cssMatrix); css(ghostEl, 'mozTransform', cssMatrix); css(ghostEl, 'msTransform', cssMatrix); @@ -1714,11 +1595,12 @@ Sortable.prototype = evt.cancelable && evt.preventDefault(); } }, - _appendGhost: function _appendGhost() { + _appendGhost: function () { // Bug if using scale(): https://stackoverflow.com/questions/2637058 // Not being adjusted for if (!ghostEl) { - var container = this.options.fallbackOnBody ? document.body : rootEl, + let fallbackParent = typeof this.options.getFallbackParent === 'function' ? this.options.getFallbackParent() : null; + let container = fallbackParent ?? rootEl, rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container), options = this.options; // Position absolutely @@ -1763,17 +1645,17 @@ Sortable.prototype = css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%'); } }, - _onDragStart: function _onDragStart( + _onDragStart: function ( /**Event*/ evt, /**boolean*/ fallback) { - var _this = this; + let _this = this; - var dataTransfer = evt.dataTransfer; - var options = _this.options; + let dataTransfer = evt.dataTransfer; + let options = _this.options; pluginEvent('dragStart', this, { - evt: evt + evt }); if (Sortable.eventCanceled) { @@ -1843,10 +1725,10 @@ Sortable.prototype = } }, // Returns true - if no further action is needed (either inserted or another condition) - _onDragOver: function _onDragOver( + _onDragOver: function ( /**Event*/ evt) { - var el = this.el, + let el = this.el, target = evt.target, dragRect, targetRect, @@ -1864,22 +1746,25 @@ Sortable.prototype = if (_silent) return; function dragOverEvent(name, extra) { - pluginEvent(name, _this, _objectSpread2({ - evt: evt, - isOwner: isOwner, + pluginEvent(name, _this, { + evt, + isOwner, axis: vertical ? 'vertical' : 'horizontal', - revert: revert, - dragRect: dragRect, - targetRect: targetRect, - canSort: canSort, - fromSortable: fromSortable, - target: target, - completed: completed, - onMove: function onMove(target, after) { - return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after); + revert, + dragRect, + targetRect, + canSort, + fromSortable, + target, + completed, + + onMove(target, after) { + return onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after); }, - changed: changed - }, extra)); + + changed, + ...extra + }); } // Capture animation state @@ -1896,7 +1781,7 @@ Sortable.prototype = function completed(insertion) { dragOverEvent('dragOverCompleted', { - insertion: insertion + insertion }); if (insertion) { @@ -1961,8 +1846,8 @@ Sortable.prototype = sortable: _this, name: 'change', toEl: el, - newIndex: newIndex, - newDraggableIndex: newDraggableIndex, + newIndex, + newDraggableIndex, originalEvent: evt }); } @@ -2008,7 +1893,7 @@ Sortable.prototype = return completed(true); } - var elLastChild = lastChild(el, options.draggable); + let elLastChild = lastChild(el, options.draggable); if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) { // Insert to end of list @@ -2026,7 +1911,7 @@ Sortable.prototype = targetRect = getRect(target); } - if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) { + if (onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) { capture(); if (elLastChild && elLastChild.nextSibling) { @@ -2043,7 +1928,7 @@ Sortable.prototype = } } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) { // Insert to start of list - var firstChild = getChild(el, 0, options, true); + let firstChild = getChild(el, 0, options, true); if (firstChild === dragEl) { return completed(false); @@ -2052,7 +1937,7 @@ Sortable.prototype = target = firstChild; targetRect = getRect(target); - if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) { + if (onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) { capture(); el.insertBefore(dragEl, firstChild); parentEl = el; // actualization @@ -2062,7 +1947,7 @@ Sortable.prototype = } } else if (target.parentNode === el) { targetRect = getRect(target); - var direction = 0, + let direction = 0, targetBeforeFirstSwap, differentLevel = dragEl.parentNode !== el, differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical), @@ -2077,11 +1962,11 @@ Sortable.prototype = } direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target); - var sibling; + let sibling; if (direction !== 0) { // Check if target is beside dragEl in respective direction (ignoring hidden elements) - var dragIndex = index(dragEl); + let dragIndex = index(dragEl); do { dragIndex -= direction; @@ -2096,11 +1981,10 @@ Sortable.prototype = lastTarget = target; lastDirection = direction; - var nextSibling = target.nextElementSibling, + let nextSibling = target.nextElementSibling, after = false; after = direction === 1; - - var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after); + let moveVector = onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after); if (moveVector !== false) { if (moveVector === 1 || moveVector === -1) { @@ -2142,7 +2026,7 @@ Sortable.prototype = return false; }, _ignoreWhileAnimating: null, - _offMoveEvents: function _offMoveEvents() { + _offMoveEvents: function () { off(document, 'mousemove', this._onTouchMove); off(document, 'touchmove', this._onTouchMove); off(document, 'pointermove', this._onTouchMove); @@ -2150,24 +2034,24 @@ Sortable.prototype = off(document, 'mousemove', nearestEmptyInsertDetectEvent); off(document, 'touchmove', nearestEmptyInsertDetectEvent); }, - _offUpEvents: function _offUpEvents() { - var ownerDocument = this.el.ownerDocument; + _offUpEvents: function () { + let ownerDocument = this.el.ownerDocument; off(ownerDocument, 'mouseup', this._onDrop); off(ownerDocument, 'touchend', this._onDrop); off(ownerDocument, 'pointerup', this._onDrop); off(ownerDocument, 'touchcancel', this._onDrop); off(document, 'selectstart', this); }, - _onDrop: function _onDrop( + _onDrop: function ( /**Event*/ evt) { - var el = this.el, + let el = this.el, options = this.options; // Get the index of the dragged element within its parent newIndex = index(dragEl); newDraggableIndex = index(dragEl, options.draggable); pluginEvent('drop', this, { - evt: evt + evt }); parentEl = dragEl && dragEl.parentNode; // Get again after plugin event @@ -2324,7 +2208,7 @@ Sortable.prototype = this._nulling(); }, - _nulling: function _nulling() { + _nulling: function () { pluginEvent('nulling', this); rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null; savedInputChecked.forEach(function (el) { @@ -2332,7 +2216,7 @@ Sortable.prototype = }); savedInputChecked.length = lastDx = lastDy = 0; }, - handleEvent: function handleEvent( + handleEvent: function ( /**Event*/ evt) { switch (evt.type) { @@ -2362,8 +2246,8 @@ Sortable.prototype = * Serializes the item into an array of string. * @returns {String[]} */ - toArray: function toArray() { - var order = [], + toArray: function () { + let order = [], el, children = this.el.children, i = 0, @@ -2385,11 +2269,11 @@ Sortable.prototype = * Sorts the elements according to the array. * @param {String[]} order order of the items */ - sort: function sort(order, useAnimation) { - var items = {}, + sort: function (order, useAnimation) { + let items = {}, rootEl = this.el; this.toArray().forEach(function (id, i) { - var el = rootEl.children[i]; + let el = rootEl.children[i]; if (closest(el, this.options.draggable, rootEl, false)) { items[id] = el; @@ -2408,8 +2292,8 @@ Sortable.prototype = /** * Save the current sorting */ - save: function save() { - var store = this.options.store; + save: function () { + let store = this.options.store; store && store.set && store.set(this); }, @@ -2419,7 +2303,7 @@ Sortable.prototype = * @param {String} [selector] default: `options.draggable` * @returns {HTMLElement|null} */ - closest: function closest$1(el, selector) { + closest: function (el, selector) { return closest(el, selector || this.options.draggable, this.el, false); }, @@ -2429,13 +2313,13 @@ Sortable.prototype = * @param {*} [value] * @returns {*} */ - option: function option(name, value) { - var options = this.options; + option: function (name, value) { + let options = this.options; if (value === void 0) { return options[name]; } else { - var modifiedValue = PluginManager.modifyOption(this, name, value); + let modifiedValue = PluginManager.modifyOption(this, name, value); if (typeof modifiedValue !== 'undefined') { options[name] = modifiedValue; @@ -2452,9 +2336,9 @@ Sortable.prototype = /** * Destroy */ - destroy: function destroy() { + destroy: function () { pluginEvent('destroy', this); - var el = this.el; + let el = this.el; el[expando] = null; off(el, 'mousedown', this._onTapStart); off(el, 'touchstart', this._onTapStart); @@ -2477,7 +2361,7 @@ Sortable.prototype = sortables.splice(sortables.indexOf(this.el), 1); this.el = el = null; }, - _hideClone: function _hideClone() { + _hideClone: function () { if (!cloneHidden) { pluginEvent('hideClone', this); if (Sortable.eventCanceled) return; @@ -2490,7 +2374,7 @@ Sortable.prototype = cloneHidden = true; } }, - _showClone: function _showClone(putSortable) { + _showClone: function (putSortable) { if (putSortable.lastPutMode !== 'clone') { this._hideClone(); @@ -2529,8 +2413,8 @@ evt) { evt.cancelable && evt.preventDefault(); } -function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) { - var evt, +function onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) { + let evt, sortable = fromEl[expando], onMoveFn = sortable.options.onMove, retVal; // Support for new CustomEvent feature @@ -2571,19 +2455,19 @@ function _unsilent() { } function _ghostIsFirst(evt, vertical, sortable) { - var rect = getRect(getChild(sortable.el, 0, sortable.options, true)); - var spacer = 10; + let rect = getRect(getChild(sortable.el, 0, sortable.options, true)); + const spacer = 10; return vertical ? evt.clientX < rect.left - spacer || evt.clientY < rect.top && evt.clientX < rect.right : evt.clientY < rect.top - spacer || evt.clientY < rect.bottom && evt.clientX < rect.left; } function _ghostIsLast(evt, vertical, sortable) { - var rect = getRect(lastChild(sortable.el, sortable.options.draggable)); - var spacer = 10; + let rect = getRect(lastChild(sortable.el, sortable.options.draggable)); + const spacer = 10; return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer; } function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) { - var mouseOnAxis = vertical ? evt.clientY : evt.clientX, + let mouseOnAxis = vertical ? evt.clientY : evt.clientX, targetLength = vertical ? targetRect.height : targetRect.width, targetS1 = vertical ? targetRect.top : targetRect.left, targetS2 = vertical ? targetRect.bottom : targetRect.right, @@ -2651,7 +2535,7 @@ function _getInsertDirection(target) { function _generateId(el) { - var str = el.tagName + el.className + el.src + el.href + el.textContent, + let str = el.tagName + el.className + el.src + el.href + el.textContent, i = str.length, sum = 0; @@ -2664,11 +2548,11 @@ function _generateId(el) { function _saveInputCheckedState(root) { savedInputChecked.length = 0; - var inputs = root.getElementsByTagName('input'); - var idx = inputs.length; + let inputs = root.getElementsByTagName('input'); + let idx = inputs.length; while (idx--) { - var el = inputs[idx]; + let el = inputs[idx]; el.checked && savedInputChecked.push(el); } } @@ -2696,7 +2580,7 @@ Sortable.utils = { off: off, css: css, find: find, - is: function is(el, selector) { + is: function (el, selector) { return !!closest(el, selector, el, false); }, extend: extend, @@ -2725,18 +2609,16 @@ Sortable.get = function (element) { */ -Sortable.mount = function () { - for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) { - plugins[_key] = arguments[_key]; - } - +Sortable.mount = function (...plugins) { if (plugins[0].constructor === Array) plugins = plugins[0]; - plugins.forEach(function (plugin) { + plugins.forEach(plugin => { if (!plugin.prototype || !plugin.prototype.constructor) { - throw "Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(plugin)); + throw `Sortable: Mounted plugin must be a constructor function, not ${{}.toString.call(plugin)}`; } - if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils); + if (plugin.utils) Sortable.utils = { ...Sortable.utils, + ...plugin.utils + }; PluginManager.mount(plugin); }); }; @@ -2754,7 +2636,7 @@ Sortable.create = function (el, options) { Sortable.version = version; -var autoScrolls = [], +let autoScrolls = [], scrollEl, scrollRootEl, scrolling = false, @@ -2773,7 +2655,7 @@ function AutoScrollPlugin() { bubbleScroll: true }; // Bind all private methods - for (var fn in this) { + for (let fn in this) { if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { this[fn] = this[fn].bind(this); } @@ -2781,9 +2663,9 @@ function AutoScrollPlugin() { } AutoScroll.prototype = { - dragStarted: function dragStarted(_ref) { - var originalEvent = _ref.originalEvent; - + dragStarted({ + originalEvent + }) { if (this.sortable.nativeDraggable) { on(document, 'dragover', this._handleAutoScroll); } else { @@ -2796,15 +2678,17 @@ function AutoScrollPlugin() { } } }, - dragOverCompleted: function dragOverCompleted(_ref2) { - var originalEvent = _ref2.originalEvent; + dragOverCompleted({ + originalEvent + }) { // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached) if (!this.options.dragOverBubble && !originalEvent.rootEl) { this._handleAutoScroll(originalEvent); } }, - drop: function drop() { + + drop() { if (this.sortable.nativeDraggable) { off(document, 'dragover', this._handleAutoScroll); } else { @@ -2817,19 +2701,20 @@ function AutoScrollPlugin() { clearAutoScrolls(); cancelThrottle(); }, - nulling: function nulling() { + + nulling() { touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null; autoScrolls.length = 0; }, - _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) { + + _handleFallbackAutoScroll(evt) { this._handleAutoScroll(evt, true); }, - _handleAutoScroll: function _handleAutoScroll(evt, fallback) { - var _this = this; - var x = (evt.touches ? evt.touches[0] : evt).clientX, - y = (evt.touches ? evt.touches[0] : evt).clientY, - elem = document.elementFromPoint(x, y); + _handleAutoScroll(evt, fallback) { + const x = (evt.touches ? evt.touches[0] : evt).clientX, + y = (evt.touches ? evt.touches[0] : evt).clientY, + elem = document.elementFromPoint(x, y); touchEvt$1 = evt; // IE does not seem to have native autoscroll, // Edge's autoscroll seems too conditional, // MACOS Safari does not have autoscroll, @@ -2838,20 +2723,20 @@ function AutoScrollPlugin() { if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) { autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change - var ogElemScroller = getParentAutoScrollElement(elem, true); + let ogElemScroller = getParentAutoScrollElement(elem, true); if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) { pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour - pointerElemChangedInterval = setInterval(function () { - var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true); + pointerElemChangedInterval = setInterval(() => { + let newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true); if (newElem !== ogElemScroller) { ogElemScroller = newElem; clearAutoScrolls(); } - autoScroll(evt, _this.options, newElem, fallback); + autoScroll(evt, this.options, newElem, fallback); }, 10); lastAutoScrollX = x; lastAutoScrollY = y; @@ -2866,6 +2751,7 @@ function AutoScrollPlugin() { autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false); } } + }; return _extends(AutoScroll, { pluginName: 'scroll', @@ -2884,15 +2770,15 @@ function clearPointerElemChangedInterval() { clearInterval(pointerElemChangedInterval); } -var autoScroll = throttle(function (evt, options, rootEl, isFallback) { +const autoScroll = throttle(function (evt, options, rootEl, isFallback) { // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521 if (!options.scroll) return; - var x = (evt.touches ? evt.touches[0] : evt).clientX, - y = (evt.touches ? evt.touches[0] : evt).clientY, - sens = options.scrollSensitivity, - speed = options.scrollSpeed, - winScroller = getWindowScrollingElement(); - var scrollThisInstance = false, + const x = (evt.touches ? evt.touches[0] : evt).clientX, + y = (evt.touches ? evt.touches[0] : evt).clientY, + sens = options.scrollSensitivity, + speed = options.scrollSpeed, + winScroller = getWindowScrollingElement(); + let scrollThisInstance = false, scrollCustomFn; // New scroll root, set scrollEl if (scrollRootEl !== rootEl) { @@ -2906,11 +2792,11 @@ var autoScroll = throttle(function (evt, options, rootEl, isFallback) { } } - var layersOut = 0; - var currentParent = scrollEl; + let layersOut = 0; + let currentParent = scrollEl; do { - var el = currentParent, + let el = currentParent, rect = getRect(el), top = rect.top, bottom = rect.bottom, @@ -2918,8 +2804,8 @@ var autoScroll = throttle(function (evt, options, rootEl, isFallback) { right = rect.right, width = rect.width, height = rect.height, - canScrollX = void 0, - canScrollY = void 0, + canScrollX, + canScrollY, scrollWidth = el.scrollWidth, scrollHeight = el.scrollHeight, elCSS = css(el), @@ -2934,11 +2820,11 @@ var autoScroll = throttle(function (evt, options, rootEl, isFallback) { canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll'); } - var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX); - var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY); + let vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX); + let vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY); if (!autoScrolls[layersOut]) { - for (var i = 0; i <= layersOut; i++) { + for (let i = 0; i <= layersOut; i++) { if (!autoScrolls[i]) { autoScrolls[i] = {}; } @@ -2962,8 +2848,8 @@ var autoScroll = throttle(function (evt, options, rootEl, isFallback) { } - var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0; - var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0; + let scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0; + let scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0; if (typeof scrollCustomFn === 'function') { if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') { @@ -2984,26 +2870,27 @@ var autoScroll = throttle(function (evt, options, rootEl, isFallback) { scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not }, 30); -var drop = function drop(_ref) { - var originalEvent = _ref.originalEvent, - putSortable = _ref.putSortable, - dragEl = _ref.dragEl, - activeSortable = _ref.activeSortable, - dispatchSortableEvent = _ref.dispatchSortableEvent, - hideGhostForTarget = _ref.hideGhostForTarget, - unhideGhostForTarget = _ref.unhideGhostForTarget; +const drop = function ({ + originalEvent, + putSortable, + dragEl, + activeSortable, + dispatchSortableEvent, + hideGhostForTarget, + unhideGhostForTarget +}) { if (!originalEvent) return; - var toSortable = putSortable || activeSortable; + let toSortable = putSortable || activeSortable; hideGhostForTarget(); - var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent; - var target = document.elementFromPoint(touch.clientX, touch.clientY); + let touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent; + let target = document.elementFromPoint(touch.clientX, touch.clientY); unhideGhostForTarget(); if (toSortable && !toSortable.el.contains(target)) { dispatchSortableEvent('spill'); this.onSpill({ - dragEl: dragEl, - putSortable: putSortable + dragEl, + putSortable }); } }; @@ -3012,20 +2899,24 @@ function Revert() {} Revert.prototype = { startIndex: null, - dragStart: function dragStart(_ref2) { - var oldDraggableIndex = _ref2.oldDraggableIndex; + + dragStart({ + oldDraggableIndex + }) { this.startIndex = oldDraggableIndex; }, - onSpill: function onSpill(_ref3) { - var dragEl = _ref3.dragEl, - putSortable = _ref3.putSortable; + + onSpill({ + dragEl, + putSortable + }) { this.sortable.captureAnimationState(); if (putSortable) { putSortable.captureAnimationState(); } - var nextSibling = getChild(this.sortable.el, this.startIndex, this.options); + let nextSibling = getChild(this.sortable.el, this.startIndex, this.options); if (nextSibling) { this.sortable.el.insertBefore(dragEl, nextSibling); @@ -3039,7 +2930,8 @@ Revert.prototype = { putSortable.animateAll(); } }, - drop: drop + + drop }; _extends(Revert, { @@ -3049,22 +2941,24 @@ _extends(Revert, { function Remove() {} Remove.prototype = { - onSpill: function onSpill(_ref4) { - var dragEl = _ref4.dragEl, - putSortable = _ref4.putSortable; - var parentSortable = putSortable || this.sortable; + onSpill({ + dragEl, + putSortable + }) { + const parentSortable = putSortable || this.sortable; parentSortable.captureAnimationState(); dragEl.parentNode && dragEl.parentNode.removeChild(dragEl); parentSortable.animateAll(); }, - drop: drop + + drop }; _extends(Remove, { pluginName: 'removeOnSpill' }); -var lastSwapEl; +let lastSwapEl; function SwapPlugin() { function Swap() { @@ -3074,23 +2968,26 @@ function SwapPlugin() { } Swap.prototype = { - dragStart: function dragStart(_ref) { - var dragEl = _ref.dragEl; + dragStart({ + dragEl + }) { lastSwapEl = dragEl; }, - dragOverValid: function dragOverValid(_ref2) { - var completed = _ref2.completed, - target = _ref2.target, - onMove = _ref2.onMove, - activeSortable = _ref2.activeSortable, - changed = _ref2.changed, - cancel = _ref2.cancel; + + dragOverValid({ + completed, + target, + onMove, + activeSortable, + changed, + cancel + }) { if (!activeSortable.options.swap) return; - var el = this.sortable.el, + let el = this.sortable.el, options = this.options; if (target && target !== el) { - var prevSwapEl = lastSwapEl; + let prevSwapEl = lastSwapEl; if (onMove(target) !== false) { toggleClass(target, options.swapClass, true); @@ -3108,12 +3005,14 @@ function SwapPlugin() { completed(true); cancel(); }, - drop: function drop(_ref3) { - var activeSortable = _ref3.activeSortable, - putSortable = _ref3.putSortable, - dragEl = _ref3.dragEl; - var toSortable = putSortable || this.sortable; - var options = this.options; + + drop({ + activeSortable, + putSortable, + dragEl + }) { + let toSortable = putSortable || this.sortable; + let options = this.options; lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false); if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) { @@ -3126,22 +3025,26 @@ function SwapPlugin() { } } }, - nulling: function nulling() { + + nulling() { lastSwapEl = null; } + }; return _extends(Swap, { pluginName: 'swap', - eventProperties: function eventProperties() { + + eventProperties() { return { swapItem: lastSwapEl }; } + }); } function swapNodes(n1, n2) { - var p1 = n1.parentNode, + let p1 = n1.parentNode, p2 = n2.parentNode, i1, i2; @@ -3157,7 +3060,7 @@ function swapNodes(n1, n2) { p2.insertBefore(n1, p2.children[i2]); } -var multiDragElements = [], +let multiDragElements = [], multiDragClones = [], lastMultiDragSelect, // for selection with modifier key down (SHIFT) @@ -3174,7 +3077,7 @@ dragStarted = false, function MultiDragPlugin() { function MultiDrag(sortable) { // Bind all private methods - for (var fn in this) { + for (let fn in this) { if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { this[fn] = this[fn].bind(this); } @@ -3195,11 +3098,12 @@ function MultiDragPlugin() { selectedClass: 'sortable-selected', multiDragKey: null, avoidImplicitDeselect: false, - setData: function setData(dataTransfer, dragEl) { - var data = ''; + + setData(dataTransfer, dragEl) { + let data = ''; if (multiDragElements.length && multiDragSortable === sortable) { - multiDragElements.forEach(function (multiDragElement, i) { + multiDragElements.forEach((multiDragElement, i) => { data += (!i ? '' : ', ') + multiDragElement.textContent; }); } else { @@ -3208,25 +3112,31 @@ function MultiDragPlugin() { dataTransfer.setData('Text', data); } + }; } MultiDrag.prototype = { multiDragKeyDown: false, isMultiDrag: false, - delayStartGlobal: function delayStartGlobal(_ref) { - var dragged = _ref.dragEl; + + delayStartGlobal({ + dragEl: dragged + }) { dragEl$1 = dragged; }, - delayEnded: function delayEnded() { + + delayEnded() { this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1); }, - setupClone: function setupClone(_ref2) { - var sortable = _ref2.sortable, - cancel = _ref2.cancel; + + setupClone({ + sortable, + cancel + }) { if (!this.isMultiDrag) return; - for (var i = 0; i < multiDragElements.length; i++) { + for (let i = 0; i < multiDragElements.length; i++) { multiDragClones.push(clone(multiDragElements[i])); multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex; multiDragClones[i].draggable = false; @@ -3239,11 +3149,13 @@ function MultiDragPlugin() { cancel(); }, - clone: function clone(_ref3) { - var sortable = _ref3.sortable, - rootEl = _ref3.rootEl, - dispatchSortableEvent = _ref3.dispatchSortableEvent, - cancel = _ref3.cancel; + + clone({ + sortable, + rootEl, + dispatchSortableEvent, + cancel + }) { if (!this.isMultiDrag) return; if (!this.options.removeCloneOnHide) { @@ -3254,30 +3166,32 @@ function MultiDragPlugin() { } } }, - showClone: function showClone(_ref4) { - var cloneNowShown = _ref4.cloneNowShown, - rootEl = _ref4.rootEl, - cancel = _ref4.cancel; + + showClone({ + cloneNowShown, + rootEl, + cancel + }) { if (!this.isMultiDrag) return; insertMultiDragClones(false, rootEl); - multiDragClones.forEach(function (clone) { + multiDragClones.forEach(clone => { css(clone, 'display', ''); }); cloneNowShown(); clonesHidden = false; cancel(); }, - hideClone: function hideClone(_ref5) { - var _this = this; - var sortable = _ref5.sortable, - cloneNowHidden = _ref5.cloneNowHidden, - cancel = _ref5.cancel; + hideClone({ + sortable, + cloneNowHidden, + cancel + }) { if (!this.isMultiDrag) return; - multiDragClones.forEach(function (clone) { + multiDragClones.forEach(clone => { css(clone, 'display', 'none'); - if (_this.options.removeCloneOnHide && clone.parentNode) { + if (this.options.removeCloneOnHide && clone.parentNode) { clone.parentNode.removeChild(clone); } }); @@ -3285,14 +3199,15 @@ function MultiDragPlugin() { clonesHidden = true; cancel(); }, - dragStartGlobal: function dragStartGlobal(_ref6) { - var sortable = _ref6.sortable; + dragStartGlobal({ + sortable + }) { if (!this.isMultiDrag && multiDragSortable) { multiDragSortable.multiDrag._deselectMultiDrag(); } - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { multiDragElement.sortableIndex = index(multiDragElement); }); // Sort multi-drag elements @@ -3301,10 +3216,10 @@ function MultiDragPlugin() { }); dragStarted = true; }, - dragStarted: function dragStarted(_ref7) { - var _this2 = this; - var sortable = _ref7.sortable; + dragStarted({ + sortable + }) { if (!this.isMultiDrag) return; if (this.options.sort) { @@ -3317,12 +3232,12 @@ function MultiDragPlugin() { sortable.captureAnimationState(); if (this.options.animation) { - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { if (multiDragElement === dragEl$1) return; css(multiDragElement, 'position', 'absolute'); }); - var dragRect = getRect(dragEl$1, false, true, true); - multiDragElements.forEach(function (multiDragElement) { + let dragRect = getRect(dragEl$1, false, true, true); + multiDragElements.forEach(multiDragElement => { if (multiDragElement === dragEl$1) return; setRect(multiDragElement, dragRect); }); @@ -3331,41 +3246,43 @@ function MultiDragPlugin() { } } - sortable.animateAll(function () { + sortable.animateAll(() => { folding = false; initialFolding = false; - if (_this2.options.animation) { - multiDragElements.forEach(function (multiDragElement) { + if (this.options.animation) { + multiDragElements.forEach(multiDragElement => { unsetRect(multiDragElement); }); } // Remove all auxiliary multidrag items from el, if sorting enabled - if (_this2.options.sort) { + if (this.options.sort) { removeMultiDragElements(); } }); }, - dragOver: function dragOver(_ref8) { - var target = _ref8.target, - completed = _ref8.completed, - cancel = _ref8.cancel; + dragOver({ + target, + completed, + cancel + }) { if (folding && ~multiDragElements.indexOf(target)) { completed(false); cancel(); } }, - revert: function revert(_ref9) { - var fromSortable = _ref9.fromSortable, - rootEl = _ref9.rootEl, - sortable = _ref9.sortable, - dragRect = _ref9.dragRect; + revert({ + fromSortable, + rootEl, + sortable, + dragRect + }) { if (multiDragElements.length > 1) { // Setup unfold animation - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { sortable.addAnimationState({ target: multiDragElement, rect: folding ? getRect(multiDragElement) : dragRect @@ -3378,14 +3295,16 @@ function MultiDragPlugin() { insertMultiDragElements(!this.options.removeCloneOnHide, rootEl); } }, - dragOverCompleted: function dragOverCompleted(_ref10) { - var sortable = _ref10.sortable, - isOwner = _ref10.isOwner, - insertion = _ref10.insertion, - activeSortable = _ref10.activeSortable, - parentEl = _ref10.parentEl, - putSortable = _ref10.putSortable; - var options = this.options; + + dragOverCompleted({ + sortable, + isOwner, + insertion, + activeSortable, + parentEl, + putSortable + }) { + let options = this.options; if (insertion) { // Clones must be hidden before folding animation to capture dragRectAbsolute properly @@ -3397,8 +3316,8 @@ function MultiDragPlugin() { if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) { // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible - var dragRectAbsolute = getRect(dragEl$1, false, true, true); - multiDragElements.forEach(function (multiDragElement) { + let dragRectAbsolute = getRect(dragEl$1, false, true, true); + multiDragElements.forEach(multiDragElement => { if (multiDragElement === dragEl$1) return; setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted // while folding, and so that we can capture them again because old sortable will no longer be fromSortable @@ -3416,13 +3335,13 @@ function MultiDragPlugin() { } if (multiDragElements.length > 1) { - var clonesHiddenBefore = clonesHidden; + let clonesHiddenBefore = clonesHidden; activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) { - multiDragClones.forEach(function (clone) { + multiDragClones.forEach(clone => { activeSortable.addAnimationState({ target: clone, rect: clonesFromRect @@ -3437,38 +3356,43 @@ function MultiDragPlugin() { } } }, - dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) { - var dragRect = _ref11.dragRect, - isOwner = _ref11.isOwner, - activeSortable = _ref11.activeSortable; - multiDragElements.forEach(function (multiDragElement) { + + dragOverAnimationCapture({ + dragRect, + isOwner, + activeSortable + }) { + multiDragElements.forEach(multiDragElement => { multiDragElement.thisAnimationDuration = null; }); if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) { clonesFromRect = _extends({}, dragRect); - var dragMatrix = matrix(dragEl$1, true); + let dragMatrix = matrix(dragEl$1, true); clonesFromRect.top -= dragMatrix.f; clonesFromRect.left -= dragMatrix.e; } }, - dragOverAnimationComplete: function dragOverAnimationComplete() { + + dragOverAnimationComplete() { if (folding) { folding = false; removeMultiDragElements(); } }, - drop: function drop(_ref12) { - var evt = _ref12.originalEvent, - rootEl = _ref12.rootEl, - parentEl = _ref12.parentEl, - sortable = _ref12.sortable, - dispatchSortableEvent = _ref12.dispatchSortableEvent, - oldIndex = _ref12.oldIndex, - putSortable = _ref12.putSortable; - var toSortable = putSortable || this.sortable; + + drop({ + originalEvent: evt, + rootEl, + parentEl, + sortable, + dispatchSortableEvent, + oldIndex, + putSortable + }) { + let toSortable = putSortable || this.sortable; if (!evt) return; - var options = this.options, + let options = this.options, children = parentEl.children; // Multi-drag selection if (!dragStarted) { @@ -3481,21 +3405,21 @@ function MultiDragPlugin() { if (!~multiDragElements.indexOf(dragEl$1)) { multiDragElements.push(dragEl$1); dispatchEvent({ - sortable: sortable, - rootEl: rootEl, + sortable, + rootEl, name: 'select', targetEl: dragEl$1, originalEvent: evt }); // Modifier activated, select from last to dragEl if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) { - var lastIndex = index(lastMultiDragSelect), + let lastIndex = index(lastMultiDragSelect), currentIndex = index(dragEl$1); if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) { // Must include lastMultiDragSelect (select it), in case modified selection from no selection // (but previous selection existed) - var n, i; + let n, i; if (currentIndex > lastIndex) { i = lastIndex; @@ -3510,8 +3434,8 @@ function MultiDragPlugin() { toggleClass(children[i], options.selectedClass, true); multiDragElements.push(children[i]); dispatchEvent({ - sortable: sortable, - rootEl: rootEl, + sortable, + rootEl, name: 'select', targetEl: children[i], originalEvent: evt @@ -3527,8 +3451,8 @@ function MultiDragPlugin() { multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1); lastMultiDragSelect = null; dispatchEvent({ - sortable: sortable, - rootEl: rootEl, + sortable, + rootEl, name: 'deselect', targetEl: dragEl$1, originalEvent: evt @@ -3541,7 +3465,7 @@ function MultiDragPlugin() { folding = false; // Do not "unfold" after around dragEl if reverted if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) { - var dragRect = getRect(dragEl$1), + let dragRect = getRect(dragEl$1), multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')'); if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null; toSortable.captureAnimationState(); @@ -3549,11 +3473,11 @@ function MultiDragPlugin() { if (!initialFolding) { if (options.animation) { dragEl$1.fromRect = dragRect; - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { multiDragElement.thisAnimationDuration = null; if (multiDragElement !== dragEl$1) { - var rect = folding ? getRect(multiDragElement) : dragRect; + let rect = folding ? getRect(multiDragElement) : dragRect; multiDragElement.fromRect = rect; // Prepare unfold animation toSortable.addAnimationState({ @@ -3567,7 +3491,7 @@ function MultiDragPlugin() { removeMultiDragElements(); - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { if (children[multiDragIndex]) { parentEl.insertBefore(multiDragElement, children[multiDragIndex]); } else { @@ -3580,8 +3504,8 @@ function MultiDragPlugin() { // must be fired here as Sortable will not. if (oldIndex === index(dragEl$1)) { - var update = false; - multiDragElements.forEach(function (multiDragElement) { + let update = false; + multiDragElements.forEach(multiDragElement => { if (multiDragElement.sortableIndex !== index(multiDragElement)) { update = true; return; @@ -3595,7 +3519,7 @@ function MultiDragPlugin() { } // Must be done after capturing individual rects (scroll bar) - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { unsetRect(multiDragElement); }); toSortable.animateAll(); @@ -3606,16 +3530,18 @@ function MultiDragPlugin() { if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') { - multiDragClones.forEach(function (clone) { + multiDragClones.forEach(clone => { clone.parentNode && clone.parentNode.removeChild(clone); }); } }, - nullingGlobal: function nullingGlobal() { + + nullingGlobal() { this.isMultiDrag = dragStarted = false; multiDragClones.length = 0; }, - destroyGlobal: function destroyGlobal() { + + destroyGlobal() { this._deselectMultiDrag(); off(document, 'pointerup', this._deselectMultiDrag); @@ -3624,7 +3550,8 @@ function MultiDragPlugin() { off(document, 'keydown', this._checkKeyDown); off(document, 'keyup', this._checkKeyUp); }, - _deselectMultiDrag: function _deselectMultiDrag(evt) { + + _deselectMultiDrag(evt) { if (typeof dragStarted !== "undefined" && dragStarted) return; // Only deselect if selection is in this sortable if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable @@ -3634,7 +3561,7 @@ function MultiDragPlugin() { if (evt && evt.button !== 0) return; while (multiDragElements.length) { - var el = multiDragElements[0]; + let el = multiDragElements[0]; toggleClass(el, this.options.selectedClass, false); multiDragElements.shift(); dispatchEvent({ @@ -3646,16 +3573,19 @@ function MultiDragPlugin() { }); } }, - _checkKeyDown: function _checkKeyDown(evt) { + + _checkKeyDown(evt) { if (evt.key === this.options.multiDragKey) { this.multiDragKeyDown = true; } }, - _checkKeyUp: function _checkKeyUp(evt) { + + _checkKeyUp(evt) { if (evt.key === this.options.multiDragKey) { this.multiDragKeyDown = false; } } + }; return _extends(MultiDrag, { // Static methods & properties @@ -3665,8 +3595,8 @@ function MultiDragPlugin() { * Selects the provided multi-drag item * @param {HTMLElement} el The element to be selected */ - select: function select(el) { - var sortable = el.parentNode[expando]; + select(el) { + let sortable = el.parentNode[expando]; if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return; if (multiDragSortable && multiDragSortable !== sortable) { @@ -3683,49 +3613,50 @@ function MultiDragPlugin() { * Deselects the provided multi-drag item * @param {HTMLElement} el The element to be deselected */ - deselect: function deselect(el) { - var sortable = el.parentNode[expando], + deselect(el) { + let sortable = el.parentNode[expando], index = multiDragElements.indexOf(el); if (!sortable || !sortable.options.multiDrag || !~index) return; toggleClass(el, sortable.options.selectedClass, false); multiDragElements.splice(index, 1); } + }, - eventProperties: function eventProperties() { - var _this3 = this; - var oldIndicies = [], - newIndicies = []; - multiDragElements.forEach(function (multiDragElement) { + eventProperties() { + const oldIndicies = [], + newIndicies = []; + multiDragElements.forEach(multiDragElement => { oldIndicies.push({ - multiDragElement: multiDragElement, + multiDragElement, index: multiDragElement.sortableIndex }); // multiDragElements will already be sorted if folding - var newIndex; + let newIndex; if (folding && multiDragElement !== dragEl$1) { newIndex = -1; } else if (folding) { - newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')'); + newIndex = index(multiDragElement, ':not(.' + this.options.selectedClass + ')'); } else { newIndex = index(multiDragElement); } newIndicies.push({ - multiDragElement: multiDragElement, + multiDragElement, index: newIndex }); }); return { - items: _toConsumableArray(multiDragElements), - clones: [].concat(multiDragClones), - oldIndicies: oldIndicies, - newIndicies: newIndicies + items: [...multiDragElements], + clones: [...multiDragClones], + oldIndicies, + newIndicies }; }, + optionListeners: { - multiDragKey: function multiDragKey(key) { + multiDragKey(key) { key = key.toLowerCase(); if (key === 'ctrl') { @@ -3736,13 +3667,14 @@ function MultiDragPlugin() { return key; } + } }); } function insertMultiDragElements(clonesInserted, rootEl) { - multiDragElements.forEach(function (multiDragElement, i) { - var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)]; + multiDragElements.forEach((multiDragElement, i) => { + let target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)]; if (target) { rootEl.insertBefore(multiDragElement, target); @@ -3759,8 +3691,8 @@ function insertMultiDragElements(clonesInserted, rootEl) { function insertMultiDragClones(elementsInserted, rootEl) { - multiDragClones.forEach(function (clone, i) { - var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)]; + multiDragClones.forEach((clone, i) => { + let target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)]; if (target) { rootEl.insertBefore(clone, target); @@ -3771,7 +3703,7 @@ function insertMultiDragClones(elementsInserted, rootEl) { } function removeMultiDragElements() { - multiDragElements.forEach(function (multiDragElement) { + multiDragElements.forEach(multiDragElement => { if (multiDragElement === dragEl$1) return; multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement); }); diff --git a/src/Sortable.js b/src/Sortable.js index 7a8c779b8..f6e460c13 100644 --- a/src/Sortable.js +++ b/src/Sortable.js @@ -351,7 +351,10 @@ function Sortable(el, options) { this.el = el; // root element this.options = options = Object.assign({}, options); - + if (this.options.fallbackOnBody) { + // backwards compatibility + this.options.getFallbackParent = () => (document.body) + } // Export instance el[expando] = this; @@ -389,7 +392,9 @@ function Sortable(el, options) { touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1, forceFallback: false, fallbackClass: 'sortable-fallback', + // @obsolete use `getFallbackParent: () => (document.body)` fallbackOnBody: false, + getFallbackParent: null, fallbackTolerance: 0, fallbackOffset: {x: 0, y: 0}, supportPointer: Sortable.supportPointer !== false && ('PointerEvent' in window) && !Safari, @@ -851,7 +856,8 @@ Sortable.prototype = /** @lends Sortable.prototype */ { // Bug if using scale(): https://stackoverflow.com/questions/2637058 // Not being adjusted for if (!ghostEl) { - let container = this.options.fallbackOnBody ? document.body : rootEl, + let fallbackParent = typeof this.options.getFallbackParent === 'function' ? this.options.getFallbackParent() : null + let container = fallbackParent ?? rootEl, rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container), options = this.options; diff --git a/st/app.js b/st/app.js index a4853f3ec..498e12553 100644 --- a/st/app.js +++ b/st/app.js @@ -202,7 +202,7 @@ for (var i = 0; i < nestedSortables.length; i++) { new Sortable(nestedSortables[i], { group: 'nested', animation: 150, - fallbackOnBody: true, + getFallbackParent: () => (document.body), swapThreshold: 0.65 }); }