UNPKG

vue-draggable

Version:

Vue drag and drop library without any dependency

1,009 lines (801 loc) 63.6 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define("VueDraggable", [], factory); else if(typeof exports === 'object') exports["VueDraggable"] = factory(); else root["VueDraggable"] = factory(); })(this, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = "./src/index.js"); /******/ }) /************************************************************************/ /******/ ({ /***/ "./src/components/vue-draggable-group.component.js": /*!*********************************************************!*\ !*** ./src/components/vue-draggable-group.component.js ***! \*********************************************************/ /*! exports provided: VueDraggableGroup */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VueDraggableGroup", function() { return VueDraggableGroup; }); function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } var CUSTOM_EVENTS = ['added', 'removed', 'reordered']; var VueDraggableGroup = { name: 'VueDraggableGroup', props: { groups: { required: true, type: Array }, value: { required: true, type: Array }, itemsKey: { type: String, "default": 'items' } }, render: function render() { return this.$scopedSlots["default"]({}); }, methods: { added: function added(event) { var _this = this, _this$value; var newItems = this.groups.map(function (group) { return group[_this.itemsKey]; }).reduce(function (prev, curr) { return [].concat(_toConsumableArray(prev), _toConsumableArray(curr)); }, []).filter(function (item) { return event.detail.ids.map(Number).indexOf(item.id) >= 0; }); (_this$value = this.value).splice.apply(_this$value, [event.detail.index, 0].concat(_toConsumableArray(newItems))); this.$emit('change', this.groups); }, removed: function removed(event) { var newArray = this.value.filter(function (item) { return event.detail.ids.map(Number).indexOf(item.id) < 0; }); this.$emit('input', newArray); }, reordered: function reordered(event, group) { var reorderedItems = this.value.filter(function (item) { return event.detail.ids.map(Number).indexOf(item.id) >= 0; }); var notReorderedItems = this.value.filter(function (item) { return event.detail.ids.map(Number).indexOf(item.id) < 0; }); notReorderedItems.splice.apply(notReorderedItems, [event.detail.index, 0].concat(_toConsumableArray(reorderedItems))); this.$emit('input', notReorderedItems); this.$emit('change', this.groups); }, addListeners: function addListeners() { var _this2 = this; CUSTOM_EVENTS.forEach(function (event) { return _this2.$el.addEventListener(event, _this2[event]); }); }, removeListeners: function removeListeners() { var _this3 = this; CUSTOM_EVENTS.forEach(function (event) { return _this3.$el.removeEventListener(event, _this3[event]); }); } }, mounted: function mounted() { this.addListeners(); }, beforeDestroy: function beforeDestroy() { this.removeListeners(); } }; /***/ }), /***/ "./src/core/helpers/dom.helper.js": /*!****************************************!*\ !*** ./src/core/helpers/dom.helper.js ***! \****************************************/ /*! exports provided: getDroptargets, getDraggables, updateInitialAttributes, setInitialAtributes, removeOldDropzoneAreaElements, getContainer, addDropeffects, clearDropeffects, hasModifier */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDroptargets", function() { return getDroptargets; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDraggables", function() { return getDraggables; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateInitialAttributes", function() { return updateInitialAttributes; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setInitialAtributes", function() { return setInitialAtributes; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeOldDropzoneAreaElements", function() { return removeOldDropzoneAreaElements; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getContainer", function() { return getContainer; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addDropeffects", function() { return addDropeffects; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clearDropeffects", function() { return clearDropeffects; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasModifier", function() { return hasModifier; }); var getDroptargets = function getDroptargets(el, dropzoneSelector) { return el.querySelectorAll(dropzoneSelector); }; var getDraggables = function getDraggables(el, draggableSelector) { return el.querySelectorAll(draggableSelector); }; var updateInitialAttributes = function updateInitialAttributes(el) { this.targets = getDroptargets(el, this.defaultOptions.dropzoneSelector); this.items = getDraggables(el, this.defaultOptions.draggableSelector); for (var i = 0; i < this.targets.length; i++) { this.targets[i].setAttribute('aria-dropeffect', 'none'); } for (var _i = 0; _i < this.items.length; _i++) { this.items[_i].setAttribute('draggable', 'true'); if (this.items[_i].getAttribute('aria-grabbed') !== 'true') { this.items[_i].setAttribute('aria-grabbed', 'false'); } this.items[_i].setAttribute('tabindex', '0'); } }; var setInitialAtributes = function setInitialAtributes(el) { this.targets = getDroptargets(el, this.defaultOptions.dropzoneSelector); this.items = getDraggables(el, this.defaultOptions.draggableSelector); for (var i = 0; i < this.targets.length; i++) { this.targets[i].setAttribute('aria-dropeffect', 'none'); } for (var _i2 = 0; _i2 < this.items.length; _i2++) { this.items[_i2].setAttribute('draggable', 'true'); this.items[_i2].setAttribute('aria-grabbed', 'false'); this.items[_i2].setAttribute('tabindex', '0'); } }; var removeOldDropzoneAreaElements = function removeOldDropzoneAreaElements() { var oldItemDropzoneElements = document.querySelectorAll('.item-dropzone-area'); for (var i = 0; i < oldItemDropzoneElements.length; i++) { oldItemDropzoneElements[i].remove(); } }; var getContainer = function getContainer(element) { var containerElement = element; do { if (containerElement && containerElement.nodeType === 1 && containerElement.getAttribute('aria-dropeffect')) { return containerElement; } } while (containerElement = containerElement ? containerElement.parentNode : null); return null; }; var addDropeffects = function addDropeffects(items, selections, targets) { // apply aria-dropeffect and tabindex to all targets apart from the owner for (var len = targets.length, i = 0; i < len; i++) { if (targets[i] !== selections.owner && targets[i].getAttribute('aria-dropeffect') === 'none') { targets[i].setAttribute('aria-dropeffect', 'move'); targets[i].setAttribute('tabindex', '0'); } } // remove aria-grabbed and tabindex from all items inside those containers for (var _len = items.length, _i3 = 0; _i3 < _len; _i3++) { if (items[_i3].parentNode !== selections.owner && items[_i3].getAttribute('aria-grabbed')) { items[_i3].removeAttribute('aria-grabbed'); items[_i3].removeAttribute('tabindex'); } } }; var clearDropeffects = function clearDropeffects(items, selections, targets) { // if we dont't have any selected items just skip if (!selections.items.length) { return; } // reset aria-dropeffect and remove tabindex from all targets for (var i = 0; i < targets.length; i++) { if (targets[i].getAttribute('aria-dropeffect') !== 'none') { targets[i].setAttribute('aria-dropeffect', 'none'); targets[i].removeAttribute('tabindex'); } } // restore aria-grabbed and tabindex to all selectable items // without changing the grabbed value of any existing selected items for (var _i4 = 0; _i4 < items.length; _i4++) { if (!items[_i4].getAttribute('aria-grabbed')) { items[_i4].setAttribute('aria-grabbed', 'false'); items[_i4].setAttribute('tabindex', '0'); } else if (items[_i4].getAttribute('aria-grabbed') === 'true') { items[_i4].setAttribute('tabindex', '0'); } } }; var hasModifier = function hasModifier(e) { return e.ctrlKey || e.metaKey || e.shiftKey; }; /***/ }), /***/ "./src/core/helpers/events.helper.js": /*!*******************************************!*\ !*** ./src/core/helpers/events.helper.js ***! \*******************************************/ /*! exports provided: dispatchCustomEvent, dispatchReorderEvents */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dispatchCustomEvent", function() { return dispatchCustomEvent; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dispatchReorderEvents", function() { return dispatchReorderEvents; }); 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 _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } 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; } var createCustomEvent = function createCustomEvent(name, data) { return new CustomEvent(name, { detail: data }); }; var dispatchCustomEvent = function dispatchCustomEvent(name, data, element) { var customEvent = createCustomEvent(name, data); element.dispatchEvent(customEvent); }; var dispatchReorderEvents = function dispatchReorderEvents(e) { var oldItems = this.selections.droptarget.querySelectorAll(this.defaultOptions.draggableSelector); var index = this.nextItemElement ? Array.prototype.indexOf.call(oldItems, this.nextItemElement) : oldItems.length; var eventData = _objectSpread({ ids: this.selections.items.map(function (item) { return item.dataset.id; }), index: index, nativeEvent: e }, this.selections); if (this.selections.droptarget === this.selections.owner) { dispatchCustomEvent('reordered', eventData, this.selections.droptarget); return; } dispatchCustomEvent('added', eventData, this.selections.droptarget); dispatchCustomEvent('removed', eventData, this.selections.owner); }; /***/ }), /***/ "./src/core/helpers/index.js": /*!***********************************!*\ !*** ./src/core/helpers/index.js ***! \***********************************/ /*! exports provided: getDroptargets, getDraggables, updateInitialAttributes, setInitialAtributes, removeOldDropzoneAreaElements, getContainer, addDropeffects, clearDropeffects, hasModifier, addSelection, removeSelection, clearSelections, stopDragAndDrop, dispatchCustomEvent, dispatchReorderEvents */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _dom_helper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dom.helper */ "./src/core/helpers/dom.helper.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getDroptargets", function() { return _dom_helper__WEBPACK_IMPORTED_MODULE_0__["getDroptargets"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getDraggables", function() { return _dom_helper__WEBPACK_IMPORTED_MODULE_0__["getDraggables"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "updateInitialAttributes", function() { return _dom_helper__WEBPACK_IMPORTED_MODULE_0__["updateInitialAttributes"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setInitialAtributes", function() { return _dom_helper__WEBPACK_IMPORTED_MODULE_0__["setInitialAtributes"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "removeOldDropzoneAreaElements", function() { return _dom_helper__WEBPACK_IMPORTED_MODULE_0__["removeOldDropzoneAreaElements"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getContainer", function() { return _dom_helper__WEBPACK_IMPORTED_MODULE_0__["getContainer"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addDropeffects", function() { return _dom_helper__WEBPACK_IMPORTED_MODULE_0__["addDropeffects"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "clearDropeffects", function() { return _dom_helper__WEBPACK_IMPORTED_MODULE_0__["clearDropeffects"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hasModifier", function() { return _dom_helper__WEBPACK_IMPORTED_MODULE_0__["hasModifier"]; }); /* harmony import */ var _state_helper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./state.helper */ "./src/core/helpers/state.helper.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addSelection", function() { return _state_helper__WEBPACK_IMPORTED_MODULE_1__["addSelection"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "removeSelection", function() { return _state_helper__WEBPACK_IMPORTED_MODULE_1__["removeSelection"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "clearSelections", function() { return _state_helper__WEBPACK_IMPORTED_MODULE_1__["clearSelections"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stopDragAndDrop", function() { return _state_helper__WEBPACK_IMPORTED_MODULE_1__["stopDragAndDrop"]; }); /* harmony import */ var _events_helper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./events.helper */ "./src/core/helpers/events.helper.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dispatchCustomEvent", function() { return _events_helper__WEBPACK_IMPORTED_MODULE_2__["dispatchCustomEvent"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dispatchReorderEvents", function() { return _events_helper__WEBPACK_IMPORTED_MODULE_2__["dispatchReorderEvents"]; }); /***/ }), /***/ "./src/core/helpers/state.helper.js": /*!******************************************!*\ !*** ./src/core/helpers/state.helper.js ***! \******************************************/ /*! exports provided: addSelection, removeSelection, clearSelections, stopDragAndDrop */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addSelection", function() { return addSelection; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeSelection", function() { return removeSelection; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clearSelections", function() { return clearSelections; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "stopDragAndDrop", function() { return stopDragAndDrop; }); function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } var addSelection = function addSelection(item) { // if the owner reference is still null, set it to this item's parent // so that further selection is only allowed within the same container if (!this.selections.owner) { this.selections.owner = item.parentNode; } // or if that's already happened then compare it with this item's parent // and if they're not the same container, return to prevent selection if (!this.defaultOptions.multipleDropzonesItemsDraggingEnabled && this.selections.owner !== item.parentNode) { return; } // set this item's grabbed state item.setAttribute('aria-grabbed', 'true'); // add it to the items array this.selections.items = this.selections.items.indexOf(item) >= 0 ? this.selections.items : [].concat(_toConsumableArray(this.selections.items), [item]); }; var removeSelection = function removeSelection(item) { // reset this item's grabbed state item.setAttribute('aria-grabbed', 'false'); // then find and remove this item from the existing items array for (var i = 0; i < this.selections.items.length; i++) { if (this.selections.items[i] === item) { this.selections.items.splice(i, 1); break; } } }; var clearSelections = function clearSelections() { // if we have any selected items if (this.selections.items.length) { // reset the owner reference this.selections.owner = null; // reset the grabbed state on every selected item for (var i = 0; i < this.selections.items.length; i++) { this.selections.items[i].setAttribute('aria-grabbed', 'false'); } // then reset the items array this.selections.items = []; } }; var stopDragAndDrop = function stopDragAndDrop() { // throw exception and catch this to stop further d&d throw new Error('Requested D&D stop...'); }; /***/ }), /***/ "./src/core/index.js": /*!***************************!*\ !*** ./src/core/index.js ***! \***************************/ /*! exports provided: VueDraggable */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VueDraggable", function() { return VueDraggable; }); /* harmony import */ var _listeners__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./listeners */ "./src/core/listeners/index.js"); /* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ "./src/core/helpers/index.js"); /* harmony import */ var _options__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./options */ "./src/core/options.js"); /* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./state */ "./src/core/state.js"); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var VueDraggable = /*#__PURE__*/ function () { function VueDraggable(el, componentInstance, options) { _classCallCheck(this, VueDraggable); Object.assign(this, Object(_state__WEBPACK_IMPORTED_MODULE_3__["getState"])(), { defaultOptions: Object(_options__WEBPACK_IMPORTED_MODULE_2__["getOptions"])(componentInstance, options) }, { el: el }); this.registerListeners(el); this.initiate(el); } _createClass(VueDraggable, [{ key: "registerListeners", value: function registerListeners(el) { _listeners__WEBPACK_IMPORTED_MODULE_0__["attachListeners"].bind(this)(el); } }, { key: "initiate", value: function initiate(el) { _helpers__WEBPACK_IMPORTED_MODULE_1__["setInitialAtributes"].bind(this)(el); } }, { key: "update", value: function update(el) { _helpers__WEBPACK_IMPORTED_MODULE_1__["updateInitialAttributes"].bind(this)(el); } }]); return VueDraggable; }(); ; /***/ }), /***/ "./src/core/listeners/handlers/dragend.handler.js": /*!********************************************************!*\ !*** ./src/core/listeners/handlers/dragend.handler.js ***! \********************************************************/ /*! exports provided: dragendHandler */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dragendHandler", function() { return dragendHandler; }); /* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../helpers */ "./src/core/helpers/index.js"); 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 _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } 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; } var reorderDomElements = function reorderDomElements(droptarget, items, nextItemElement) { for (var i = 0; i < items.length; i++) { if (nextItemElement) { droptarget.insertBefore(items[i], nextItemElement); continue; } droptarget.appendChild(items[i]); } }; var dragendHandler = function dragendHandler(e) { if (typeof this.defaultOptions.onDragend === 'function') { try { this.defaultOptions.onDragend(_objectSpread({ nativeEvent: e, stop: _helpers__WEBPACK_IMPORTED_MODULE_0__["stopDragAndDrop"] }, this.selections)); } catch (error) { Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["removeOldDropzoneAreaElements"])(); return; } } // if we have a valid drop target reference // (which implies that we have some selected items) if (this.selections.droptarget) { if (this.defaultOptions.reactivityEnabled) { _helpers__WEBPACK_IMPORTED_MODULE_0__["dispatchReorderEvents"].bind(this)(e); } else { // make dom manipulation only if reactivity is disabled reorderDomElements(this.selections.droptarget, this.selections.items, this.nextItemElement); } if (typeof this.defaultOptions.onDrop === 'function') { this.defaultOptions.onDrop(_objectSpread({ nativeEvent: e, stop: function stop() { throw new Error("Stop method is available only for callbacks\n 'onDragstart' and 'onDragend'. For more info look at\n https://github.com/Vivify-Ideas/vue-draggable/blob/master/README.md\n "); } }, this.selections)); } // prevent default to allow the action e.preventDefault(); } // if we have any selected items if (this.selections.items.length) { // clear dropeffect from the target containers Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["clearDropeffects"])(this.items, this.selections, this.targets); // if we have a valid drop target reference if (this.selections.droptarget) { // reset the selections array _helpers__WEBPACK_IMPORTED_MODULE_0__["clearSelections"].bind(this)(); // reset the target's dragover class this.selections.droptarget.className = this.selections.droptarget.className.replace(/ dragover/g, ''); // reset the target reference this.selections.droptarget = null; } } // dropzone area elements Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["removeOldDropzoneAreaElements"])(); }; /***/ }), /***/ "./src/core/listeners/handlers/dragenter.handler.js": /*!**********************************************************!*\ !*** ./src/core/listeners/handlers/dragenter.handler.js ***! \**********************************************************/ /*! exports provided: dragenterHandler */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dragenterHandler", function() { return dragenterHandler; }); 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 _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } 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; } var dragenterHandler = function dragenterHandler(e) { this.related = e.target; if (typeof this.defaultOptions.onDragenter === 'function') { try { this.defaultOptions.onDragenter(_objectSpread({ nativeEvent: e, stop: function stop() { throw new Error("Stop method is available only for callbacks\n 'onDragstart' and 'onDragend'. For more info look at\n https://github.com/Vivify-Ideas/vue-draggable/blob/master/README.md\n "); } }, this.selections)); } catch (error) { e.preventDefault(); return; } } }; /***/ }), /***/ "./src/core/listeners/handlers/dragleave.handler.js": /*!**********************************************************!*\ !*** ./src/core/listeners/handlers/dragleave.handler.js ***! \**********************************************************/ /*! exports provided: dragleaveHandler */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dragleaveHandler", function() { return dragleaveHandler; }); /* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../helpers */ "./src/core/helpers/index.js"); var dragleaveHandler = function dragleaveHandler() { // get a drop target reference from the relatedTarget var droptarget = Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["getContainer"])(this.related); // if the drop target is different from the last stored reference // (or we have one of those references but not the other one) if (droptarget !== this.selections.droptarget) { // if we have a saved reference, clear its existing dragover class if (this.selections.droptarget) { this.selections.droptarget.className = this.selections.droptarget.className.replace(/ dragover/g, ''); } // apply the dragover class to the new drop target reference if (droptarget) { droptarget.className += ' dragover'; } // then save that reference for next time this.selections.droptarget = droptarget; } }; /***/ }), /***/ "./src/core/listeners/handlers/dragover.handler.js": /*!*********************************************************!*\ !*** ./src/core/listeners/handlers/dragover.handler.js ***! \*********************************************************/ /*! exports provided: dragoverHandler */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dragoverHandler", function() { return dragoverHandler; }); /* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../helpers */ "./src/core/helpers/index.js"); 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 _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } 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; } var state = { previousTarget: null, dragoverCalls: 0 }; var displayDropzones = function displayDropzones(e) { if (state.dragoverCalls % 100 !== 0 && (e.target === state.previousTarget || !e.target || e.target.className === 'item-dropzone-area')) return; state.dragoverCalls++; state.previousTarget = e.target; this.nextItemElement = e.target.closest(this.defaultOptions.draggableSelector); this.selections.droptarget = e.target.closest(this.defaultOptions.dropzoneSelector); var itemDropzoneElement = document.createElement('div'); itemDropzoneElement.className = 'item-dropzone-area'; Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["removeOldDropzoneAreaElements"])(); if (this.selections.droptarget && this.nextItemElement) { this.selections.droptarget.insertBefore(itemDropzoneElement, state.previousTarget.closest(this.defaultOptions.draggableSelector)); } if (this.selections.droptarget && !this.nextItemElement) { this.selections.droptarget.appendChild(itemDropzoneElement); } }; var dragoverHandler = function dragoverHandler(e) { // if we have any selected items, // allow them to be dragged if (this.selections.items.length) { e.preventDefault(); } if (!this.defaultOptions.showDropzoneAreas) { return; } displayDropzones.bind(this)(e); if (typeof this.defaultOptions.onDragover === 'function') { try { this.defaultOptions.onDragover(_objectSpread({ nativeEvent: e, stop: function stop() { throw new Error("Stop method is available only for callbacks\n 'onDragstart' and 'onDragend'. For more info look at\n https://github.com/Vivify-Ideas/vue-draggable/blob/master/README.md\n "); } }, this.selections)); } catch (error) { e.preventDefault(); return; } } }; /***/ }), /***/ "./src/core/listeners/handlers/dragstart.handler.js": /*!**********************************************************!*\ !*** ./src/core/listeners/handlers/dragstart.handler.js ***! \**********************************************************/ /*! exports provided: dragstartHandler */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dragstartHandler", function() { return dragstartHandler; }); /* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../helpers */ "./src/core/helpers/index.js"); 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 _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } 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; } var dragstartHandler = function dragstartHandler(e) { var elem = e.target.closest(this.defaultOptions.draggableSelector); // if the element's parent is not the owner, then block this event if (!this.defaultOptions.multipleDropzonesItemsDraggingEnabled && elem && this.selections.owner !== elem.parentNode) { e.preventDefault(); return; } if (typeof this.defaultOptions.onDragstart === 'function') { try { this.defaultOptions.onDragstart(_objectSpread({ nativeEvent: e, stop: _helpers__WEBPACK_IMPORTED_MODULE_0__["stopDragAndDrop"] }, this.selections)); } catch (error) { e.preventDefault(); Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["removeOldDropzoneAreaElements"])(); return; } } // [else] if the multiple selection modifier is pressed // and the item's grabbed state is currently false if (Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["hasModifier"])(e) && elem.getAttribute('aria-grabbed') === 'false') { // add this additional selection _helpers__WEBPACK_IMPORTED_MODULE_0__["addSelection"].bind(this)(elem); } // we don't need the transfer data, but we have to define something // otherwise the drop action won't work at all in firefox // most browsers support the proper mime-type syntax, eg. "text/plain" // but we have to use this incorrect syntax for the benefit of IE10+ e.dataTransfer.setData('text', ''); // apply dropeffect to the target containers Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["addDropeffects"])(this.items, this.selections, this.targets); }; /***/ }), /***/ "./src/core/listeners/handlers/index.js": /*!**********************************************!*\ !*** ./src/core/listeners/handlers/index.js ***! \**********************************************/ /*! exports provided: mousedownHandler, mouseupHandler, dragoverHandler, dragstartHandler, dragenterHandler, dragleaveHandler, dragendHandler, keydownHandler */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _mousedown_handler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mousedown.handler */ "./src/core/listeners/handlers/mousedown.handler.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mousedownHandler", function() { return _mousedown_handler__WEBPACK_IMPORTED_MODULE_0__["mousedownHandler"]; }); /* harmony import */ var _mouseup_handler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mouseup.handler */ "./src/core/listeners/handlers/mouseup.handler.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mouseupHandler", function() { return _mouseup_handler__WEBPACK_IMPORTED_MODULE_1__["mouseupHandler"]; }); /* harmony import */ var _dragover_handler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dragover.handler */ "./src/core/listeners/handlers/dragover.handler.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dragoverHandler", function() { return _dragover_handler__WEBPACK_IMPORTED_MODULE_2__["dragoverHandler"]; }); /* harmony import */ var _dragstart_handler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./dragstart.handler */ "./src/core/listeners/handlers/dragstart.handler.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dragstartHandler", function() { return _dragstart_handler__WEBPACK_IMPORTED_MODULE_3__["dragstartHandler"]; }); /* harmony import */ var _dragenter_handler__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dragenter.handler */ "./src/core/listeners/handlers/dragenter.handler.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dragenterHandler", function() { return _dragenter_handler__WEBPACK_IMPORTED_MODULE_4__["dragenterHandler"]; }); /* harmony import */ var _dragleave_handler__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dragleave.handler */ "./src/core/listeners/handlers/dragleave.handler.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dragleaveHandler", function() { return _dragleave_handler__WEBPACK_IMPORTED_MODULE_5__["dragleaveHandler"]; }); /* harmony import */ var _dragend_handler__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./dragend.handler */ "./src/core/listeners/handlers/dragend.handler.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dragendHandler", function() { return _dragend_handler__WEBPACK_IMPORTED_MODULE_6__["dragendHandler"]; }); /* harmony import */ var _keydown_handler__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./keydown.handler */ "./src/core/listeners/handlers/keydown.handler.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "keydownHandler", function() { return _keydown_handler__WEBPACK_IMPORTED_MODULE_7__["keydownHandler"]; }); /***/ }), /***/ "./src/core/listeners/handlers/keydown.handler.js": /*!********************************************************!*\ !*** ./src/core/listeners/handlers/keydown.handler.js ***! \********************************************************/ /*! exports provided: keydownHandler */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keydownHandler", function() { return keydownHandler; }); /* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../helpers */ "./src/core/helpers/index.js"); var isItemAroundSelectionArea = function isItemAroundSelectionArea(item, lastItem) { return item.parentNode === lastItem.parentNode; }; var keydownHandler = function keydownHandler(e) { // if the element is a grabbable item if (e.target.getAttribute('aria-grabbed')) { // Space is the selection or unselection keystroke if (e.keyCode === 32) { // if the multiple selection modifier is pressed if (Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["hasModifier"])(e)) { // if the item's grabbed state is currently true if (e.target.getAttribute('aria-grabbed') === 'true') { // if this is the only selected item, clear dropeffect // from the target containers, which we must do first // in case subsequent unselection sets owner to null if (this.selections.items.length === 1) { Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["clearDropeffects"])(this.items, this.selections, this.targets); } // unselect this item _helpers__WEBPACK_IMPORTED_MODULE_0__["removeSelection"].bind(this)(e.target); // if we have any selections // apply dropeffect to the target containers, // in case earlier selections were made by mouse if (this.selections.items.length) { Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["addDropeffects"])(this.items, this.selections, this.targets); } // if that was the only selected item // then reset the owner container reference if (!this.selections.items.length) { this.selections.owner = null; } } else { // else [if its grabbed state is currently false] // add this additional selection _helpers__WEBPACK_IMPORTED_MODULE_0__["addSelection"].bind(this)(e.target); // apply dropeffect to the target containers Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["addDropeffects"])(this.items, this.selections, this.targets); } } else if (e.target.getAttribute('aria-grabbed') === 'false') { // else [if the multiple selection modifier is not pressed] // and the item's grabbed state is currently false // clear dropeffect from the target containers Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["clearDropeffects"])(this.items, this.selections, this.targets); // clear all existing selections _helpers__WEBPACK_IMPORTED_MODULE_0__["clearSelections"].bind(this)(); // add this new selection _helpers__WEBPACK_IMPORTED_MODULE_0__["addSelection"].bind(this)(e.target); // apply dropeffect to the target containers Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["addDropeffects"])(this.items, this.selections, this.targets); } else { // else [if modifier is not pressed and grabbed is already true] // apply dropeffect to the target containers Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["addDropeffects"])(this.items, this.selections, this.targets); } // then prevent default to avoid any conflict with native actions e.preventDefault(); } // (CMD or Ctrl) + A - select all the items around the selected one if (e.keyCode === 65 && (e.ctrlKey || e.metaKey)) { var lastItem = this.selections.items.slice(-1).pop(); if (this.items && this.items.length > 0) { for (var i = 0; i < this.items.length; i++) { var item = this.items[i]; var shouldSelectItem = isItemAroundSelectionArea(item, lastItem); shouldSelectItem && _helpers__WEBPACK_IMPORTED_MODULE_0__["addSelection"].bind(this)(item); } } e.preventDefault(); // prevent entire page selection. } // Modifier + M is the end-of-selection keystroke if (e.keyCode === 77 && Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["hasModifier"])(e)) { // if we have any selected items if (this.selections.items.length) { // apply dropeffect to the target containers // in case earlier selections were made by mouse Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["addDropeffects"])(this.items, this.selections, this.targets); // if the owner container is the last one, focus the first one if (this.selections.owner === this.targets[this.targets.length - 1]) { this.targets[0].focus(); } else { // else [if it's not the last one], find and focus the next one for (var _i = 0; _i < this.targets.length; _i++) { if (this.selections.owner === this.targets[_i]) { this.targets[_i + 1].focus(); break; } } } } // then prevent default to avoid any conflict with native actions e.preventDefault(); } } // Escape is the abort keystroke (for any target element) if (e.keyCode === 27) { // if we have any selected items if (this.selections.items.length) { // clear dropeffect from the target containers Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["clearDropeffects"])(this.items, this.selections, this.targets); // then set focus back on the last item that was selected, which is // necessary because we've removed tabindex from the current focus this.selections.items[this.selections.items.