审查视图

public/assets/libs/Sortable/plugins/OnSpill/OnSpill.js 1.7 KB
王智 authored
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
import { getChild } from '../../src/utils.js';


const drop = function({
	originalEvent,
	putSortable,
	dragEl,
	activeSortable,
	dispatchSortableEvent,
	hideGhostForTarget,
	unhideGhostForTarget
}) {
	if (!originalEvent) return;
	let toSortable = putSortable || activeSortable;
	hideGhostForTarget();
	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, putSortable });
	}
};

function Revert() {}

Revert.prototype = {
	startIndex: null,
	dragStart({ oldDraggableIndex }) {
		this.startIndex = oldDraggableIndex;
	},
	onSpill({ dragEl, putSortable }) {
		this.sortable.captureAnimationState();
		if (putSortable) {
			putSortable.captureAnimationState();
		}
		let nextSibling = getChild(this.sortable.el, this.startIndex, this.options);

		if (nextSibling) {
			this.sortable.el.insertBefore(dragEl, nextSibling);
		} else {
			this.sortable.el.appendChild(dragEl);
		}
		this.sortable.animateAll();
		if (putSortable) {
			putSortable.animateAll();
		}
	},
	drop
};

Object.assign(Revert, {
	pluginName: 'revertOnSpill'
});


function Remove() {}

Remove.prototype = {
	onSpill({ dragEl, putSortable }) {
		const parentSortable = putSortable || this.sortable;
		parentSortable.captureAnimationState();
		dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);
		parentSortable.animateAll();
	},
	drop
};

Object.assign(Remove, {
	pluginName: 'removeOnSpill'
});


export default [Remove, Revert];

export {
	Remove as RemoveOnSpill,
	Revert as RevertOnSpill
};