From 3dda21786791687e236c83546e101a3754c51718 Mon Sep 17 00:00:00 2001 From: John Furrow Date: Sat, 16 Jan 2016 19:29:57 -0800 Subject: [PATCH] Allow parent directory to be collapsed & expanded --- .../torrent-list/DirectoryFileList.js | 1 + .../components/torrent-list/TorrentFiles.js | 31 +++++++++++++++++-- server/assets/app.js | 4 +-- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/client/source/scripts/components/torrent-list/DirectoryFileList.js b/client/source/scripts/components/torrent-list/DirectoryFileList.js index 806db4cd..32a0fa53 100644 --- a/client/source/scripts/components/torrent-list/DirectoryFileList.js +++ b/client/source/scripts/components/torrent-list/DirectoryFileList.js @@ -7,6 +7,7 @@ export default class DirectoryFiles extends React.Component { let branch = Object.assign([], this.props.branch); branch.sort((a, b) => { + console.log(a, b); return a.filename.localeCompare(b.filename); }); diff --git a/client/source/scripts/components/torrent-list/TorrentFiles.js b/client/source/scripts/components/torrent-list/TorrentFiles.js index e3e924b9..f8962f86 100644 --- a/client/source/scripts/components/torrent-list/TorrentFiles.js +++ b/client/source/scripts/components/torrent-list/TorrentFiles.js @@ -4,7 +4,21 @@ import FolderOpenSolid from '../icons/FolderOpenSolid'; import DirectoryTree from './DirectoryTree'; import File from '../icons/File'; +const METHODS_TO_BIND = ['handleParentDirectoryClick']; + export default class TorrentFiles extends React.Component { + constructor() { + super(); + + this.state = { + expanded: true + }; + + METHODS_TO_BIND.forEach((method) => { + this[method] = this[method].bind(this); + }); + } + constructDirectoryTree(tree = {}, directory, file, depth = 0) { if (depth < file.pathComponents.length - 1) { depth++; @@ -39,13 +53,20 @@ export default class TorrentFiles extends React.Component { if (files) { // We've received full file details from the client. + let fileList = null; + + if (this.state.expanded) { + fileList = this.getFileList(files); + } + return (
-
+
{parentDirectory}
- {this.getFileList(files)} + {fileList}
); } else { @@ -65,6 +86,12 @@ export default class TorrentFiles extends React.Component { } } + handleParentDirectoryClick() { + this.setState({ + expanded: !this.state.expanded + }); + } + render() { return this.getFileData(this.props.torrent, this.props.files); } diff --git a/server/assets/app.js b/server/assets/app.js index b634440f..a4810e10 100644 --- a/server/assets/app.js +++ b/server/assets/app.js @@ -1466,7 +1466,7 @@ /* 237 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _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; }; })();\n\nvar _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x2 = parent; _x3 = property; _x4 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _iconsFolderOpenSolid = __webpack_require__(238);\n\nvar _iconsFolderOpenSolid2 = _interopRequireDefault(_iconsFolderOpenSolid);\n\nvar _DirectoryTree = __webpack_require__(239);\n\nvar _DirectoryTree2 = _interopRequireDefault(_DirectoryTree);\n\nvar _iconsFile = __webpack_require__(241);\n\nvar _iconsFile2 = _interopRequireDefault(_iconsFile);\n\nvar TorrentFiles = (function (_React$Component) {\n _inherits(TorrentFiles, _React$Component);\n\n function TorrentFiles() {\n _classCallCheck(this, TorrentFiles);\n\n _get(Object.getPrototypeOf(TorrentFiles.prototype), 'constructor', this).apply(this, arguments);\n }\n\n _createClass(TorrentFiles, [{\n key: 'constructDirectoryTree',\n value: function constructDirectoryTree(tree, directory, file) {\n if (tree === undefined) tree = {};\n var depth = arguments.length <= 3 || arguments[3] === undefined ? 0 : arguments[3];\n\n if (depth < file.pathComponents.length - 1) {\n depth++;\n tree[directory] = this.constructDirectoryTree(tree[directory], file.pathComponents[depth], file, depth);\n } else {\n if (!tree.files) {\n tree.files = [];\n }\n tree.files.push(file);\n }\n return tree;\n }\n }, {\n key: 'getFileList',\n value: function getFileList(files) {\n var _this = this;\n\n var tree = {};\n\n files.forEach(function (file) {\n _this.constructDirectoryTree(tree, file.pathComponents[0], file);\n });\n\n return _react2['default'].createElement(_DirectoryTree2['default'], { tree: tree, depth: 0 });\n }\n }, {\n key: 'getFileData',\n value: function getFileData(torrent, files) {\n var parentDirectory = torrent.directory;\n var filename = torrent.filename;\n\n if (files) {\n // We've received full file details from the client.\n return _react2['default'].createElement(\n 'div',\n { className: 'directory-tree torrent-details__section' },\n _react2['default'].createElement(\n 'div',\n { className: 'directory-tree__node directory-tree__parent-directory' },\n _react2['default'].createElement(_iconsFolderOpenSolid2['default'], null),\n parentDirectory\n ),\n this.getFileList(files)\n );\n } else {\n // We've only received the top-level file details from the torrent list.\n return _react2['default'].createElement(\n 'div',\n { className: 'directory-tree torrent-details__section' },\n _react2['default'].createElement(\n 'div',\n { className: 'directory-tree__node directory-tree__parent-directory' },\n _react2['default'].createElement(_iconsFolderOpenSolid2['default'], null),\n parentDirectory\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'directory-tree__node directory-tree__node--file' },\n _react2['default'].createElement(_iconsFile2['default'], null),\n filename\n )\n );\n }\n }\n }, {\n key: 'render',\n value: function render() {\n return this.getFileData(this.props.torrent, this.props.files);\n }\n }]);\n\n return TorrentFiles;\n})(_react2['default'].Component);\n\nexports['default'] = TorrentFiles;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy90b3JyZW50LWxpc3QvVG9ycmVudEZpbGVzLmpzP2FkMjAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQsaUNBQWlDLDJDQUEyQyxnQkFBZ0Isa0JBQWtCLE9BQU8sMkJBQTJCLHdEQUF3RCxnQ0FBZ0MsdURBQXVELDJEQUEyRCxFQUFFLEVBQUUseURBQXlELHFFQUFxRSw2REFBNkQsb0JBQW9CLEdBQUcsRUFBRTs7QUFFbGpCLHdDQUF3QyxtQkFBbUIsNEJBQTRCLGtEQUFrRCxnQkFBZ0Isa0RBQWtELDhEQUE4RCwwQkFBMEIsNENBQTRDLHVCQUF1QixrQkFBa0IsRUFBRSxPQUFPLGNBQWMsZ0JBQWdCLGdCQUFnQixlQUFlLDJCQUEyQixvQkFBb0IsRUFBRSxFQUFFLDRCQUE0QixtQkFBbUIsRUFBRSxPQUFPLHVCQUF1Qiw0QkFBNEIsa0JBQWtCLEVBQUUsOEJBQThCLEVBQUUsRUFBRTs7QUFFbHBCLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRixpREFBaUQsMENBQTBDLDBEQUEwRCxFQUFFOztBQUV2SiwwQ0FBMEMsK0RBQStELHFHQUFxRyxFQUFFLHlFQUF5RSxlQUFlLHlFQUF5RSxFQUFFLEVBQUUsdUhBQXVIOztBQUU1ZTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87O0FBRVAsMkVBQTJFLHVCQUF1QjtBQUNsRztBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdURBQXVEO0FBQ2xFO0FBQ0E7QUFDQSxhQUFhLHFFQUFxRTtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdURBQXVEO0FBQ2xFO0FBQ0E7QUFDQSxhQUFhLHFFQUFxRTtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSwrREFBK0Q7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7QUFDQSIsImZpbGUiOiIyMzcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmICgndmFsdWUnIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXG52YXIgX2dldCA9IGZ1bmN0aW9uIGdldChfeDIsIF94MywgX3g0KSB7IHZhciBfYWdhaW4gPSB0cnVlOyBfZnVuY3Rpb246IHdoaWxlIChfYWdhaW4pIHsgdmFyIG9iamVjdCA9IF94MiwgcHJvcGVydHkgPSBfeDMsIHJlY2VpdmVyID0gX3g0OyBfYWdhaW4gPSBmYWxzZTsgaWYgKG9iamVjdCA9PT0gbnVsbCkgb2JqZWN0ID0gRnVuY3Rpb24ucHJvdG90eXBlOyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IF94MiA9IHBhcmVudDsgX3gzID0gcHJvcGVydHk7IF94NCA9IHJlY2VpdmVyOyBfYWdhaW4gPSB0cnVlOyBkZXNjID0gcGFyZW50ID0gdW5kZWZpbmVkOyBjb250aW51ZSBfZnVuY3Rpb247IH0gfSBlbHNlIGlmICgndmFsdWUnIGluIGRlc2MpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9IH07XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24nKTsgfSB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09ICdmdW5jdGlvbicgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICcgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9pY29uc0ZvbGRlck9wZW5Tb2xpZCA9IHJlcXVpcmUoJy4uL2ljb25zL0ZvbGRlck9wZW5Tb2xpZCcpO1xuXG52YXIgX2ljb25zRm9sZGVyT3BlblNvbGlkMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2ljb25zRm9sZGVyT3BlblNvbGlkKTtcblxudmFyIF9EaXJlY3RvcnlUcmVlID0gcmVxdWlyZSgnLi9EaXJlY3RvcnlUcmVlJyk7XG5cbnZhciBfRGlyZWN0b3J5VHJlZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9EaXJlY3RvcnlUcmVlKTtcblxudmFyIF9pY29uc0ZpbGUgPSByZXF1aXJlKCcuLi9pY29ucy9GaWxlJyk7XG5cbnZhciBfaWNvbnNGaWxlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2ljb25zRmlsZSk7XG5cbnZhciBUb3JyZW50RmlsZXMgPSAoZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFRvcnJlbnRGaWxlcywgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gVG9ycmVudEZpbGVzKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUb3JyZW50RmlsZXMpO1xuXG4gICAgX2dldChPYmplY3QuZ2V0UHJvdG90eXBlT2YoVG9ycmVudEZpbGVzLnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoVG9ycmVudEZpbGVzLCBbe1xuICAgIGtleTogJ2NvbnN0cnVjdERpcmVjdG9yeVRyZWUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb25zdHJ1Y3REaXJlY3RvcnlUcmVlKHRyZWUsIGRpcmVjdG9yeSwgZmlsZSkge1xuICAgICAgaWYgKHRyZWUgPT09IHVuZGVmaW5lZCkgdHJlZSA9IHt9O1xuICAgICAgdmFyIGRlcHRoID0gYXJndW1lbnRzLmxlbmd0aCA8PSAzIHx8IGFyZ3VtZW50c1szXSA9PT0gdW5kZWZpbmVkID8gMCA6IGFyZ3VtZW50c1szXTtcblxuICAgICAgaWYgKGRlcHRoIDwgZmlsZS5wYXRoQ29tcG9uZW50cy5sZW5ndGggLSAxKSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICAgIHRyZWVbZGlyZWN0b3J5XSA9IHRoaXMuY29uc3RydWN0RGlyZWN0b3J5VHJlZSh0cmVlW2RpcmVjdG9yeV0sIGZpbGUucGF0aENvbXBvbmVudHNbZGVwdGhdLCBmaWxlLCBkZXB0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRyZWUuZmlsZXMpIHtcbiAgICAgICAgICB0cmVlLmZpbGVzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdHJlZS5maWxlcy5wdXNoKGZpbGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRyZWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0RmlsZUxpc3QnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGaWxlTGlzdChmaWxlcykge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIHRyZWUgPSB7fTtcblxuICAgICAgZmlsZXMuZm9yRWFjaChmdW5jdGlvbiAoZmlsZSkge1xuICAgICAgICBfdGhpcy5jb25zdHJ1Y3REaXJlY3RvcnlUcmVlKHRyZWUsIGZpbGUucGF0aENvbXBvbmVudHNbMF0sIGZpbGUpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfRGlyZWN0b3J5VHJlZTJbJ2RlZmF1bHQnXSwgeyB0cmVlOiB0cmVlLCBkZXB0aDogMCB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdnZXRGaWxlRGF0YScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEZpbGVEYXRhKHRvcnJlbnQsIGZpbGVzKSB7XG4gICAgICB2YXIgcGFyZW50RGlyZWN0b3J5ID0gdG9ycmVudC5kaXJlY3Rvcnk7XG4gICAgICB2YXIgZmlsZW5hbWUgPSB0b3JyZW50LmZpbGVuYW1lO1xuXG4gICAgICBpZiAoZmlsZXMpIHtcbiAgICAgICAgLy8gV2UndmUgcmVjZWl2ZWQgZnVsbCBmaWxlIGRldGFpbHMgZnJvbSB0aGUgY2xpZW50LlxuICAgICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICdkaXJlY3RvcnktdHJlZSB0b3JyZW50LWRldGFpbHNfX3NlY3Rpb24nIH0sXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAnZGlyZWN0b3J5LXRyZWVfX25vZGUgZGlyZWN0b3J5LXRyZWVfX3BhcmVudC1kaXJlY3RvcnknIH0sXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfaWNvbnNGb2xkZXJPcGVuU29saWQyWydkZWZhdWx0J10sIG51bGwpLFxuICAgICAgICAgICAgcGFyZW50RGlyZWN0b3J5XG4gICAgICAgICAgKSxcbiAgICAgICAgICB0aGlzLmdldEZpbGVMaXN0KGZpbGVzKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2UndmUgb25seSByZWNlaXZlZCB0aGUgdG9wLWxldmVsIGZpbGUgZGV0YWlscyBmcm9tIHRoZSB0b3JyZW50IGxpc3QuXG4gICAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ2RpcmVjdG9yeS10cmVlIHRvcnJlbnQtZGV0YWlsc19fc2VjdGlvbicgfSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6ICdkaXJlY3RvcnktdHJlZV9fbm9kZSBkaXJlY3RvcnktdHJlZV9fcGFyZW50LWRpcmVjdG9yeScgfSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9pY29uc0ZvbGRlck9wZW5Tb2xpZDJbJ2RlZmF1bHQnXSwgbnVsbCksXG4gICAgICAgICAgICBwYXJlbnREaXJlY3RvcnlcbiAgICAgICAgICApLFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2RpcmVjdG9yeS10cmVlX19ub2RlIGRpcmVjdG9yeS10cmVlX19ub2RlLS1maWxlJyB9LFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoX2ljb25zRmlsZTJbJ2RlZmF1bHQnXSwgbnVsbCksXG4gICAgICAgICAgICBmaWxlbmFtZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRGaWxlRGF0YSh0aGlzLnByb3BzLnRvcnJlbnQsIHRoaXMucHJvcHMuZmlsZXMpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUb3JyZW50RmlsZXM7XG59KShfcmVhY3QyWydkZWZhdWx0J10uQ29tcG9uZW50KTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gVG9ycmVudEZpbGVzO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2NsaWVudC9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL3RvcnJlbnQtbGlzdC9Ub3JyZW50RmlsZXMuanNcbiAqKiBtb2R1bGUgaWQgPSAyMzdcbiAqKiBtb2R1bGUgY2h1bmtzID0gMFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0="); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _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; }; })();\n\nvar _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x2 = parent; _x3 = property; _x4 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _iconsFolderOpenSolid = __webpack_require__(238);\n\nvar _iconsFolderOpenSolid2 = _interopRequireDefault(_iconsFolderOpenSolid);\n\nvar _DirectoryTree = __webpack_require__(239);\n\nvar _DirectoryTree2 = _interopRequireDefault(_DirectoryTree);\n\nvar _iconsFile = __webpack_require__(241);\n\nvar _iconsFile2 = _interopRequireDefault(_iconsFile);\n\nvar METHODS_TO_BIND = ['handleParentDirectoryClick'];\n\nvar TorrentFiles = (function (_React$Component) {\n _inherits(TorrentFiles, _React$Component);\n\n function TorrentFiles() {\n var _this = this;\n\n _classCallCheck(this, TorrentFiles);\n\n _get(Object.getPrototypeOf(TorrentFiles.prototype), 'constructor', this).call(this);\n\n this.state = {\n expanded: true\n };\n\n METHODS_TO_BIND.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n }\n\n _createClass(TorrentFiles, [{\n key: 'constructDirectoryTree',\n value: function constructDirectoryTree(tree, directory, file) {\n if (tree === undefined) tree = {};\n var depth = arguments.length <= 3 || arguments[3] === undefined ? 0 : arguments[3];\n\n if (depth < file.pathComponents.length - 1) {\n depth++;\n tree[directory] = this.constructDirectoryTree(tree[directory], file.pathComponents[depth], file, depth);\n } else {\n if (!tree.files) {\n tree.files = [];\n }\n tree.files.push(file);\n }\n return tree;\n }\n }, {\n key: 'getFileList',\n value: function getFileList(files) {\n var _this2 = this;\n\n var tree = {};\n\n files.forEach(function (file) {\n _this2.constructDirectoryTree(tree, file.pathComponents[0], file);\n });\n\n return _react2['default'].createElement(_DirectoryTree2['default'], { tree: tree, depth: 0 });\n }\n }, {\n key: 'getFileData',\n value: function getFileData(torrent, files) {\n var parentDirectory = torrent.directory;\n var filename = torrent.filename;\n\n if (files) {\n // We've received full file details from the client.\n var fileList = null;\n\n if (this.state.expanded) {\n fileList = this.getFileList(files);\n }\n\n return _react2['default'].createElement(\n 'div',\n { className: 'directory-tree torrent-details__section' },\n _react2['default'].createElement(\n 'div',\n { className: 'directory-tree__node directory-tree__parent-directory',\n onClick: this.handleParentDirectoryClick },\n _react2['default'].createElement(_iconsFolderOpenSolid2['default'], null),\n parentDirectory\n ),\n fileList\n );\n } else {\n // We've only received the top-level file details from the torrent list.\n return _react2['default'].createElement(\n 'div',\n { className: 'directory-tree torrent-details__section' },\n _react2['default'].createElement(\n 'div',\n { className: 'directory-tree__node directory-tree__parent-directory' },\n _react2['default'].createElement(_iconsFolderOpenSolid2['default'], null),\n parentDirectory\n ),\n _react2['default'].createElement(\n 'div',\n { className: 'directory-tree__node directory-tree__node--file' },\n _react2['default'].createElement(_iconsFile2['default'], null),\n filename\n )\n );\n }\n }\n }, {\n key: 'handleParentDirectoryClick',\n value: function handleParentDirectoryClick() {\n this.setState({\n expanded: !this.state.expanded\n });\n }\n }, {\n key: 'render',\n value: function render() {\n return this.getFileData(this.props.torrent, this.props.files);\n }\n }]);\n\n return TorrentFiles;\n})(_react2['default'].Component);\n\nexports['default'] = TorrentFiles;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy90b3JyZW50LWxpc3QvVG9ycmVudEZpbGVzLmpzP2FkMjAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQsaUNBQWlDLDJDQUEyQyxnQkFBZ0Isa0JBQWtCLE9BQU8sMkJBQTJCLHdEQUF3RCxnQ0FBZ0MsdURBQXVELDJEQUEyRCxFQUFFLEVBQUUseURBQXlELHFFQUFxRSw2REFBNkQsb0JBQW9CLEdBQUcsRUFBRTs7QUFFbGpCLHdDQUF3QyxtQkFBbUIsNEJBQTRCLGtEQUFrRCxnQkFBZ0Isa0RBQWtELDhEQUE4RCwwQkFBMEIsNENBQTRDLHVCQUF1QixrQkFBa0IsRUFBRSxPQUFPLGNBQWMsZ0JBQWdCLGdCQUFnQixlQUFlLDJCQUEyQixvQkFBb0IsRUFBRSxFQUFFLDRCQUE0QixtQkFBbUIsRUFBRSxPQUFPLHVCQUF1Qiw0QkFBNEIsa0JBQWtCLEVBQUUsOEJBQThCLEVBQUUsRUFBRTs7QUFFbHBCLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRixpREFBaUQsMENBQTBDLDBEQUEwRCxFQUFFOztBQUV2SiwwQ0FBMEMsK0RBQStELHFHQUFxRyxFQUFFLHlFQUF5RSxlQUFlLHlFQUF5RSxFQUFFLEVBQUUsdUhBQXVIOztBQUU1ZTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxPQUFPOztBQUVQLDJFQUEyRSx1QkFBdUI7QUFDbEc7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyx1REFBdUQ7QUFDbEU7QUFDQTtBQUNBLGFBQWE7QUFDYix3REFBd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVEQUF1RDtBQUNsRTtBQUNBO0FBQ0EsYUFBYSxxRUFBcUU7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsK0RBQStEO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0EiLCJmaWxlIjoiMjM3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSkoKTtcblxudmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQoX3gyLCBfeDMsIF94NCkgeyB2YXIgX2FnYWluID0gdHJ1ZTsgX2Z1bmN0aW9uOiB3aGlsZSAoX2FnYWluKSB7IHZhciBvYmplY3QgPSBfeDIsIHByb3BlcnR5ID0gX3gzLCByZWNlaXZlciA9IF94NDsgX2FnYWluID0gZmFsc2U7IGlmIChvYmplY3QgPT09IG51bGwpIG9iamVjdCA9IEZ1bmN0aW9uLnByb3RvdHlwZTsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyBfeDIgPSBwYXJlbnQ7IF94MyA9IHByb3BlcnR5OyBfeDQgPSByZWNlaXZlcjsgX2FnYWluID0gdHJ1ZTsgZGVzYyA9IHBhcmVudCA9IHVuZGVmaW5lZDsgY29udGludWUgX2Z1bmN0aW9uOyB9IH0gZWxzZSBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfSB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyk7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAnZnVuY3Rpb24nICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAnICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgX3JlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfaWNvbnNGb2xkZXJPcGVuU29saWQgPSByZXF1aXJlKCcuLi9pY29ucy9Gb2xkZXJPcGVuU29saWQnKTtcblxudmFyIF9pY29uc0ZvbGRlck9wZW5Tb2xpZDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pY29uc0ZvbGRlck9wZW5Tb2xpZCk7XG5cbnZhciBfRGlyZWN0b3J5VHJlZSA9IHJlcXVpcmUoJy4vRGlyZWN0b3J5VHJlZScpO1xuXG52YXIgX0RpcmVjdG9yeVRyZWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfRGlyZWN0b3J5VHJlZSk7XG5cbnZhciBfaWNvbnNGaWxlID0gcmVxdWlyZSgnLi4vaWNvbnMvRmlsZScpO1xuXG52YXIgX2ljb25zRmlsZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pY29uc0ZpbGUpO1xuXG52YXIgTUVUSE9EU19UT19CSU5EID0gWydoYW5kbGVQYXJlbnREaXJlY3RvcnlDbGljayddO1xuXG52YXIgVG9ycmVudEZpbGVzID0gKGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhUb3JyZW50RmlsZXMsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRvcnJlbnRGaWxlcygpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRvcnJlbnRGaWxlcyk7XG5cbiAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihUb3JyZW50RmlsZXMucHJvdG90eXBlKSwgJ2NvbnN0cnVjdG9yJywgdGhpcykuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBleHBhbmRlZDogdHJ1ZVxuICAgIH07XG5cbiAgICBNRVRIT0RTX1RPX0JJTkQuZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICBfdGhpc1ttZXRob2RdID0gX3RoaXNbbWV0aG9kXS5iaW5kKF90aGlzKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhUb3JyZW50RmlsZXMsIFt7XG4gICAga2V5OiAnY29uc3RydWN0RGlyZWN0b3J5VHJlZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbnN0cnVjdERpcmVjdG9yeVRyZWUodHJlZSwgZGlyZWN0b3J5LCBmaWxlKSB7XG4gICAgICBpZiAodHJlZSA9PT0gdW5kZWZpbmVkKSB0cmVlID0ge307XG4gICAgICB2YXIgZGVwdGggPSBhcmd1bWVudHMubGVuZ3RoIDw9IDMgfHwgYXJndW1lbnRzWzNdID09PSB1bmRlZmluZWQgPyAwIDogYXJndW1lbnRzWzNdO1xuXG4gICAgICBpZiAoZGVwdGggPCBmaWxlLnBhdGhDb21wb25lbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgICAgdHJlZVtkaXJlY3RvcnldID0gdGhpcy5jb25zdHJ1Y3REaXJlY3RvcnlUcmVlKHRyZWVbZGlyZWN0b3J5XSwgZmlsZS5wYXRoQ29tcG9uZW50c1tkZXB0aF0sIGZpbGUsIGRlcHRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghdHJlZS5maWxlcykge1xuICAgICAgICAgIHRyZWUuZmlsZXMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB0cmVlLmZpbGVzLnB1c2goZmlsZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJlZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdnZXRGaWxlTGlzdCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEZpbGVMaXN0KGZpbGVzKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIHRyZWUgPSB7fTtcblxuICAgICAgZmlsZXMuZm9yRWFjaChmdW5jdGlvbiAoZmlsZSkge1xuICAgICAgICBfdGhpczIuY29uc3RydWN0RGlyZWN0b3J5VHJlZSh0cmVlLCBmaWxlLnBhdGhDb21wb25lbnRzWzBdLCBmaWxlKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoX0RpcmVjdG9yeVRyZWUyWydkZWZhdWx0J10sIHsgdHJlZTogdHJlZSwgZGVwdGg6IDAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZ2V0RmlsZURhdGEnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGaWxlRGF0YSh0b3JyZW50LCBmaWxlcykge1xuICAgICAgdmFyIHBhcmVudERpcmVjdG9yeSA9IHRvcnJlbnQuZGlyZWN0b3J5O1xuICAgICAgdmFyIGZpbGVuYW1lID0gdG9ycmVudC5maWxlbmFtZTtcblxuICAgICAgaWYgKGZpbGVzKSB7XG4gICAgICAgIC8vIFdlJ3ZlIHJlY2VpdmVkIGZ1bGwgZmlsZSBkZXRhaWxzIGZyb20gdGhlIGNsaWVudC5cbiAgICAgICAgdmFyIGZpbGVMaXN0ID0gbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5leHBhbmRlZCkge1xuICAgICAgICAgIGZpbGVMaXN0ID0gdGhpcy5nZXRGaWxlTGlzdChmaWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICdkaXJlY3RvcnktdHJlZSB0b3JyZW50LWRldGFpbHNfX3NlY3Rpb24nIH0sXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiAnZGlyZWN0b3J5LXRyZWVfX25vZGUgZGlyZWN0b3J5LXRyZWVfX3BhcmVudC1kaXJlY3RvcnknLFxuICAgICAgICAgICAgICBvbkNsaWNrOiB0aGlzLmhhbmRsZVBhcmVudERpcmVjdG9yeUNsaWNrIH0sXG4gICAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChfaWNvbnNGb2xkZXJPcGVuU29saWQyWydkZWZhdWx0J10sIG51bGwpLFxuICAgICAgICAgICAgcGFyZW50RGlyZWN0b3J5XG4gICAgICAgICAgKSxcbiAgICAgICAgICBmaWxlTGlzdFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2UndmUgb25seSByZWNlaXZlZCB0aGUgdG9wLWxldmVsIGZpbGUgZGV0YWlscyBmcm9tIHRoZSB0b3JyZW50IGxpc3QuXG4gICAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ2RpcmVjdG9yeS10cmVlIHRvcnJlbnQtZGV0YWlsc19fc2VjdGlvbicgfSxcbiAgICAgICAgICBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6ICdkaXJlY3RvcnktdHJlZV9fbm9kZSBkaXJlY3RvcnktdHJlZV9fcGFyZW50LWRpcmVjdG9yeScgfSxcbiAgICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KF9pY29uc0ZvbGRlck9wZW5Tb2xpZDJbJ2RlZmF1bHQnXSwgbnVsbCksXG4gICAgICAgICAgICBwYXJlbnREaXJlY3RvcnlcbiAgICAgICAgICApLFxuICAgICAgICAgIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogJ2RpcmVjdG9yeS10cmVlX19ub2RlIGRpcmVjdG9yeS10cmVlX19ub2RlLS1maWxlJyB9LFxuICAgICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoX2ljb25zRmlsZTJbJ2RlZmF1bHQnXSwgbnVsbCksXG4gICAgICAgICAgICBmaWxlbmFtZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdoYW5kbGVQYXJlbnREaXJlY3RvcnlDbGljaycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZVBhcmVudERpcmVjdG9yeUNsaWNrKCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGV4cGFuZGVkOiAhdGhpcy5zdGF0ZS5leHBhbmRlZFxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RmlsZURhdGEodGhpcy5wcm9wcy50b3JyZW50LCB0aGlzLnByb3BzLmZpbGVzKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVG9ycmVudEZpbGVzO1xufSkoX3JlYWN0MlsnZGVmYXVsdCddLkNvbXBvbmVudCk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IFRvcnJlbnRGaWxlcztcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8qKioqKioqKioqKioqKioqKlxuICoqIFdFQlBBQ0sgRk9PVEVSXG4gKiogLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy90b3JyZW50LWxpc3QvVG9ycmVudEZpbGVzLmpzXG4gKiogbW9kdWxlIGlkID0gMjM3XG4gKiogbW9kdWxlIGNodW5rcyA9IDBcbiAqKi8iXSwic291cmNlUm9vdCI6IiJ9"); /***/ }, /* 238 */ @@ -1484,7 +1484,7 @@ /* 240 */ /***/ function(module, exports, __webpack_require__) { - eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _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; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _iconsFile = __webpack_require__(241);\n\nvar _iconsFile2 = _interopRequireDefault(_iconsFile);\n\nvar DirectoryFiles = (function (_React$Component) {\n _inherits(DirectoryFiles, _React$Component);\n\n function DirectoryFiles() {\n _classCallCheck(this, DirectoryFiles);\n\n _get(Object.getPrototypeOf(DirectoryFiles.prototype), 'constructor', this).apply(this, arguments);\n }\n\n _createClass(DirectoryFiles, [{\n key: 'render',\n value: function render() {\n var branch = Object.assign([], this.props.branch);\n\n branch.sort(function (a, b) {\n return a.filename.localeCompare(b.filename);\n });\n\n var files = branch.map(function (file, fileIndex) {\n return _react2['default'].createElement(\n 'div',\n { className: 'directory-tree__node directory-tree__node--file',\n key: '' + fileIndex, title: file.filename },\n _react2['default'].createElement(_iconsFile2['default'], null),\n file.filename\n );\n });\n\n return _react2['default'].createElement(\n 'div',\n { className: 'directory-tree__node directory-tree__node--file-list' },\n files\n );\n }\n }]);\n\n return DirectoryFiles;\n})(_react2['default'].Component);\n\nexports['default'] = DirectoryFiles;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy90b3JyZW50LWxpc3QvRGlyZWN0b3J5RmlsZUxpc3QuanM/OTczNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsdUNBQXVDLG1CQUFtQiw0QkFBNEIsaURBQWlELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sYUFBYSxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUUvb0Isc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsU0FBUyxvRUFBb0U7QUFDN0U7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7QUFDQSIsImZpbGUiOiIyNDAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmICgndmFsdWUnIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KSgpO1xuXG52YXIgX2dldCA9IGZ1bmN0aW9uIGdldChfeCwgX3gyLCBfeDMpIHsgdmFyIF9hZ2FpbiA9IHRydWU7IF9mdW5jdGlvbjogd2hpbGUgKF9hZ2FpbikgeyB2YXIgb2JqZWN0ID0gX3gsIHByb3BlcnR5ID0gX3gyLCByZWNlaXZlciA9IF94MzsgX2FnYWluID0gZmFsc2U7IGlmIChvYmplY3QgPT09IG51bGwpIG9iamVjdCA9IEZ1bmN0aW9uLnByb3RvdHlwZTsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpOyBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7IHZhciBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsgaWYgKHBhcmVudCA9PT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyBfeCA9IHBhcmVudDsgX3gyID0gcHJvcGVydHk7IF94MyA9IHJlY2VpdmVyOyBfYWdhaW4gPSB0cnVlOyBkZXNjID0gcGFyZW50ID0gdW5kZWZpbmVkOyBjb250aW51ZSBfZnVuY3Rpb247IH0gfSBlbHNlIGlmICgndmFsdWUnIGluIGRlc2MpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9IH07XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24nKTsgfSB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09ICdmdW5jdGlvbicgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICcgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9pY29uc0ZpbGUgPSByZXF1aXJlKCcuLi9pY29ucy9GaWxlJyk7XG5cbnZhciBfaWNvbnNGaWxlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2ljb25zRmlsZSk7XG5cbnZhciBEaXJlY3RvcnlGaWxlcyA9IChmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRGlyZWN0b3J5RmlsZXMsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIERpcmVjdG9yeUZpbGVzKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBEaXJlY3RvcnlGaWxlcyk7XG5cbiAgICBfZ2V0KE9iamVjdC5nZXRQcm90b3R5cGVPZihEaXJlY3RvcnlGaWxlcy5wcm90b3R5cGUpLCAnY29uc3RydWN0b3InLCB0aGlzKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKERpcmVjdG9yeUZpbGVzLCBbe1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBicmFuY2ggPSBPYmplY3QuYXNzaWduKFtdLCB0aGlzLnByb3BzLmJyYW5jaCk7XG5cbiAgICAgIGJyYW5jaC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBhLmZpbGVuYW1lLmxvY2FsZUNvbXBhcmUoYi5maWxlbmFtZSk7XG4gICAgICB9KTtcblxuICAgICAgdmFyIGZpbGVzID0gYnJhbmNoLm1hcChmdW5jdGlvbiAoZmlsZSwgZmlsZUluZGV4KSB7XG4gICAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ2RpcmVjdG9yeS10cmVlX19ub2RlIGRpcmVjdG9yeS10cmVlX19ub2RlLS1maWxlJyxcbiAgICAgICAgICAgIGtleTogJycgKyBmaWxlSW5kZXgsIHRpdGxlOiBmaWxlLmZpbGVuYW1lIH0sXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoX2ljb25zRmlsZTJbJ2RlZmF1bHQnXSwgbnVsbCksXG4gICAgICAgICAgZmlsZS5maWxlbmFtZVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIHsgY2xhc3NOYW1lOiAnZGlyZWN0b3J5LXRyZWVfX25vZGUgZGlyZWN0b3J5LXRyZWVfX25vZGUtLWZpbGUtbGlzdCcgfSxcbiAgICAgICAgZmlsZXNcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIERpcmVjdG9yeUZpbGVzO1xufSkoX3JlYWN0MlsnZGVmYXVsdCddLkNvbXBvbmVudCk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IERpcmVjdG9yeUZpbGVzO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2NsaWVudC9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL3RvcnJlbnQtbGlzdC9EaXJlY3RvcnlGaWxlTGlzdC5qc1xuICoqIG1vZHVsZSBpZCA9IDI0MFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); + eval("'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nvar _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; }; })();\n\nvar _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _iconsFile = __webpack_require__(241);\n\nvar _iconsFile2 = _interopRequireDefault(_iconsFile);\n\nvar DirectoryFiles = (function (_React$Component) {\n _inherits(DirectoryFiles, _React$Component);\n\n function DirectoryFiles() {\n _classCallCheck(this, DirectoryFiles);\n\n _get(Object.getPrototypeOf(DirectoryFiles.prototype), 'constructor', this).apply(this, arguments);\n }\n\n _createClass(DirectoryFiles, [{\n key: 'render',\n value: function render() {\n var branch = Object.assign([], this.props.branch);\n\n branch.sort(function (a, b) {\n console.log(a, b);\n return a.filename.localeCompare(b.filename);\n });\n\n var files = branch.map(function (file, fileIndex) {\n return _react2['default'].createElement(\n 'div',\n { className: 'directory-tree__node directory-tree__node--file',\n key: '' + fileIndex, title: file.filename },\n _react2['default'].createElement(_iconsFile2['default'], null),\n file.filename\n );\n });\n\n return _react2['default'].createElement(\n 'div',\n { className: 'directory-tree__node directory-tree__node--file-list' },\n files\n );\n }\n }]);\n\n return DirectoryFiles;\n})(_react2['default'].Component);\n\nexports['default'] = DirectoryFiles;\nmodule.exports = exports['default'];//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jbGllbnQvc291cmNlL3NjcmlwdHMvY29tcG9uZW50cy90b3JyZW50LWxpc3QvRGlyZWN0b3J5RmlsZUxpc3QuanM/OTczNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpQ0FBaUMsMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUUsRUFBRSx5REFBeUQscUVBQXFFLDZEQUE2RCxvQkFBb0IsR0FBRyxFQUFFOztBQUVsakIsdUNBQXVDLG1CQUFtQiw0QkFBNEIsaURBQWlELGdCQUFnQixrREFBa0QsOERBQThELDBCQUEwQiw0Q0FBNEMsdUJBQXVCLGtCQUFrQixFQUFFLE9BQU8sYUFBYSxnQkFBZ0IsZ0JBQWdCLGVBQWUsMkJBQTJCLG9CQUFvQixFQUFFLEVBQUUsNEJBQTRCLG1CQUFtQixFQUFFLE9BQU8sdUJBQXVCLDRCQUE0QixrQkFBa0IsRUFBRSw4QkFBOEIsRUFBRSxFQUFFOztBQUUvb0Isc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDBDQUEwQywrREFBK0QscUdBQXFHLEVBQUUseUVBQXlFLGVBQWUseUVBQXlFLEVBQUUsRUFBRSx1SEFBdUg7O0FBRTVlOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLHVEQUF1RDtBQUN2RDtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQSxTQUFTLG9FQUFvRTtBQUM3RTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBIiwiZmlsZSI6IjI0MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSAoZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCd2YWx1ZScgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0pKCk7XG5cbnZhciBfZ2V0ID0gZnVuY3Rpb24gZ2V0KF94LCBfeDIsIF94MykgeyB2YXIgX2FnYWluID0gdHJ1ZTsgX2Z1bmN0aW9uOiB3aGlsZSAoX2FnYWluKSB7IHZhciBvYmplY3QgPSBfeCwgcHJvcGVydHkgPSBfeDIsIHJlY2VpdmVyID0gX3gzOyBfYWdhaW4gPSBmYWxzZTsgaWYgKG9iamVjdCA9PT0gbnVsbCkgb2JqZWN0ID0gRnVuY3Rpb24ucHJvdG90eXBlOyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IF94ID0gcGFyZW50OyBfeDIgPSBwcm9wZXJ0eTsgX3gzID0gcmVjZWl2ZXI7IF9hZ2FpbiA9IHRydWU7IGRlc2MgPSBwYXJlbnQgPSB1bmRlZmluZWQ7IGNvbnRpbnVlIF9mdW5jdGlvbjsgfSB9IGVsc2UgaWYgKCd2YWx1ZScgaW4gZGVzYykgeyByZXR1cm4gZGVzYy52YWx1ZTsgfSBlbHNlIHsgdmFyIGdldHRlciA9IGRlc2MuZ2V0OyBpZiAoZ2V0dGVyID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSByZXR1cm4gZ2V0dGVyLmNhbGwocmVjZWl2ZXIpOyB9IH0gfTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbicpOyB9IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gJ2Z1bmN0aW9uJyAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ1N1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgJyArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX2ljb25zRmlsZSA9IHJlcXVpcmUoJy4uL2ljb25zL0ZpbGUnKTtcblxudmFyIF9pY29uc0ZpbGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaWNvbnNGaWxlKTtcblxudmFyIERpcmVjdG9yeUZpbGVzID0gKGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhEaXJlY3RvcnlGaWxlcywgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gRGlyZWN0b3J5RmlsZXMoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIERpcmVjdG9yeUZpbGVzKTtcblxuICAgIF9nZXQoT2JqZWN0LmdldFByb3RvdHlwZU9mKERpcmVjdG9yeUZpbGVzLnByb3RvdHlwZSksICdjb25zdHJ1Y3RvcicsIHRoaXMpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRGlyZWN0b3J5RmlsZXMsIFt7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIGJyYW5jaCA9IE9iamVjdC5hc3NpZ24oW10sIHRoaXMucHJvcHMuYnJhbmNoKTtcblxuICAgICAgYnJhbmNoLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgY29uc29sZS5sb2coYSwgYik7XG4gICAgICAgIHJldHVybiBhLmZpbGVuYW1lLmxvY2FsZUNvbXBhcmUoYi5maWxlbmFtZSk7XG4gICAgICB9KTtcblxuICAgICAgdmFyIGZpbGVzID0gYnJhbmNoLm1hcChmdW5jdGlvbiAoZmlsZSwgZmlsZUluZGV4KSB7XG4gICAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ2RpcmVjdG9yeS10cmVlX19ub2RlIGRpcmVjdG9yeS10cmVlX19ub2RlLS1maWxlJyxcbiAgICAgICAgICAgIGtleTogJycgKyBmaWxlSW5kZXgsIHRpdGxlOiBmaWxlLmZpbGVuYW1lIH0sXG4gICAgICAgICAgX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoX2ljb25zRmlsZTJbJ2RlZmF1bHQnXSwgbnVsbCksXG4gICAgICAgICAgZmlsZS5maWxlbmFtZVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBfcmVhY3QyWydkZWZhdWx0J10uY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIHsgY2xhc3NOYW1lOiAnZGlyZWN0b3J5LXRyZWVfX25vZGUgZGlyZWN0b3J5LXRyZWVfX25vZGUtLWZpbGUtbGlzdCcgfSxcbiAgICAgICAgZmlsZXNcbiAgICAgICk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIERpcmVjdG9yeUZpbGVzO1xufSkoX3JlYWN0MlsnZGVmYXVsdCddLkNvbXBvbmVudCk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IERpcmVjdG9yeUZpbGVzO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL2NsaWVudC9zb3VyY2Uvc2NyaXB0cy9jb21wb25lbnRzL3RvcnJlbnQtbGlzdC9EaXJlY3RvcnlGaWxlTGlzdC5qc1xuICoqIG1vZHVsZSBpZCA9IDI0MFxuICoqIG1vZHVsZSBjaHVua3MgPSAwXG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ=="); /***/ }, /* 241 */