UNPKG

easyui-draganddrop

Version:

Drag and drop elements including a file explorer and a rubbish bin.

178 lines (134 loc) 5.08 kB
'use strict'; const easyui = require('easyui'), Element = easyui.Element; const util = require('./util'), options = require('./options'); class DroppableElement extends Element { constructor(selector, moveHandler) { super(selector); this.moveHandler = moveHandler; this.droppableElements = []; } addDroppableElement(droppableElement) { this.droppableElements.push(droppableElement); } removeDroppableElement(droppableElement) { const index = indexOf(this.droppableElements, droppableElement), found = (index !== -1); if (found) { this.droppableElements.splice(index, 1); } } isOverlappingDraggableEntry(draggableEntryCollapsedBounds) { const bounds = this.getBounds(), boundsOverlappingDraggableEntry = bounds.areOverlapping(draggableEntryCollapsedBounds), overlappingDraggableEntry = boundsOverlappingDraggableEntry; return overlappingDraggableEntry; } getDroppableElementToBeMarked(draggableEntry) { const droppableElementToBeMarked = this.droppableElements.reduce(function(droppableElementToBeMarked, droppableElement) { if (droppableElementToBeMarked === null) { if (droppableElement.isToBeMarked(draggableEntry)) { /// droppableElementToBeMarked = droppableElement; } } return droppableElementToBeMarked; }, null); return droppableElementToBeMarked; } getMarkedDroppableElement() { const markedDroppableElement = this.droppableElements.reduce(function(markedDroppableElement, droppableElement) { if (markedDroppableElement === null) { const droppableElementMarked = droppableElement.isMarked(); if (droppableElementMarked) { markedDroppableElement = droppableElement; } } return markedDroppableElement; }, null); return markedDroppableElement; } removeMarkerGlobally() { const marked = this.isMarked(); if (marked) { this.removeMarker(); } else { const markedDroppableElement = this.getMarkedDroppableElement(); markedDroppableElement.removeMarker(); } } moveDraggableEntries(draggableEntries, sourcePath, targetPath, done) { const pathMaps = this.pathMapsFromDraggableEntries(draggableEntries, sourcePath, targetPath); this.moveHandler(pathMaps, function() { const lastDraggableEntry = last(draggableEntries), firstDraggableEntry = first(draggableEntries), firstDraggableEntryExplorer = firstDraggableEntry.getExplorer(), draggableEntriesExplorer = firstDraggableEntryExplorer, /// removeEmptyParentDirectories = draggableEntriesExplorer.hasOption(options.REMOVE_EMPTY_PARENT_DIRECTORIES); if (removeEmptyParentDirectories) { draggableEntriesExplorer.unsetOption(options.REMOVE_EMPTY_PARENT_DIRECTORIES); } draggableEntries.forEach(function(draggableEntry) { if (draggableEntry === lastDraggableEntry) { if (removeEmptyParentDirectories) { draggableEntriesExplorer.setOption(options.REMOVE_EMPTY_PARENT_DIRECTORIES); } } const draggableEntryPath = draggableEntry.getPath(); if (draggableEntryPath !== null) { const sourcePath = draggableEntryPath, /// pathMap = find(pathMaps, function(pathMap) { const sourceDraggableEntryPath = sourcePath, movedPath = pathMap[sourceDraggableEntryPath], found = (movedPath !== undefined); return found; }), movedPath = pathMap[sourcePath]; this.moveDraggableEntry(draggableEntry, sourcePath, movedPath); } }.bind(this)); done(); }.bind(this)); } moveDraggableEntry(draggableEntry, sourcePath, movedPath) { const draggableEntryDirectory = draggableEntry.isDirectory(); if (draggableEntryDirectory) { const directory = draggableEntry, /// sourceDirectoryPath = sourcePath, /// movedDirectoryPath = movedPath; this.moveDirectory(directory, sourceDirectoryPath, movedDirectoryPath); } else { const file = draggableEntry, /// sourceFilePath = sourcePath, /// movedFilePath = movedPath; /// this.moveFile(file, sourceFilePath, movedFilePath); } } } module.exports = DroppableElement; function indexOf(array, element) { let index = -1; array.some(function(currentElement, currentElementIndex) { if (currentElement === element) { index = currentElementIndex; return true; } else { return false; } }); return index; } function find(array, callback) { let element = null; array.some(function(currentElement) { if (callback(currentElement)) { element = currentElement; return true; } else { return false; } }); return element; } function first(array) { return array[0]; } function last(array) { return array[array.length - 1]; }