easyui-draganddrop
Version:
Drag and drop elements including a file explorer and a rubbish bin.
182 lines (150 loc) • 16.4 kB
JavaScript
;
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var easyui = require('easyui'),
Element = easyui.Element;
var DroppableElement = require('./droppableElement');
var RubbishBin = function (_DroppableElement) {
_inherits(RubbishBin, _DroppableElement);
function RubbishBin(selector) {
var removeHandler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (pathMaps, done) {
done();
};
_classCallCheck(this, RubbishBin);
var droppableElementMoveHandler = removeHandler; ///
var _this = _possibleConstructorReturn(this, (RubbishBin.__proto__ || Object.getPrototypeOf(RubbishBin)).call(this, selector, droppableElementMoveHandler));
_this.close();
return _this;
}
_createClass(RubbishBin, [{
key: 'getMarkedDirectory',
value: function getMarkedDirectory() {
var markedDirectory = null;
return markedDirectory;
}
}, {
key: 'getDirectoryOverlappingDraggableEntry',
value: function getDirectoryOverlappingDraggableEntry(draggableEntry) {
var directoryOverlappingDraggableEntry = null; ///
return directoryOverlappingDraggableEntry;
}
}, {
key: 'addMarker',
value: function addMarker(draggableEntry, directoryOverlappingDraggableEntry) {
this.open();
}
}, {
key: 'removeMarker',
value: function removeMarker() {
this.close();
}
}, {
key: 'isMarked',
value: function isMarked() {
var open = this.isOpen(),
marked = open; ///
return marked;
}
}, {
key: 'isToBeMarked',
value: function isToBeMarked(draggableEntry) {
var bounds = this.getBounds(),
draggableEntryCollapsedBounds = draggableEntry.getCollapsedBounds(),
overlappingDraggableEntryCollapsedBounds = bounds.areOverlapping(draggableEntryCollapsedBounds),
toBeMarked = overlappingDraggableEntryCollapsedBounds; ///
return toBeMarked;
}
}, {
key: 'dragging',
value: function dragging(draggableEntry, explorer) {
var marked = this.isMarked();
if (marked) {
var toBeMarked = this.isToBeMarked(draggableEntry);
if (!toBeMarked) {
var droppableElementToBeMarked = this.getDroppableElementToBeMarked(draggableEntry);
if (droppableElementToBeMarked !== null) {
var directoryOverlappingDraggableEntry = droppableElementToBeMarked.getDirectoryOverlappingDraggableEntry(draggableEntry);
droppableElementToBeMarked.addMarker(draggableEntry, directoryOverlappingDraggableEntry);
} else {
explorer.addMarkerInPlace(draggableEntry);
}
this.removeMarker();
}
}
}
}, {
key: 'moveDirectory',
value: function moveDirectory(directory, sourceDirectoryPath, movedDirectoryPath) {
if (movedDirectoryPath === null) {
var explorer = directory.getExplorer(),
directoryPath = sourceDirectoryPath; ///
explorer.removeDirectory(directoryPath);
}
}
}, {
key: 'moveFile',
value: function moveFile(file, sourceFilePath, movedFilePath) {
if (movedFilePath === null) {
var explorer = file.getExplorer(),
filePath = sourceFilePath; ///
explorer.removeFile(filePath);
}
}
}, {
key: 'open',
value: function open() {
this.addClass('open');
}
}, {
key: 'close',
value: function close() {
this.removeClass('open');
}
}, {
key: 'isOpen',
value: function isOpen() {
var open = this.hasClass('open');
return open;
}
}, {
key: 'pathMapsFromDraggableEntries',
value: function pathMapsFromDraggableEntries(draggableEntries, sourcePath, targetPath) {
var pathMaps = draggableEntries.map(function (draggableEntry) {
var pathMap = {},
draggableEntryPath = draggableEntry.getPath(),
sourceDraggableEntryPath = draggableEntryPath,
///
targetDraggableEntryPath = null;
pathMap[sourceDraggableEntryPath] = targetDraggableEntryPath;
return pathMap;
});
return pathMaps;
}
}], [{
key: 'clone',
value: function clone(selector, removeHandler) {
return Element.clone(RubbishBin, selector, removeHandler);
}
}, {
key: 'fromHTML',
value: function fromHTML(html, removeHandler) {
return Element.fromHTML(RubbishBin, html, removeHandler);
}
}, {
key: 'fromProperties',
value: function fromProperties(properties) {
var onRemove = properties.onRemove,
removeHandler = onRemove; ///
return Element.fromProperties(RubbishBin, properties, removeHandler);
}
}]);
return RubbishBin;
}(DroppableElement);
Object.assign(RubbishBin, {
tagName: 'div',
ignoredAttributes: ['onRemove']
});
module.exports = RubbishBin;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2VzNi9ydWJiaXNoQmluLmpzIl0sIm5hbWVzIjpbImVhc3l1aSIsInJlcXVpcmUiLCJFbGVtZW50IiwiRHJvcHBhYmxlRWxlbWVudCIsIlJ1YmJpc2hCaW4iLCJzZWxlY3RvciIsInJlbW92ZUhhbmRsZXIiLCJwYXRoTWFwcyIsImRvbmUiLCJkcm9wcGFibGVFbGVtZW50TW92ZUhhbmRsZXIiLCJjbG9zZSIsIm1hcmtlZERpcmVjdG9yeSIsImRyYWdnYWJsZUVudHJ5IiwiZGlyZWN0b3J5T3ZlcmxhcHBpbmdEcmFnZ2FibGVFbnRyeSIsIm9wZW4iLCJpc09wZW4iLCJtYXJrZWQiLCJib3VuZHMiLCJnZXRCb3VuZHMiLCJkcmFnZ2FibGVFbnRyeUNvbGxhcHNlZEJvdW5kcyIsImdldENvbGxhcHNlZEJvdW5kcyIsIm92ZXJsYXBwaW5nRHJhZ2dhYmxlRW50cnlDb2xsYXBzZWRCb3VuZHMiLCJhcmVPdmVybGFwcGluZyIsInRvQmVNYXJrZWQiLCJleHBsb3JlciIsImlzTWFya2VkIiwiaXNUb0JlTWFya2VkIiwiZHJvcHBhYmxlRWxlbWVudFRvQmVNYXJrZWQiLCJnZXREcm9wcGFibGVFbGVtZW50VG9CZU1hcmtlZCIsImdldERpcmVjdG9yeU92ZXJsYXBwaW5nRHJhZ2dhYmxlRW50cnkiLCJhZGRNYXJrZXIiLCJhZGRNYXJrZXJJblBsYWNlIiwicmVtb3ZlTWFya2VyIiwiZGlyZWN0b3J5Iiwic291cmNlRGlyZWN0b3J5UGF0aCIsIm1vdmVkRGlyZWN0b3J5UGF0aCIsImdldEV4cGxvcmVyIiwiZGlyZWN0b3J5UGF0aCIsInJlbW92ZURpcmVjdG9yeSIsImZpbGUiLCJzb3VyY2VGaWxlUGF0aCIsIm1vdmVkRmlsZVBhdGgiLCJmaWxlUGF0aCIsInJlbW92ZUZpbGUiLCJhZGRDbGFzcyIsInJlbW92ZUNsYXNzIiwiaGFzQ2xhc3MiLCJkcmFnZ2FibGVFbnRyaWVzIiwic291cmNlUGF0aCIsInRhcmdldFBhdGgiLCJtYXAiLCJwYXRoTWFwIiwiZHJhZ2dhYmxlRW50cnlQYXRoIiwiZ2V0UGF0aCIsInNvdXJjZURyYWdnYWJsZUVudHJ5UGF0aCIsInRhcmdldERyYWdnYWJsZUVudHJ5UGF0aCIsImNsb25lIiwiaHRtbCIsImZyb21IVE1MIiwicHJvcGVydGllcyIsIm9uUmVtb3ZlIiwiZnJvbVByb3BlcnRpZXMiLCJPYmplY3QiLCJhc3NpZ24iLCJ0YWdOYW1lIiwiaWdub3JlZEF0dHJpYnV0ZXMiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztBQUVBLElBQU1BLFNBQVNDLFFBQVEsUUFBUixDQUFmO0FBQUEsSUFDTUMsVUFBVUYsT0FBT0UsT0FEdkI7O0FBR0EsSUFBTUMsbUJBQW1CRixRQUFRLG9CQUFSLENBQXpCOztJQUVNRyxVOzs7QUFDSixzQkFBWUMsUUFBWixFQUE2RTtBQUFBLFFBQXZEQyxhQUF1RCx1RUFBdkMsVUFBU0MsUUFBVCxFQUFtQkMsSUFBbkIsRUFBeUI7QUFBRUE7QUFBUyxLQUFHOztBQUFBOztBQUMzRSxRQUFNQyw4QkFBOEJILGFBQXBDLENBRDJFLENBQ3ZCOztBQUR1Qix3SEFHckVELFFBSHFFLEVBRzNESSwyQkFIMkQ7O0FBSzNFLFVBQUtDLEtBQUw7QUFMMkU7QUFNNUU7Ozs7eUNBRW9CO0FBQ25CLFVBQU1DLGtCQUFrQixJQUF4Qjs7QUFFQSxhQUFPQSxlQUFQO0FBQ0Q7OzswREFFcUNDLGMsRUFBZ0I7QUFDcEQsVUFBTUMscUNBQXFDLElBQTNDLENBRG9ELENBQ0g7O0FBRWpELGFBQU9BLGtDQUFQO0FBQ0Q7Ozs4QkFFU0QsYyxFQUFnQkMsa0MsRUFBb0M7QUFDNUQsV0FBS0MsSUFBTDtBQUNEOzs7bUNBRWM7QUFDYixXQUFLSixLQUFMO0FBQ0Q7OzsrQkFFVTtBQUNULFVBQU1JLE9BQU8sS0FBS0MsTUFBTCxFQUFiO0FBQUEsVUFDTUMsU0FBU0YsSUFEZixDQURTLENBRWE7O0FBRXRCLGFBQU9FLE1BQVA7QUFDRDs7O2lDQUVZSixjLEVBQWdCO0FBQzNCLFVBQU1LLFNBQVMsS0FBS0Ms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LE9BQU9DLE1BQVAsQ0FBYzNELFVBQWQsRUFBMEI7QUFDeEI0RCxXQUFTLEtBRGU7QUFFeEJDLHFCQUFtQixDQUNqQixVQURpQjtBQUZLLENBQTFCOztBQU9BQyxPQUFPQyxPQUFQLEdBQWlCL0QsVUFBakIiLCJmaWxlIjoicnViYmlzaEJpbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgZWFzeXVpID0gcmVxdWlyZSgnZWFzeXVpJyksXG4gICAgICBFbGVtZW50ID0gZWFzeXVpLkVsZW1lbnQ7XG5cbmNvbnN0IERyb3BwYWJsZUVsZW1lbnQgPSByZXF1aXJlKCcuL2Ryb3BwYWJsZUVsZW1lbnQnKTtcblxuY2xhc3MgUnViYmlzaEJpbiBleHRlbmRzIERyb3BwYWJsZUVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihzZWxlY3RvciwgcmVtb3ZlSGFuZGxlciA9IGZ1bmN0aW9uKHBhdGhNYXBzLCBkb25lKSB7IGRvbmUoKTsgfSApIHtcbiAgICBjb25zdCBkcm9wcGFibGVFbGVtZW50TW92ZUhhbmRsZXIgPSByZW1vdmVIYW5kbGVyOyAgLy8vXG4gICAgXG4gICAgc3VwZXIoc2VsZWN0b3IsIGRyb3BwYWJsZUVsZW1lbnRNb3ZlSGFuZGxlcik7XG5cbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBnZXRNYXJrZWREaXJlY3RvcnkoKSB7XG4gICAgY29uc3QgbWFya2VkRGlyZWN0b3J5ID0gbnVsbDtcbiAgICBcbiAgICByZXR1cm4gbWFya2VkRGlyZWN0b3J5O1xuICB9XG5cbiAgZ2V0RGlyZWN0b3J5T3ZlcmxhcHBpbmdEcmFnZ2FibGVFbnRyeShkcmFnZ2FibGVFbnRyeSkge1xuICAgIGNvbnN0IGRpcmVjdG9yeU92ZXJsYXBwaW5nRHJhZ2dhYmxlRW50cnkgPSBudWxsOyAvLy9cblxuICAgIHJldHVybiBkaXJlY3RvcnlPdmVybGFwcGluZ0RyYWdnYWJsZUVudHJ5O1xuICB9XG5cbiAgYWRkTWFya2VyKGRyYWdnYWJsZUVudHJ5LCBkaXJlY3RvcnlPdmVybGFwcGluZ0RyYWdnYWJsZUVudHJ5KSB7XG4gICAgdGhpcy5vcGVuKCk7XG4gIH1cblxuICByZW1vdmVNYXJrZXIoKSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgaXNNYXJrZWQoKSB7XG4gICAgY29uc3Qgb3BlbiA9IHRoaXMuaXNPcGVuKCksXG4gICAgICAgICAgbWFya2VkID0gb3BlbjsgIC8vL1xuICAgIFxuICAgIHJldHVybiBtYXJrZWQ7XG4gIH1cblxuICBpc1RvQmVNYXJrZWQoZHJhZ2dhYmxlRW50cnkpIHtcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLmdldEJvdW5kcygpLFxuICAgICAgICAgIGRyYWdnYWJsZUVudHJ5Q29sbGFwc2VkQm91bmRzID0gZHJhZ2dhYmxlRW50cnkuZ2V0Q29sbGFwc2VkQm91bmRzKCksXG4gICAgICAgICAgb3ZlcmxhcHBpbmdEcmFnZ2FibGVFbnRyeUNvbGxhcHNlZEJvdW5kcyA9IGJvdW5kcy5hcmVPdmVybGFwcGluZyhkcmFnZ2FibGVFbnRyeUNvbGxhcHNlZEJvdW5kcyksXG4gICAgICAgICAgdG9CZU1hcmtlZCA9IG92ZXJsYXBwaW5nRHJhZ2dhYmxlRW50cnlDb2xsYXBzZWRCb3VuZHM7IC8vL1xuXG4gICAgcmV0dXJuIHRvQmVNYXJrZWQ7XG4gIH1cbiAgXG4gIGRyYWdnaW5nKGRyYWdnYWJsZUVudHJ5LCBleHBsb3Jlcikge1xuICAgIGNvbnN0IG1hcmtlZCA9IHRoaXMuaXNNYXJrZWQoKTtcblxuICAgIGlmIChtYXJrZWQpIHtcbiAgICAgIGNvbnN0IHRvQmVNYXJrZWQgPSB0aGlzLmlzVG9CZU1hcmtlZChkcmFnZ2FibGVFbnRyeSk7XG5cbiAgICAgIGlmICghdG9CZU1hcmtlZCkge1xuICAgICAgICBjb25zdCBkcm9wcGFibGVFbGVtZW50VG9CZU1hcmtlZCA9IHRoaXMuZ2V0RHJvcHBhYmxlRWxlbWVudFRvQmVNYXJrZWQoZHJhZ2dhYmxlRW50cnkpO1xuXG4gICAgICAgIGlmIChkcm9wcGFibGVFbGVtZW50VG9CZU1hcmtlZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IGRpcmVjdG9yeU92ZXJsYXBwaW5nRHJhZ2dhYmxlRW50cnkgPSBkcm9wcGFibGVFbGVtZW50VG9CZU1hcmtlZC5nZXREaXJlY3RvcnlPdmVybGFwcGluZ0RyYWdnYWJsZUVudHJ5KGRyYWdnYWJsZUVudHJ5KTtcblxuICAgICAgICAgIGRyb3BwYWJsZUVsZW1lbnRUb0JlTWFya2VkLmFkZE1hcmtlcihkcmFnZ2FibGVFbnRyeSwgZGlyZWN0b3J5T3ZlcmxhcHBpbmdEcmFnZ2FibGVFbnRyeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXhwbG9yZXIuYWRkTWFya2VySW5QbGFjZShkcmFnZ2FibGVFbnRyeSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbW92ZU1hcmtlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1vdmVEaXJlY3RvcnkoZGlyZWN0b3J5LCBzb3VyY2VEaXJlY3RvcnlQYXRoLCBtb3ZlZERpcmVjdG9yeVBhdGgpIHtcbiAgICBpZiAobW92ZWREaXJlY3RvcnlQYXRoID09PSBudWxsKSB7XG4gICAgICBjb25zdCBleHBsb3JlciA9IGRpcmVjdG9yeS5nZXRFeHBsb3JlcigpLFxuICAgICAgICAgICAgZGlyZWN0b3J5UGF0aCA9IHNvdXJjZURpcmVjdG9yeVBhdGg7ICAvLy9cblxuICAgICAgZXhwbG9yZXIucmVtb3ZlRGlyZWN0b3J5KGRpcmVjdG9yeVBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIG1vdmVGaWxlKGZpbGUsIHNvdXJjZUZpbGVQYXRoLCBtb3ZlZEZpbGVQYXRoKSB7XG4gICAgaWYgKG1vdmVkRmlsZVBhdGggPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGV4cGxvcmVyID0gZmlsZS5nZXRFeHBsb3JlcigpLFxuICAgICAgICAgICAgZmlsZVBhdGggPSBzb3VyY2VGaWxlUGF0aDsgIC8vL1xuXG4gICAgICBleHBsb3Jlci5yZW1vdmVGaWxlKGZpbGVQYXRoKTtcbiAgICB9XG4gIH1cblxuICBvcGVuKCkge1xuICAgIHRoaXMuYWRkQ2xhc3MoJ29wZW4nKTtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ29wZW4nKTtcbiAgfVxuXG4gIGlzT3BlbigpIHtcbiAgICBjb25zdCBvcGVuID0gdGhpcy5oYXNDbGFzcygnb3BlbicpO1xuICAgIFxuICAgIHJldHVybiBvcGVuO1xuICB9XG5cbiAgcGF0aE1hcHNGcm9tRHJhZ2dhYmxlRW50cmllcyhkcmFnZ2FibGVFbnRyaWVzLCBzb3VyY2VQYXRoLCB0YXJnZXRQYXRoKSB7XG4gICAgY29uc3QgcGF0aE1hcHMgPSBkcmFnZ2FibGVFbnRyaWVzLm1hcChmdW5jdGlvbihkcmFnZ2FibGVFbnRyeSkge1xuICAgICAgY29uc3QgcGF0aE1hcCA9IHt9LFxuICAgICAgICAgICAgZHJhZ2dhYmxlRW50cnlQYXRoID0gZHJhZ2dhYmxlRW50cnkuZ2V0UGF0aCgpLFxuICAgICAgICAgICAgc291cmNlRHJhZ2dhYmxlRW50cnlQYXRoID0gZHJhZ2dhYmxlRW50cnlQYXRoLCAgLy8vXG4gICAgICAgICAgICB0YXJnZXREcmFnZ2FibGVFbnRyeVBhdGggPSBudWxsO1xuXG4gICAgICBwYXRoTWFwW3NvdXJjZURyYWdnYWJsZUVudHJ5UGF0aF0gPSB0YXJnZXREcmFnZ2FibGVFbnRyeVBhdGg7XG5cbiAgICAgIHJldHVybiBwYXRoTWFwO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHBhdGhNYXBzO1xuICB9XG5cbiAgc3RhdGljIGNsb25lKHNlbGVjdG9yLCByZW1vdmVIYW5kbGVyKSB7XG4gICAgcmV0dXJuIEVsZW1lbnQuY2xvbmUoUnViYmlzaEJpbiwgc2VsZWN0b3IsIHJlbW92ZUhhbmRsZXIpO1xuICB9XG5cbiAgc3RhdGljIGZyb21IVE1MKGh0bWwsIHJlbW92ZUhhbmRsZXIpIHtcbiAgICByZXR1cm4gRWxlbWVudC5mcm9tSFRNTChSdWJiaXNoQmluLCBodG1sLCByZW1vdmVIYW5kbGVyKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgeyBvblJlbW92ZSB9ID0gcHJvcGVydGllcyxcbiAgICAgICAgICByZW1vdmVIYW5kbGVyID0gb25SZW1vdmU7IC8vL1xuXG4gICAgcmV0dXJuIEVsZW1lbnQuZnJvbVByb3BlcnRpZXMoUnViYmlzaEJpbiwgcHJvcGVydGllcywgcmVtb3ZlSGFuZGxlcik7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihSdWJiaXNoQmluLCB7XG4gIHRhZ05hbWU6ICdkaXYnLFxuICBpZ25vcmVkQXR0cmlidXRlczogW1xuICAgICdvblJlbW92ZSdcbiAgXVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUnViYmlzaEJpbjtcbiJdfQ==