Fixup main text editor usage

This commit is contained in:
Johannes Zellner
2022-08-25 10:26:22 +02:00
parent b36fc57b5a
commit 2a69b3d523
4 changed files with 64 additions and 56 deletions
+57 -3
View File
@@ -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 = []; });
}
});
}]);