Translate the filemanager

This commit is contained in:
Johannes Zellner
2020-11-10 00:59:03 +01:00
parent 89cde563f6
commit ec00eecab3
3 changed files with 176 additions and 108 deletions
+71 -79
View File
@@ -71,7 +71,7 @@
<body class="filemanager" ng-drop="drop($event)" ng-dragover="dragEnter($event)" ng-dragleave="dragExit($event)">
<a class="offline-banner animateMe" ng-show="client.offline" ng-cloak href="https://docs.cloudron.io/troubleshooting/" target="_blank"><i class="fa fa-circle-notch fa-spin"></i> Cloudron is offline. Reconnecting...</a>
<a class="offline-banner animateMe" ng-show="client.offline" ng-cloak href="https://docs.cloudron.io/troubleshooting/" target="_blank"><i class="fa fa-circle-notch fa-spin"></i> {{ 'main.offline' | tr }}</a>
<!-- Modal image/video viewer -->
<div class="modal fade" id="mediaViewerModal" tabindex="-1" role="dialog">
@@ -89,11 +89,11 @@
<div class="modal-content">
<div class="modal-body">
<p class="text-bold text-danger" ng-show="entryRemove.error">{{ entryRemove.error }}</p>
<h4 ng-hide="entryRemove.error">Really delete {{ entryRemove.entry.fileName }}?</h4>
<h4 ng-hide="entryRemove.error">{{ 'filemanager.removeDialog.reallyDelete' | tr:entryRemove.entry }}</h4>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">No</button>
<button type="button" class="btn btn-danger" ng-click="entryRemove.submit()" ng-hide="entryRemove.error" ng-disabled="entryRemove.busy"><i class="fa fa-circle-notch fa-spin" ng-show="entryRemove.busy"></i> Yes</button>
<button type="button" class="btn btn-default" data-dismiss="modal">{{ 'main.dialog.no' | tr }}</button>
<button type="button" class="btn btn-danger" ng-click="entryRemove.submit()" ng-hide="entryRemove.error" ng-disabled="entryRemove.busy"><i class="fa fa-circle-notch fa-spin" ng-show="entryRemove.busy"></i> {{ 'main.dialog.yes' | tr }}</button>
</div>
</div>
</div>
@@ -104,22 +104,20 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">New Folder</h4>
<h4 class="modal-title">{{ 'filemanager.newDirectoryDialog.title' | tr }}</h4>
</div>
<div class="modal-body">
<form role="form" name="newDirectoryForm" ng-submit="newDirectory.submit()" autocomplete="off">
<fieldset>
<div class="form-group" ng-class="{ 'has-error': newDirectory.error || (newDirectoryForm.directoryName.$dirty && newDirectoryForm.directoryName.$invalid) }">
<input type="text" class="form-control" id="inputDirectoryName" name="directoryName" ng-model="newDirectory.name" required autofocus>
<div class="control-label" ng-show="newDirectory.error">{{ newDirectory.error }}</div>
</div>
<input class="ng-hide" type="submit" ng-disabled="newDirectoryForm.$invalid || newDirectory.busy"/>
</fieldset>
<div class="form-group" ng-class="{ 'has-error': newDirectory.error || (newDirectoryForm.directoryName.$dirty && newDirectoryForm.directoryName.$invalid) }">
<input type="text" class="form-control" id="inputDirectoryName" name="directoryName" ng-model="newDirectory.name" required autofocus>
<div class="control-label" ng-show="newDirectory.error === 'exists'">{{ 'filemanager.newDirectory.errorAlreadyExists' | tr }}</div>
</div>
<input class="ng-hide" type="submit" ng-disabled="newDirectoryForm.$invalid || newDirectory.busy"/>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-danger" ng-click="newDirectory.submit()" ng-disabled="newDirectory.busy"><i class="fa fa-circle-notch fa-spin" ng-show="newDirectory.busy"></i> Create</button>
<button type="button" class="btn btn-default" data-dismiss="modal">{{ 'main.dialog.close' | tr }}</button>
<button type="button" class="btn btn-danger" ng-click="newDirectory.submit()" ng-disabled="newDirectory.busy"><i class="fa fa-circle-notch fa-spin" ng-show="newDirectory.busy"></i> {{ 'filemanager.newDirectoryDialog.create' | tr }}</button>
</div>
</div>
</div>
@@ -130,22 +128,20 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">New File</h4>
<h4 class="modal-title">{{ 'filemanager.newFileDialog.title' | tr }}</h4>
</div>
<div class="modal-body">
<form role="form" name="newFileForm" ng-submit="newFile.submit()" autocomplete="off">
<fieldset>
<div class="form-group" ng-class="{ 'has-error': newFile.error || (newFileForm.fileName.$dirty && newFileForm.fileName.$invalid) }">
<input type="text" class="form-control" id="inputFileName" name="fileName" ng-model="newFile.name" required autofocus>
<div class="control-label" ng-show="newFile.error">{{ newFile.error }}</div>
</div>
<input class="ng-hide" type="submit" ng-disabled="newFileForm.$invalid || newFile.busy"/>
</fieldset>
<div class="form-group" ng-class="{ 'has-error': newFile.error || (newFileForm.fileName.$dirty && newFileForm.fileName.$invalid) }">
<input type="text" class="form-control" id="inputFileName" name="fileName" ng-model="newFile.name" required autofocus>
<div class="control-label" ng-show="newFile.error === 'exists'">{{ 'filemanager.newFile.errorAlreadyExists' | tr }}</div>
</div>
<input class="ng-hide" type="submit" ng-disabled="newFileForm.$invalid || newFile.busy"/>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-danger" ng-click="newFile.submit()" ng-disabled="newFile.busy"><i class="fa fa-circle-notch fa-spin" ng-show="newFile.busy"></i> Create</button>
<button type="button" class="btn btn-default" data-dismiss="modal">{{ 'main.dialog.close' | tr }}</button>
<button type="button" class="btn btn-danger" ng-click="newFile.submit()" ng-disabled="newFile.busy"><i class="fa fa-circle-notch fa-spin" ng-show="newFile.busy"></i> {{ 'filemanager.newFileDialog.create' | tr }}</button>
</div>
</div>
</div>
@@ -156,23 +152,21 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Rename {{ renameEntry.entry.fileName }}</h4>
<h4 class="modal-title">{{ 'filemanager.renameDialog.title' | tr:renameEntry.entry }}</h4>
</div>
<div class="modal-body">
<form role="form" name="renameEntryForm" ng-submit="renameEntry.submit()" autocomplete="off">
<fieldset>
<div class="form-group" ng-class="{ 'has-error': (renameEntryForm.newName.$dirty && renameEntryForm.newName.$invalid) }">
<label class="control-label">New Name</label>
<div class="control-label" ng-show="renameEntry.error">{{ renameEntry.error }}</div>
<input type="text" class="form-control" id="inputNewName" name="newName" ng-model="renameEntry.newName" required autofocus>
</div>
<input class="ng-hide" type="submit" ng-disabled="renameEntryForm.$invalid || renameEntry.busy"/>
</fieldset>
<div class="form-group" ng-class="{ 'has-error': (renameEntryForm.newName.$dirty && renameEntryForm.newName.$invalid) }">
<label class="control-label">{{ 'filemanager.renameDialog.newName' | tr }}</label>
<div class="control-label" ng-show="renameEntry.error">{{ renameEntry.error }}</div>
<input type="text" class="form-control" id="inputNewName" name="newName" ng-model="renameEntry.newName" required autofocus>
</div>
<input class="ng-hide" type="submit" ng-disabled="renameEntryForm.$invalid || renameEntry.busy"/>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-danger" ng-click="renameEntry.submit()" ng-hide="renameEntry.error" ng-disabled="renameEntry.busy"><i class="fa fa-circle-notch fa-spin" ng-show="renameEntry.busy"></i> Rename</button>
<button type="button" class="btn btn-default" data-dismiss="modal">{{ 'main.dialog.close' | tr }}</button>
<button type="button" class="btn btn-danger" ng-click="renameEntry.submit()" ng-hide="renameEntry.error" ng-disabled="renameEntry.busy"><i class="fa fa-circle-notch fa-spin" ng-show="renameEntry.busy"></i> {{ 'filemanager.renameDialog.rename' | tr }}</button>
</div>
</div>
</div>
@@ -183,27 +177,25 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Change ownership for {{ chownEntry.entry.fileName }}</h4>
<h4 class="modal-title">{{ 'filemanager.chownDialog.title' | tr:chownEntry.entry }}</h4>
</div>
<div class="modal-body">
<form role="form" name="chownEntryForm" ng-submit="chownEntry.submit()" autocomplete="off">
<fieldset>
<div class="form-group" ng-class="{ 'has-error': (chownEntryForm.newOwner.$dirty && chownEntry.error) }">
<label class="control-label">New Owner</label>
<div class="control-label" for="inputNewOwner" ng-show="chownEntry.error">{{ chownEntry.error }}</div>
<select class="form-control" id="inputNewOwner" name="newOwner" ng-model="chownEntry.newOwner" ng-options="a.value as a.name for a in owners" ng-disabled="chownEntry.busy"></select>
</div>
<div class="form-group" ng-show="chownEntry.entry.isDirectory">
<input type="checkbox" id="inputNewOwnerRecursive" ng-model="chownEntry.recursive">
<label class="control-label" for="inputNewOwnerRecursive">Change ownership recursively</label>
</div>
<input class="ng-hide" type="submit" ng-disabled="chownEntryForm.$invalid || chownEntry.busy"/>
</fieldset>
<div class="form-group" ng-class="{ 'has-error': (chownEntryForm.newOwner.$dirty && chownEntry.error) }">
<label class="control-label">{{ 'filemanager.chownDialog.newOwner' | tr }}</label>
<div class="control-label" for="inputNewOwner" ng-show="chownEntry.error">{{ chownEntry.error }}</div>
<select class="form-control" id="inputNewOwner" name="newOwner" ng-model="chownEntry.newOwner" ng-options="a.value as a.name for a in owners" ng-disabled="chownEntry.busy"></select>
</div>
<div class="form-group" ng-show="chownEntry.entry.isDirectory">
<input type="checkbox" id="inputNewOwnerRecursive" ng-model="chownEntry.recursive">
<label class="control-label" for="inputNewOwnerRecursive">{{ 'filemanager.chownDialog.recursiveCheckbox' | tr }}</label>
</div>
<input class="ng-hide" type="submit" ng-disabled="chownEntryForm.$invalid || chownEntry.busy"/>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-danger" ng-click="chownEntry.submit()" ng-hide="chownEntry.error" ng-disabled="chownEntry.busy"><i class="fa fa-circle-notch fa-spin" ng-show="chownEntry.busy"></i> Change Owner</button>
<button type="button" class="btn btn-default" data-dismiss="modal">{{ 'main.dialog.close' | tr }}</button>
<button type="button" class="btn btn-danger" ng-click="chownEntry.submit()" ng-hide="chownEntry.error" ng-disabled="chownEntry.busy"><i class="fa fa-circle-notch fa-spin" ng-show="chownEntry.busy"></i> {{ 'filemanager.chownDialog.change' | tr }}</button>
</div>
</div>
</div>
@@ -214,12 +206,12 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Uploading files ({{ uploadStatus.countDone }}/{{ uploadStatus.count }})</h4>
<h4 class="modal-title">{{ 'filemanager.uploadingDialog.title' | tr:uploadStatus }}</h4>
</div>
<div class="modal-body">
<div ng-show="uploadStatus.error">
<p class="text-danger" ng-show="uploadStatus.error === 'exists'">One or more files already exist.</p>
<p class="text-danger" ng-show="uploadStatus.error === 'generic'">Failed to upload one or more files. Please try again.</p>
<p class="text-danger" ng-show="uploadStatus.error === 'exists'">{{ 'filemanager.uploadingDialog.errorAlreadyExists' | tr }}</p>
<p class="text-danger" ng-show="uploadStatus.error === 'generic'">{{ 'filemanager.uploadingDialog.errorFailed' | tr }}</p>
</div>
<div class="progress progress-striped active" ng-hide="uploadStatus.error">
<div class="progress-bar progress-bar-success" role="progressbar" style="width: {{ uploadStatus.percentDone || 0 }}%"></div>
@@ -227,10 +219,10 @@
<p class="no-wrap" ng-hide="uploadStatus.error">{{ uploadStatus.fileName }}</p>
</div>
<div class="modal-footer" style="text-align: left;">
<small ng-hide="uploadStatus.error">Do not refresh the page until upload has finished.</small>
<button class="btn btn-default pull-right" ng-show="uploadStatus.error" data-dismiss="modal">Close</button>
<button class="btn btn-primary pull-right" ng-show="uploadStatus.error === 'generic'" ng-click="retryUpload(false)">Retry</button>
<button class="btn btn-danger pull-right" ng-show="uploadStatus.error === 'exists'" ng-click="retryUpload(true)">Overwrite</button>
<small ng-hide="uploadStatus.error">{{ 'filemanager.uploadingDialog.closeWarning' | tr }}</small>
<button class="btn btn-default pull-right" ng-show="uploadStatus.error" data-dismiss="modal">{{ 'main.dialog.close' | tr }}</button>
<button class="btn btn-primary pull-right" ng-show="uploadStatus.error === 'generic'" ng-click="retryUpload(false)">{{ 'filemanager.uploadingDialog.retry' | tr }}</button>
<button class="btn btn-danger pull-right" ng-show="uploadStatus.error === 'exists'" ng-click="retryUpload(true)">{{ 'filemanager.uploadingDialog.overwrite' | tr }}</button>
</div>
</div>
</div>
@@ -241,7 +233,7 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Extracting {{ extractStatus.fileName }}</h4>
<h4 class="modal-title">{{ 'filemanager.extractDialog.title' | tr:extractStatus }}</h4>
</div>
<div class="modal-body">
<div ng-show="extractStatus.error">
@@ -254,8 +246,8 @@
<p class="no-wrap" ng-hide="extractStatus.error">{{ extractStatus.fileName }}</p>
</div>
<div class="modal-footer" style="text-align: left;">
<small ng-hide="extractStatus.error">Do not refresh the page until extract has finished.</small>
<button class="btn btn-primary pull-right" ng-show="extractStatus.error" data-dismiss="modal">Close</button>
<small ng-hide="extractStatus.error">{{ 'filemanager.extractDialog.closeWarning' | tr }}</small>
<button class="btn btn-primary pull-right" ng-show="extractStatus.error" data-dismiss="modal">{{ 'main.dialog.close' | tr }}</button>
</div>
</div>
</div>
@@ -266,15 +258,15 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">File has unsaved changes</h4>
<h4 class="modal-title">{{ 'filemanager.textEditorCloseDialog.title' | tr }}</h4>
</div>
<div class="modal-body">
<p class="text-bold text-danger">Your changes will be lost if you don't save them</p>
<p class="text-bold text-danger">{{ 'filemanager.textEditorCloseDialog.details' | tr }}</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" ng-click="textEditor.close()">Don't Save</button>
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-success" ng-click="textEditor.saveAndClose()"><i class="fa fa-circle-notch fa-spin" ng-show="textEditor.busy"></i> Save</button>
<button type="button" class="btn btn-default" ng-click="textEditor.close()">{{ 'filemanager.textEditorCloseDialog.dontSave' | tr }}</button>
<button type="button" class="btn btn-default" data-dismiss="modal">{{ 'main.dialog.cancel' | tr }}</button>
<button type="button" class="btn btn-success" ng-click="textEditor.saveAndClose()"><i class="fa fa-circle-notch fa-spin" ng-show="textEditor.busy"></i> {{ 'main.dialog.save' | tr }}</button>
</div>
</div>
</div>
@@ -284,7 +276,7 @@
<div ng-show="view === 'fileTree'" class="layout-content container">
<div class="row" ng-hide="title">
<div class="col-md-12 text-center">
<h3>Not found</h3>
<h3>{{ 'filemanager.notFound' | tr }}</h3>
</div>
</div>
@@ -306,17 +298,17 @@
</div>
<div class="pull-right">
<div class="btn-group">
<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fas fa-plus"></i> New</button>
<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fas fa-plus"></i> {{ 'filemanager.toolbar.new' | tr }}</button>
<ul class="dropdown-menu">
<li><a class="hand" ng-click="newFile.show()">New File</a></li>
<li><a class="hand" ng-click="newDirectory.show()">New Folder</a></li>
<li><a class="hand" ng-click="newFile.show()">{{ 'filemanager.toolbar.newFile' | tr }}</a></li>
<li><a class="hand" ng-click="newDirectory.show()">{{ 'filemanager.toolbar.newFolder' | tr }}</a></li>
</ul>
</div>
<div class="btn-group">
<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fas fa-upload"></i> Upload</button>
<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fas fa-upload"></i> {{ 'filemanager.toolbar.upload' | tr }}</button>
<ul class="dropdown-menu dropdown-menu-right">
<li><a class="hand" ng-click="onUploadFile()">Upload File</a></li>
<li><a class="hand" ng-click="onUploadFolder()">Upload Folder</a></li>
<li><a class="hand" ng-click="onUploadFile()">{{ 'filemanager.toolbar.uploadFile' | tr }}</a></li>
<li><a class="hand" ng-click="onUploadFolder()">{{ 'filemanager.toolbar.uploadFolder' | tr }}</a></li>
</ul>
</div>
</div>
@@ -327,9 +319,9 @@
<thead>
<tr>
<th style="width: 40px;">&nbsp;</th>
<th style="">Name</th>
<th style="width: 80px">Size</th>
<th style="width:100px">Owner</th>
<th style="">{{ 'filemanager.list.name' | tr }}</th>
<th style="width: 80px">{{ 'filemanager.list.size' | tr }}</th>
<th style="width:100px">{{ 'filemanager.list.owner' | tr }}</th>
<th style="width: 40px">&nbsp;</th>
</tr>
</thead>
@@ -340,13 +332,13 @@
<table class="table table-hover" style="margin: 0;">
<tbody>
<tr ng-show="entries.length === 0">
<td colspan="5" class="text-center">No files</td>
<td colspan="5" class="text-center">{{ 'filemanager.list.empty' | tr }}</td>
</tr>
<tr ng-repeat="entry in entries | orderBy:sortProperty:sortAsc | orderBy:'isDirectory':true" draggable="true" ng-dragstart="dragStart($event, entry)" ng-drop="drop($event, entry)" context-menu="menuOptions" model="entry" ng-dragleave="dragExit($event, entry)" ng-dragover="dragEnter($event, entry)" ng-class="{ 'entry-hovered': entry.hovered }">
<td style="width: 40px" ng-click="open(entry)" ng-class="{ 'hand': !entry.isSymbolicLink }" class="text-center">
<i class="fas fa-lg {{ entry.icon }}" ng-class="{ 'text-primary': entry.isDirectory }"></i>
</td>
<td ng-class="{ 'hand': !entry.isSymbolicLink }" class="elide-table-cell" ng-click="open(entry)">{{ entry.fileName }}<span ng-show="entry.isSymbolicLink" class="text-muted" style="margin-left: 20px;">symlink to {{ entry.target }}</span></td>
<td ng-class="{ 'hand': !entry.isSymbolicLink }" class="elide-table-cell" ng-click="open(entry)">{{ entry.fileName }}<span ng-show="entry.isSymbolicLink" class="text-muted" style="margin-left: 20px;">{{ 'filemanager.list.symlink' | tr:entry }}</span></td>
<td style="width: 80px" ng-class="{ 'hand': !entry.isSymbolicLink }" class="elide-table-cell" ng-click="open(entry)">{{ entry.size | prettyByteSize }}</td>
<td style="width:100px" ng-class="{ 'hand': !entry.isSymbolicLink }" class="elide-table-cell" ng-click="open(entry)">{{ entry.uid | prettyOwner }}</td>
<td style="width: 40px" class="text-right no-wrap" style="vertical-align: bottom">
@@ -363,8 +355,8 @@
<div>
<div class="toolbar">
<div><span>{{ textEditor.entry.fileName }}</span></div>
<button type="button" class="btn btn-success" ng-click="textEditor.save()" ng-disabled="textEditor.busy"><i class="fa fa-circle-notch fa-spin" ng-show="textEditor.busy"></i> Save</button>
<button type="button" class="btn btn-primary" ng-click="textEditor.maybeClose()">Close</button>
<button type="button" class="btn btn-primary" ng-click="textEditor.maybeClose()">{{ 'main.dialog.close' | tr }}</button>
<button type="button" class="btn btn-success" ng-click="textEditor.save()" ng-disabled="textEditor.busy"><i class="fa fa-circle-notch fa-spin" ng-show="textEditor.busy"></i> {{ 'main.dialog.save' | tr }}</button>
</div>
</div>
<div id="textEditorContainer" style="flex-grow: 2; border: 0px solid black"></div>
+30 -27
View File
@@ -59,9 +59,6 @@ angular.forEach(
angular.module('ngDrag', []).directive(ngDragEventDirectives);
app.controller('FileManagerController', ['$scope', '$translate', '$timeout', 'Client', function ($scope, $translate, $timeout, Client) {
var title = $translate.instant('filemanager.title');
if (title !== 'filemanager.title') window.document.title = title;
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; }, {});
$scope.initialized = false;
@@ -96,27 +93,7 @@ app.controller('FileManagerController', ['$scope', '$translate', '$timeout', 'Cl
|| f.match(/\.tar\.bz2$/);
}
$scope.menuOptions = [
{
text: 'Rename',
click: function ($itemScope, $event, entry) { $scope.renameEntry.show(entry); }
}, {
text: 'Change Ownership',
click: function ($itemScope, $event, entry) { $scope.chownEntry.show(entry); }
}, {
text: 'Extract Here',
displayed: function ($itemScope, $event, entry) { return !entry.isDirectory && isArchive(entry.fileName); },
click: function ($itemScope, $event, entry) { extract(entry); }
}, {
text: 'Download',
displayed: function ($itemScope, $event, entry) { return !entry.isDirectory; },
click: function ($itemScope, $event, entry) { download(entry); }
}, {
text: 'Delete',
hasTopDivider: true,
click: function ($itemScope, $event, entry) { $scope.entryRemove.show(entry); }
}
];
$scope.menuOptions = [];
var LANGUAGES = [];
require(['vs/editor/editor.main'], function() {
@@ -166,7 +143,7 @@ app.controller('FileManagerController', ['$scope', '$translate', '$timeout', 'Cl
if (error) {
console.error(error);
$scope.extractStatus.error = 'Failed to extract: ' + error.message;
$scope.extractStatus.error = $translate.instant('filemanager.extract.error', error);
return;
}
@@ -463,7 +440,7 @@ app.controller('FileManagerController', ['$scope', '$translate', '$timeout', 'Cl
Client.filesCreateDirectory($scope.id, $scope.type, filePath, function (error) {
$scope.newDirectory.busy = false;
if (error && error.statusCode === 409) return $scope.newDirectory.error = 'Already exists';
if (error && error.statusCode === 409) return $scope.newDirectory.error = 'exists';
if (error) return Client.error(error);
$scope.refresh();
@@ -497,7 +474,7 @@ app.controller('FileManagerController', ['$scope', '$translate', '$timeout', 'Cl
Client.filesUpload($scope.id, $scope.type, filePath, new File([], $scope.newFile.name), false, function () {}, function (error) {
$scope.newFile.busy = false;
if (error && error.statusCode === 409) return $scope.newFile.error = 'Already exists';
if (error && error.statusCode === 409) return $scope.newFile.error = 'exists';
if (error) return Client.error(error);
$scope.refresh();
@@ -754,6 +731,32 @@ app.controller('FileManagerController', ['$scope', '$translate', '$timeout', 'Cl
});
});
$translate([ 'filemanager.title', 'filemanager.list.menu.rename', 'filemanager.list.menu.chown', 'filemanager.list.menu.extract', 'filemanager.list.menu.download', 'filemanager.list.menu.delete' ]).then(function (tr) {
if (tr.title !== 'filemanager.title') window.document.title = tr.title;
$scope.menuOptions = [
{
text: tr['filemanager.list.menu.rename'],
click: function ($itemScope, $event, entry) { $scope.renameEntry.show(entry); }
}, {
text: tr['filemanager.list.menu.chown'],
click: function ($itemScope, $event, entry) { $scope.chownEntry.show(entry); }
}, {
text: tr['filemanager.list.menu.extract'],
displayed: function ($itemScope, $event, entry) { return !entry.isDirectory && isArchive(entry.fileName); },
click: function ($itemScope, $event, entry) { extract(entry); }
}, {
text: tr['filemanager.list.menu.download'],
displayed: function ($itemScope, $event, entry) { return !entry.isDirectory; },
click: function ($itemScope, $event, entry) { download(entry); }
}, {
text: tr['filemanager.list.menu.delete'],
hasTopDivider: true,
click: function ($itemScope, $event, entry) { $scope.entryRemove.show(entry); }
}
];
});
$('.file-list').on('scroll', function (event) {
if (event.target.scrollTop > 10) event.target.classList.add('top-scroll-indicator');
else event.target.classList.remove('top-scroll-indicator');
+75 -2
View File
@@ -8,7 +8,9 @@
"dialog": {
"cancel": "Cancel",
"save": "Save",
"close": "Close"
"close": "Close",
"no": "No",
"yes": "Yes"
},
"username": "Username",
"displayName": "Display name",
@@ -358,6 +360,77 @@
}
},
"filemanager": {
"title": "File Manager"
"title": "File Manager",
"removeDialog": {
"reallyDelete": "Really delete {{ fileName }}?"
},
"newDirectoryDialog": {
"title": "New Folder",
"create": "Create"
},
"newFileDialog": {
"title": "New File",
"create": "Create"
},
"renameDialog": {
"title": "Rename {{ fileName }}",
"newName": "New Name",
"rename": "Rename"
},
"chownDialog": {
"title": "Change ownership for {{ fileName }}",
"newOwner": "New Owner",
"change": "Change Owner",
"recursiveCheckbox": "Change ownership recursively"
},
"uploadingDialog": {
"title": "Uploading files ({{ countDone }}/{{ count }})",
"errorAlreadyExists": "One or more files already exist.",
"errorFailed": "Failed to upload one or more files. Please try again.",
"closeWarning": "Do not refresh the page until upload has finished.",
"retry": "Retry",
"overwrite": "Overwrite"
},
"extractDialog": {
"title": "Extracting {{ fileName }}",
"closeWarning": "Do not refresh the page until extract has finished."
},
"textEditorCloseDialog": {
"title": "File has unsaved changes",
"details": "Your changes will be lost if you don't save them",
"dontSave": "Don't Save"
},
"notFound": "Not found",
"toolbar": {
"new": "New",
"upload": "Upload",
"newFile": "New File",
"newFolder": "New Folder",
"uploadFolder": "Upload Folder",
"uploadFile": "Upload File"
},
"list": {
"name": "Name",
"size": "Size",
"owner": "Owner",
"empty": "No files",
"symlink": "symlink to {{ target }}",
"menu": {
"rename": "Rename",
"chown": "Change Ownership",
"extract": "Extract Here",
"download": "Download",
"delete": "Delete"
}
},
"extract": {
"error": "Failed to extract: {{ message }}"
},
"newDirectory": {
"errorAlreadyExists": "Already exists"
},
"newFile": {
"errorAlreadyExists": "Already exists"
}
}
}