', {id: FOLDER_CONTENT_ID});
+ $dirContent.data('path', path);
+ var mode = getViewMode();
+ if (mode) {
+ $dirContent.addClass(getViewModeClass());
+ }
+ var $list = $('
').appendTo($dirContent);
+
+ /*if (isUnsorted) {
+ displayUnsorted($list);
+ $content.append($title).append($dirContent);
+ return;
+ }*/
+
+ var $modeButton = createViewModeButton().appendTo($title);
+
+ var $folderHeader = getFolderListHeader();
+ var $fileHeader = getFileListHeader(true);
+
+ if (isUnsorted) {
+ displayUnsorted($list);
+ } else if (isAllFiles) {
+ displayAllFiles($list);
+ } else if (isTrashRoot) {
+ displayTrashRoot($list, $folderHeader, $fileHeader);
+ } else {
+ $dirContent.contextmenu(openContentContextMenu);
+ var $newFolderButton = createNewFolderButton().appendTo($title);
+ if (filesOp.hasSubfolder(root)) { $list.append($folderHeader); }
+ // display sub directories
+ var keys = Object.keys(root);
+ var sortedFolders = sortElements(true, path, keys, null, !files[SORT_FOLDER_DESC]);
+ var sortedFiles = sortElements(false, path, keys, files[SORT_FILE_BY], !files[SORT_FILE_DESC]);
+ sortedFolders.forEach(function (key) {
+ if (filesOp.isFile(root[key])) { return; }
+ var $element = createElement(path, key, root, true);
+ $element.appendTo($list);
+ });
+ if (filesOp.hasFile(root)) { $list.append($fileHeader); }
+ // display files
+ sortedFiles.forEach(function (key) {
+ if (filesOp.isFolder(root[key])) { return; }
+ var $element = createElement(path, key, root, false);
+ $element.appendTo($list);
+ });
+ }
+ $content.append($title).append($dirContent);
+ appStatus.ready(true);
+ };
+
+ var refreshFilesData = function () {
+ $content.find('li').each(function (i, e) {
+ var $el = $(e);
+ if ($el.data('path')) {
+ var path = $el.data('path');
+ var element = filesOp.findElement(files, path);
+ if (!filesOp.isFile(element)) { return; }
+ var data = filesOp.getFileData(element);
+ $el.find('.title').attr('title', data.title).text(data.title);
+ $el.find('.atime').attr('title', getDate(data.atime)).text(getDate(data.atime));
+ $el.find('.ctime').attr('title', getDate(data.ctime)).text(getDate(data.ctime));
+ }
+ });
+ };
+
+ var createTreeElement = function (name, $icon, path, draggable, droppable, collapsable, active) {
+ var $name = $('', { 'class': 'folder-element element' }).text(name)
+ .click(function () {
+ module.displayDirectory(path);
+ });
+ var $collapse;
+ if (collapsable) {
+ $collapse = $expandIcon.clone();
+ }
+ var $element = $('- ', {
+ draggable: draggable
+ }).append($collapse).append($icon).append($name);
+ if (collapsable) {
+ $element.addClass('collapsed');
+ $collapse.click(function() {
+ if ($element.hasClass('collapsed')) {
+ // It is closed, open it
+ $element.removeClass('collapsed');
+ setFolderOpened(path, true);
+ $collapse.removeClass('fa-plus-square-o');
+ $collapse.addClass('fa-minus-square-o');
+ } else {
+ // Collapse the folder
+ $element.addClass('collapsed');
+ setFolderOpened(path, false);
+ $collapse.removeClass('fa-minus-square-o');
+ $collapse.addClass('fa-plus-square-o');
+ // Change the current opened folder if it was collapsed
+ if (filesOp.isSubpath(currentPath, path)) {
+ displayDirectory(path);
+ }
+ }
+ });
+ if (wasFolderOpened(path) ||
+ (filesOp.isSubpath(currentPath, path) && path.length < currentPath.length)) {
+ $collapse.click();
+ }
+ }
+ $element.data('path', path);
+ addDragAndDropHandlers($element, path, true, droppable);
+ if (active) { $name.addClass('active'); }
+ return $element;
+ };
+
+ var createTree = function ($container, path) {
+ var root = filesOp.findElement(files, path);
+
+ // Display the root element in the tree
+ var displayingRoot = filesOp.comparePath([ROOT], path);
+ if (displayingRoot) {
+ var isRootOpened = filesOp.comparePath([ROOT], currentPath);
+ var $rootIcon = filesOp.isFolderEmpty(files[ROOT]) ?
+ (isRootOpened ? $folderOpenedEmptyIcon : $folderEmptyIcon) :
+ (isRootOpened ? $folderOpenedIcon : $folderIcon);
+ var $rootElement = createTreeElement(ROOT_NAME, $rootIcon.clone(), [ROOT], false, true, false, isRootOpened);
+ $rootElement.addClass('root');
+ var $root = $('
').append($rootElement).appendTo($container);
+ $container = $rootElement;
+ } else if (filesOp.isFolderEmpty(root)) { return; }
+
+ // Display root content
+ var $list = $('').appendTo($container);
+ Object.keys(root).forEach(function (key) {
+ // Do not display files in the menu
+ if (filesOp.isFile(root[key])) { return; }
+ var newPath = path.slice();
+ newPath.push(key);
+ var isCurrentFolder = filesOp.comparePath(newPath, currentPath);
+ var isEmpty = filesOp.isFolderEmpty(root[key]);
+ var subfolder = filesOp.hasSubfolder(root[key]);
+ var $icon = isEmpty ?
+ (isCurrentFolder ? $folderOpenedEmptyIcon : $folderEmptyIcon) :
+ (isCurrentFolder ? $folderOpenedIcon : $folderIcon);
+ var $element = createTreeElement(key, $icon.clone(), newPath, true, true, subfolder, isCurrentFolder);
+ $element.appendTo($list);
+ $element.contextmenu(openDirectoryContextMenu);
+ createTree($element, newPath);
+ });
+ };
+
+ var createUnsorted = function ($container, path) {
+ var $icon = $unsortedIcon.clone();
+ var isOpened = filesOp.comparePath(path, currentPath);
+ var $unsortedElement = createTreeElement(UNSORTED_NAME, $icon, [UNSORTED], false, true, false, isOpened);
+ $unsortedElement.addClass('root');
+ var $unsortedList = $('', { id: 'unsortedTree' }).append($unsortedElement);
+ $container.append($unsortedList);
+ };
+
+ var createAllFiles = function ($container, path) {
+ var $icon = $unsortedIcon.clone();
+ var isOpened = filesOp.comparePath(path, currentPath);
+ var $allfilesElement = createTreeElement(FILES_DATA_NAME, $icon, [FILES_DATA], false, false, false, isOpened);
+ $allfilesElement.addClass('root');
+ var $allfilesList = $('', { id: 'allfilesTree' }).append($allfilesElement);
+ $container.append($allfilesList);
+ };
+
+ var createTrash = function ($container, path) {
+ var $icon = filesOp.isFolderEmpty(files[TRASH]) ? $trashEmptyIcon.clone() : $trashIcon.clone();
+ var isOpened = filesOp.comparePath(path, currentPath);
+ var $trash = $('', {
+ 'class': 'tree-trash element'
+ }).text(TRASH_NAME).prepend($icon)
+ .click(function () {
+ module.displayDirectory(path);
+ });
+ var $trashElement = $('- ').append($trash);
+ $trashElement.addClass('root');
+ $trashElement.data('path', [TRASH]);
+ addDragAndDropHandlers($trashElement, path, true, true);
+ $trashElement.contextmenu(openTrashTreeContextMenu);
+ if (isOpened) { $trash.addClass('active'); }
+
+ var $trashList = $('