| 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;
 
 
  |