Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var fakeDrag = function(sourceNode, destinationNode) {
- const DRAG_OVER = 'dragover';
- const DRAG_END = 'dragend';
- const DRAG_START = 'dragstart';
- const DROP = 'drop';
- const createCustomEvent = (type) => {
- const event = new CustomEvent('CustomEvent');
- event.initCustomEvent(type, true, true, null);
- event.dataTransfer = {
- data: {},
- setData (type, val) {
- this.data[type] = val;
- },
- getData (type) {
- return this.data[type];
- },
- // This ensures the directives 'dnd-moved=""' callback is fired
- // on the 'dragend' event, removing the original dragged element..
- dropEffect: 'move'
- };
- return event;
- };
- const dispatchEvent = (node, event) => {
- if (node.dispatchEvent) {
- return node.dispatchEvent(event);
- }
- };
- const addType = (sourceNode) => {
- const defaultType = 'application/x-dnd';
- const customType = sourceNode.getAttribute('dnd-type');
- if (customType) {
- // Remove single quotes if any present.
- // dnd-list converts any types provided by 'dnd-type="'xXxX'"' to lowercase, so match that here.
- const formattedStr = customType.replace(/'/g,'');
- return [`${defaultType}-${formattedStr.toLowerCase()}`];
- }
- return [defaultType];
- };
- const event = createCustomEvent(DRAG_START);
- event.dataTransfer.types = addType(sourceNode, destinationNode);
- dispatchEvent(sourceNode, event);
- const dragOverEvent = createCustomEvent(DRAG_OVER);
- dragOverEvent.dataTransfer = event.dataTransfer;
- dispatchEvent(destinationNode, dragOverEvent);
- const dropNode = document.querySelector('.dndPlaceholder');
- const dropEvent = createCustomEvent(DROP);
- dropEvent.dataTransfer = event.dataTransfer;
- dispatchEvent(dropNode, dropEvent);
- const dragEndEvent = createCustomEvent(DRAG_END);
- dragEndEvent.dataTransfer = event.dataTransfer;
- dispatchEvent(sourceNode, dragEndEvent);
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement