diff --git a/src/components/filetree.js b/src/components/filetree.js index 3d3379ca0..fa553fbd7 100644 --- a/src/components/filetree.js +++ b/src/components/filetree.js @@ -94,7 +94,7 @@ function FileTreeController($scope, $translate, $timeout, Client) { } else if (mimeType === 'application/pdf') { Client.filesGet($scope.backendId, $scope.backendType, path, 'open', function (error) { if (error) return Client.error(error); }); } else if (mimeGroup === 'text' || mimeGroup === 'application') { - $scope.textEditor.show(entry); + $scope.$parent.textEditor.show($scope.cwd, entry); } else { Client.filesGet($scope.backendId, $scope.backendType, path, 'open', function (error) { if (error) return Client.error(error); }); } @@ -827,10 +827,6 @@ function FileTreeController($scope, $translate, $timeout, Client) { } }; - function isModalVisible() { - return !!document.getElementsByClassName('modal in').length; - } - $translate(['filemanager.list.menu.edit', 'filemanager.list.menu.cut', 'filemanager.list.menu.copy', 'filemanager.list.menu.paste', 'filemanager.list.menu.rename', 'filemanager.list.menu.chown', 'filemanager.list.menu.extract', 'filemanager.list.menu.download', 'filemanager.list.menu.delete' ]).then(function (tr) { $scope.menuOptions = [ { @@ -971,52 +967,5 @@ function FileTreeController($scope, $translate, $timeout, Client) { } } - // handle save shortcuts - window.addEventListener('keydown', function (event) { - if (event.key === 'ArrowDown') { - $scope.$apply(selectNext); - } else if (event.key === 'ArrowUp') { - $scope.$apply(selectPrev); - } else if (event.key === 'Enter') { - $scope.$apply(openSelected); - // } else if (event.key === 'Backspace') { - // if ($scope.view === 'fileTree') $scope.goDirectoryUp(); - } else if((navigator.platform.match('Mac') ? event.metaKey : event.ctrlKey) && event.key === 's') { - if ($scope.view !== 'textEditor') return; - - event.preventDefault(); - $scope.$apply($scope.textEditor.save); - } else if((navigator.platform.match('Mac') ? event.metaKey : event.ctrlKey) && event.key === 'c') { - if ($scope.view === 'textEditor') return; - if ($scope.selected.length === 0) return; - if (isModalVisible()) return; - - event.preventDefault(); - $scope.$apply($scope.actionCopy); - } else if((navigator.platform.match('Mac') ? event.metaKey : event.ctrlKey) && event.key === 'x') { - if ($scope.view === 'textEditor') return; - if ($scope.selected.length === 0) return; - if (isModalVisible()) return; - - event.preventDefault(); - $scope.$apply($scope.actionCut); - } else if((navigator.platform.match('Mac') ? event.metaKey : event.ctrlKey) && event.key === 'v') { - if ($scope.view === 'textEditor') return; - if ($scope.clipboard.length === 0) return; - if (isModalVisible()) return; - - event.preventDefault(); - $scope.$apply($scope.actionPaste); - } else if((navigator.platform.match('Mac') ? event.metaKey : event.ctrlKey) && event.key === 'a') { - if ($scope.view === 'textEditor') return; - if (isModalVisible()) return; - - event.preventDefault(); - $scope.$apply($scope.actionSelectAll); - } else if(event.key === 'Escape') { - $scope.$apply(function () { $scope.selected = []; }); - } - }); - openPath('.'); } diff --git a/src/filemanager.html b/src/filemanager.html index 7854758e0..8aecd3ab1 100644 --- a/src/filemanager.html +++ b/src/filemanager.html @@ -123,7 +123,7 @@ -
+

{{ 'filemanager.notFound' | tr }}

diff --git a/src/js/filemanager.js b/src/js/filemanager.js index 98a375189..e7acb9057 100644 --- a/src/js/filemanager.js +++ b/src/js/filemanager.js @@ -70,6 +70,10 @@ function sanitize(filePath) { return filePath; } +function isModalVisible() { + return !!document.getElementsByClassName('modal in').length; +} + app.controller('FileManagerController', ['$scope', '$translate', '$timeout', 'Client', function ($scope, $translate, $timeout, Client) { var search = decodeURIComponent(window.location.search).slice(1).split('&').map(function (item) { return item.split('='); }).reduce(function (o, k) { o[k[0]] = k[1]; return o; }, {}); @@ -104,12 +108,14 @@ app.controller('FileManagerController', ['$scope', '$translate', '$timeout', 'Cl $scope.textEditor = { busy: false, + cwd: null, entry: null, editor: null, unsaved: false, visible: false, - show: function (entry) { + show: function (cwd, entry) { + $scope.textEditor.cwd = cwd; $scope.textEditor.entry = entry; $scope.textEditor.busy = false; $scope.textEditor.unsaved = false; @@ -121,7 +127,7 @@ app.controller('FileManagerController', ['$scope', '$translate', '$timeout', 'Cl $scope.view = 'textEditor'; // document.getElementById('textEditorModal').style['display'] = 'flex'; - var filePath = sanitize($scope.cwd + '/' + entry.fileName); + var filePath = sanitize($scope.textEditor.cwd + '/' + entry.fileName); var language = getLanguage(entry.fileName); Client.filesGet($scope.id, $scope.type, filePath, 'data', function (error, result) { @@ -147,7 +153,7 @@ app.controller('FileManagerController', ['$scope', '$translate', '$timeout', 'Cl $scope.textEditor.busy = true; var newContent = $scope.textEditor.editor.getValue(); - var filePath = sanitize($scope.cwd + '/' + $scope.textEditor.entry.fileName); + var filePath = sanitize($scope.textEditor.cwd + '/' + $scope.textEditor.entry.fileName); var file = new File([newContent], 'file'); Client.filesUpload($scope.id, $scope.type, filePath, file, true, function () {}, function (error) { @@ -277,4 +283,52 @@ app.controller('FileManagerController', ['$scope', '$translate', '$timeout', 'Cl } init(); + + // handle save shortcuts + window.addEventListener('keydown', function (event) { + if (event.key === 'ArrowDown') { + $scope.$apply(selectNext); + } else if (event.key === 'ArrowUp') { + $scope.$apply(selectPrev); + // } else if (event.key === 'Enter') { + // $scope.$apply(openSelected); + // } else if (event.key === 'Backspace') { + // if ($scope.view === 'fileTree') $scope.goDirectoryUp(); + } else if((navigator.platform.match('Mac') ? event.metaKey : event.ctrlKey) && event.key === 's') { + if ($scope.view !== 'textEditor') return; + + event.preventDefault(); + $scope.$apply($scope.textEditor.save); + } else if((navigator.platform.match('Mac') ? event.metaKey : event.ctrlKey) && event.key === 'c') { + if ($scope.view === 'textEditor') return; + if ($scope.selected.length === 0) return; + if (isModalVisible()) return; + + event.preventDefault(); + $scope.$apply($scope.actionCopy); + } else if((navigator.platform.match('Mac') ? event.metaKey : event.ctrlKey) && event.key === 'x') { + if ($scope.view === 'textEditor') return; + if ($scope.selected.length === 0) return; + if (isModalVisible()) return; + + event.preventDefault(); + $scope.$apply($scope.actionCut); + } else if((navigator.platform.match('Mac') ? event.metaKey : event.ctrlKey) && event.key === 'v') { + if ($scope.view === 'textEditor') return; + if ($scope.clipboard.length === 0) return; + if (isModalVisible()) return; + + event.preventDefault(); + $scope.$apply($scope.actionPaste); + } else if((navigator.platform.match('Mac') ? event.metaKey : event.ctrlKey) && event.key === 'a') { + if ($scope.view === 'textEditor') return; + if (isModalVisible()) return; + + event.preventDefault(); + $scope.$apply($scope.actionSelectAll); + } else if(event.key === 'Escape') { + $scope.$apply(function () { $scope.selected = []; }); + } + }); + }]); diff --git a/src/theme.scss b/src/theme.scss index c8a5476a5..f17cd2111 100644 --- a/src/theme.scss +++ b/src/theme.scss @@ -1827,6 +1827,7 @@ tag-input { // ---------------------------- .filemanager { + .layout-root { height: calc(100% - 30px); } @@ -1871,11 +1872,15 @@ tag-input { .text-editor { display: flex; + position: absolute; + left: 0; + top: 0; padding: 10px; margin: 0; width: 100%; height: 100%; flex-direction: column; + background-color: $body-bg; .toolbar { width: 100%;