(function() { "use strict"; angular.module('shared') .component('myFolders', { templateUrl: '/shared/js/angular/file-cabinet/my-folders.html', controller: 'MyFolders' }) .controller('MyFolders', ['folders', 'currentSubFolders', 'folderService', 'folderTreeViewService', 'fileCabinetDragAndDropService', function MyFoldersCtrl(folders, currentSubFolders, folderService, folderTreeViewService, fileCabinetDragAndDropService) { var ctrl = this; ctrl.initialRead = false; ctrl.models = {listName: "MyFiles", items: [], selected: null, dragging: false}; ctrl.moveToIndex = null; ctrl.moveToParentId = null; ctrl.moveType = null; ctrl.folderList = []; var currentLocation = fileCabinetDragAndDropService.source.myFolders; ctrl.getFolderClassName = function (folder) { var className = 'js-' + folder.id; var cf = currentSubFolders.getCurrentFolder(); if (cf != null && folder != null && folder.id == cf.id) { className += ' is-selected'; } return className; }; ctrl.getFolders = function () { if (!ctrl.initialRead) { ctrl.initialRead = true; ctrl.clickedMyFiles(); } ctrl.folderList = folders.getMyFolders(); return ctrl.folderList; }; ctrl.getAriaExpanded = function(folder) { if (!folder.children || folder.children.length < 1) { return undefined; } return folder.folderOpen == true ? 'true' : 'false'; }; ctrl.getAriaSelected = function(folder) { if (folder.selected == undefined || !folder.selected) { return undefined; } return 'true'; }; ctrl.keyDown = function(event,folder) { folderTreeViewService.keyDown(event,folder); }; ctrl.toggleOpen = function(folder) { folder.folderOpen = !folder.folderOpen; }; ctrl.getReadingFolders = function() { return folderService.getReadingFolders(); }; ctrl.getAreFoldersMine = function () { return currentSubFolders.getAreFoldersMine(); }; ctrl.getAreFoldersPublic = function () { return currentSubFolders.getAreFoldersPublic(); }; ctrl.clickedMyFiles = function () { currentSubFolders.setCurrentSubFolders(null, "private"); currentSubFolders.setAreFoldersMine(true); currentSubFolders.setAreFoldersPublic(false); currentSubFolders.setAreFoldersForEveryone(false); }; ctrl.clickedMyFilesFromMenu = function () { ctrl.clickedMyFiles(); currentSubFolders.setLastFolderID(null); angular.element('#filecabinetContent').focus(); }; ctrl.setCurrentSubFolders = function (folder, type) { currentSubFolders.setCurrentSubFolders(folder, type); currentSubFolders.setAreFoldersMine(true); currentSubFolders.setAreFoldersPublic(false); currentSubFolders.setAreFoldersForEveryone(false); currentSubFolders.setLastFolderID(folder); }; ctrl.getStyle = function (folder) { var tot = 1; if (folder != null && folder.folderOpen) { tot += currentSubFolders.countOpenSubfolders(folder.children); } var h = (tot * 40) + 'px'; var styleObj = {maxHeight: h, overflow: "auto"}; return styleObj; }; var isLastRootFolder = function(folder, index) { if (!folder.parent_resource_collection_id) { return (index + 1) == ctrl.folderList.length; } return false; }; ctrl.hasBottomSeparator = function(folder, last) { return last && !(folder.folderOpen && folder.children && folder.children.length > 0); }; ctrl.hasLastSeparator = function(folder, index) { return isLastRootFolder(folder, index) && folder.children && folder.children.length > 0 && folder.folderOpen; }; /********************************************************************************* * The following functions are for the Drag and Drop Re-arrange List functionality * dnd library callbacks in shared ***********************************************************************************/ // Functions for dnd-draggable ctrl.onDragOrderList = function(draggingFolder, index) { // Only allowing drag ordering for same type list items if (fileCabinetDragAndDropService.isDraggingFrom(currentLocation)){ var moveToIndex = fileCabinetDragAndDropService.getMoveToIndex(); if (fileCabinetDragAndDropService.isInsert()) { var targetFolderId = fileCabinetDragAndDropService.getTargetFolderId(); if (draggingFolder.id !== targetFolderId && draggingFolder.parent_resource_collection_id !== targetFolderId) { folders.moveFolder(draggingFolder.id, targetFolderId, moveToIndex, false, false, false, null).then(function() { currentSubFolders.setCurrentSubFolders(fileCabinetDragAndDropService.getTargetFolder(), "user"); }); } } else if (fileCabinetDragAndDropService.isRootInsert()) { if (draggingFolder.parent_resource_collection_id) { folders.moveFolder(draggingFolder.id, -1, moveToIndex, false, false, false, null); } } else { var folderId = fileCabinetDragAndDropService.isRootSort() ? -1 : fileCabinetDragAndDropService.getTargetFolderParentId(); var position = moveToIndex; if (index < moveToIndex && !isDraggingFromDifferentParent(draggingFolder, folderId)) { position = moveToIndex - 1; } folders.moveFolder(draggingFolder.id, folderId, position, false, false, false, null); } } fileCabinetDragAndDropService.resetDraggingItem(); }; ctrl.onSelected = function(draggingFolder) { ctrl.models.selected = draggingFolder; }; ctrl.onCanceled = function() { fileCabinetDragAndDropService.resetDraggingItem(); }; ctrl.onDragStart = function(draggingFolder) { fileCabinetDragAndDropService.setSourceLocation(currentLocation); fileCabinetDragAndDropService.setDraggingFolder(draggingFolder); }; var isDraggingFromDifferentParent = function(draggingFolder, targetFolderId) { return !draggingFolder.parent_resource_collection_id && targetFolderId !== -1 || (draggingFolder.parent_resource_collection_id && (draggingFolder.parent_resource_collection_id !== targetFolderId)); }; // Functions for dnd-list ctrl.onDragOverSeparator = function(event) { fileCabinetDragAndDropService.setDropLocation(currentLocation); fileCabinetDragAndDropService.cancelTimeout(); var dragoverElement = angular.element(event.target).closest('.dndDragover'); fileCabinetDragAndDropService.resetDragover(dragoverElement); if (!fileCabinetDragAndDropService.isDraggingFrom(currentLocation)) { return false; } return true; }; ctrl.onDragOverFolder = function(targetFolder, event) { fileCabinetDragAndDropService.setDropLocation(currentLocation); fileCabinetDragAndDropService.onDragOverFolder(targetFolder); var dragoverElement = angular.element(event.target).closest('.dndDragover'); fileCabinetDragAndDropService.resetDragover(dragoverElement); if (!targetFolder.folderOpen && targetFolder.children && targetFolder.children.length > 0) { fileCabinetDragAndDropService.setToggleOpenFolderPromise(targetFolder); } if (!fileCabinetDragAndDropService.isDropAllowed(targetFolder)) { return false; } return true; }; ctrl.onDragOverMyFiles = function(event) { fileCabinetDragAndDropService.setDropLocation(currentLocation); var dragoverElement = angular.element(event.target).closest('.dndDragover'); fileCabinetDragAndDropService.resetDragover(dragoverElement); if (fileCabinetDragAndDropService.isResourceDragging()){ return false; } return true; }; ctrl.onDropSort = function(targetFolder, index) { var targetInsertFolder = null; var targetInsertMoveType = fileCabinetDragAndDropService.move.rootSort; if (targetFolder.parent_resource_collection_id) { targetInsertFolder = targetFolder; targetInsertMoveType = fileCabinetDragAndDropService.move.parentSort; } fileCabinetDragAndDropService.setDropDetails(currentLocation, index, targetInsertMoveType, targetInsertFolder); return true; }; ctrl.onDropInsert = function(targetFolder) { fileCabinetDragAndDropService.setDropDetails(currentLocation, 0, fileCabinetDragAndDropService.move.insert, targetFolder); return true; }; ctrl.onDropRootInsert = function() { fileCabinetDragAndDropService.setDropDetails(currentLocation, 0, fileCabinetDragAndDropService.move.rootInsert, null); return true; }; }]); }());