diff --git a/src/filemanager.html b/src/filemanager.html index d50ac7db3..88b2ec661 100644 --- a/src/filemanager.html +++ b/src/filemanager.html @@ -330,7 +330,7 @@ No files - + diff --git a/src/js/filemanager.js b/src/js/filemanager.js index 6dfbe20a2..458b3683a 100644 --- a/src/js/filemanager.js +++ b/src/js/filemanager.js @@ -36,7 +36,7 @@ angular.forEach( function(eventName) { var directiveName = 'ng' + eventName.charAt(0).toUpperCase() + eventName.slice(1); - ngDragEventDirectives[directiveName] = ['$parse', '$rootScope', function($parse, /* $rootScope */) { + ngDragEventDirectives[directiveName] = ['$parse', '$rootScope', function($parse/*, $rootScope */) { return { restrict: 'A', compile: function($element, attr) { @@ -183,6 +183,11 @@ app.controller('FileManagerController', ['$scope', '$timeout', 'Client', functio }); } + $scope.dragStart = function ($event, entry) { + $event.originalEvent.dataTransfer.setData('text/plain', entry.fileName); + $event.originalEvent.dataTransfer.setData('application/cloudron-filemanager', entry.fileName); + }; + $scope.dragEnter = function ($event, entry) { $event.originalEvent.stopPropagation(); $event.originalEvent.preventDefault(); @@ -211,12 +216,23 @@ app.controller('FileManagerController', ['$scope', '$timeout', 'Client', functio if (!event.originalEvent.dataTransfer.items[0]) return; - var targetFolder = entry && entry.isDirectory ? entry.fileName : ''; + var targetFolder = sanitize($scope.cwd + '/' + (entry && entry.isDirectory ? entry.fileName : '')); + var dataTransfer = event.originalEvent.dataTransfer; + + if (dataTransfer.getData('application/cloudron-filemanager')) { + var oldFilePath = sanitize($scope.cwd + '/' + dataTransfer.getData('application/cloudron-filemanager')); + var newFilePath = sanitize(targetFolder + '/' + dataTransfer.getData('application/cloudron-filemanager')); + + return Client.filesRename($scope.id, $scope.type, oldFilePath, newFilePath, function (error) { + if (error) return Client.error(error); + $scope.refresh(); + }); + } // figure if a folder was dropped on a modern browser, in this case the first would have to be a directory var folderItem; try { - folderItem = event.originalEvent.dataTransfer.items[0].webkitGetAsEntry(); + folderItem = dataTransfer.items[0].webkitGetAsEntry(); if (folderItem.isFile) return uploadFiles(event.originalEvent.dataTransfer.files, targetFolder, false); } catch (e) { return uploadFiles(event.originalEvent.dataTransfer.files, targetFolder, false); @@ -260,7 +276,6 @@ app.controller('FileManagerController', ['$scope', '$timeout', 'Client', functio $scope.refresh = function () { $scope.busy = true; - console.log('getting', $scope.id, $scope.type, $scope.cwd); Client.filesGet($scope.id, $scope.type, $scope.cwd, 'data', function (error, result) { $scope.busy = false; if (error) return Client.error(error); @@ -342,7 +357,7 @@ app.controller('FileManagerController', ['$scope', '$timeout', 'Client', functio function uploadFiles(files, targetFolder, overwrite) { if (!files || !files.length) return; - targetFolder = targetFolder || ''; + targetFolder = targetFolder || $scope.cwd; overwrite = !!overwrite; // prevent it from getting closed @@ -366,7 +381,7 @@ app.controller('FileManagerController', ['$scope', '$timeout', 'Client', functio } async.eachSeries(files, function (file, callback) { - var filePath = sanitize($scope.cwd + '/' + targetFolder + '/' + (file.webkitRelativePath || file.name)); + var filePath = sanitize(targetFolder + '/' + (file.webkitRelativePath || file.name)); $scope.uploadStatus.fileName = file.name; @@ -412,11 +427,11 @@ app.controller('FileManagerController', ['$scope', '$timeout', 'Client', functio }; // file upload - $('#uploadFileInput').on('change', function (e) { uploadFiles(e.target.files || [], '', false); }); + $('#uploadFileInput').on('change', function (e) { uploadFiles(e.target.files || [], $scope.cwd, false); }); $scope.onUploadFile = function () { $('#uploadFileInput').click(); }; // folder upload - $('#uploadFolderInput').on('change', function (e ) { uploadFiles(e.target.files || [], '', false); }); + $('#uploadFolderInput').on('change', function (e ) { uploadFiles(e.target.files || [], $scope.cwd, false); }); $scope.onUploadFolder = function () { $('#uploadFolderInput').click(); }; $scope.newDirectory = {