123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- import {
- toggleClass,
- index
- } from '../../src/utils.js';
- let lastSwapEl;
- function SwapPlugin() {
- function Swap() {
- this.defaults = {
- swapClass: 'sortable-swap-highlight'
- };
- }
- Swap.prototype = {
- dragStart({ dragEl }) {
- lastSwapEl = dragEl;
- },
- dragOverValid({ completed, target, onMove, activeSortable, changed, cancel }) {
- if (!activeSortable.options.swap) return;
- let el = this.sortable.el,
- options = this.options;
- if (target && target !== el) {
- let prevSwapEl = lastSwapEl;
- if (onMove(target) !== false) {
- toggleClass(target, options.swapClass, true);
- lastSwapEl = target;
- } else {
- lastSwapEl = null;
- }
- if (prevSwapEl && prevSwapEl !== lastSwapEl) {
- toggleClass(prevSwapEl, options.swapClass, false);
- }
- }
- changed();
- completed(true);
- cancel();
- },
- 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)) {
- if (dragEl !== lastSwapEl) {
- toSortable.captureAnimationState();
- if (toSortable !== activeSortable) activeSortable.captureAnimationState();
- swapNodes(dragEl, lastSwapEl);
- toSortable.animateAll();
- if (toSortable !== activeSortable) activeSortable.animateAll();
- }
- }
- },
- nulling() {
- lastSwapEl = null;
- }
- };
- return Object.assign(Swap, {
- pluginName: 'swap',
- eventProperties() {
- return {
- swapItem: lastSwapEl
- };
- }
- });
- }
- function swapNodes(n1, n2) {
- let p1 = n1.parentNode,
- p2 = n2.parentNode,
- i1, i2;
- if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;
- i1 = index(n1);
- i2 = index(n2);
- if (p1.isEqualNode(p2) && i1 < i2) {
- i2++;
- }
- p1.insertBefore(n2, p1.children[i1]);
- p2.insertBefore(n1, p2.children[i2]);
- }
- export default SwapPlugin;
|