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