UNPKG

easyui-draganddrop

Version:

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

214 lines (171 loc) 20.6 kB
'use strict'; 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 util = require('./util'), options = require('./options'); var DropTarget = function (_Element) { _inherits(DropTarget, _Element); function DropTarget(selector, moveHandler) { _classCallCheck(this, DropTarget); var _this = _possibleConstructorReturn(this, (DropTarget.__proto__ || Object.getPrototypeOf(DropTarget)).call(this, selector)); _this.moveHandler = moveHandler; _this.dropTargets = []; return _this; } _createClass(DropTarget, [{ key: 'addDropTarget', value: function addDropTarget(dropTarget) { this.dropTargets.push(dropTarget); } }, { key: 'removeDropTarget', value: function removeDropTarget(dropTarget) { var index = indexOf(this.dropTargets, dropTarget), found = index !== -1; if (found) { this.dropTargets.splice(index, 1); } } }, { key: 'isOverlappingDraggableEntry', value: function isOverlappingDraggableEntry(draggableEntryCollapsedBounds) { var bounds = this.getBounds(), boundsOverlappingDraggableEntry = bounds.areOverlapping(draggableEntryCollapsedBounds), overlappingDraggableEntry = boundsOverlappingDraggableEntry; return overlappingDraggableEntry; } }, { key: 'getDropTargetToBeMarked', value: function getDropTargetToBeMarked(draggableEntry) { var dropTargetToBeMarked = this.dropTargets.reduce(function (dropTargetToBeMarked, dropTarget) { if (dropTargetToBeMarked === null) { if (dropTarget.isToBeMarked(draggableEntry)) { /// dropTargetToBeMarked = dropTarget; } } return dropTargetToBeMarked; }, null); return dropTargetToBeMarked; } }, { key: 'getMarkedDropTarget', value: function getMarkedDropTarget() { var markedDropTarget = this.dropTargets.reduce(function (markedDropTarget, dropTarget) { if (markedDropTarget === null) { var dropTargetMarked = dropTarget.isMarked(); if (dropTargetMarked) { markedDropTarget = dropTarget; } } return markedDropTarget; }, null); return markedDropTarget; } }, { key: 'removeMarkerGlobally', value: function removeMarkerGlobally() { var marked = this.isMarked(); if (marked) { this.removeMarker(); } else { var markedDropTarget = this.getMarkedDropTarget(); markedDropTarget.removeMarker(); } } }, { key: 'moveDraggableEntries', value: function moveDraggableEntries(draggableEntries, sourcePath, targetPath, done) { var pathMaps = this.pathMapsFromDraggableEntries(draggableEntries, sourcePath, targetPath); this.moveHandler(pathMaps, function () { var 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); } } var draggableEntryPath = draggableEntry.getPath(); if (draggableEntryPath !== null) { var _sourcePath = draggableEntryPath, /// pathMap = find(pathMaps, function (pathMap) { var sourceDraggableEntryPath = _sourcePath, movedPath = pathMap[sourceDraggableEntryPath], found = movedPath !== undefined; return found; }), movedPath = pathMap[_sourcePath]; this.moveDraggableEntry(draggableEntry, _sourcePath, movedPath); } }.bind(this)); done(); }.bind(this)); } }, { key: 'moveDraggableEntry', value: function moveDraggableEntry(draggableEntry, sourcePath, movedPath) { var draggableEntryDirectory = draggableEntry.isDirectory(); if (draggableEntryDirectory) { var directory = draggableEntry, /// sourceDirectoryPath = sourcePath, /// movedDirectoryPath = movedPath; this.moveDirectory(directory, sourceDirectoryPath, movedDirectoryPath); } else { var file = draggableEntry, /// sourceFilePath = sourcePath, /// movedFilePath = movedPath; /// this.moveFile(file, sourceFilePath, movedFilePath); } } }]); return DropTarget; }(Element); module.exports = DropTarget; function indexOf(array, element) { var index = -1; array.some(function (currentElement, currentElementIndex) { if (currentElement === element) { index = currentElementIndex; return true; } else { return false; } }); return index; } function find(array, callback) { var 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]; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2VzNi9kcm9wVGFyZ2V0LmpzIl0sIm5hbWVzIjpbImVhc3l1aSIsInJlcXVpcmUiLCJFbGVtZW50IiwidXRpbCIsIm9wdGlvbnMiLCJEcm9wVGFyZ2V0Iiwic2VsZWN0b3IiLCJtb3ZlSGFuZGxlciIsImRyb3BUYXJnZXRzIiwiZHJvcFRhcmdldCIsInB1c2giLCJpbmRleCIsImluZGV4T2YiLCJmb3VuZCIsInNwbGljZSIsImRyYWdnYWJsZUVudHJ5Q29sbGFwc2VkQm91bmRzIiwiYm91bmRzIiwiZ2V0Qm91bmRzIiwiYm91bmRzT3ZlcmxhcHBpbmdEcmFnZ2FibGVFbnRyeSIsImFyZU92ZXJsYXBwaW5nIiwib3ZlcmxhcHBpbmdEcmFnZ2FibGVFbnRyeSIsImRyYWdnYWJsZUVudHJ5IiwiZHJvcFRhcmdldFRvQmVNYXJrZWQiLCJyZWR1Y2UiLCJpc1RvQmVNYXJrZWQiLCJtYXJrZWREcm9wVGFyZ2V0IiwiZHJvcFRhcmdldE1hcmtlZCIsImlzTWFya2VkIiwibWFya2VkIiwicmVtb3ZlTWFya2VyIiwiZ2V0TWFya2VkRHJvcFRhcmdldCIsImRyYWdnYWJsZUVudHJpZXMiLCJzb3VyY2VQYXRoIiwidGFyZ2V0UGF0aCIsImRvbmUiLCJwYXRoTWFwcyIsInBhdGhNYXBzRnJvbURyYWdnYWJsZUVudHJpZXMiLCJsYXN0RHJhZ2dhYmxlRW50cnkiLCJsYXN0IiwiZmlyc3REcmFnZ2FibGVFbnRyeSIsImZpcnN0IiwiZmlyc3REcmFnZ2FibGVFbnRyeUV4cGxvcmVyIiwiZ2V0RXhwbG9yZXIiLCJkcmFnZ2FibGVFbnRyaWVzRXhwbG9yZXIiLCJyZW1vdmVFbXB0eVBhcmVudERpcmVjdG9yaWVzIiwiaGFzT3B0aW9uIiwiUkVNT1ZFX0VNUFRZX1BBUkVOVF9ESVJFQ1RPUklFUyIsInVuc2V0T3B0aW9uIiwiZm9yRWFjaCIsInNldE9wdGlvbiIsImRyYWdnYWJsZUVudHJ5UGF0aCIsImdldFBhdGgiLCJwYXRoTWFwIiwiZmluZCIsInNvdXJjZURyYWdnYWJsZUVudHJ5UGF0aCIsIm1vdmVkUGF0aCIsInVuZGVmaW5lZCIsIm1vdmVEcmFnZ2FibGVFbnRyeSIsImJpbmQiLCJkcmFnZ2FibGVFbnRyeURpcmVjdG9yeSIsImlzRGlyZWN0b3J5IiwiZGlyZWN0b3J5Iiwic291cmNlRGlyZWN0b3J5UGF0aCIsIm1vdmVkRGlyZWN0b3J5UGF0aCIsIm1vdmVEaXJlY3RvcnkiLCJmaWxlIiwic291cmNlRmlsZVBhdGgiLCJtb3ZlZEZpbGVQYXRoIiwibW92ZUZpbGUiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXJyYXkiLCJlbGVtZW50Iiwic29tZSIsImN1cnJlbnRFbGVtZW50IiwiY3VycmVudEVsZW1lbnRJbmRleCIsImNhbGxiYWNrIiwibGVuZ3RoIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztBQUVBLElBQU1BLFNBQVNDLFFBQVEsUUFBUixDQUFmO0FBQUEsSUFDTUMsVUFBVUYsT0FBT0UsT0FEdkI7O0FBR0EsSUFBTUMsT0FBT0YsUUFBUSxRQUFSLENBQWI7QUFBQSxJQUNNRyxVQUFVSCxRQUFRLFdBQVIsQ0FEaEI7O0lBR01JLFU7OztBQUNKLHNCQUFZQyxRQUFaLEVBQXNCQyxXQUF0QixFQUFtQztBQUFBOztBQUFBLHdIQUMzQkQsUUFEMkI7O0FBR2pDLFVBQUtDLFdBQUwsR0FBbUJBLFdBQW5COztBQUVBLFVBQUtDLFdBQUwsR0FBbUIsRUFBbkI7QUFMaUM7QUFNbEM7Ozs7a0NBRWFDLFUsRUFBWTtBQUN4QixXQUFLRCxXQUFMLENBQWlCRSxJQUFqQixDQUFzQkQsVUFBdEI7QUFDRDs7O3FDQUVnQkEsVSxFQUFZO0FBQzNCLFVBQU1FLFFBQVFDLFFBQVEsS0FBS0osV0FBYixFQUEwQkMsVUFBMUIsQ0FBZDtBQUFBLFVBQ01JLFFBQVNGLFVBQVUsQ0FBQyxDQUQxQjs7QUFHQSxVQUFJRSxLQUFKLEVBQVc7QUFDVCxhQUFLTCxXQUFMLENBQWlCTSxNQUFqQixDQUF3QkgsS0FBeEIsRUFBK0IsQ0FBL0I7QUFDRDtBQUNGOzs7Z0RBRTJCSSw2QixFQUErQjtB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QU9oRSxLQUFQO0FBQ0Q7O0FBRUQsU0FBUzBDLElBQVQsQ0FBY2tCLEtBQWQsRUFBcUJLLFFBQXJCLEVBQStCO0FBQzdCLE1BQUlKLFVBQVUsSUFBZDs7QUFFQUQsUUFBTUUsSUFBTixDQUFXLFVBQVNDLGNBQVQsRUFBeUI7QUFDbEMsUUFBSUUsU0FBU0YsY0FBVCxDQUFKLEVBQThCO0FBQzVCRixnQkFBVUUsY0FBVjs7QUFFQSxhQUFPLElBQVA7QUFDRCxLQUpELE1BSU87QUFDTCxhQUFPLEtBQVA7QUFDRDtBQUNGLEdBUkQ7O0FBVUEsU0FBT0YsT0FBUDtBQUNEOztBQUVELFNBQVNoQyxLQUFULENBQWUrQixLQUFmLEVBQXNCO0FBQUUsU0FBT0EsTUFBTSxDQUFOLENBQVA7QUFBa0I7QUFDMUMsU0FBU2pDLElBQVQsQ0FBY2lDLEtBQWQsRUFBcUI7QUFBRSxTQUFPQSxNQUFNQSxNQUFNTSxNQUFOLEdBQWUsQ0FBckIsQ0FBUDtBQUFpQyIsImZpbGUiOiJkcm9wVGFyZ2V0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBlYXN5dWkgPSByZXF1aXJlKCdlYXN5dWknKSxcbiAgICAgIEVsZW1lbnQgPSBlYXN5dWkuRWxlbWVudDtcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpLFxuICAgICAgb3B0aW9ucyA9IHJlcXVpcmUoJy4vb3B0aW9ucycpO1xuXG5jbGFzcyBEcm9wVGFyZ2V0IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9yLCBtb3ZlSGFuZGxlcikge1xuICAgIHN1cGVyKHNlbGVjdG9yKTtcbiAgICBcbiAgICB0aGlzLm1vdmVIYW5kbGVyID0gbW92ZUhhbmRsZXI7XG5cbiAgICB0aGlzLmRyb3BUYXJnZXRzID0gW107XG4gIH1cblxuICBhZGREcm9wVGFyZ2V0KGRyb3BUYXJnZXQpIHtcbiAgICB0aGlzLmRyb3BUYXJnZXRzLnB1c2goZHJvcFRhcmdldCk7XG4gIH1cblxuICByZW1vdmVEcm9wVGFyZ2V0KGRyb3BUYXJnZXQpIHtcbiAgICBjb25zdCBpbmRleCA9IGluZGV4T2YodGhpcy5kcm9wVGFyZ2V0cywgZHJvcFRhcmdldCksXG4gICAgICAgICAgZm91bmQgPSAoaW5kZXggIT09IC0xKTtcblxuICAgIGlmIChmb3VuZCkge1xuICAgICAgdGhpcy5kcm9wVGFyZ2V0cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIGlzT3ZlcmxhcHBpbmdEcmFnZ2FibGVFbnRyeShkcmFnZ2FibGVFbnRyeUNvbGxhcHNlZEJvdW5kcykge1xuICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0Qm91bmRzKCksXG4gICAgICAgICAgYm91bmRzT3ZlcmxhcHBpbmdEcmFnZ2FibGVFbnRyeSA9IGJvdW5kcy5hcmVPdmVybGFwcGluZyhkcmFnZ2FibGVFbnRyeUNvbGxhcHNlZEJvdW5kcyksXG4gICAgICAgICAgb3ZlcmxhcHBpbmdEcmFnZ2FibGVFbnRyeSA9IGJvdW5kc092ZXJsYXBwaW5nRHJhZ2dhYmxlRW50cnk7XG5cbiAgICByZXR1cm4gb3ZlcmxhcHBpbmdEcmFnZ2FibGVFbnRyeTtcbiAgfVxuXG4gIGdldERyb3BUYXJnZXRUb0JlTWFya2VkKGRyYWdnYWJsZUVudHJ5KSB7XG4gICAgY29uc3QgZHJvcFRhcmdldFRvQmVNYXJrZWQgPSB0aGlzLmRyb3BUYXJnZXRzLnJlZHVjZShmdW5jdGlvbihkcm9wVGFyZ2V0VG9CZU1hcmtlZCwgZHJvcFRhcmdldCkge1xuICAgICAgaWYgKGRyb3BUYXJnZXRUb0JlTWFya2VkID09PSBudWxsKSB7XG4gICAgICAgIGlmIChkcm9wVGFyZ2V0LmlzVG9CZU1hcmtlZChkcmFnZ2FibGVFbnRyeSkpIHsgLy8vXG4gICAgICAgICAgZHJvcFRhcmdldFRvQmVNYXJrZWQgPSBkcm9wVGFyZ2V0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkcm9wVGFyZ2V0VG9CZU1hcmtlZDtcbiAgICB9LCBudWxsKTtcblxuICAgIHJldHVybiBkcm9wVGFyZ2V0VG9CZU1hcmtlZDtcbiAgfVxuXG4gIGdldE1hcmtlZERyb3BUYXJnZXQoKSB7XG4gICAgY29uc3QgbWFya2VkRHJvcFRhcmdldCA9IHRoaXMuZHJvcFRhcmdldHMucmVkdWNlKGZ1bmN0aW9uKG1hcmtlZERyb3BUYXJnZXQsIGRyb3BUYXJnZXQpIHtcbiAgICAgIGlmIChtYXJrZWREcm9wVGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGRyb3BUYXJnZXRNYXJrZWQgPSBkcm9wVGFyZ2V0LmlzTWFya2VkKCk7XG4gICAgICAgIFxuICAgICAgICBpZiAoZHJvcFRhcmdldE1hcmtlZCkge1xuICAgICAgICAgIG1hcmtlZERyb3BUYXJnZXQgPSBkcm9wVGFyZ2V0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtYXJrZWREcm9wVGFyZ2V0O1xuICAgIH0sIG51bGwpO1xuXG4gICAgcmV0dXJuIG1hcmtlZERyb3BUYXJnZXQ7XG4gIH1cblxuICByZW1vdmVNYXJrZXJHbG9iYWxseSgpIHtcbiAgICBjb25zdCBtYXJrZWQgPSB0aGlzLmlzTWFya2VkKCk7XG5cbiAgICBpZiAobWFya2VkKSB7XG4gICAgICB0aGlzLnJlbW92ZU1hcmtlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBtYXJrZWREcm9wVGFyZ2V0ID0gdGhpcy5nZXRNYXJrZWREcm9wVGFyZ2V0KCk7XG5cbiAgICAgIG1hcmtlZERyb3BUYXJnZXQucmVtb3ZlTWFya2VyKCk7XG4gICAgfVxuICB9XG5cbiAgbW92ZURyYWdnYWJsZUVudHJpZXMoZHJhZ2dhYmxlRW50cmllcywgc291cmNlUGF0aCwgdGFyZ2V0UGF0aCwgZG9uZSkge1xuICAgIGNvbnN0IHBhdGhNYXBzID0gdGhpcy5wYXRoTWFwc0Zyb21EcmFnZ2FibGVFbnRyaWVzKGRyYWdnYWJsZUVudHJpZXMsIHNvdXJjZVBhdGgsIHRhcmdldFBhdGgpO1xuXG4gICAgdGhpcy5tb3ZlSGFuZGxlcihwYXRoTWFwcywgZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBsYXN0RHJhZ2dhYmxlRW50cnkgPSBsYXN0KGRyYWdnYWJsZUVudHJpZXMpLFxuICAgICAgICAgICAgZmlyc3REcmFnZ2FibGVFbnRyeSA9IGZpcnN0KGRyYWdnYWJsZUVudHJpZXMpLFxuICAgICAgICAgICAgZmlyc3REcmFnZ2FibGVFbnRyeUV4cGxvcmVyID0gZmlyc3REcmFnZ2FibGVFbnRyeS5nZXRFeHBsb3JlcigpLFxuICAgICAgICAgICAgZHJhZ2dhYmxlRW50cmllc0V4cGxvcmVyID0gZmlyc3REcmFnZ2FibGVFbnRyeUV4cGxvcmVyLCAvLy9cbiAgICAgICAgICAgIHJlbW92ZUVtcHR5UGFyZW50RGlyZWN0b3JpZXMgPSBkcmFnZ2FibGVFbnRyaWVzRXhwbG9yZXIuaGFzT3B0aW9uKG9wdGlvbnMuUkVNT1ZFX0VNUFRZX1BBUkVOVF9ESVJFQ1RPUklFUyk7XG5cbiAgICAgIGlmIChyZW1vdmVFbXB0eVBhcmVudERpcmVjdG9yaWVzKSB7XG4gICAgICAgIGRyYWdnYWJsZUVudHJpZXNFeHBsb3Jlci51bnNldE9wdGlvbihvcHRpb25zLlJFTU9WRV9FTVBUWV9QQVJFTlRfRElSRUNUT1JJRVMpO1xuICAgICAgfVxuXG4gICAgICBkcmFnZ2FibGVFbnRyaWVzLmZvckVhY2goZnVuY3Rpb24oZHJhZ2dhYmxlRW50cnkpIHtcbiAgICAgICAgaWYgKGRyYWdnYWJsZUVudHJ5ID09PSBsYXN0RHJhZ2dhYmxlRW50cnkpIHtcbiAgICAgICAgICBpZiAocmVtb3ZlRW1wdHlQYXJlbnREaXJlY3Rvcmllcykge1xuICAgICAgICAgICAgZHJhZ2dhYmxlRW50cmllc0V4cGxvcmVyLnNldE9wdGlvbihvcHRpb25zLlJFTU9WRV9FTVBUWV9QQVJFTlRfRElSRUNUT1JJRVMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRyYWdnYWJsZUVudHJ5UGF0aCA9IGRyYWdnYWJsZUVudHJ5LmdldFBhdGgoKTtcblxuICAgICAgICBpZiAoZHJhZ2dhYmxlRW50cnlQYXRoICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGRyYWdnYWJsZUVudHJ5UGF0aCwgIC8vL1xuICAgICAgICAgICAgICBwYXRoTWFwID0gZmluZChwYXRoTWFwcywgZnVuY3Rpb24ocGF0aE1hcCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZURyYWdnYWJsZUVudHJ5UGF0aCA9IHNvdXJjZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgbW92ZWRQYXRoID0gcGF0aE1hcFtzb3VyY2VEcmFnZ2FibGVFbnRyeVBhdGhdLFxuICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gKG1vdmVkUGF0aCAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIG1vdmVkUGF0aCA9IHBhdGhNYXBbc291cmNlUGF0aF07XG5cbiAgICAgICAgICB0aGlzLm1vdmVEcmFnZ2FibGVFbnRyeShkcmFnZ2FibGVFbnRyeSwgc291cmNlUGF0aCwgbW92ZWRQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfS5iaW5kKHRoaXMpKTtcblxuICAgICAgZG9uZSgpO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gIH1cblxuICBtb3ZlRHJhZ2dhYmxlRW50cnkoZHJhZ2dhYmxlRW50cnksIHNvdXJjZVBhdGgsIG1vdmVkUGF0aCkge1xuICAgIGNvbnN0IGRyYWdnYWJsZUVudHJ5RGlyZWN0b3J5ID0gZHJhZ2dhYmxlRW50cnkuaXNEaXJlY3RvcnkoKTtcblxuICAgIGlmIChkcmFnZ2FibGVFbnRyeURpcmVjdG9yeSkge1xuICAgICAgY29uc3QgZGlyZWN0b3J5ID0gZHJhZ2dhYmxlRW50cnksICAvLy9cbiAgICAgICAgICAgIHNvdXJjZURpcmVjdG9yeVBhdGggPSBzb3VyY2VQYXRoLCAvLy9cbiAgICAgICAgICAgIG1vdmVkRGlyZWN0b3J5UGF0aCA9IG1vdmVkUGF0aDtcblxuICAgICAgdGhpcy5tb3ZlRGlyZWN0b3J5KGRpcmVjdG9yeSwgc291cmNlRGlyZWN0b3J5UGF0aCwgbW92ZWREaXJlY3RvcnlQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlsZSA9IGRyYWdnYWJsZUVudHJ5LCAvLy9cbiAgICAgICAgICAgIHNvdXJjZUZpbGVQYXRoID0gc291cmNlUGF0aCwgIC8vL1xuICAgICAgICAgICAgbW92ZWRGaWxlUGF0aCA9IG1vdmVkUGF0aDsgIC8vL1xuXG4gICAgICB0aGlzLm1vdmVGaWxlKGZpbGUsIHNvdXJjZUZpbGVQYXRoLCBtb3ZlZEZpbGVQYXRoKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEcm9wVGFyZ2V0O1xuXG5mdW5jdGlvbiBpbmRleE9mKGFycmF5LCBlbGVtZW50KSB7XG4gIGxldCBpbmRleCA9IC0xO1xuXG4gIGFycmF5LnNvbWUoZnVuY3Rpb24oY3VycmVudEVsZW1lbnQsIGN1cnJlbnRFbGVtZW50SW5kZXgpIHtcbiAgICBpZiAoY3VycmVudEVsZW1lbnQgPT09IGVsZW1lbnQpIHtcbiAgICAgIGluZGV4ID0gY3VycmVudEVsZW1lbnRJbmRleDtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBpbmRleDtcbn1cblxuZnVuY3Rpb24gZmluZChhcnJheSwgY2FsbGJhY2spIHtcbiAgbGV0IGVsZW1lbnQgPSBudWxsO1xuICBcbiAgYXJyYXkuc29tZShmdW5jdGlvbihjdXJyZW50RWxlbWVudCkge1xuICAgIGlmIChjYWxsYmFjayhjdXJyZW50RWxlbWVudCkpIHtcbiAgICAgIGVsZW1lbnQgPSBjdXJyZW50RWxlbWVudDtcbiAgICAgIFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuICBcbiAgcmV0dXJuIGVsZW1lbnQ7ICBcbn1cblxuZnVuY3Rpb24gZmlyc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzBdOyB9XG5mdW5jdGlvbiBsYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTsgfVxuIl19