Merge branch 'master' into routing-cache-webroot
This commit is contained in:
commit
84285011ce
|
@ -11,13 +11,13 @@
|
|||
"maxparams": 5,
|
||||
"curly": true,
|
||||
"jquery": true,
|
||||
"maxlen": 80,
|
||||
"maxlen": 120,
|
||||
"indent": 4,
|
||||
"browser": true,
|
||||
"globals": {
|
||||
"console": true,
|
||||
"it": true,
|
||||
"itx": true,
|
||||
"xit": true,
|
||||
"expect": true,
|
||||
"describe": true,
|
||||
"beforeEach": true,
|
||||
|
|
|
@ -7,6 +7,7 @@ filter:
|
|||
- 'apps/*/l10n/*'
|
||||
- 'lib/l10n/*'
|
||||
- 'core/js/tests/lib/*.js'
|
||||
- 'core/js/tests/specs/*.js'
|
||||
- 'core/js/jquery-1.10.0.min.js'
|
||||
- 'core/js/jquery-migrate-1.2.1.min.js'
|
||||
- 'core/js/jquery-showpassword.js'
|
||||
|
|
|
@ -9,7 +9,7 @@ Git master: [![Build Status](https://ci.owncloud.org/job/server-master-linux/bad
|
|||
Quality: [![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/owncloud/core/badges/quality-score.png?s=ce2f5ded03d4ac628e9ee5c767243fa7412e644f)](https://scrutinizer-ci.com/g/owncloud/core/)
|
||||
|
||||
### Installation instructions
|
||||
http://doc.owncloud.org/server/5.0/developer_manual/app/gettingstarted.html
|
||||
http://doc.owncloud.org/server/6.0/developer_manual/app/index.html
|
||||
|
||||
### Contribution Guidelines
|
||||
http://owncloud.org/dev/contribute/
|
||||
|
|
|
@ -7,37 +7,21 @@ OCP\JSON::checkLoggedIn();
|
|||
$dir = isset( $_GET['dir'] ) ? $_GET['dir'] : '';
|
||||
$dir = \OC\Files\Filesystem::normalizePath($dir);
|
||||
$dirInfo = \OC\Files\Filesystem::getFileInfo($dir);
|
||||
if (!$dirInfo->getType() === 'dir') {
|
||||
if (!$dirInfo || !$dirInfo->getType() === 'dir') {
|
||||
header("HTTP/1.0 404 Not Found");
|
||||
exit();
|
||||
}
|
||||
|
||||
$doBreadcrumb = isset($_GET['breadcrumb']);
|
||||
$data = array();
|
||||
$baseUrl = OCP\Util::linkTo('files', 'index.php') . '?dir=';
|
||||
|
||||
$permissions = $dirInfo->getPermissions();
|
||||
|
||||
// Make breadcrumb
|
||||
if($doBreadcrumb) {
|
||||
$breadcrumb = \OCA\Files\Helper::makeBreadcrumb($dir);
|
||||
|
||||
$breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '');
|
||||
$breadcrumbNav->assign('breadcrumb', $breadcrumb, false);
|
||||
$breadcrumbNav->assign('baseURL', $baseUrl);
|
||||
|
||||
$data['breadcrumb'] = $breadcrumbNav->fetchPage();
|
||||
}
|
||||
|
||||
// make filelist
|
||||
$files = \OCA\Files\Helper::getFiles($dir);
|
||||
|
||||
$list = new OCP\Template("files", "part.list", "");
|
||||
$list->assign('files', $files, false);
|
||||
$list->assign('baseURL', $baseUrl, false);
|
||||
$list->assign('downloadURL', OCP\Util::linkToRoute('download', array('file' => '/')));
|
||||
$list->assign('isPublic', false);
|
||||
$data['files'] = $list->fetchPage();
|
||||
$data['directory'] = $dir;
|
||||
$data['files'] = \OCA\Files\Helper::formatFileInfos($files);
|
||||
$data['permissions'] = $permissions;
|
||||
|
||||
OCP\JSON::success(array('data' => $data));
|
||||
|
|
|
@ -112,9 +112,8 @@ if($source) {
|
|||
}
|
||||
if($result) {
|
||||
$meta = \OC\Files\Filesystem::getFileInfo($target);
|
||||
$mime=$meta['mimetype'];
|
||||
$id = $meta['fileid'];
|
||||
$eventSource->send('success', array('mime' => $mime, 'size' => \OC\Files\Filesystem::filesize($target), 'id' => $id, 'etag' => $meta['etag']));
|
||||
$data = \OCA\Files\Helper::formatFileInfo($meta);
|
||||
$eventSource->send('success', $data);
|
||||
} else {
|
||||
$eventSource->send('error', array('message' => $l10n->t('Error while downloading %s to %s', array($source, $target))));
|
||||
}
|
||||
|
@ -139,16 +138,7 @@ if($source) {
|
|||
|
||||
if($success) {
|
||||
$meta = \OC\Files\Filesystem::getFileInfo($target);
|
||||
$id = $meta['fileid'];
|
||||
$mime = $meta['mimetype'];
|
||||
$size = $meta['size'];
|
||||
OCP\JSON::success(array('data' => array(
|
||||
'id' => $id,
|
||||
'mime' => $mime,
|
||||
'size' => $size,
|
||||
'content' => $content,
|
||||
'etag' => $meta['etag'],
|
||||
)));
|
||||
OCP\JSON::success(array('data' => \OCA\Files\Helper::formatFileInfo($meta)));
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -58,8 +58,8 @@ if(\OC\Files\Filesystem::mkdir($target)) {
|
|||
$path = '/'.$foldername;
|
||||
}
|
||||
$meta = \OC\Files\Filesystem::getFileInfo($path);
|
||||
$id = $meta['fileid'];
|
||||
OCP\JSON::success(array('data' => array('id' => $id)));
|
||||
$meta['type'] = 'dir'; // missing ?!
|
||||
OCP\JSON::success(array('data' => \OCA\Files\Helper::formatFileInfo($meta)));
|
||||
exit();
|
||||
}
|
||||
|
||||
|
|
|
@ -1,54 +0,0 @@
|
|||
<?php
|
||||
|
||||
OCP\JSON::checkLoggedIn();
|
||||
\OC::$session->close();
|
||||
|
||||
// Load the files
|
||||
$dir = isset($_GET['dir']) ? $_GET['dir'] : '';
|
||||
$mimetypes = isset($_GET['mimetypes']) ? json_decode($_GET['mimetypes'], true) : '';
|
||||
|
||||
// Clean up duplicates from array and deal with non-array requests
|
||||
if (is_array($mimetypes)) {
|
||||
$mimetypes = array_unique($mimetypes);
|
||||
} elseif (is_null($mimetypes)) {
|
||||
$mimetypes = array($_GET['mimetypes']);
|
||||
}
|
||||
|
||||
// make filelist
|
||||
$files = array();
|
||||
/**
|
||||
* @var \OCP\Files\FileInfo[] $files
|
||||
*/
|
||||
// If a type other than directory is requested first load them.
|
||||
if ($mimetypes && !in_array('httpd/unix-directory', $mimetypes)) {
|
||||
$files = array_merge($files, \OC\Files\Filesystem::getDirectoryContent($dir, 'httpd/unix-directory'));
|
||||
}
|
||||
|
||||
if (is_array($mimetypes) && count($mimetypes)) {
|
||||
foreach ($mimetypes as $mimetype) {
|
||||
$files = array_merge($files, \OC\Files\Filesystem::getDirectoryContent($dir, $mimetype));
|
||||
}
|
||||
} else {
|
||||
$files = array_merge($files, \OC\Files\Filesystem::getDirectoryContent($dir));
|
||||
}
|
||||
// Sort by name
|
||||
usort($files, array('\OCA\Files\Helper', 'fileCmp'));
|
||||
|
||||
$result = array();
|
||||
foreach ($files as $file) {
|
||||
$fileData = array();
|
||||
$fileData['directory'] = $dir;
|
||||
$fileData['name'] = $file->getName();
|
||||
$fileData['type'] = $file->getType();
|
||||
$fileData['path'] = $file['path'];
|
||||
$fileData['id'] = $file->getId();
|
||||
$fileData['size'] = $file->getSize();
|
||||
$fileData['mtime'] = $file->getMtime();
|
||||
$fileData['mimetype'] = $file->getMimetype();
|
||||
$fileData['isPreviewAvailable'] = \OC::$server->getPreviewManager()->isMimeSupported($file->getMimetype());
|
||||
$fileData["date"] = OCP\Util::formatDate($file->getMtime());
|
||||
$fileData['mimetype_icon'] = \OCA\Files\Helper::determineIcon($file);
|
||||
$result[] = $fileData;
|
||||
}
|
||||
|
||||
OC_JSON::success(array('data' => $result));
|
|
@ -20,6 +20,10 @@ if (empty($_POST['dirToken'])) {
|
|||
die();
|
||||
}
|
||||
} else {
|
||||
// TODO: ideally this code should be in files_sharing/ajax/upload.php
|
||||
// and the upload/file transfer code needs to be refactored into a utility method
|
||||
// that could be used there
|
||||
|
||||
// return only read permissions for public upload
|
||||
$allowedPermissions = OCP\PERMISSION_READ;
|
||||
$public_directory = !empty($_POST['subdir']) ? $_POST['subdir'] : '/';
|
||||
|
@ -141,19 +145,14 @@ if (strpos($dir, '..') === false) {
|
|||
$error = $l->t('The target folder has been moved or deleted.');
|
||||
$errorCode = 'targetnotfound';
|
||||
} else {
|
||||
$result[] = array('status' => 'success',
|
||||
'mime' => $meta['mimetype'],
|
||||
'mtime' => $meta['mtime'],
|
||||
'size' => $meta['size'],
|
||||
'id' => $meta['fileid'],
|
||||
'name' => basename($target),
|
||||
'etag' => $meta['etag'],
|
||||
'originalname' => $files['tmp_name'][$i],
|
||||
'uploadMaxFilesize' => $maxUploadFileSize,
|
||||
'maxHumanFilesize' => $maxHumanFileSize,
|
||||
'permissions' => $meta['permissions'] & $allowedPermissions,
|
||||
'directory' => $directory,
|
||||
);
|
||||
$data = \OCA\Files\Helper::formatFileInfo($meta);
|
||||
$data['status'] = 'success';
|
||||
$data['originalname'] = $files['tmp_name'][$i];
|
||||
$data['uploadMaxFilesize'] = $maxUploadFileSize;
|
||||
$data['maxHumanFilesize'] = $maxHumanFileSize;
|
||||
$data['permissions'] = $meta['permissions'] & $allowedPermissions;
|
||||
$data['directory'] = $directory;
|
||||
$result[] = $data;
|
||||
}
|
||||
|
||||
} else {
|
||||
|
@ -169,19 +168,15 @@ if (strpos($dir, '..') === false) {
|
|||
if ($meta === false) {
|
||||
$error = $l->t('Upload failed. Could not get file info.');
|
||||
} else {
|
||||
$result[] = array('status' => 'existserror',
|
||||
'mime' => $meta['mimetype'],
|
||||
'mtime' => $meta['mtime'],
|
||||
'size' => $meta['size'],
|
||||
'id' => $meta['fileid'],
|
||||
'name' => basename($target),
|
||||
'etag' => $meta['etag'],
|
||||
'originalname' => $files['tmp_name'][$i],
|
||||
'uploadMaxFilesize' => $maxUploadFileSize,
|
||||
'maxHumanFilesize' => $maxHumanFileSize,
|
||||
'permissions' => $meta['permissions'] & $allowedPermissions,
|
||||
'directory' => $directory,
|
||||
);
|
||||
$data = \OCA\Files\Helper::formatFileInfo($meta);
|
||||
$data['permissions'] = $data['permissions'] & $allowedPermissions;
|
||||
$data['status'] = 'existserror';
|
||||
$data['originalname'] = $files['tmp_name'][$i];
|
||||
$data['uploadMaxFilesize'] = $maxUploadFileSize;
|
||||
$data['maxHumanFilesize'] = $maxHumanFileSize;
|
||||
$data['permissions'] = $meta['permissions'] & $allowedPermissions;
|
||||
$data['directory'] = $directory;
|
||||
$result[] = $data;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,15 +32,16 @@ OCP\Util::addscript('files', 'file-upload');
|
|||
OCP\Util::addscript('files', 'jquery.iframe-transport');
|
||||
OCP\Util::addscript('files', 'jquery.fileupload');
|
||||
OCP\Util::addscript('files', 'jquery-visibility');
|
||||
OCP\Util::addscript('files', 'breadcrumb');
|
||||
OCP\Util::addscript('files', 'filelist');
|
||||
|
||||
OCP\App::setActiveNavigationEntry('files_index');
|
||||
// Load the files
|
||||
$dir = isset($_GET['dir']) ? stripslashes($_GET['dir']) : '';
|
||||
$dir = \OC\Files\Filesystem::normalizePath($dir);
|
||||
$dirInfo = \OC\Files\Filesystem::getFileInfo($dir);
|
||||
$dirInfo = \OC\Files\Filesystem::getFileInfo($dir, false);
|
||||
// Redirect if directory does not exist
|
||||
if (!$dirInfo->getType() === 'dir') {
|
||||
if (!$dirInfo || !$dirInfo->getType() === 'dir') {
|
||||
header('Location: ' . OCP\Util::getScriptName() . '');
|
||||
exit();
|
||||
}
|
||||
|
@ -60,44 +61,19 @@ if ($isIE8 && isset($_GET['dir'])){
|
|||
exit();
|
||||
}
|
||||
|
||||
$ajaxLoad = false;
|
||||
$files = array();
|
||||
$user = OC_User::getUser();
|
||||
if ($isIE8){
|
||||
// after the redirect above, the URL will have a format
|
||||
// like "files#?dir=path" which means that no path was given
|
||||
// (dir is not set). In that specific case, we don't return any
|
||||
// files because the client will take care of switching the dir
|
||||
// to the one from the hash, then ajax-load the initial file list
|
||||
$files = array();
|
||||
$ajaxLoad = true;
|
||||
}
|
||||
else{
|
||||
$files = \OCA\Files\Helper::getFiles($dir);
|
||||
}
|
||||
|
||||
$config = \OC::$server->getConfig();
|
||||
|
||||
// Make breadcrumb
|
||||
$breadcrumb = \OCA\Files\Helper::makeBreadcrumb($dir);
|
||||
|
||||
// make breadcrumb und filelist markup
|
||||
$list = new OCP\Template('files', 'part.list', '');
|
||||
$list->assign('files', $files);
|
||||
$list->assign('baseURL', OCP\Util::linkTo('files', 'index.php') . '?dir=');
|
||||
$list->assign('downloadURL', OCP\Util::linkToRoute('download', array('file' => '/')));
|
||||
$list->assign('isPublic', false);
|
||||
$breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '');
|
||||
$breadcrumbNav->assign('breadcrumb', $breadcrumb);
|
||||
$breadcrumbNav->assign('baseURL', OCP\Util::linkTo('files', 'index.php') . '?dir=');
|
||||
|
||||
// needed for share init, permissions will be reloaded
|
||||
// anyway with ajax load
|
||||
$permissions = $dirInfo->getPermissions();
|
||||
|
||||
// information about storage capacities
|
||||
$storageInfo=OC_Helper::getStorageInfo($dir);
|
||||
$storageInfo=OC_Helper::getStorageInfo($dir, $dirInfo);
|
||||
$freeSpace=$storageInfo['free'];
|
||||
$uploadLimit=OCP\Util::uploadLimit();
|
||||
$maxUploadFilesize=OCP\Util::maxUploadFilesize($dir);
|
||||
$maxUploadFilesize=OCP\Util::maxUploadFilesize($dir, $freeSpace);
|
||||
$publicUploadEnabled = $config->getAppValue('core', 'shareapi_allow_public_upload', 'yes');
|
||||
// if the encryption app is disabled, than everything is fine (INIT_SUCCESSFUL status code)
|
||||
$encryptionInitStatus = 2;
|
||||
|
@ -112,20 +88,12 @@ if ($trashEnabled) {
|
|||
$trashEmpty = \OCA\Files_Trashbin\Trashbin::isEmpty($user);
|
||||
}
|
||||
|
||||
$isCreatable = \OC\Files\Filesystem::isCreatable($dir . '/');
|
||||
$fileHeader = (!isset($files) or count($files) > 0);
|
||||
$emptyContent = ($isCreatable and !$fileHeader) or $ajaxLoad;
|
||||
|
||||
OCP\Util::addscript('files', 'fileactions');
|
||||
OCP\Util::addscript('files', 'files');
|
||||
OCP\Util::addscript('files', 'keyboardshortcuts');
|
||||
$tmpl = new OCP\Template('files', 'index', 'user');
|
||||
$tmpl->assign('fileList', $list->fetchPage());
|
||||
$tmpl->assign('breadcrumb', $breadcrumbNav->fetchPage());
|
||||
$tmpl->assign('dir', $dir);
|
||||
$tmpl->assign('isCreatable', $isCreatable);
|
||||
$tmpl->assign('permissions', $permissions);
|
||||
$tmpl->assign('files', $files);
|
||||
$tmpl->assign('trash', $trashEnabled);
|
||||
$tmpl->assign('trashEmpty', $trashEmpty);
|
||||
$tmpl->assign('uploadMaxFilesize', $maxUploadFilesize); // minimium of freeSpace and uploadLimit
|
||||
|
@ -141,8 +109,5 @@ $tmpl->assign("mailNotificationEnabled", $config->getAppValue('core', 'shareapi_
|
|||
$tmpl->assign("allowShareWithLink", $config->getAppValue('core', 'shareapi_allow_links', 'yes'));
|
||||
$tmpl->assign("encryptionInitStatus", $encryptionInitStatus);
|
||||
$tmpl->assign('disableSharing', false);
|
||||
$tmpl->assign('ajaxLoad', $ajaxLoad);
|
||||
$tmpl->assign('emptyContent', $emptyContent);
|
||||
$tmpl->assign('fileHeader', $fileHeader);
|
||||
|
||||
$tmpl->printPage();
|
||||
|
|
|
@ -0,0 +1,242 @@
|
|||
/**
|
||||
* ownCloud
|
||||
*
|
||||
* @author Vincent Petry
|
||||
* @copyright 2014 Vincent Petry <pvince81@owncloud.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/* global OC */
|
||||
/* global SVGSupport, replaceSVG */
|
||||
(function() {
|
||||
/**
|
||||
* Creates an breadcrumb element in the given container
|
||||
*/
|
||||
var BreadCrumb = function(options){
|
||||
this.$el = $('<div class="breadcrumb"></div>');
|
||||
options = options || {};
|
||||
if (options.onClick) {
|
||||
this.onClick = options.onClick;
|
||||
}
|
||||
if (options.onDrop) {
|
||||
this.onDrop = options.onDrop;
|
||||
}
|
||||
if (options.getCrumbUrl) {
|
||||
this.getCrumbUrl = options.getCrumbUrl;
|
||||
}
|
||||
};
|
||||
BreadCrumb.prototype = {
|
||||
$el: null,
|
||||
dir: null,
|
||||
|
||||
lastWidth: 0,
|
||||
hiddenBreadcrumbs: 0,
|
||||
totalWidth: 0,
|
||||
breadcrumbs: [],
|
||||
onClick: null,
|
||||
onDrop: null,
|
||||
|
||||
/**
|
||||
* Sets the directory to be displayed as breadcrumb.
|
||||
* This will re-render the breadcrumb.
|
||||
* @param dir path to be displayed as breadcrumb
|
||||
*/
|
||||
setDirectory: function(dir) {
|
||||
dir = dir || '/';
|
||||
if (dir !== this.dir) {
|
||||
this.dir = dir;
|
||||
this.render();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the full URL to the given directory
|
||||
* @param part crumb data as map
|
||||
* @param index crumb index
|
||||
* @return full URL
|
||||
*/
|
||||
getCrumbUrl: function(part, index) {
|
||||
return '#';
|
||||
},
|
||||
|
||||
/**
|
||||
* Renders the breadcrumb elements
|
||||
*/
|
||||
render: function() {
|
||||
var parts = this._makeCrumbs(this.dir || '/');
|
||||
var $crumb;
|
||||
this.$el.empty();
|
||||
this.breadcrumbs = [];
|
||||
|
||||
for (var i = 0; i < parts.length; i++) {
|
||||
var part = parts[i];
|
||||
var $image;
|
||||
var $link = $('<a></a>').attr('href', this.getCrumbUrl(part, i));
|
||||
$link.text(part.name);
|
||||
$crumb = $('<div class="crumb svg"></div>');
|
||||
$crumb.append($link);
|
||||
$crumb.attr('data-dir', part.dir);
|
||||
|
||||
if (part.img) {
|
||||
$image = $('<img class="svg"></img>');
|
||||
$image.attr('src', part.img);
|
||||
$link.append($image);
|
||||
}
|
||||
this.breadcrumbs.push($crumb);
|
||||
this.$el.append($crumb);
|
||||
if (this.onClick) {
|
||||
$crumb.on('click', this.onClick);
|
||||
}
|
||||
}
|
||||
$crumb.addClass('last');
|
||||
|
||||
// in case svg is not supported by the browser we need to execute the fallback mechanism
|
||||
if (!SVGSupport()) {
|
||||
replaceSVG();
|
||||
}
|
||||
|
||||
// setup drag and drop
|
||||
if (this.onDrop) {
|
||||
this.$el.find('.crumb:not(.last)').droppable({
|
||||
drop: this.onDrop,
|
||||
tolerance: 'pointer'
|
||||
});
|
||||
}
|
||||
|
||||
this._updateTotalWidth();
|
||||
this.resize($(window).width(), true);
|
||||
},
|
||||
|
||||
/**
|
||||
* Makes a breadcrumb structure based on the given path
|
||||
* @param dir path to split into a breadcrumb structure
|
||||
* @return array of map {dir: path, name: displayName}
|
||||
*/
|
||||
_makeCrumbs: function(dir) {
|
||||
var crumbs = [];
|
||||
var pathToHere = '';
|
||||
// trim leading and trailing slashes
|
||||
dir = dir.replace(/^\/+|\/+$/g, '');
|
||||
var parts = dir.split('/');
|
||||
if (dir === '') {
|
||||
parts = [];
|
||||
}
|
||||
// root part
|
||||
crumbs.push({
|
||||
dir: '/',
|
||||
name: '',
|
||||
img: OC.imagePath('core', 'places/home.svg')
|
||||
});
|
||||
for (var i = 0; i < parts.length; i++) {
|
||||
var part = parts[i];
|
||||
pathToHere = pathToHere + '/' + part;
|
||||
crumbs.push({
|
||||
dir: pathToHere,
|
||||
name: part
|
||||
});
|
||||
}
|
||||
return crumbs;
|
||||
},
|
||||
|
||||
_updateTotalWidth: function () {
|
||||
var self = this;
|
||||
|
||||
this.lastWidth = 0;
|
||||
|
||||
// initialize with some extra space
|
||||
this.totalWidth = 64;
|
||||
// FIXME: this class should not know about global elements
|
||||
if ( $('#navigation').length ) {
|
||||
this.totalWidth += $('#navigation').get(0).offsetWidth;
|
||||
}
|
||||
this.hiddenBreadcrumbs = 0;
|
||||
|
||||
for (var i = 0; i < this.breadcrumbs.length; i++ ) {
|
||||
this.totalWidth += $(this.breadcrumbs[i]).get(0).offsetWidth;
|
||||
}
|
||||
|
||||
$.each($('#controls .actions>div'), function(index, action) {
|
||||
self.totalWidth += $(action).get(0).offsetWidth;
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Show/hide breadcrumbs to fit the given width
|
||||
*/
|
||||
resize: function (width, firstRun) {
|
||||
var i, $crumb;
|
||||
|
||||
if (width === this.lastWidth) {
|
||||
return;
|
||||
}
|
||||
|
||||
// window was shrinked since last time or first run ?
|
||||
if ((width < this.lastWidth || firstRun) && width < this.totalWidth) {
|
||||
if (this.hiddenBreadcrumbs === 0 && this.breadcrumbs.length > 1) {
|
||||
// start by hiding the first breadcrumb after home,
|
||||
// that one will have extra three dots displayed
|
||||
$crumb = this.breadcrumbs[1];
|
||||
this.totalWidth -= $crumb.get(0).offsetWidth;
|
||||
$crumb.find('a').addClass('hidden');
|
||||
$crumb.append('<span class="ellipsis">...</span>');
|
||||
this.totalWidth += $crumb.get(0).offsetWidth;
|
||||
this.hiddenBreadcrumbs = 2;
|
||||
}
|
||||
i = this.hiddenBreadcrumbs;
|
||||
// hide subsequent breadcrumbs if the space is still not enough
|
||||
while (width < this.totalWidth && i > 1 && i < this.breadcrumbs.length - 1) {
|
||||
$crumb = this.breadcrumbs[i];
|
||||
this.totalWidth -= $crumb.get(0).offsetWidth;
|
||||
$crumb.addClass('hidden');
|
||||
this.hiddenBreadcrumbs = i;
|
||||
i++;
|
||||
}
|
||||
// window is bigger than last time
|
||||
} else if (width > this.lastWidth && this.hiddenBreadcrumbs > 0) {
|
||||
i = this.hiddenBreadcrumbs;
|
||||
while (width > this.totalWidth && i > 0) {
|
||||
if (this.hiddenBreadcrumbs === 1) {
|
||||
// special handling for last one as it has the three dots
|
||||
$crumb = this.breadcrumbs[1];
|
||||
if ($crumb) {
|
||||
this.totalWidth -= $crumb.get(0).offsetWidth;
|
||||
$crumb.find('.ellipsis').remove();
|
||||
$crumb.find('a').removeClass('hidden');
|
||||
this.totalWidth += $crumb.get(0).offsetWidth;
|
||||
}
|
||||
} else {
|
||||
$crumb = this.breadcrumbs[i];
|
||||
$crumb.removeClass('hidden');
|
||||
this.totalWidth += $crumb.get(0).offsetWidth;
|
||||
if (this.totalWidth > width) {
|
||||
this.totalWidth -= $crumb.get(0).offsetWidth;
|
||||
$crumb.addClass('hidden');
|
||||
break;
|
||||
}
|
||||
}
|
||||
i--;
|
||||
this.hiddenBreadcrumbs = i;
|
||||
}
|
||||
}
|
||||
|
||||
this.lastWidth = width;
|
||||
}
|
||||
};
|
||||
|
||||
window.BreadCrumb = BreadCrumb;
|
||||
})();
|
||||
|
|
@ -180,7 +180,7 @@ OC.Upload = {
|
|||
},
|
||||
|
||||
init: function() {
|
||||
if ( $('#file_upload_start').exists() && $('#file_upload_start').is(':visible')) {
|
||||
if ( $('#file_upload_start').exists() ) {
|
||||
|
||||
var file_upload_param = {
|
||||
dropZone: $('#content'), // restrict dropZone to content div
|
||||
|
@ -483,28 +483,6 @@ OC.Upload = {
|
|||
$('#file_upload_start').attr('multiple', 'multiple');
|
||||
}
|
||||
|
||||
//if the breadcrumb is to long, start by replacing foldernames with '...' except for the current folder
|
||||
var crumb=$('div.crumb').first();
|
||||
while($('div.controls').height() > 40 && crumb.next('div.crumb').length > 0) {
|
||||
crumb.children('a').text('...');
|
||||
crumb = crumb.next('div.crumb');
|
||||
}
|
||||
//if that isn't enough, start removing items from the breacrumb except for the current folder and it's parent
|
||||
var crumb = $('div.crumb').first();
|
||||
var next = crumb.next('div.crumb');
|
||||
while($('div.controls').height()>40 && next.next('div.crumb').length > 0) {
|
||||
crumb.remove();
|
||||
crumb = next;
|
||||
next = crumb.next('div.crumb');
|
||||
}
|
||||
//still not enough, start shorting down the current folder name
|
||||
var crumb=$('div.crumb>a').last();
|
||||
while($('div.controls').height() > 40 && crumb.text().length > 6) {
|
||||
var text=crumb.text();
|
||||
text = text.substr(0,text.length-6)+'...';
|
||||
crumb.text(text);
|
||||
}
|
||||
|
||||
$(document).click(function(ev) {
|
||||
// do not close when clicking in the dropdown
|
||||
if ($(ev.target).closest('#new').length){
|
||||
|
@ -617,21 +595,7 @@ OC.Upload = {
|
|||
{dir:$('#dir').val(), filename:name},
|
||||
function(result) {
|
||||
if (result.status === 'success') {
|
||||
var date = new Date();
|
||||
// TODO: ideally addFile should be able to receive
|
||||
// all attributes and set them automatically,
|
||||
// and also auto-load the preview
|
||||
var tr = FileList.addFile(name, 0, date, false, hidden);
|
||||
tr.attr('data-size', result.data.size);
|
||||
tr.attr('data-mime', result.data.mime);
|
||||
tr.attr('data-id', result.data.id);
|
||||
tr.attr('data-etag', result.data.etag);
|
||||
tr.find('.filesize').text(humanFileSize(result.data.size));
|
||||
var path = getPathForPreview(name);
|
||||
Files.lazyLoadPreview(path, result.data.mime, function(previewpath) {
|
||||
tr.find('td.filename').attr('style','background-image:url('+previewpath+')');
|
||||
}, null, null, result.data.etag);
|
||||
FileActions.display(tr.find('td.filename'), true);
|
||||
FileList.add(result.data, {hidden: hidden, insert: true});
|
||||
} else {
|
||||
OC.dialogs.alert(result.data.message, t('core', 'Could not create file'));
|
||||
}
|
||||
|
@ -644,10 +608,7 @@ OC.Upload = {
|
|||
{dir:$('#dir').val(), foldername:name},
|
||||
function(result) {
|
||||
if (result.status === 'success') {
|
||||
var date=new Date();
|
||||
FileList.addDir(name, 0, date, hidden);
|
||||
var tr = FileList.findFileEl(name);
|
||||
tr.attr('data-id', result.data.id);
|
||||
FileList.add(result.data, {hidden: hidden, insert: true});
|
||||
} else {
|
||||
OC.dialogs.alert(result.data.message, t('core', 'Could not create folder'));
|
||||
}
|
||||
|
@ -682,20 +643,10 @@ OC.Upload = {
|
|||
}
|
||||
});
|
||||
eventSource.listen('success',function(data) {
|
||||
var mime = data.mime;
|
||||
var size = data.size;
|
||||
var id = data.id;
|
||||
var file = data;
|
||||
$('#uploadprogressbar').fadeOut();
|
||||
var date = new Date();
|
||||
FileList.addFile(localName, size, date, false, hidden);
|
||||
var tr = FileList.findFileEl(localName);
|
||||
tr.data('mime', mime).data('id', id);
|
||||
tr.attr('data-id', id);
|
||||
var path = $('#dir').val()+'/'+localName;
|
||||
Files.lazyLoadPreview(path, mime, function(previewpath) {
|
||||
tr.find('td.filename').attr('style', 'background-image:url('+previewpath+')');
|
||||
}, null, null, data.etag);
|
||||
FileActions.display(tr.find('td.filename'), true);
|
||||
|
||||
FileList.add(file, {hidden: hidden, insert: true});
|
||||
});
|
||||
eventSource.listen('error',function(error) {
|
||||
$('#uploadprogressbar').fadeOut();
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
/* global OC, FileList */
|
||||
/* global OC, FileList, Files */
|
||||
/* global trashBinApp */
|
||||
var FileActions = {
|
||||
actions: {},
|
||||
|
@ -180,7 +180,7 @@ var FileActions = {
|
|||
}
|
||||
var element = $(html);
|
||||
element.data('action', actions['Delete']);
|
||||
element.on('click', {a: null, elem: parent, actionFunc: actions['Delete']}, actionHandler);
|
||||
element.on('click', {a: null, elem: parent, actionFunc: actions['Delete'].action}, actionHandler);
|
||||
parent.parent().children().last().append(element);
|
||||
}
|
||||
|
||||
|
@ -214,7 +214,7 @@ $(document).ready(function () {
|
|||
FileActions.register(downloadScope, 'Download', OC.PERMISSION_READ, function () {
|
||||
return OC.imagePath('core', 'actions/download');
|
||||
}, function (filename) {
|
||||
var url = FileList.getDownloadUrl(filename);
|
||||
var url = Files.getDownloadUrl(filename);
|
||||
if (url) {
|
||||
OC.redirect(url);
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -161,80 +161,33 @@ var Files = {
|
|||
});
|
||||
},
|
||||
|
||||
lastWidth: 0,
|
||||
|
||||
initBreadCrumbs: function () {
|
||||
var $controls = $('#controls');
|
||||
|
||||
Files.lastWidth = 0;
|
||||
Files.breadcrumbs = [];
|
||||
|
||||
// initialize with some extra space
|
||||
Files.breadcrumbsWidth = 64;
|
||||
if ( document.getElementById("navigation") ) {
|
||||
Files.breadcrumbsWidth += $('#navigation').get(0).offsetWidth;
|
||||
/**
|
||||
* Returns the download URL of the given file(s)
|
||||
* @param filename string or array of file names to download
|
||||
* @param dir optional directory in which the file name is, defaults to the current directory
|
||||
*/
|
||||
getDownloadUrl: function(filename, dir) {
|
||||
if ($.isArray(filename)) {
|
||||
filename = JSON.stringify(filename);
|
||||
}
|
||||
Files.hiddenBreadcrumbs = 0;
|
||||
|
||||
$.each($('.crumb'), function(index, breadcrumb) {
|
||||
Files.breadcrumbs[index] = breadcrumb;
|
||||
Files.breadcrumbsWidth += $(breadcrumb).get(0).offsetWidth;
|
||||
});
|
||||
|
||||
$.each($('#controls .actions>div'), function(index, action) {
|
||||
Files.breadcrumbsWidth += $(action).get(0).offsetWidth;
|
||||
});
|
||||
|
||||
// event handlers for breadcrumb items
|
||||
$controls.find('.crumb a').on('click', onClickBreadcrumb);
|
||||
|
||||
// setup drag and drop
|
||||
$controls.find('.crumb:not(.last)').droppable(crumbDropOptions);
|
||||
var params = {
|
||||
dir: dir || FileList.getCurrentDirectory(),
|
||||
files: filename
|
||||
};
|
||||
return this.getAjaxUrl('download', params);
|
||||
},
|
||||
|
||||
resizeBreadcrumbs: function (width, firstRun) {
|
||||
if (width !== Files.lastWidth) {
|
||||
if ((width < Files.lastWidth || firstRun) && width < Files.breadcrumbsWidth) {
|
||||
if (Files.hiddenBreadcrumbs === 0) {
|
||||
bc = $(Files.breadcrumbs[1]).get(0);
|
||||
if (typeof bc != 'undefined') {
|
||||
Files.breadcrumbsWidth -= bc.offsetWidth;
|
||||
$(Files.breadcrumbs[1]).find('a').hide();
|
||||
$(Files.breadcrumbs[1]).append('<span>...</span>');
|
||||
Files.breadcrumbsWidth += bc.offsetWidth;
|
||||
Files.hiddenBreadcrumbs = 2;
|
||||
}
|
||||
}
|
||||
var i = Files.hiddenBreadcrumbs;
|
||||
while (width < Files.breadcrumbsWidth && i > 1 && i < Files.breadcrumbs.length - 1) {
|
||||
Files.breadcrumbsWidth -= $(Files.breadcrumbs[i]).get(0).offsetWidth;
|
||||
$(Files.breadcrumbs[i]).hide();
|
||||
Files.hiddenBreadcrumbs = i;
|
||||
i++;
|
||||
}
|
||||
} else if (width > Files.lastWidth && Files.hiddenBreadcrumbs > 0) {
|
||||
var i = Files.hiddenBreadcrumbs;
|
||||
while (width > Files.breadcrumbsWidth && i > 0) {
|
||||
if (Files.hiddenBreadcrumbs === 1) {
|
||||
Files.breadcrumbsWidth -= $(Files.breadcrumbs[1]).get(0).offsetWidth;
|
||||
$(Files.breadcrumbs[1]).find('span').remove();
|
||||
$(Files.breadcrumbs[1]).find('a').show();
|
||||
Files.breadcrumbsWidth += $(Files.breadcrumbs[1]).get(0).offsetWidth;
|
||||
} else {
|
||||
$(Files.breadcrumbs[i]).show();
|
||||
Files.breadcrumbsWidth += $(Files.breadcrumbs[i]).get(0).offsetWidth;
|
||||
if (Files.breadcrumbsWidth > width) {
|
||||
Files.breadcrumbsWidth -= $(Files.breadcrumbs[i]).get(0).offsetWidth;
|
||||
$(Files.breadcrumbs[i]).hide();
|
||||
break;
|
||||
}
|
||||
}
|
||||
i--;
|
||||
Files.hiddenBreadcrumbs = i;
|
||||
}
|
||||
}
|
||||
Files.lastWidth = width;
|
||||
/**
|
||||
* Returns the ajax URL for a given action
|
||||
* @param action action string
|
||||
* @param params optional params map
|
||||
*/
|
||||
getAjaxUrl: function(action, params) {
|
||||
var q = '';
|
||||
if (params) {
|
||||
q = '?' + OC.buildQueryString(params);
|
||||
}
|
||||
return OC.filePath('files', 'ajax', action + '.php') + q;
|
||||
}
|
||||
};
|
||||
$(document).ready(function() {
|
||||
|
@ -245,14 +198,10 @@ $(document).ready(function() {
|
|||
Files.displayEncryptionWarning();
|
||||
Files.bindKeyboardShortcuts(document, jQuery);
|
||||
|
||||
FileList.postProcessList();
|
||||
Files.setupDragAndDrop();
|
||||
|
||||
$('#file_action_panel').attr('activeAction', false);
|
||||
|
||||
// allow dropping on the "files" app icon
|
||||
$('ul#apps li:first-child').data('dir','').droppable(crumbDropOptions);
|
||||
|
||||
// Triggers invisible file input
|
||||
$('#upload a').on('click', function() {
|
||||
$(this).parent().children('#file_upload_start').trigger('click');
|
||||
|
@ -311,7 +260,7 @@ $(document).ready(function() {
|
|||
var filename=$(this).parent().parent().attr('data-file');
|
||||
var tr = FileList.findFileEl(filename);
|
||||
var renaming=tr.data('renaming');
|
||||
if (!renaming && !FileList.isLoading(filename)) {
|
||||
if (!renaming) {
|
||||
FileActions.currentFile = $(this).parent();
|
||||
var mime=FileActions.getCurrentMimeType();
|
||||
var type=FileActions.getCurrentType();
|
||||
|
@ -377,15 +326,15 @@ $(document).ready(function() {
|
|||
dir = OC.dirname(dir) || '/';
|
||||
}
|
||||
else {
|
||||
files = getSelectedFilesTrash('name');
|
||||
files = Files.getSelectedFiles('name');
|
||||
}
|
||||
OC.Notification.show(t('files','Your download is being prepared. This might take some time if the files are big.'));
|
||||
OC.redirect(FileList.getDownloadUrl(files, dir));
|
||||
OC.redirect(Files.getDownloadUrl(files, dir));
|
||||
return false;
|
||||
});
|
||||
|
||||
$('.delete-selected').click(function(event) {
|
||||
var files=getSelectedFilesTrash('name');
|
||||
var files = Files.getSelectedFiles('name');
|
||||
event.preventDefault();
|
||||
if (FileList.isAllSelected()) {
|
||||
files = null;
|
||||
|
@ -403,16 +352,6 @@ $(document).ready(function() {
|
|||
//do a background scan if needed
|
||||
scanFiles();
|
||||
|
||||
Files.initBreadCrumbs();
|
||||
|
||||
$(window).resize(function() {
|
||||
var width = $(this).width();
|
||||
Files.resizeBreadcrumbs(width, false);
|
||||
});
|
||||
|
||||
var width = $(this).width();
|
||||
Files.resizeBreadcrumbs(width, true);
|
||||
|
||||
// display storage warnings
|
||||
setTimeout(Files.displayStorageWarnings, 100);
|
||||
OC.Notification.setDefault(Files.displayStorageWarnings);
|
||||
|
@ -503,7 +442,7 @@ var createDragShadow = function(event) {
|
|||
$(event.target).parents('tr').find('td input:first').prop('checked',true);
|
||||
}
|
||||
|
||||
var selectedFiles = getSelectedFilesTrash();
|
||||
var selectedFiles = Files.getSelectedFiles();
|
||||
|
||||
if (!isDragSelected && selectedFiles.length === 1) {
|
||||
//revert the selection
|
||||
|
@ -619,52 +558,8 @@ var folderDropOptions={
|
|||
tolerance: 'pointer'
|
||||
};
|
||||
|
||||
var crumbDropOptions={
|
||||
drop: function( event, ui ) {
|
||||
var target=$(this).data('dir');
|
||||
var dir = $('#dir').val();
|
||||
while(dir.substr(0,1) === '/') {//remove extra leading /'s
|
||||
dir=dir.substr(1);
|
||||
}
|
||||
dir = '/' + dir;
|
||||
if (dir.substr(-1,1) !== '/') {
|
||||
dir = dir + '/';
|
||||
}
|
||||
if (target === dir || target+'/' === dir) {
|
||||
return;
|
||||
}
|
||||
var files = ui.helper.find('tr');
|
||||
$(files).each(function(i,row) {
|
||||
var dir = $(row).data('dir');
|
||||
var file = $(row).data('filename');
|
||||
//slapdash selector, tracking down our original element that the clone budded off of.
|
||||
var origin = $('tr[data-id=' + $(row).data('origin') + ']');
|
||||
var td = origin.children('td.filename');
|
||||
var oldBackgroundImage = td.css('background-image');
|
||||
td.css('background-image', 'url('+ OC.imagePath('core', 'loading.gif') + ')');
|
||||
$.post(OC.filePath('files', 'ajax', 'move.php'), { dir: dir, file: file, target: target }, function(result) {
|
||||
if (result) {
|
||||
if (result.status === 'success') {
|
||||
FileList.remove(file);
|
||||
procesSelection();
|
||||
$('#notification').hide();
|
||||
} else {
|
||||
$('#notification').hide();
|
||||
$('#notification').text(result.data.message);
|
||||
$('#notification').fadeIn();
|
||||
}
|
||||
} else {
|
||||
OC.dialogs.alert(t('files', 'Error moving file'), t('files', 'Error'));
|
||||
}
|
||||
td.css('background-image', oldBackgroundImage);
|
||||
});
|
||||
});
|
||||
},
|
||||
tolerance: 'pointer'
|
||||
};
|
||||
|
||||
function procesSelection() {
|
||||
var selected = getSelectedFilesTrash();
|
||||
var selected = Files.getSelectedFiles();
|
||||
var selectedFiles = selected.filter(function(el) {
|
||||
return el.type==='file';
|
||||
});
|
||||
|
@ -714,7 +609,7 @@ function procesSelection() {
|
|||
* if property is set, an array with that property for each file is returnd
|
||||
* if it's ommited an array of objects with all properties is returned
|
||||
*/
|
||||
function getSelectedFilesTrash(property) {
|
||||
Files.getSelectedFiles = function(property) {
|
||||
var elements=$('td.filename input:checkbox:checked').parent().parent();
|
||||
var files=[];
|
||||
elements.each(function(i,element) {
|
||||
|
@ -755,25 +650,32 @@ function getPathForPreview(name) {
|
|||
return path;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a preview URL based on the URL space.
|
||||
* @param urlSpec map with {x: width, y: height, file: file path}
|
||||
* @return preview URL
|
||||
*/
|
||||
Files.generatePreviewUrl = function(urlSpec) {
|
||||
urlSpec = urlSpec || {};
|
||||
if (!urlSpec.x) {
|
||||
urlSpec.x = $('#filestable').data('preview-x');
|
||||
}
|
||||
if (!urlSpec.y) {
|
||||
urlSpec.y = $('#filestable').data('preview-y');
|
||||
}
|
||||
urlSpec.y *= window.devicePixelRatio;
|
||||
urlSpec.x *= window.devicePixelRatio;
|
||||
urlSpec.forceIcon = 0;
|
||||
return OC.generateUrl('/core/preview.png?') + $.param(urlSpec);
|
||||
}
|
||||
|
||||
Files.lazyLoadPreview = function(path, mime, ready, width, height, etag) {
|
||||
// get mime icon url
|
||||
Files.getMimeIcon(mime, function(iconURL) {
|
||||
var urlSpec = {};
|
||||
var previewURL;
|
||||
var previewURL,
|
||||
urlSpec = {};
|
||||
ready(iconURL); // set mimeicon URL
|
||||
|
||||
// now try getting a preview thumbnail URL
|
||||
if ( ! width ) {
|
||||
width = $('#filestable').data('preview-x');
|
||||
}
|
||||
if ( ! height ) {
|
||||
height = $('#filestable').data('preview-y');
|
||||
}
|
||||
// note: the order of arguments must match the one
|
||||
// from the server's template so that the browser
|
||||
// knows it's the same file for caching
|
||||
urlSpec.x = width;
|
||||
urlSpec.y = height;
|
||||
urlSpec.file = Files.fixPath(path);
|
||||
|
||||
if (etag){
|
||||
|
@ -784,15 +686,9 @@ Files.lazyLoadPreview = function(path, mime, ready, width, height, etag) {
|
|||
console.warn('Files.lazyLoadPreview(): missing etag argument');
|
||||
}
|
||||
|
||||
if ( $('#isPublic').length ) {
|
||||
urlSpec.t = $('#dirToken').val();
|
||||
previewURL = OC.generateUrl('/publicpreview.png?') + $.param(urlSpec);
|
||||
} else {
|
||||
previewURL = OC.generateUrl('/core/preview.png?') + $.param(urlSpec);
|
||||
}
|
||||
previewURL = Files.generatePreviewUrl(urlSpec);
|
||||
previewURL = previewURL.replace('(', '%28');
|
||||
previewURL = previewURL.replace(')', '%29');
|
||||
previewURL += '&forceIcon=0';
|
||||
|
||||
// preload image to prevent delay
|
||||
// this will make the browser cache the image
|
||||
|
@ -802,7 +698,7 @@ Files.lazyLoadPreview = function(path, mime, ready, width, height, etag) {
|
|||
if (img.width > 5) {
|
||||
ready(previewURL);
|
||||
}
|
||||
}
|
||||
};
|
||||
img.src = previewURL;
|
||||
});
|
||||
};
|
||||
|
@ -841,14 +737,8 @@ function checkTrashStatus() {
|
|||
});
|
||||
}
|
||||
|
||||
function onClickBreadcrumb(e) {
|
||||
var $el = $(e.target).closest('.crumb'),
|
||||
$targetDir = $el.data('dir'),
|
||||
isPublic = !!$('#isPublic').val();
|
||||
|
||||
if ($targetDir !== undefined && !isPublic) {
|
||||
e.preventDefault();
|
||||
FileList.changeDirectory(decodeURIComponent($targetDir));
|
||||
}
|
||||
// override core's fileDownloadPath (legacy)
|
||||
function fileDownloadPath(dir, file) {
|
||||
return Files.getDownloadUrl(file, dir);
|
||||
}
|
||||
|
||||
|
|
|
@ -27,9 +27,9 @@ $TRANSLATIONS = array(
|
|||
"Share" => "شارك",
|
||||
"Delete permanently" => "حذف بشكل دائم",
|
||||
"Rename" => "إعادة تسميه",
|
||||
"Error moving file" => "حدث خطأ أثناء نقل الملف",
|
||||
"Error" => "خطأ",
|
||||
"Pending" => "قيد الانتظار",
|
||||
"replaced {new_name} with {old_name}" => "استبدل {new_name} بـ {old_name}",
|
||||
"undo" => "تراجع",
|
||||
"_%n folder_::_%n folders_" => array("لا يوجد مجلدات %n","1 مجلد %n","2 مجلد %n","عدد قليل من مجلدات %n","عدد كبير من مجلدات %n","مجلدات %n"),
|
||||
"_%n file_::_%n files_" => array("لا يوجد ملفات %n","ملف %n","2 ملف %n","قليل من ملفات %n","الكثير من ملفات %n"," ملفات %n"),
|
||||
"{dirs} and {files}" => "{dirs} و {files}",
|
||||
|
@ -40,8 +40,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "المفتاح الخاص بتشفير التطبيقات غير صالح. يرجى تحديث كلمة السر الخاصة بالمفتاح الخاص من الإعدادت الشخصية حتى تتمكن من الوصول للملفات المشفرة.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "تم تعطيل التشفير لكن ملفاتك لا تزال مشفرة. فضلا اذهب إلى الإعدادات الشخصية لإزالة التشفير عن ملفاتك.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "جاري تجهيز عملية التحميل. قد تستغرق بعض الوقت اذا كان حجم الملفات كبير.",
|
||||
"Error moving file" => "حدث خطأ أثناء نقل الملف",
|
||||
"Error" => "خطأ",
|
||||
"Name" => "اسم",
|
||||
"Size" => "حجم",
|
||||
"Modified" => "معدل",
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<?php
|
||||
$TRANSLATIONS = array(
|
||||
"Error" => "Памылка",
|
||||
"_%n folder_::_%n folders_" => array("","","",""),
|
||||
"_%n file_::_%n files_" => array("","","",""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("","","",""),
|
||||
"Error" => "Памылка"
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("","","","")
|
||||
);
|
||||
$PLURAL_FORMS = "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
|
||||
|
|
|
@ -12,12 +12,11 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Споделяне",
|
||||
"Delete permanently" => "Изтриване завинаги",
|
||||
"Rename" => "Преименуване",
|
||||
"Error" => "Грешка",
|
||||
"Pending" => "Чакащо",
|
||||
"undo" => "възтановяване",
|
||||
"_%n folder_::_%n folders_" => array("",""),
|
||||
"_%n file_::_%n files_" => array("",""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("",""),
|
||||
"Error" => "Грешка",
|
||||
"Name" => "Име",
|
||||
"Size" => "Размер",
|
||||
"Modified" => "Променено",
|
||||
|
|
|
@ -19,13 +19,11 @@ $TRANSLATIONS = array(
|
|||
"{new_name} already exists" => "{new_name} টি বিদ্যমান",
|
||||
"Share" => "ভাগাভাগি কর",
|
||||
"Rename" => "পূনঃনামকরণ",
|
||||
"Error" => "সমস্যা",
|
||||
"Pending" => "মুলতুবি",
|
||||
"replaced {new_name} with {old_name}" => "{new_name} কে {old_name} নামে প্রতিস্থাপন করা হয়েছে",
|
||||
"undo" => "ক্রিয়া প্রত্যাহার",
|
||||
"_%n folder_::_%n folders_" => array("",""),
|
||||
"_%n file_::_%n files_" => array("",""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("",""),
|
||||
"Error" => "সমস্যা",
|
||||
"Name" => "রাম",
|
||||
"Size" => "আকার",
|
||||
"Modified" => "পরিবর্তিত",
|
||||
|
|
|
@ -43,10 +43,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Comparteix",
|
||||
"Delete permanently" => "Esborra permanentment",
|
||||
"Rename" => "Reanomena",
|
||||
"Error moving file" => "Error en moure el fitxer",
|
||||
"Error" => "Error",
|
||||
"Pending" => "Pendent",
|
||||
"Could not rename file" => "No es pot canviar el nom de fitxer",
|
||||
"replaced {new_name} with {old_name}" => "s'ha substituït {old_name} per {new_name}",
|
||||
"undo" => "desfés",
|
||||
"Error deleting file." => "Error en esborrar el fitxer.",
|
||||
"_%n folder_::_%n folders_" => array("%n carpeta","%n carpetes"),
|
||||
"_%n file_::_%n files_" => array("%n fitxer","%n fitxers"),
|
||||
|
@ -59,8 +59,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "La clau privada de l'aplicació d'encriptació no és vàlida! Actualitzeu la contrasenya de la clau privada a l'arranjament personal per recuperar els fitxers encriptats.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "L'encriptació s'ha desactivat però els vostres fitxers segueixen encriptats. Aneu a la vostra configuració personal per desencriptar els vostres fitxers.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "S'està preparant la baixada. Pot trigar una estona si els fitxers són grans.",
|
||||
"Error moving file" => "Error en moure el fitxer",
|
||||
"Error" => "Error",
|
||||
"Name" => "Nom",
|
||||
"Size" => "Mida",
|
||||
"Modified" => "Modificat",
|
||||
|
|
|
@ -43,10 +43,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Sdílet",
|
||||
"Delete permanently" => "Trvale odstranit",
|
||||
"Rename" => "Přejmenovat",
|
||||
"Error moving file" => "Chyba při přesunu souboru",
|
||||
"Error" => "Chyba",
|
||||
"Pending" => "Nevyřízené",
|
||||
"Could not rename file" => "Nepodařilo se přejmenovat soubor",
|
||||
"replaced {new_name} with {old_name}" => "nahrazeno {new_name} s {old_name}",
|
||||
"undo" => "vrátit zpět",
|
||||
"Error deleting file." => "Chyba při mazání souboru.",
|
||||
"_%n folder_::_%n folders_" => array("%n složka","%n složky","%n složek"),
|
||||
"_%n file_::_%n files_" => array("%n soubor","%n soubory","%n souborů"),
|
||||
|
@ -59,8 +59,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče ve vašem osobním nastavení, abyste znovu získali přístup k vašim zašifrovaným souborům.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Šifrování bylo vypnuto, vaše soubory jsou však stále zašifrované. Běžte prosím do osobního nastavení, kde soubory odšifrujete.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Vaše soubory ke stažení se připravují. Pokud jsou velké, může to chvíli trvat.",
|
||||
"Error moving file" => "Chyba při přesunu souboru",
|
||||
"Error" => "Chyba",
|
||||
"Name" => "Název",
|
||||
"Size" => "Velikost",
|
||||
"Modified" => "Upraveno",
|
||||
|
|
|
@ -21,16 +21,14 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Rhannu",
|
||||
"Delete permanently" => "Dileu'n barhaol",
|
||||
"Rename" => "Ailenwi",
|
||||
"Error" => "Gwall",
|
||||
"Pending" => "I ddod",
|
||||
"replaced {new_name} with {old_name}" => "newidiwyd {new_name} yn lle {old_name}",
|
||||
"undo" => "dadwneud",
|
||||
"_%n folder_::_%n folders_" => array("","","",""),
|
||||
"_%n file_::_%n files_" => array("","","",""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("","","",""),
|
||||
"Your storage is full, files can not be updated or synced anymore!" => "Mae eich storfa'n llawn, ni ellir diweddaru a chydweddu ffeiliau mwyach!",
|
||||
"Your storage is almost full ({usedSpacePercent}%)" => "Mae eich storfa bron a bod yn llawn ({usedSpacePercent}%)",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Wrthi'n paratoi i lwytho i lawr. Gall gymryd peth amser os yw'r ffeiliau'n fawr.",
|
||||
"Error" => "Gwall",
|
||||
"Name" => "Enw",
|
||||
"Size" => "Maint",
|
||||
"Modified" => "Addaswyd",
|
||||
|
|
|
@ -43,10 +43,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Del",
|
||||
"Delete permanently" => "Slet permanent",
|
||||
"Rename" => "Omdøb",
|
||||
"Error moving file" => "Fejl ved flytning af fil",
|
||||
"Error" => "Fejl",
|
||||
"Pending" => "Afventer",
|
||||
"Could not rename file" => "Kunne ikke omdøbe filen",
|
||||
"replaced {new_name} with {old_name}" => "erstattede {new_name} med {old_name}",
|
||||
"undo" => "fortryd",
|
||||
"Error deleting file." => "Fejl ved sletnign af fil.",
|
||||
"_%n folder_::_%n folders_" => array("%n mappe","%n mapper"),
|
||||
"_%n file_::_%n files_" => array("%n fil","%n filer"),
|
||||
|
@ -59,8 +59,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Ugyldig privat nøgle for krypteringsprogrammet. Opdater venligst dit kodeord for den private nøgle i dine personlige indstillinger. Det kræves for at få adgang til dine krypterede filer.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Krypteringen blev deaktiveret, men dine filer er stadig krypteret. Gå venligst til dine personlige indstillinger for at dekryptere dine filer. ",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Dit download forberedes. Dette kan tage lidt tid ved større filer.",
|
||||
"Error moving file" => "Fejl ved flytning af fil",
|
||||
"Error" => "Fejl",
|
||||
"Name" => "Navn",
|
||||
"Size" => "Størrelse",
|
||||
"Modified" => "Ændret",
|
||||
|
|
|
@ -43,10 +43,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Teilen",
|
||||
"Delete permanently" => "Endgültig löschen",
|
||||
"Rename" => "Umbenennen",
|
||||
"Error moving file" => "Fehler beim Verschieben der Datei",
|
||||
"Error" => "Fehler",
|
||||
"Pending" => "Ausstehend",
|
||||
"Could not rename file" => "Die Datei konnte nicht umbenannt werden",
|
||||
"replaced {new_name} with {old_name}" => "{old_name} ersetzt durch {new_name}",
|
||||
"undo" => "rückgängig machen",
|
||||
"Error deleting file." => "Fehler beim Löschen der Datei.",
|
||||
"_%n folder_::_%n folders_" => array("%n Ordner","%n Ordner"),
|
||||
"_%n file_::_%n files_" => array("%n Datei","%n Dateien"),
|
||||
|
@ -59,8 +59,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Ungültiger privater Schlüssel für die Verschlüsselung-App. Bitte aktualisiere Dein privates Schlüssel-Passwort, um den Zugriff auf Deine verschlüsselten Dateien wiederherzustellen.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Die Verschlüsselung wurde deaktiviert, jedoch sind Deine Dateien nach wie vor verschlüsselt. Bitte gehe zu Deinen persönlichen Einstellungen, um Deine Dateien zu entschlüsseln.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Dein Download wird vorbereitet. Dies kann bei größeren Dateien etwas dauern.",
|
||||
"Error moving file" => "Fehler beim Verschieben der Datei",
|
||||
"Error" => "Fehler",
|
||||
"Name" => "Name",
|
||||
"Size" => "Größe",
|
||||
"Modified" => "Geändert",
|
||||
|
|
|
@ -23,9 +23,8 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Teilen",
|
||||
"Delete permanently" => "Endgültig löschen",
|
||||
"Rename" => "Umbenennen",
|
||||
"Error" => "Fehler",
|
||||
"Pending" => "Ausstehend",
|
||||
"replaced {new_name} with {old_name}" => "{old_name} wurde ersetzt durch {new_name}",
|
||||
"undo" => "rückgängig machen",
|
||||
"_%n folder_::_%n folders_" => array("","%n Ordner"),
|
||||
"_%n file_::_%n files_" => array("","%n Dateien"),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("%n Datei wird hochgeladen","%n Dateien werden hochgeladen"),
|
||||
|
@ -33,7 +32,6 @@ $TRANSLATIONS = array(
|
|||
"Your storage is almost full ({usedSpacePercent}%)" => "Ihr Speicher ist fast voll ({usedSpacePercent}%)",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Die Verschlüsselung wurde deaktiviert, jedoch sind Ihre Dateien nach wie vor verschlüsselt. Bitte gehen Sie zu Ihren persönlichen Einstellungen, um Ihre Dateien zu entschlüsseln.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Ihr Download wird vorbereitet. Dies kann bei grösseren Dateien etwas dauern.",
|
||||
"Error" => "Fehler",
|
||||
"Name" => "Name",
|
||||
"Size" => "Grösse",
|
||||
"Modified" => "Geändert",
|
||||
|
|
|
@ -43,10 +43,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Teilen",
|
||||
"Delete permanently" => "Endgültig löschen",
|
||||
"Rename" => "Umbenennen",
|
||||
"Error moving file" => "Fehler beim Verschieben der Datei",
|
||||
"Error" => "Fehler",
|
||||
"Pending" => "Ausstehend",
|
||||
"Could not rename file" => "Die Datei konnte nicht umbenannt werden",
|
||||
"replaced {new_name} with {old_name}" => "{old_name} wurde ersetzt durch {new_name}",
|
||||
"undo" => "rückgängig machen",
|
||||
"Error deleting file." => "Fehler beim Löschen der Datei.",
|
||||
"_%n folder_::_%n folders_" => array("%n Ordner","%n Ordner"),
|
||||
"_%n file_::_%n files_" => array("%n Datei","%n Dateien"),
|
||||
|
@ -59,8 +59,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Ungültiger privater Schlüssel für die Verschlüsselung-App. Bitte aktualisieren Sie Ihr privates Schlüssel-Passwort, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Die Verschlüsselung wurde deaktiviert, jedoch sind Ihre Dateien nach wie vor verschlüsselt. Bitte gehen Sie zu Ihren persönlichen Einstellungen, um Ihre Dateien zu entschlüsseln.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Ihr Download wird vorbereitet. Dies kann bei größeren Dateien etwas dauern.",
|
||||
"Error moving file" => "Fehler beim Verschieben der Datei",
|
||||
"Error" => "Fehler",
|
||||
"Name" => "Name",
|
||||
"Size" => "Größe",
|
||||
"Modified" => "Geändert",
|
||||
|
|
|
@ -5,6 +5,7 @@ $TRANSLATIONS = array(
|
|||
"File name cannot be empty." => "Το όνομα αρχείου δεν μπορεί να είναι κενό.",
|
||||
"\"%s\" is an invalid file name." => "Το \"%s\" είναι ένα μη έγκυρο όνομα αρχείου.",
|
||||
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Μη έγκυρο όνομα, '\\', '/', '<', '>', ':', '\"', '|', '?' και '*' δεν επιτρέπονται.",
|
||||
"The target folder has been moved or deleted." => "Ο φάκελος προορισμού έχει μετακινηθεί ή διαγραφεί.",
|
||||
"The name %s is already used in the folder %s. Please choose a different name." => "Το όνομα %s χρησιμοποιείτε ήδη στον φάκελο %s. Παρακαλώ επιλέξτε ένα άλλο όνομα.",
|
||||
"Not a valid source" => "Μη έγκυρη πηγή",
|
||||
"Server is not allowed to open URLs, please check the server configuration" => "Ο διακομιστής δεν επιτρέπεται να ανοίγει URL, παρακαλώ ελέγξτε τις ρυθμίσεις του διακομιστή",
|
||||
|
@ -28,6 +29,8 @@ $TRANSLATIONS = array(
|
|||
"Invalid directory." => "Μη έγκυρος φάκελος.",
|
||||
"Files" => "Αρχεία",
|
||||
"Unable to upload {filename} as it is a directory or has 0 bytes" => "Αδυναμία φόρτωσης {filename} καθώς είναι κατάλογος αρχείων ή έχει 0 bytes",
|
||||
"Total file size {size1} exceeds upload limit {size2}" => "Το συνολικό μέγεθος αρχείου {size1} υπερβαίνει το όριο μεταφόρτωσης {size2}",
|
||||
"Not enough free space, you are uploading {size1} but only {size2} is left" => "Δεν υπάρχει αρκετός ελεύθερος χώρος, μεταφορτώνετε μέγεθος {size1} αλλά υπάρχει χώρος μόνο {size2}",
|
||||
"Upload cancelled." => "Η αποστολή ακυρώθηκε.",
|
||||
"Could not get result from server." => "Αδυναμία λήψης αποτελέσματος από το διακομιστή.",
|
||||
"File upload is in progress. Leaving the page now will cancel the upload." => "Η αποστολή του αρχείου βρίσκεται σε εξέλιξη. Το κλείσιμο της σελίδας θα ακυρώσει την αποστολή.",
|
||||
|
@ -40,10 +43,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Διαμοιρασμός",
|
||||
"Delete permanently" => "Μόνιμη διαγραφή",
|
||||
"Rename" => "Μετονομασία",
|
||||
"Error moving file" => "Σφάλμα κατά τη μετακίνηση του αρχείου",
|
||||
"Error" => "Σφάλμα",
|
||||
"Pending" => "Εκκρεμεί",
|
||||
"Could not rename file" => "Αδυναμία μετονομασίας αρχείου",
|
||||
"replaced {new_name} with {old_name}" => "αντικαταστάθηκε το {new_name} με {old_name}",
|
||||
"undo" => "αναίρεση",
|
||||
"Error deleting file." => "Σφάλμα διαγραφής αρχείου.",
|
||||
"_%n folder_::_%n folders_" => array("%n φάκελος","%n φάκελοι"),
|
||||
"_%n file_::_%n files_" => array("%n αρχείο","%n αρχεία"),
|
||||
|
@ -56,8 +59,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Άκυρο προσωπικό κλειδί για την εφαρμογή κρυπτογράφησης. Παρακαλώ ενημερώστε τον κωδικό του προσωπικού κλειδίου σας στις προσωπικές ρυθμίσεις για να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Η κρυπτογράφηση απενεργοποιήθηκε, αλλά τα αρχεία σας είναι ακόμα κρυπτογραφημένα. Παρακαλούμε απενεργοποιήσετε την κρυπτογράφηση αρχείων από τις προσωπικές σας ρυθμίσεις",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Η λήψη προετοιμάζεται. Αυτό μπορεί να πάρει ώρα εάν τα αρχεία έχουν μεγάλο μέγεθος.",
|
||||
"Error moving file" => "Σφάλμα κατά τη μετακίνηση του αρχείου",
|
||||
"Error" => "Σφάλμα",
|
||||
"Name" => "Όνομα",
|
||||
"Size" => "Μέγεθος",
|
||||
"Modified" => "Τροποποιήθηκε",
|
||||
|
|
|
@ -43,10 +43,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Share",
|
||||
"Delete permanently" => "Delete permanently",
|
||||
"Rename" => "Rename",
|
||||
"Error moving file" => "Error moving file",
|
||||
"Error" => "Error",
|
||||
"Pending" => "Pending",
|
||||
"Could not rename file" => "Could not rename file",
|
||||
"replaced {new_name} with {old_name}" => "replaced {new_name} with {old_name}",
|
||||
"undo" => "undo",
|
||||
"Error deleting file." => "Error deleting file.",
|
||||
"_%n folder_::_%n folders_" => array("%n folder","%n folders"),
|
||||
"_%n file_::_%n files_" => array("%n file","%n files"),
|
||||
|
@ -59,8 +59,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Your download is being prepared. This might take some time if the files are big.",
|
||||
"Error moving file" => "Error moving file",
|
||||
"Error" => "Error",
|
||||
"Name" => "Name",
|
||||
"Size" => "Size",
|
||||
"Modified" => "Modified",
|
||||
|
|
|
@ -35,10 +35,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Kunhavigi",
|
||||
"Delete permanently" => "Forigi por ĉiam",
|
||||
"Rename" => "Alinomigi",
|
||||
"Error moving file" => "Eraris movo de dosiero",
|
||||
"Error" => "Eraro",
|
||||
"Pending" => "Traktotaj",
|
||||
"Could not rename file" => "Ne povis alinomiĝi dosiero",
|
||||
"replaced {new_name} with {old_name}" => "anstataŭiĝis {new_name} per {old_name}",
|
||||
"undo" => "malfari",
|
||||
"_%n folder_::_%n folders_" => array("%n dosierujo","%n dosierujoj"),
|
||||
"_%n file_::_%n files_" => array("%n dosiero","%n dosieroj"),
|
||||
"{dirs} and {files}" => "{dirs} kaj {files}",
|
||||
|
@ -46,8 +46,6 @@ $TRANSLATIONS = array(
|
|||
"Your storage is full, files can not be updated or synced anymore!" => "Via memoro plenas, ne plu eblas ĝisdatigi aŭ sinkronigi dosierojn!",
|
||||
"Your storage is almost full ({usedSpacePercent}%)" => "Via memoro preskaŭ plenas ({usedSpacePercent}%)",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Via elŝuto pretiĝatas. Ĉi tio povas daŭri iom da tempo se la dosieroj grandas.",
|
||||
"Error moving file" => "Eraris movo de dosiero",
|
||||
"Error" => "Eraro",
|
||||
"Name" => "Nomo",
|
||||
"Size" => "Grando",
|
||||
"Modified" => "Modifita",
|
||||
|
|
|
@ -43,10 +43,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Compartir",
|
||||
"Delete permanently" => "Eliminar permanentemente",
|
||||
"Rename" => "Renombrar",
|
||||
"Error moving file" => "Error moviendo archivo",
|
||||
"Error" => "Error",
|
||||
"Pending" => "Pendiente",
|
||||
"Could not rename file" => "No se pudo renombrar el archivo",
|
||||
"replaced {new_name} with {old_name}" => "reemplazado {new_name} con {old_name}",
|
||||
"undo" => "deshacer",
|
||||
"Error deleting file." => "Error al borrar el archivo",
|
||||
"_%n folder_::_%n folders_" => array("%n carpeta","%n carpetas"),
|
||||
"_%n file_::_%n files_" => array("%n archivo","%n archivos"),
|
||||
|
@ -59,8 +59,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "La clave privada no es válida para la app de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "El cifrado ha sido deshabilitado pero tus archivos permanecen cifrados. Por favor, ve a tus ajustes personales para descifrar tus archivos.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Su descarga está siendo preparada. Esto podría tardar algo de tiempo si los archivos son grandes.",
|
||||
"Error moving file" => "Error moviendo archivo",
|
||||
"Error" => "Error",
|
||||
"Name" => "Nombre",
|
||||
"Size" => "Tamaño",
|
||||
"Modified" => "Modificado",
|
||||
|
|
|
@ -39,10 +39,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Compartir",
|
||||
"Delete permanently" => "Borrar permanentemente",
|
||||
"Rename" => "Cambiar nombre",
|
||||
"Error moving file" => "Error moviendo el archivo",
|
||||
"Error" => "Error",
|
||||
"Pending" => "Pendientes",
|
||||
"Could not rename file" => "No se pudo renombrar el archivo",
|
||||
"replaced {new_name} with {old_name}" => "se reemplazó {new_name} con {old_name}",
|
||||
"undo" => "deshacer",
|
||||
"Error deleting file." => "Error al borrar el archivo.",
|
||||
"_%n folder_::_%n folders_" => array("%n carpeta","%n carpetas"),
|
||||
"_%n file_::_%n files_" => array("%n archivo","%n archivos"),
|
||||
|
@ -54,8 +54,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Llave privada inválida para la aplicación de encriptación. Por favor actualice la clave de la llave privada en las configuraciones personales para recobrar el acceso a sus archivos encriptados.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "El proceso de cifrado se ha desactivado, pero los archivos aún están encriptados. Por favor, vaya a la configuración personal para descifrar los archivos.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Tu descarga se está preparando. Esto puede demorar si los archivos son muy grandes.",
|
||||
"Error moving file" => "Error moviendo el archivo",
|
||||
"Error" => "Error",
|
||||
"Name" => "Nombre",
|
||||
"Size" => "Tamaño",
|
||||
"Modified" => "Modificado",
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
$TRANSLATIONS = array(
|
||||
"Files" => "Archivos",
|
||||
"Share" => "Compartir",
|
||||
"Error" => "Error",
|
||||
"_%n folder_::_%n folders_" => array("",""),
|
||||
"_%n file_::_%n files_" => array("",""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("",""),
|
||||
"Error" => "Error",
|
||||
"Upload" => "Subir",
|
||||
"Download" => "Descargar"
|
||||
);
|
||||
|
|
|
@ -39,10 +39,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Compartir",
|
||||
"Delete permanently" => "Eliminar permanentemente",
|
||||
"Rename" => "Renombrar",
|
||||
"Error moving file" => "Error moviendo archivo",
|
||||
"Error" => "Error",
|
||||
"Pending" => "Pendiente",
|
||||
"Could not rename file" => "No se pudo renombrar el archivo",
|
||||
"replaced {new_name} with {old_name}" => "reemplazado {new_name} con {old_name}",
|
||||
"undo" => "deshacer",
|
||||
"Error deleting file." => "Error borrando el archivo.",
|
||||
"_%n folder_::_%n folders_" => array("%n carpeta","%n carpetas"),
|
||||
"_%n file_::_%n files_" => array("%n archivo","%n archivos"),
|
||||
|
@ -54,8 +54,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "La clave privada no es válida para la aplicación de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "El cifrado ha sido deshabilitado pero tus archivos permanecen cifrados. Por favor, ve a tus ajustes personales para descifrar tus archivos.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Su descarga está siendo preparada. Esto podría tardar algo de tiempo si los archivos son grandes.",
|
||||
"Error moving file" => "Error moviendo archivo",
|
||||
"Error" => "Error",
|
||||
"Name" => "Nombre",
|
||||
"Size" => "Tamaño",
|
||||
"Modified" => "Modificado",
|
||||
|
|
|
@ -3,7 +3,9 @@ $TRANSLATIONS = array(
|
|||
"Could not move %s - File with this name already exists" => "Ei saa liigutada faili %s - samanimeline fail on juba olemas",
|
||||
"Could not move %s" => "%s liigutamine ebaõnnestus",
|
||||
"File name cannot be empty." => "Faili nimi ei saa olla tühi.",
|
||||
"\"%s\" is an invalid file name." => "\"%s\" on vigane failinimi.",
|
||||
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Vigane nimi, '\\', '/', '<', '>', ':', '\"', '|', '?' ja '*' pole lubatud.",
|
||||
"The target folder has been moved or deleted." => "Sihtkataloog on ümber tõstetud või kustutatud.",
|
||||
"The name %s is already used in the folder %s. Please choose a different name." => "Nimi %s on juba kasutusel kataloogis %s. Palun vali mõni teine nimi.",
|
||||
"Not a valid source" => "Pole korrektne lähteallikas",
|
||||
"Server is not allowed to open URLs, please check the server configuration" => "Server ei võimalda URL-ide avamist, palun kontrolli serveri seadistust",
|
||||
|
@ -27,6 +29,8 @@ $TRANSLATIONS = array(
|
|||
"Invalid directory." => "Vigane kaust.",
|
||||
"Files" => "Failid",
|
||||
"Unable to upload {filename} as it is a directory or has 0 bytes" => "Ei saa üles laadida {filename}, kuna see on kataloog või selle suurus on 0 baiti",
|
||||
"Total file size {size1} exceeds upload limit {size2}" => "Faili suurus {size1} ületab faili üleslaadimise mahu piirangu {size2}.",
|
||||
"Not enough free space, you are uploading {size1} but only {size2} is left" => "Pole piisavalt vaba ruumi. Sa laadid üles {size1}, kuid ainult {size2} on saadaval.",
|
||||
"Upload cancelled." => "Üleslaadimine tühistati.",
|
||||
"Could not get result from server." => "Serverist ei saadud tulemusi",
|
||||
"File upload is in progress. Leaving the page now will cancel the upload." => "Faili üleslaadimine on töös. Lehelt lahkumine katkestab selle üleslaadimise.",
|
||||
|
@ -39,23 +43,22 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Jaga",
|
||||
"Delete permanently" => "Kustuta jäädavalt",
|
||||
"Rename" => "Nimeta ümber",
|
||||
"Error moving file" => "Viga faili eemaldamisel",
|
||||
"Error" => "Viga",
|
||||
"Pending" => "Ootel",
|
||||
"Could not rename file" => "Ei suuda faili ümber nimetada",
|
||||
"replaced {new_name} with {old_name}" => "asendas nime {old_name} nimega {new_name}",
|
||||
"undo" => "tagasi",
|
||||
"Error deleting file." => "Viga faili kustutamisel.",
|
||||
"_%n folder_::_%n folders_" => array("%n kataloog","%n kataloogi"),
|
||||
"_%n file_::_%n files_" => array("%n fail","%n faili"),
|
||||
"{dirs} and {files}" => "{dirs} ja {files}",
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("Laadin üles %n faili","Laadin üles %n faili"),
|
||||
"\"{name}\" is an invalid file name." => "\"{name}\" on vigane failinimi.",
|
||||
"Your storage is full, files can not be updated or synced anymore!" => "Sinu andmemaht on täis! Faile ei uuendata ega sünkroniseerita!",
|
||||
"Your storage is almost full ({usedSpacePercent}%)" => "Su andmemaht on peaaegu täis ({usedSpacePercent}%)",
|
||||
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Krüpteerimisrakend on lubatud, kuid võtmeid pole lähtestatud. Palun logi välja ning uuesti sisse.",
|
||||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Vigane Krüpteerimisrakendi privaatvõti . Palun uuenda oma privaatse võtme parool oma personaasete seadete all taastamaks ligipääsu oma krüpteeritud failidele.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Krüpteering on keelatud, kuid sinu failid on endiselt krüpteeritud. Palun vaata oma personaalseid seadeid oma failide dekrüpteerimiseks.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Valmistatakse allalaadimist. See võib võtta veidi aega, kui on tegu suurte failidega. ",
|
||||
"Error moving file" => "Viga faili eemaldamisel",
|
||||
"Error" => "Viga",
|
||||
"Name" => "Nimi",
|
||||
"Size" => "Suurus",
|
||||
"Modified" => "Muudetud",
|
||||
|
|
|
@ -39,10 +39,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Elkarbanatu",
|
||||
"Delete permanently" => "Ezabatu betirako",
|
||||
"Rename" => "Berrizendatu",
|
||||
"Error moving file" => "Errorea fitxategia mugitzean",
|
||||
"Error" => "Errorea",
|
||||
"Pending" => "Zain",
|
||||
"Could not rename file" => "Ezin izan da fitxategia berrizendatu",
|
||||
"replaced {new_name} with {old_name}" => " {new_name}-k {old_name} ordezkatu du",
|
||||
"undo" => "desegin",
|
||||
"Error deleting file." => "Errorea fitxategia ezabatzerakoan.",
|
||||
"_%n folder_::_%n folders_" => array("karpeta %n","%n karpeta"),
|
||||
"_%n file_::_%n files_" => array("fitxategi %n","%n fitxategi"),
|
||||
|
@ -54,8 +54,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Enkriptazio aplikaziorako gako pribatu okerra. Mesedez eguneratu zure gako pribatuaren pasahitza zure ezarpen pertsonaletan zure enkriptatuko fitxategietarako sarrera berreskuratzeko.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Enkriptazioa desgaitua izan da baina zure fitxategiak oraindik enkriptatuta daude. Mesedez jo zure ezarpen pertsonaletara zure fitxategiak dekodifikatzeko.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Zure deskarga prestatu egin behar da. Denbora bat har lezake fitxategiak handiak badira. ",
|
||||
"Error moving file" => "Errorea fitxategia mugitzean",
|
||||
"Error" => "Errorea",
|
||||
"Name" => "Izena",
|
||||
"Size" => "Tamaina",
|
||||
"Modified" => "Aldatuta",
|
||||
|
|
|
@ -23,16 +23,14 @@ $TRANSLATIONS = array(
|
|||
"Share" => "اشتراکگذاری",
|
||||
"Delete permanently" => "حذف قطعی",
|
||||
"Rename" => "تغییرنام",
|
||||
"Error" => "خطا",
|
||||
"Pending" => "در انتظار",
|
||||
"replaced {new_name} with {old_name}" => "{نام_جدید} با { نام_قدیمی} جایگزین شد.",
|
||||
"undo" => "بازگشت",
|
||||
"_%n folder_::_%n folders_" => array(""),
|
||||
"_%n file_::_%n files_" => array(""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("در حال بارگذاری %n فایل"),
|
||||
"Your storage is full, files can not be updated or synced anymore!" => "فضای ذخیره ی شما کاملا پر است، بیش از این فایلها بهنگام یا همگام سازی نمی توانند بشوند!",
|
||||
"Your storage is almost full ({usedSpacePercent}%)" => "فضای ذخیره ی شما تقریبا پر است ({usedSpacePercent}%)",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "دانلود شما در حال آماده شدن است. در صورتیکه پرونده ها بزرگ باشند ممکن است مدتی طول بکشد.",
|
||||
"Error" => "خطا",
|
||||
"Name" => "نام",
|
||||
"Size" => "اندازه",
|
||||
"Modified" => "تاریخ",
|
||||
|
|
|
@ -41,9 +41,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Jaa",
|
||||
"Delete permanently" => "Poista pysyvästi",
|
||||
"Rename" => "Nimeä uudelleen",
|
||||
"Error moving file" => "Virhe tiedostoa siirrettäessä",
|
||||
"Error" => "Virhe",
|
||||
"Pending" => "Odottaa",
|
||||
"Could not rename file" => "Tiedoston nimeäminen uudelleen epäonnistui",
|
||||
"undo" => "kumoa",
|
||||
"Error deleting file." => "Virhe tiedostoa poistaessa.",
|
||||
"_%n folder_::_%n folders_" => array("%n kansio","%n kansiota"),
|
||||
"_%n file_::_%n files_" => array("%n tiedosto","%n tiedostoa"),
|
||||
|
@ -54,8 +55,6 @@ $TRANSLATIONS = array(
|
|||
"Your storage is almost full ({usedSpacePercent}%)" => "Tallennustila on melkein loppu ({usedSpacePercent}%)",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Salaus poistettiin käytöstä, mutta tiedostosi ovat edelleen salattuina. Siirry henkilökohtaisiin asetuksiin avataksesi tiedostojesi salauksen.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Lataustasi valmistellaan. Tämä saattaa kestää hetken, jos tiedostot ovat suuria kooltaan.",
|
||||
"Error moving file" => "Virhe tiedostoa siirrettäessä",
|
||||
"Error" => "Virhe",
|
||||
"Name" => "Nimi",
|
||||
"Size" => "Koko",
|
||||
"Modified" => "Muokattu",
|
||||
|
|
|
@ -43,10 +43,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Partager",
|
||||
"Delete permanently" => "Supprimer de façon définitive",
|
||||
"Rename" => "Renommer",
|
||||
"Error moving file" => "Erreur lors du déplacement du fichier",
|
||||
"Error" => "Erreur",
|
||||
"Pending" => "En attente",
|
||||
"Could not rename file" => "Impossible de renommer le fichier",
|
||||
"replaced {new_name} with {old_name}" => "{new_name} a été remplacé par {old_name}",
|
||||
"undo" => "annuler",
|
||||
"Error deleting file." => "Erreur pendant la suppression du fichier.",
|
||||
"_%n folder_::_%n folders_" => array("%n dossier","%n dossiers"),
|
||||
"_%n file_::_%n files_" => array("%n fichier","%n fichiers"),
|
||||
|
@ -59,8 +59,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Votre clef privée pour l'application de chiffrement est invalide ! Veuillez mettre à jour le mot de passe de votre clef privée dans vos paramètres personnels pour récupérer l'accès à vos fichiers chiffrés.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Le chiffrement était désactivé mais vos fichiers sont toujours chiffrés. Veuillez vous rendre sur vos Paramètres personnels pour déchiffrer vos fichiers.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Votre téléchargement est cours de préparation. Ceci peut nécessiter un certain temps si les fichiers sont volumineux.",
|
||||
"Error moving file" => "Erreur lors du déplacement du fichier",
|
||||
"Error" => "Erreur",
|
||||
"Name" => "Nom",
|
||||
"Size" => "Taille",
|
||||
"Modified" => "Modifié",
|
||||
|
|
|
@ -43,10 +43,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Compartir",
|
||||
"Delete permanently" => "Eliminar permanentemente",
|
||||
"Rename" => "Renomear",
|
||||
"Error moving file" => "Produciuse un erro ao mover o ficheiro",
|
||||
"Error" => "Erro",
|
||||
"Pending" => "Pendentes",
|
||||
"Could not rename file" => "Non foi posíbel renomear o ficheiro",
|
||||
"replaced {new_name} with {old_name}" => "substituír {new_name} por {old_name}",
|
||||
"undo" => "desfacer",
|
||||
"Error deleting file." => "Produciuse un erro ao eliminar o ficheiro.",
|
||||
"_%n folder_::_%n folders_" => array("%n cartafol","%n cartafoles"),
|
||||
"_%n file_::_%n files_" => array("%n ficheiro","%n ficheiros"),
|
||||
|
@ -59,8 +59,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "A chave privada para o aplicativo de cifrado non é correcta. Actualice o contrasinal da súa chave privada nos seus axustes persoais para recuperar o acceso aos seus ficheiros cifrados.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "O cifrado foi desactivado, mais os ficheiros están cifrados. Vaia á configuración persoal para descifrar os ficheiros.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Está a prepararse a súa descarga. Isto pode levar bastante tempo se os ficheiros son grandes.",
|
||||
"Error moving file" => "Produciuse un erro ao mover o ficheiro",
|
||||
"Error" => "Erro",
|
||||
"Name" => "Nome",
|
||||
"Size" => "Tamaño",
|
||||
"Modified" => "Modificado",
|
||||
|
|
|
@ -23,14 +23,12 @@ $TRANSLATIONS = array(
|
|||
"Share" => "שתף",
|
||||
"Delete permanently" => "מחק לצמיתות",
|
||||
"Rename" => "שינוי שם",
|
||||
"Error" => "שגיאה",
|
||||
"Pending" => "ממתין",
|
||||
"replaced {new_name} with {old_name}" => "{new_name} הוחלף ב־{old_name}",
|
||||
"undo" => "ביטול",
|
||||
"_%n folder_::_%n folders_" => array("",""),
|
||||
"_%n file_::_%n files_" => array("",""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("",""),
|
||||
"Your storage is almost full ({usedSpacePercent}%)" => "שטח האחסון שלך כמעט מלא ({usedSpacePercent}%)",
|
||||
"Error" => "שגיאה",
|
||||
"Name" => "שם",
|
||||
"Size" => "גודל",
|
||||
"Modified" => "זמן שינוי",
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
$TRANSLATIONS = array(
|
||||
"Share" => "साझा करें",
|
||||
"Error" => "त्रुटि",
|
||||
"_%n folder_::_%n folders_" => array("",""),
|
||||
"_%n file_::_%n files_" => array("",""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("",""),
|
||||
"Error" => "त्रुटि",
|
||||
"Upload" => "अपलोड ",
|
||||
"Save" => "सहेजें"
|
||||
);
|
||||
|
|
|
@ -11,12 +11,11 @@ $TRANSLATIONS = array(
|
|||
"File upload is in progress. Leaving the page now will cancel the upload." => "Učitavanje datoteke. Napuštanjem stranice će prekinuti učitavanje.",
|
||||
"Share" => "Podijeli",
|
||||
"Rename" => "Promjeni ime",
|
||||
"Error" => "Greška",
|
||||
"Pending" => "U tijeku",
|
||||
"undo" => "vrati",
|
||||
"_%n folder_::_%n folders_" => array("","",""),
|
||||
"_%n file_::_%n files_" => array("","",""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("","",""),
|
||||
"Error" => "Greška",
|
||||
"Name" => "Ime",
|
||||
"Size" => "Veličina",
|
||||
"Modified" => "Zadnja promjena",
|
||||
|
|
|
@ -39,10 +39,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Megosztás",
|
||||
"Delete permanently" => "Végleges törlés",
|
||||
"Rename" => "Átnevezés",
|
||||
"Error moving file" => "Az állomány áthelyezése nem sikerült.",
|
||||
"Error" => "Hiba",
|
||||
"Pending" => "Folyamatban",
|
||||
"Could not rename file" => "Az állomány nem nevezhető át",
|
||||
"replaced {new_name} with {old_name}" => "{new_name} fájlt kicseréltük ezzel: {old_name}",
|
||||
"undo" => "visszavonás",
|
||||
"Error deleting file." => "Hiba a file törlése közben.",
|
||||
"_%n folder_::_%n folders_" => array("%n mappa","%n mappa"),
|
||||
"_%n file_::_%n files_" => array("%n állomány","%n állomány"),
|
||||
|
@ -54,8 +54,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Az állományok titkosításához használt titkos kulcsa érvénytelen. Kérjük frissítse a titkos kulcs jelszót a személyes beállításokban, hogy ismét hozzáférjen a titkosított állományaihoz!",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "A titkosítási funkciót kikapcsolták, de az Ön állományai még mindig titkosított állapotban vannak. A személyes beállításoknál tudja a titkosítást feloldani.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Készül a letöltendő állomány. Ez eltarthat egy ideig, ha nagyok a fájlok.",
|
||||
"Error moving file" => "Az állomány áthelyezése nem sikerült.",
|
||||
"Error" => "Hiba",
|
||||
"Name" => "Név",
|
||||
"Size" => "Méret",
|
||||
"Modified" => "Módosítva",
|
||||
|
|
|
@ -5,10 +5,10 @@ $TRANSLATIONS = array(
|
|||
"Missing a temporary folder" => "Manca un dossier temporari",
|
||||
"Files" => "Files",
|
||||
"Share" => "Compartir",
|
||||
"Error" => "Error",
|
||||
"_%n folder_::_%n folders_" => array("",""),
|
||||
"_%n file_::_%n files_" => array("",""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("",""),
|
||||
"Error" => "Error",
|
||||
"Name" => "Nomine",
|
||||
"Size" => "Dimension",
|
||||
"Modified" => "Modificate",
|
||||
|
|
|
@ -37,10 +37,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Bagikan",
|
||||
"Delete permanently" => "Hapus secara permanen",
|
||||
"Rename" => "Ubah nama",
|
||||
"Error moving file" => "Galat saat memindahkan berkas",
|
||||
"Error" => "Galat",
|
||||
"Pending" => "Menunggu",
|
||||
"Could not rename file" => "Tidak dapat mengubah nama berkas",
|
||||
"replaced {new_name} with {old_name}" => "mengganti {new_name} dengan {old_name}",
|
||||
"undo" => "urungkan",
|
||||
"Error deleting file." => "Galat saat menghapus berkas.",
|
||||
"_%n folder_::_%n folders_" => array("%n folder"),
|
||||
"_%n file_::_%n files_" => array("%n berkas"),
|
||||
|
@ -52,8 +52,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Kunci privat tidak sah untuk Aplikasi Enskripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienskripsi.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Enskripi telah dinonaktifkan tetapi berkas anda tetap dienskripsi. Silakan menuju ke pengaturan pribadi untuk deskrip berkas anda.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Unduhan Anda sedang disiapkan. Prosesnya dapat berlangsung agak lama jika ukuran berkasnya besar.",
|
||||
"Error moving file" => "Galat saat memindahkan berkas",
|
||||
"Error" => "Galat",
|
||||
"Name" => "Nama",
|
||||
"Size" => "Ukuran",
|
||||
"Modified" => "Dimodifikasi",
|
||||
|
|
|
@ -19,13 +19,11 @@ $TRANSLATIONS = array(
|
|||
"{new_name} already exists" => "{new_name} er þegar til",
|
||||
"Share" => "Deila",
|
||||
"Rename" => "Endurskýra",
|
||||
"Error" => "Villa",
|
||||
"Pending" => "Bíður",
|
||||
"replaced {new_name} with {old_name}" => "yfirskrifaði {new_name} með {old_name}",
|
||||
"undo" => "afturkalla",
|
||||
"_%n folder_::_%n folders_" => array("",""),
|
||||
"_%n file_::_%n files_" => array("",""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("",""),
|
||||
"Error" => "Villa",
|
||||
"Name" => "Nafn",
|
||||
"Size" => "Stærð",
|
||||
"Modified" => "Breytt",
|
||||
|
|
|
@ -43,10 +43,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Condividi",
|
||||
"Delete permanently" => "Elimina definitivamente",
|
||||
"Rename" => "Rinomina",
|
||||
"Error moving file" => "Errore durante lo spostamento del file",
|
||||
"Error" => "Errore",
|
||||
"Pending" => "In corso",
|
||||
"Could not rename file" => "Impossibile rinominare il file",
|
||||
"replaced {new_name} with {old_name}" => "sostituito {new_name} con {old_name}",
|
||||
"undo" => "annulla",
|
||||
"Error deleting file." => "Errore durante l'eliminazione del file.",
|
||||
"_%n folder_::_%n folders_" => array("%n cartella","%n cartelle"),
|
||||
"_%n file_::_%n files_" => array("%n file","%n file"),
|
||||
|
@ -59,8 +59,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Chiave privata non valida per l'applicazione di cifratura. Aggiorna la password della chiave privata nelle impostazioni personali per ripristinare l'accesso ai tuoi file cifrati.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "La cifratura è stata disabilitata ma i tuoi file sono ancora cifrati. Vai nelle impostazioni personali per decifrare i file.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Il tuo scaricamento è in fase di preparazione. Ciò potrebbe richiedere del tempo se i file sono grandi.",
|
||||
"Error moving file" => "Errore durante lo spostamento del file",
|
||||
"Error" => "Errore",
|
||||
"Name" => "Nome",
|
||||
"Size" => "Dimensione",
|
||||
"Modified" => "Modificato",
|
||||
|
|
|
@ -43,10 +43,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "共有",
|
||||
"Delete permanently" => "完全に削除する",
|
||||
"Rename" => "名前の変更",
|
||||
"Error moving file" => "ファイルの移動エラー",
|
||||
"Error" => "エラー",
|
||||
"Pending" => "中断",
|
||||
"Could not rename file" => "ファイルの名前変更ができませんでした",
|
||||
"replaced {new_name} with {old_name}" => "{old_name} を {new_name} に置換",
|
||||
"undo" => "元に戻す",
|
||||
"Error deleting file." => "ファイルの削除エラー。",
|
||||
"_%n folder_::_%n folders_" => array("%n 個のフォルダー"),
|
||||
"_%n file_::_%n files_" => array("%n 個のファイル"),
|
||||
|
@ -59,8 +59,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "暗号化アプリの無効なプライベートキーです。あなたの暗号化されたファイルへアクセスするために、個人設定からプライベートキーのパスワードを更新してください。",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "暗号化の機能は無効化されましたが、ファイルはすでに暗号化されています。個人設定からファイルを複合を行ってください。",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "ダウンロードの準備中です。ファイルサイズが大きい場合は少し時間がかかるかもしれません。",
|
||||
"Error moving file" => "ファイルの移動エラー",
|
||||
"Error" => "エラー",
|
||||
"Name" => "名前",
|
||||
"Size" => "サイズ",
|
||||
"Modified" => "更新日時",
|
||||
|
|
|
@ -21,16 +21,14 @@ $TRANSLATIONS = array(
|
|||
"Share" => "გაზიარება",
|
||||
"Delete permanently" => "სრულად წაშლა",
|
||||
"Rename" => "გადარქმევა",
|
||||
"Error" => "შეცდომა",
|
||||
"Pending" => "მოცდის რეჟიმში",
|
||||
"replaced {new_name} with {old_name}" => "{new_name} შეცვლილია {old_name}–ით",
|
||||
"undo" => "დაბრუნება",
|
||||
"_%n folder_::_%n folders_" => array(""),
|
||||
"_%n file_::_%n files_" => array(""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array(""),
|
||||
"Your storage is full, files can not be updated or synced anymore!" => "თქვენი საცავი გადაივსო. ფაილების განახლება და სინქრონიზირება ვერ მოხერხდება!",
|
||||
"Your storage is almost full ({usedSpacePercent}%)" => "თქვენი საცავი თითქმის გადაივსო ({usedSpacePercent}%)",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "გადმოწერის მოთხოვნა მუშავდება. ის მოითხოვს გარკვეულ დროს რაგდან ფაილები არის დიდი ზომის.",
|
||||
"Error" => "შეცდომა",
|
||||
"Name" => "სახელი",
|
||||
"Size" => "ზომა",
|
||||
"Modified" => "შეცვლილია",
|
||||
|
|
|
@ -2,11 +2,10 @@
|
|||
$TRANSLATIONS = array(
|
||||
"Files" => "ឯកសារ",
|
||||
"Share" => "ចែករំលែក",
|
||||
"undo" => "មិនធ្វើវិញ",
|
||||
"Error" => "កំហុស",
|
||||
"_%n folder_::_%n folders_" => array(""),
|
||||
"_%n file_::_%n files_" => array(""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array(""),
|
||||
"Error" => "កំហុស",
|
||||
"Name" => "ឈ្មោះ",
|
||||
"Size" => "ទំហំ",
|
||||
"Upload" => "ផ្ទុកឡើង",
|
||||
|
|
|
@ -39,10 +39,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "공유",
|
||||
"Delete permanently" => "영구히 삭제",
|
||||
"Rename" => "이름 바꾸기",
|
||||
"Error moving file" => "파일 이동 오류",
|
||||
"Error" => "오류",
|
||||
"Pending" => "대기 중",
|
||||
"Could not rename file" => "이름을 변경할 수 없음",
|
||||
"replaced {new_name} with {old_name}" => "{old_name}이(가) {new_name}(으)로 대체됨",
|
||||
"undo" => "실행 취소",
|
||||
"Error deleting file." => "파일 삭제 오류.",
|
||||
"_%n folder_::_%n folders_" => array("폴더 %n개"),
|
||||
"_%n file_::_%n files_" => array("파일 %n개"),
|
||||
|
@ -54,8 +54,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "암호화 앱의 개인 키가 잘못되었습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 업데이트해야 합니다.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "암호화는 해제되어 있지만, 파일은 아직 암호화되어 있습니다. 개인 설정에서 파일을 복호화하십시오.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "다운로드 준비 중입니다. 파일 크기가 크면 시간이 오래 걸릴 수도 있습니다.",
|
||||
"Error moving file" => "파일 이동 오류",
|
||||
"Error" => "오류",
|
||||
"Name" => "이름",
|
||||
"Size" => "크기",
|
||||
"Modified" => "수정됨",
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
$TRANSLATIONS = array(
|
||||
"Files" => "پهڕگەکان",
|
||||
"Share" => "هاوبەشی کردن",
|
||||
"Error" => "ههڵه",
|
||||
"_%n folder_::_%n folders_" => array("",""),
|
||||
"_%n file_::_%n files_" => array("",""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("",""),
|
||||
"Error" => "ههڵه",
|
||||
"Name" => "ناو",
|
||||
"Upload" => "بارکردن",
|
||||
"Save" => "پاشکهوتکردن",
|
||||
|
|
|
@ -11,11 +11,10 @@ $TRANSLATIONS = array(
|
|||
"File upload is in progress. Leaving the page now will cancel the upload." => "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach.",
|
||||
"Share" => "Deelen",
|
||||
"Rename" => "Ëm-benennen",
|
||||
"undo" => "réckgängeg man",
|
||||
"Error" => "Fehler",
|
||||
"_%n folder_::_%n folders_" => array("",""),
|
||||
"_%n file_::_%n files_" => array("",""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("",""),
|
||||
"Error" => "Fehler",
|
||||
"Name" => "Numm",
|
||||
"Size" => "Gréisst",
|
||||
"Modified" => "Geännert",
|
||||
|
|
|
@ -39,10 +39,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Dalintis",
|
||||
"Delete permanently" => "Ištrinti negrįžtamai",
|
||||
"Rename" => "Pervadinti",
|
||||
"Error moving file" => "Klaida perkeliant failą",
|
||||
"Error" => "Klaida",
|
||||
"Pending" => "Laukiantis",
|
||||
"Could not rename file" => "Neįmanoma pervadinti failo",
|
||||
"replaced {new_name} with {old_name}" => "pakeiskite {new_name} į {old_name}",
|
||||
"undo" => "anuliuoti",
|
||||
"Error deleting file." => "Klaida trinant failą.",
|
||||
"_%n folder_::_%n folders_" => array("%n aplankas","%n aplankai","%n aplankų"),
|
||||
"_%n file_::_%n files_" => array("%n failas","%n failai","%n failų"),
|
||||
|
@ -54,8 +54,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Netinkamas privatus raktas Šifravimo programai. Prašome atnaujinti savo privataus rakto slaptažodį asmeniniuose nustatymuose, kad atkurti prieigą prie šifruotų failų.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Šifravimas buvo išjungtas, bet Jūsų failai vis dar užšifruoti. Prašome eiti į asmeninius nustatymus ir iššifruoti savo failus.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Jūsų atsisiuntimas yra paruošiamas. tai gali užtrukti jei atsisiunčiamas didelis failas.",
|
||||
"Error moving file" => "Klaida perkeliant failą",
|
||||
"Error" => "Klaida",
|
||||
"Name" => "Pavadinimas",
|
||||
"Size" => "Dydis",
|
||||
"Modified" => "Pakeista",
|
||||
|
|
|
@ -23,9 +23,8 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Dalīties",
|
||||
"Delete permanently" => "Dzēst pavisam",
|
||||
"Rename" => "Pārsaukt",
|
||||
"Error" => "Kļūda",
|
||||
"Pending" => "Gaida savu kārtu",
|
||||
"replaced {new_name} with {old_name}" => "aizvietoja {new_name} ar {old_name}",
|
||||
"undo" => "atsaukt",
|
||||
"_%n folder_::_%n folders_" => array("%n mapes","%n mape","%n mapes"),
|
||||
"_%n file_::_%n files_" => array("%n faili","%n fails","%n faili"),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("%n","Augšupielāde %n failu","Augšupielāde %n failus"),
|
||||
|
@ -33,7 +32,6 @@ $TRANSLATIONS = array(
|
|||
"Your storage is almost full ({usedSpacePercent}%)" => "Jūsu krātuve ir gandrīz pilna ({usedSpacePercent}%)",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Šifrēšana tika atslēgta, tomēr jūsu faili joprojām ir šifrēti. Atšifrēt failus var Personiskajos uzstādījumos.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Tiek sagatavota lejupielāde. Tas var aizņemt kādu laiciņu, ja datnes ir lielas.",
|
||||
"Error" => "Kļūda",
|
||||
"Name" => "Nosaukums",
|
||||
"Size" => "Izmērs",
|
||||
"Modified" => "Mainīts",
|
||||
|
|
|
@ -34,10 +34,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Сподели",
|
||||
"Delete permanently" => "Трајно избришани",
|
||||
"Rename" => "Преименувај",
|
||||
"Error moving file" => "Грешка при префрлање на датотека",
|
||||
"Error" => "Грешка",
|
||||
"Pending" => "Чека",
|
||||
"Could not rename file" => "Не можам да ја преименувам датотеката",
|
||||
"replaced {new_name} with {old_name}" => "заменета {new_name} со {old_name}",
|
||||
"undo" => "врати",
|
||||
"_%n folder_::_%n folders_" => array("",""),
|
||||
"_%n file_::_%n files_" => array("",""),
|
||||
"{dirs} and {files}" => "{dirs} и {files}",
|
||||
|
@ -45,8 +45,6 @@ $TRANSLATIONS = array(
|
|||
"Your storage is full, files can not be updated or synced anymore!" => "Вашиот сториџ е полн, датотеките веќе не можат да се освежуваат или синхронизираат!",
|
||||
"Your storage is almost full ({usedSpacePercent}%)" => "Вашиот сториџ е скоро полн ({usedSpacePercent}%)",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Вашето преземање се подготвува. Ова може да потрае до колку датотеките се големи.",
|
||||
"Error moving file" => "Грешка при префрлање на датотека",
|
||||
"Error" => "Грешка",
|
||||
"Name" => "Име",
|
||||
"Size" => "Големина",
|
||||
"Modified" => "Променето",
|
||||
|
|
|
@ -11,11 +11,11 @@ $TRANSLATIONS = array(
|
|||
"Upload cancelled." => "Muatnaik dibatalkan.",
|
||||
"Share" => "Kongsi",
|
||||
"Rename" => "Namakan",
|
||||
"Error" => "Ralat",
|
||||
"Pending" => "Dalam proses",
|
||||
"_%n folder_::_%n folders_" => array(""),
|
||||
"_%n file_::_%n files_" => array(""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array(""),
|
||||
"Error" => "Ralat",
|
||||
"Name" => "Nama",
|
||||
"Size" => "Saiz",
|
||||
"Modified" => "Dimodifikasi",
|
||||
|
|
|
@ -39,10 +39,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Del",
|
||||
"Delete permanently" => "Slett permanent",
|
||||
"Rename" => "Gi nytt navn",
|
||||
"Error moving file" => "Feil ved flytting av fil",
|
||||
"Error" => "Feil",
|
||||
"Pending" => "Ventende",
|
||||
"Could not rename file" => "Klarte ikke å gi nytt navn til fil",
|
||||
"replaced {new_name} with {old_name}" => "erstattet {new_name} med {old_name}",
|
||||
"undo" => "angre",
|
||||
"Error deleting file." => "Feil ved sletting av fil.",
|
||||
"_%n folder_::_%n folders_" => array("%n mappe","%n mapper"),
|
||||
"_%n file_::_%n files_" => array("%n fil","%n filer"),
|
||||
|
@ -54,8 +54,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Ugyldig privat nøkkel for Krypterings-app. Oppdater passordet for din private nøkkel i dine personlige innstillinger for å gjenopprette tilgang til de krypterte filene dine.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Kryptering ble slått av men filene dine er fremdeles kryptert. Gå til dine personlige innstillinger for å dekryptere filene dine.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Nedlastingen din klargjøres. Hvis filene er store kan dette ta litt tid.",
|
||||
"Error moving file" => "Feil ved flytting av fil",
|
||||
"Error" => "Feil",
|
||||
"Name" => "Navn",
|
||||
"Size" => "Størrelse",
|
||||
"Modified" => "Endret",
|
||||
|
|
|
@ -43,10 +43,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Delen",
|
||||
"Delete permanently" => "Verwijder definitief",
|
||||
"Rename" => "Hernoem",
|
||||
"Error moving file" => "Fout bij verplaatsen bestand",
|
||||
"Error" => "Fout",
|
||||
"Pending" => "In behandeling",
|
||||
"Could not rename file" => "Kon niet hernoemen bestand",
|
||||
"replaced {new_name} with {old_name}" => "verving {new_name} met {old_name}",
|
||||
"undo" => "ongedaan maken",
|
||||
"Error deleting file." => "Fout bij verwijderen bestand.",
|
||||
"_%n folder_::_%n folders_" => array("","%n mappen"),
|
||||
"_%n file_::_%n files_" => array("","%n bestanden"),
|
||||
|
@ -59,8 +59,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Ongeldige privésleutel voor crypto app. Werk het privésleutel wachtwoord bij in uw persoonlijke instellingen om opnieuw toegang te krijgen tot uw versleutelde bestanden.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Encryptie is uitgeschakeld maar uw bestanden zijn nog steeds versleuteld. Ga naar uw persoonlijke instellingen om uw bestanden te decoderen.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Uw download wordt voorbereid. Dit kan enige tijd duren bij grote bestanden.",
|
||||
"Error moving file" => "Fout bij verplaatsen bestand",
|
||||
"Error" => "Fout",
|
||||
"Name" => "Naam",
|
||||
"Size" => "Grootte",
|
||||
"Modified" => "Aangepast",
|
||||
|
|
|
@ -27,9 +27,9 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Del",
|
||||
"Delete permanently" => "Slett for godt",
|
||||
"Rename" => "Endra namn",
|
||||
"Error moving file" => "Feil ved flytting av fil",
|
||||
"Error" => "Feil",
|
||||
"Pending" => "Under vegs",
|
||||
"replaced {new_name} with {old_name}" => "bytte ut {new_name} med {old_name}",
|
||||
"undo" => "angre",
|
||||
"_%n folder_::_%n folders_" => array("%n mappe","%n mapper"),
|
||||
"_%n file_::_%n files_" => array("%n fil","%n filer"),
|
||||
"{dirs} and {files}" => "{dirs} og {files}",
|
||||
|
@ -38,8 +38,6 @@ $TRANSLATIONS = array(
|
|||
"Your storage is almost full ({usedSpacePercent}%)" => "Lagringa di er nesten full ({usedSpacePercent} %)",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Kryptering er skrudd av, men filene dine er enno krypterte. Du kan dekryptera filene i personlege innstillingar.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Gjer klar nedlastinga di. Dette kan ta ei stund viss filene er store.",
|
||||
"Error moving file" => "Feil ved flytting av fil",
|
||||
"Error" => "Feil",
|
||||
"Name" => "Namn",
|
||||
"Size" => "Storleik",
|
||||
"Modified" => "Endra",
|
||||
|
|
|
@ -11,12 +11,11 @@ $TRANSLATIONS = array(
|
|||
"File upload is in progress. Leaving the page now will cancel the upload." => "Un amontcargar es a se far. Daissar aquesta pagina ara tamparà lo cargament. ",
|
||||
"Share" => "Parteja",
|
||||
"Rename" => "Torna nomenar",
|
||||
"Error" => "Error",
|
||||
"Pending" => "Al esperar",
|
||||
"undo" => "defar",
|
||||
"_%n folder_::_%n folders_" => array("",""),
|
||||
"_%n file_::_%n files_" => array("",""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("",""),
|
||||
"Error" => "Error",
|
||||
"Name" => "Nom",
|
||||
"Size" => "Talha",
|
||||
"Modified" => "Modificat",
|
||||
|
|
|
@ -3,11 +3,10 @@ $TRANSLATIONS = array(
|
|||
"Files" => "ਫਾਇਲਾਂ",
|
||||
"Share" => "ਸਾਂਝਾ ਕਰੋ",
|
||||
"Rename" => "ਨਾਂ ਬਦਲੋ",
|
||||
"undo" => "ਵਾਪਸ",
|
||||
"Error" => "ਗਲਤੀ",
|
||||
"_%n folder_::_%n folders_" => array("",""),
|
||||
"_%n file_::_%n files_" => array("",""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("",""),
|
||||
"Error" => "ਗਲਤੀ",
|
||||
"Upload" => "ਅੱਪਲੋਡ",
|
||||
"Cancel upload" => "ਅੱਪਲੋਡ ਰੱਦ ਕਰੋ",
|
||||
"Download" => "ਡਾਊਨਲੋਡ",
|
||||
|
|
|
@ -43,10 +43,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Udostępnij",
|
||||
"Delete permanently" => "Trwale usuń",
|
||||
"Rename" => "Zmień nazwę",
|
||||
"Error moving file" => "Błąd prz przenoszeniu pliku",
|
||||
"Error" => "Błąd",
|
||||
"Pending" => "Oczekujące",
|
||||
"Could not rename file" => "Nie można zmienić nazwy pliku",
|
||||
"replaced {new_name} with {old_name}" => "zastąpiono {new_name} przez {old_name}",
|
||||
"undo" => "cofnij",
|
||||
"Error deleting file." => "Błąd podczas usuwania pliku",
|
||||
"_%n folder_::_%n folders_" => array("%n katalog","%n katalogi","%n katalogów"),
|
||||
"_%n file_::_%n files_" => array("%n plik","%n pliki","%n plików"),
|
||||
|
@ -59,8 +59,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Klucz prywatny nie jest poprawny! Może Twoje hasło zostało zmienione z zewnątrz. Można zaktualizować hasło klucza prywatnego w ustawieniach osobistych w celu odzyskania dostępu do plików",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Szyfrowanie zostało wyłączone, ale nadal pliki są zaszyfrowane. Przejdź do ustawień osobistych i tam odszyfruj pliki.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Pobieranie jest przygotowywane. Może to zająć trochę czasu jeśli pliki są duże.",
|
||||
"Error moving file" => "Błąd prz przenoszeniu pliku",
|
||||
"Error" => "Błąd",
|
||||
"Name" => "Nazwa",
|
||||
"Size" => "Rozmiar",
|
||||
"Modified" => "Modyfikacja",
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
<?php
|
||||
$TRANSLATIONS = array(
|
||||
"Save" => "Zapisz"
|
||||
);
|
||||
$PLURAL_FORMS = "nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);";
|
|
@ -43,10 +43,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Compartilhar",
|
||||
"Delete permanently" => "Excluir permanentemente",
|
||||
"Rename" => "Renomear",
|
||||
"Error moving file" => "Erro movendo o arquivo",
|
||||
"Error" => "Erro",
|
||||
"Pending" => "Pendente",
|
||||
"Could not rename file" => "Não foi possível renomear o arquivo",
|
||||
"replaced {new_name} with {old_name}" => "Substituído {old_name} por {new_name} ",
|
||||
"undo" => "desfazer",
|
||||
"Error deleting file." => "Erro eliminando o arquivo.",
|
||||
"_%n folder_::_%n folders_" => array("%n pasta","%n pastas"),
|
||||
"_%n file_::_%n files_" => array("%n arquivo","%n arquivos"),
|
||||
|
@ -59,8 +59,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Chave do App de Encriptação é inválida. Por favor, atualize sua senha de chave privada em suas configurações pessoais para recuperar o acesso a seus arquivos criptografados.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Encriptação foi desabilitada mas seus arquivos continuam encriptados. Por favor vá a suas configurações pessoais para descriptar seus arquivos.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Seu download está sendo preparado. Isto pode levar algum tempo se os arquivos forem grandes.",
|
||||
"Error moving file" => "Erro movendo o arquivo",
|
||||
"Error" => "Erro",
|
||||
"Name" => "Nome",
|
||||
"Size" => "Tamanho",
|
||||
"Modified" => "Modificado",
|
||||
|
|
|
@ -39,10 +39,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Partilhar",
|
||||
"Delete permanently" => "Eliminar permanentemente",
|
||||
"Rename" => "Renomear",
|
||||
"Error moving file" => "Erro ao mover o ficheiro",
|
||||
"Error" => "Erro",
|
||||
"Pending" => "Pendente",
|
||||
"Could not rename file" => "Não pôde renomear o ficheiro",
|
||||
"replaced {new_name} with {old_name}" => "substituido {new_name} por {old_name}",
|
||||
"undo" => "desfazer",
|
||||
"Error deleting file." => "Erro ao apagar o ficheiro.",
|
||||
"_%n folder_::_%n folders_" => array("%n pasta","%n pastas"),
|
||||
"_%n file_::_%n files_" => array("%n ficheiro","%n ficheiros"),
|
||||
|
@ -54,8 +54,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Chave privada inválida da Aplicação de Encriptação. Por favor atualize a sua senha de chave privada nas definições pessoais, para recuperar o acesso aos seus ficheiros encriptados.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "A encriptação foi desactivada mas os seus ficheiros continuam encriptados. Por favor consulte as suas definições pessoais para desencriptar os ficheiros.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "O seu download está a ser preparado. Este processo pode demorar algum tempo se os ficheiros forem grandes.",
|
||||
"Error moving file" => "Erro ao mover o ficheiro",
|
||||
"Error" => "Erro",
|
||||
"Name" => "Nome",
|
||||
"Size" => "Tamanho",
|
||||
"Modified" => "Modificado",
|
||||
|
|
|
@ -4,7 +4,9 @@ $TRANSLATIONS = array(
|
|||
"Could not move %s" => "Nu se poate muta %s",
|
||||
"File name cannot be empty." => "Numele fișierului nu poate rămâne gol.",
|
||||
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Nume nevalide, '\\', '/', '<', '>', ':', '\"', '|', '?' și '*' nu sunt permise.",
|
||||
"Error while downloading %s to %s" => "Eroare la descarcarea %s in %s",
|
||||
"Error when creating the file" => "Eroare la crearea fisierului",
|
||||
"Folder name cannot be empty." => "Numele folderului nu poate fi liber.",
|
||||
"Error when creating the folder" => "Eroare la crearea folderului",
|
||||
"Unable to set upload directory." => "Imposibil de a seta directorul pentru incărcare.",
|
||||
"Invalid Token" => "Jeton Invalid",
|
||||
|
@ -32,10 +34,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Partajează",
|
||||
"Delete permanently" => "Șterge permanent",
|
||||
"Rename" => "Redenumește",
|
||||
"Error moving file" => "Eroare la mutarea fișierului",
|
||||
"Error" => "Eroare",
|
||||
"Pending" => "În așteptare",
|
||||
"Could not rename file" => "Nu s-a putut redenumi fisierul",
|
||||
"replaced {new_name} with {old_name}" => "{new_name} a fost înlocuit cu {old_name}",
|
||||
"undo" => "desfă",
|
||||
"_%n folder_::_%n folders_" => array("%n director","%n directoare","%n directoare"),
|
||||
"_%n file_::_%n files_" => array("%n fișier","%n fișiere","%n fișiere"),
|
||||
"{dirs} and {files}" => "{dirs} și {files}",
|
||||
|
@ -44,8 +46,6 @@ $TRANSLATIONS = array(
|
|||
"Your storage is almost full ({usedSpacePercent}%)" => "Spațiul de stocare este aproape plin ({usedSpacePercent}%)",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "criptarea a fost disactivata dar fisierele sant inca criptate.va rog intrati in setarile personale pentru a decripta fisierele",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Se pregătește descărcarea. Aceasta poate dura ceva timp dacă fișierele sunt mari.",
|
||||
"Error moving file" => "Eroare la mutarea fișierului",
|
||||
"Error" => "Eroare",
|
||||
"Name" => "Nume",
|
||||
"Size" => "Mărime",
|
||||
"Modified" => "Modificat",
|
||||
|
|
|
@ -43,10 +43,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Открыть доступ",
|
||||
"Delete permanently" => "Удалить окончательно",
|
||||
"Rename" => "Переименовать",
|
||||
"Error moving file" => "Ошибка при перемещении файла",
|
||||
"Error" => "Ошибка",
|
||||
"Pending" => "Ожидание",
|
||||
"Could not rename file" => "Не удалось переименовать файл",
|
||||
"replaced {new_name} with {old_name}" => "заменено {new_name} на {old_name}",
|
||||
"undo" => "отмена",
|
||||
"Error deleting file." => "Ошибка при удалении файла.",
|
||||
"_%n folder_::_%n folders_" => array("%n каталог","%n каталога","%n каталогов"),
|
||||
"_%n file_::_%n files_" => array("%n файл","%n файла","%n файлов"),
|
||||
|
@ -59,8 +59,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Закрытый ключ приложения шифрования недействителен. Обновите закрытый ключ в личных настройках, чтобы восстановить доступ к зашифрованным файлам.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Шифрование было отключено, но ваши файлы остались зашифрованными. Зайдите на страницу личных настроек для того, чтобы расшифровать их.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Идёт подготовка к скачиванию. Это может занять некоторое время, если файлы большого размера.",
|
||||
"Error moving file" => "Ошибка при перемещении файла",
|
||||
"Error" => "Ошибка",
|
||||
"Name" => "Имя",
|
||||
"Size" => "Размер",
|
||||
"Modified" => "Дата изменения",
|
||||
|
|
|
@ -12,11 +12,10 @@ $TRANSLATIONS = array(
|
|||
"File upload is in progress. Leaving the page now will cancel the upload." => "උඩුගතකිරීමක් සිදුවේ. පිටුව හැර යාමෙන් එය නැවතෙනු ඇත",
|
||||
"Share" => "බෙදා හදා ගන්න",
|
||||
"Rename" => "නැවත නම් කරන්න",
|
||||
"undo" => "නිෂ්ප්රභ කරන්න",
|
||||
"Error" => "දෝෂයක්",
|
||||
"_%n folder_::_%n folders_" => array("",""),
|
||||
"_%n file_::_%n files_" => array("",""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("",""),
|
||||
"Error" => "දෝෂයක්",
|
||||
"Name" => "නම",
|
||||
"Size" => "ප්රමාණය",
|
||||
"Modified" => "වෙනස් කළ",
|
||||
|
|
|
@ -39,10 +39,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Zdieľať",
|
||||
"Delete permanently" => "Zmazať trvalo",
|
||||
"Rename" => "Premenovať",
|
||||
"Error moving file" => "Chyba pri presúvaní súboru",
|
||||
"Error" => "Chyba",
|
||||
"Pending" => "Prebieha",
|
||||
"Could not rename file" => "Nemožno premenovať súbor",
|
||||
"replaced {new_name} with {old_name}" => "prepísaný {new_name} súborom {old_name}",
|
||||
"undo" => "vrátiť",
|
||||
"Error deleting file." => "Chyba pri mazaní súboru.",
|
||||
"_%n folder_::_%n folders_" => array("%n priečinok","%n priečinky","%n priečinkov"),
|
||||
"_%n file_::_%n files_" => array("%n súbor","%n súbory","%n súborov"),
|
||||
|
@ -54,8 +54,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Chybný súkromný kľúč na šifrovanie aplikácií. Zaktualizujte si heslo súkromného kľúča v svojom osobnom nastavení, aby ste znovu získali prístup k svojim zašifrovaným súborom.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Šifrovanie bolo zakázané, ale vaše súbory sú stále zašifrované. Prosím, choďte do osobného nastavenia pre dešifrovanie súborov.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Vaše sťahovanie sa pripravuje. Ak sú sťahované súbory veľké, môže to chvíľu trvať.",
|
||||
"Error moving file" => "Chyba pri presúvaní súboru",
|
||||
"Error" => "Chyba",
|
||||
"Name" => "Názov",
|
||||
"Size" => "Veľkosť",
|
||||
"Modified" => "Upravené",
|
||||
|
|
|
@ -43,10 +43,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Souporaba",
|
||||
"Delete permanently" => "Izbriši dokončno",
|
||||
"Rename" => "Preimenuj",
|
||||
"Error moving file" => "Napaka premikanja datoteke",
|
||||
"Error" => "Napaka",
|
||||
"Pending" => "V čakanju ...",
|
||||
"Could not rename file" => "Ni mogoče preimenovati datoteke",
|
||||
"replaced {new_name} with {old_name}" => "preimenovano ime {new_name} z imenom {old_name}",
|
||||
"undo" => "razveljavi",
|
||||
"Error deleting file." => "Napaka brisanja datoteke.",
|
||||
"_%n folder_::_%n folders_" => array("%n mapa","%n mapi","%n mape","%n map"),
|
||||
"_%n file_::_%n files_" => array("%n datoteka","%n datoteki","%n datoteke","%n datotek"),
|
||||
|
@ -59,8 +59,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Ni ustreznega osebnega ključa za program za šifriranje. Posodobite osebni ključ za dostop do šifriranih datotek med nastavitvami.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Šifriranje je onemogočeno, datoteke pa so še vedno šifrirane. Odšifrirajte jih med nastavitvami.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Postopek priprave datoteke za prejem je lahko dolgotrajen, kadar je datoteka zelo velika.",
|
||||
"Error moving file" => "Napaka premikanja datoteke",
|
||||
"Error" => "Napaka",
|
||||
"Name" => "Ime",
|
||||
"Size" => "Velikost",
|
||||
"Modified" => "Spremenjeno",
|
||||
|
|
|
@ -25,9 +25,9 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Ndaj",
|
||||
"Delete permanently" => "Fshi përfundimisht",
|
||||
"Rename" => "Riemëro",
|
||||
"Error moving file" => "Gabim lëvizjen dokumentave",
|
||||
"Error" => "Gabim",
|
||||
"Pending" => "Në vijim",
|
||||
"replaced {new_name} with {old_name}" => "u zëvendësua {new_name} me {old_name}",
|
||||
"undo" => "anullo",
|
||||
"_%n folder_::_%n folders_" => array("%n dosje","%n dosje"),
|
||||
"_%n file_::_%n files_" => array("%n skedar","%n skedarë"),
|
||||
"{dirs} and {files}" => "{dirs} dhe {files}",
|
||||
|
@ -36,8 +36,6 @@ $TRANSLATIONS = array(
|
|||
"Your storage is almost full ({usedSpacePercent}%)" => "Hapsira juaj e arkivimit është pothuajse në fund ({usedSpacePercent}%)",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Kodifikimi u çaktivizua por skedarët tuaj vazhdojnë të jenë të kodifikuar. Ju lutem shkoni tek parametrat personale për të dekodifikuar skedarët tuaj.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Shkarkimi juaj është duke u përgatitur. Kjo mund të kërkojë kohë nëse skedarët janë të mëdhenj.",
|
||||
"Error moving file" => "Gabim lëvizjen dokumentave",
|
||||
"Error" => "Gabim",
|
||||
"Name" => "Emri",
|
||||
"Size" => "Madhësia",
|
||||
"Modified" => "Ndryshuar",
|
||||
|
|
|
@ -21,16 +21,14 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Дели",
|
||||
"Delete permanently" => "Обриши за стално",
|
||||
"Rename" => "Преименуј",
|
||||
"Error" => "Грешка",
|
||||
"Pending" => "На чекању",
|
||||
"replaced {new_name} with {old_name}" => "замењено {new_name} са {old_name}",
|
||||
"undo" => "опозови",
|
||||
"_%n folder_::_%n folders_" => array("","",""),
|
||||
"_%n file_::_%n files_" => array("","",""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("","",""),
|
||||
"Your storage is full, files can not be updated or synced anymore!" => "Ваше складиште је пуно. Датотеке више не могу бити ажуриране ни синхронизоване.",
|
||||
"Your storage is almost full ({usedSpacePercent}%)" => "Ваше складиште је скоро па пуно ({usedSpacePercent}%)",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Припремам преузимање. Ово може да потраје ако су датотеке велике.",
|
||||
"Error" => "Грешка",
|
||||
"Name" => "Име",
|
||||
"Size" => "Величина",
|
||||
"Modified" => "Измењено",
|
||||
|
|
|
@ -8,10 +8,10 @@ $TRANSLATIONS = array(
|
|||
"Files" => "Fajlovi",
|
||||
"Share" => "Podeli",
|
||||
"Rename" => "Preimenij",
|
||||
"Error" => "Greška",
|
||||
"_%n folder_::_%n folders_" => array("","",""),
|
||||
"_%n file_::_%n files_" => array("","",""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("","",""),
|
||||
"Error" => "Greška",
|
||||
"Name" => "Ime",
|
||||
"Size" => "Veličina",
|
||||
"Modified" => "Zadnja izmena",
|
||||
|
|
|
@ -3,9 +3,12 @@ $TRANSLATIONS = array(
|
|||
"Could not move %s - File with this name already exists" => "Kunde inte flytta %s - Det finns redan en fil med detta namn",
|
||||
"Could not move %s" => "Kan inte flytta %s",
|
||||
"File name cannot be empty." => "Filnamn kan inte vara tomt.",
|
||||
"\"%s\" is an invalid file name." => "\"%s\" är ett ogiltigt filnamn.",
|
||||
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ogiltigt namn, '\\', '/', '<', '>', ':', '\"', '|', '?' och '*' är inte tillåtet.",
|
||||
"The target folder has been moved or deleted." => "Målmappen har flyttats eller tagits bort.",
|
||||
"The name %s is already used in the folder %s. Please choose a different name." => "Namnet %s används redan i katalogen %s. Välj ett annat namn.",
|
||||
"Not a valid source" => "Inte en giltig källa",
|
||||
"Server is not allowed to open URLs, please check the server configuration" => "Servern är inte tillåten att öppna URL:er, vänligen kontrollera server konfigurationen",
|
||||
"Error while downloading %s to %s" => "Fel under nerladdning från %s till %s",
|
||||
"Error when creating the file" => "Fel under skapande utav filen",
|
||||
"Folder name cannot be empty." => "Katalognamn kan ej vara tomt.",
|
||||
|
@ -26,6 +29,8 @@ $TRANSLATIONS = array(
|
|||
"Invalid directory." => "Felaktig mapp.",
|
||||
"Files" => "Filer",
|
||||
"Unable to upload {filename} as it is a directory or has 0 bytes" => "Kan inte ladda upp {filename} eftersom den antingen är en mapp eller har 0 bytes.",
|
||||
"Total file size {size1} exceeds upload limit {size2}" => "Totala filstorleken {size1} överskrider uppladdningsgränsen {size2}",
|
||||
"Not enough free space, you are uploading {size1} but only {size2} is left" => "Inte tillräckligt med ledigt utrymme, du laddar upp {size1} men endast {size2} finns kvar.",
|
||||
"Upload cancelled." => "Uppladdning avbruten.",
|
||||
"Could not get result from server." => "Gick inte att hämta resultat från server.",
|
||||
"File upload is in progress. Leaving the page now will cancel the upload." => "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen.",
|
||||
|
@ -34,26 +39,26 @@ $TRANSLATIONS = array(
|
|||
"{new_name} already exists" => "{new_name} finns redan",
|
||||
"Could not create file" => "Kunde ej skapa fil",
|
||||
"Could not create folder" => "Kunde ej skapa katalog",
|
||||
"Error fetching URL" => "Fel vid hämtning av URL",
|
||||
"Share" => "Dela",
|
||||
"Delete permanently" => "Radera permanent",
|
||||
"Rename" => "Byt namn",
|
||||
"Error moving file" => "Fel uppstod vid flyttning av fil",
|
||||
"Error" => "Fel",
|
||||
"Pending" => "Väntar",
|
||||
"Could not rename file" => "Kan ej byta filnamn",
|
||||
"replaced {new_name} with {old_name}" => "ersatt {new_name} med {old_name}",
|
||||
"undo" => "ångra",
|
||||
"Error deleting file." => "Kunde inte ta bort filen.",
|
||||
"_%n folder_::_%n folders_" => array("%n mapp","%n mappar"),
|
||||
"_%n file_::_%n files_" => array("%n fil","%n filer"),
|
||||
"{dirs} and {files}" => "{dirs} och {files}",
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("Laddar upp %n fil","Laddar upp %n filer"),
|
||||
"\"{name}\" is an invalid file name." => "\"{name}\" är ett ogiltligt filnamn.",
|
||||
"Your storage is full, files can not be updated or synced anymore!" => "Ditt lagringsutrymme är fullt, filer kan inte längre uppdateras eller synkroniseras!",
|
||||
"Your storage is almost full ({usedSpacePercent}%)" => "Ditt lagringsutrymme är nästan fullt ({usedSpacePercent}%)",
|
||||
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Krypteringsprogrammet är aktiverat men dina nycklar är inte initierade. Vänligen logga ut och in igen",
|
||||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Ogiltig privat nyckel i krypteringsprogrammet. Vänligen uppdatera lösenordet till din privata nyckel under dina personliga inställningar för att återfå tillgång till dina krypterade filer.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Kryptering inaktiverades men dina filer är fortfarande krypterade. Vänligen gå till sidan för dina personliga inställningar för att dekryptera dina filer.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Din nedladdning förbereds. Det kan ta tid om det är stora filer.",
|
||||
"Error moving file" => "Fel uppstod vid flyttning av fil",
|
||||
"Error" => "Fel",
|
||||
"Name" => "Namn",
|
||||
"Size" => "Storlek",
|
||||
"Modified" => "Ändrad",
|
||||
|
@ -69,6 +74,7 @@ $TRANSLATIONS = array(
|
|||
"Maximum input size for ZIP files" => "Största tillåtna storlek för ZIP-filer",
|
||||
"Save" => "Spara",
|
||||
"New" => "Ny",
|
||||
"New text file" => "Ny textfil",
|
||||
"Text file" => "Textfil",
|
||||
"New folder" => "Ny mapp",
|
||||
"Folder" => "Mapp",
|
||||
|
|
|
@ -14,13 +14,11 @@ $TRANSLATIONS = array(
|
|||
"{new_name} already exists" => "{new_name} ஏற்கனவே உள்ளது",
|
||||
"Share" => "பகிர்வு",
|
||||
"Rename" => "பெயர்மாற்றம்",
|
||||
"Error" => "வழு",
|
||||
"Pending" => "நிலுவையிலுள்ள",
|
||||
"replaced {new_name} with {old_name}" => "{new_name} ஆனது {old_name} இனால் மாற்றப்பட்டது",
|
||||
"undo" => "முன் செயல் நீக்கம் ",
|
||||
"_%n folder_::_%n folders_" => array("",""),
|
||||
"_%n file_::_%n files_" => array("",""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("",""),
|
||||
"Error" => "வழு",
|
||||
"Name" => "பெயர்",
|
||||
"Size" => "அளவு",
|
||||
"Modified" => "மாற்றப்பட்டது",
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<?php
|
||||
$TRANSLATIONS = array(
|
||||
"Delete permanently" => "శాశ్వతంగా తొలగించు",
|
||||
"Error" => "పొరపాటు",
|
||||
"_%n folder_::_%n folders_" => array("",""),
|
||||
"_%n file_::_%n files_" => array("",""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("",""),
|
||||
"Error" => "పొరపాటు",
|
||||
"Name" => "పేరు",
|
||||
"Size" => "పరిమాణం",
|
||||
"Save" => "భద్రపరచు",
|
||||
|
|
|
@ -20,16 +20,14 @@ $TRANSLATIONS = array(
|
|||
"{new_name} already exists" => "{new_name} มีอยู่แล้วในระบบ",
|
||||
"Share" => "แชร์",
|
||||
"Rename" => "เปลี่ยนชื่อ",
|
||||
"Error" => "ข้อผิดพลาด",
|
||||
"Pending" => "อยู่ระหว่างดำเนินการ",
|
||||
"replaced {new_name} with {old_name}" => "แทนที่ {new_name} ด้วย {old_name} แล้ว",
|
||||
"undo" => "เลิกทำ",
|
||||
"_%n folder_::_%n folders_" => array(""),
|
||||
"_%n file_::_%n files_" => array(""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array(""),
|
||||
"Your storage is full, files can not be updated or synced anymore!" => "พื้นที่จัดเก็บข้อมูลของคุณเต็มแล้ว ไม่สามารถอัพเดทหรือผสานไฟล์ต่างๆได้อีกต่อไป",
|
||||
"Your storage is almost full ({usedSpacePercent}%)" => "พื้นที่จัดเก็บข้อมูลของคุณใกล้เต็มแล้ว ({usedSpacePercent}%)",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "กำลังเตรียมดาวน์โหลดข้อมูล หากไฟล์มีขนาดใหญ่ อาจใช้เวลาสักครู่",
|
||||
"Error" => "ข้อผิดพลาด",
|
||||
"Name" => "ชื่อ",
|
||||
"Size" => "ขนาด",
|
||||
"Modified" => "แก้ไขแล้ว",
|
||||
|
|
|
@ -29,7 +29,7 @@ $TRANSLATIONS = array(
|
|||
"Invalid directory." => "Geçersiz dizin.",
|
||||
"Files" => "Dosyalar",
|
||||
"Unable to upload {filename} as it is a directory or has 0 bytes" => "Bir dizin veya 0 bayt olduğundan {filename} yüklenemedi",
|
||||
"Total file size {size1} exceeds upload limit {size2}" => "Toplam dosya boyutu {size1} gönderme sınırını {size2} aşıyor",
|
||||
"Total file size {size1} exceeds upload limit {size2}" => "Toplam dosya boyutu {size1}, {size2} gönderme sınırını aşıyor",
|
||||
"Not enough free space, you are uploading {size1} but only {size2} is left" => "Yeterince boş alan yok. Gönderdiğiniz boyut {size1} ancak {size2} alan mevcut",
|
||||
"Upload cancelled." => "Yükleme iptal edildi.",
|
||||
"Could not get result from server." => "Sunucudan sonuç alınamadı.",
|
||||
|
@ -43,10 +43,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Paylaş",
|
||||
"Delete permanently" => "Kalıcı olarak sil",
|
||||
"Rename" => "İsim değiştir.",
|
||||
"Error moving file" => "Dosya taşıma hatası",
|
||||
"Error" => "Hata",
|
||||
"Pending" => "Bekliyor",
|
||||
"Could not rename file" => "Dosya adlandırılamadı",
|
||||
"replaced {new_name} with {old_name}" => "{new_name} ismi {old_name} ile değiştirildi",
|
||||
"undo" => "geri al",
|
||||
"Error deleting file." => "Dosya silinirken hata.",
|
||||
"_%n folder_::_%n folders_" => array("%n dizin","%n dizin"),
|
||||
"_%n file_::_%n files_" => array("%n dosya","%n dosya"),
|
||||
|
@ -59,12 +59,10 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "Şifreleme Uygulaması için geçersiz özel anahtar. Lütfen şifreli dosyalarınıza erişimi tekrar kazanabilmek için kişisel ayarlarınızdan özel anahtar parolanızı güncelleyin.",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Şifreleme işlemi durduruldu ancak dosyalarınız şifreli. Dosyalarınızın şifresini kaldırmak için lütfen kişisel ayarlar kısmına geçin.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "İndirmeniz hazırlanıyor. Dosya büyük ise biraz zaman alabilir.",
|
||||
"Error moving file" => "Dosya taşıma hatası",
|
||||
"Error" => "Hata",
|
||||
"Name" => "İsim",
|
||||
"Size" => "Boyut",
|
||||
"Modified" => "Değiştirilme",
|
||||
"Invalid folder name. Usage of 'Shared' is reserved." => "Geçersiz dizin adı. 'Shared' ismi ayrılmıştır.",
|
||||
"Invalid folder name. Usage of 'Shared' is reserved." => "Geçersiz klasör adı. 'Shared' ismi ayrılmıştır.",
|
||||
"%s could not be renamed" => "%s yeniden adlandırılamadı",
|
||||
"Upload" => "Yükle",
|
||||
"File handling" => "Dosya işlemleri",
|
||||
|
|
|
@ -13,12 +13,11 @@ $TRANSLATIONS = array(
|
|||
"Share" => "ھەمبەھىر",
|
||||
"Delete permanently" => "مەڭگۈلۈك ئۆچۈر",
|
||||
"Rename" => "ئات ئۆزگەرت",
|
||||
"Error" => "خاتالىق",
|
||||
"Pending" => "كۈتۈۋاتىدۇ",
|
||||
"undo" => "يېنىۋال",
|
||||
"_%n folder_::_%n folders_" => array(""),
|
||||
"_%n file_::_%n files_" => array(""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array(""),
|
||||
"Error" => "خاتالىق",
|
||||
"Name" => "ئاتى",
|
||||
"Size" => "چوڭلۇقى",
|
||||
"Modified" => "ئۆزگەرتكەن",
|
||||
|
|
|
@ -26,18 +26,16 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Поділитися",
|
||||
"Delete permanently" => "Видалити назавжди",
|
||||
"Rename" => "Перейменувати",
|
||||
"Error moving file" => "Помилка переміщення файлу",
|
||||
"Error" => "Помилка",
|
||||
"Pending" => "Очікування",
|
||||
"Could not rename file" => "Неможливо перейменувати файл",
|
||||
"replaced {new_name} with {old_name}" => "замінено {new_name} на {old_name}",
|
||||
"undo" => "відмінити",
|
||||
"_%n folder_::_%n folders_" => array("%n тека","%n тека","%n теки"),
|
||||
"_%n file_::_%n files_" => array("%n файл","%n файлів","%n файли"),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("","",""),
|
||||
"Your storage is full, files can not be updated or synced anymore!" => "Ваше сховище переповнене, файли більше не можуть бути оновлені або синхронізовані !",
|
||||
"Your storage is almost full ({usedSpacePercent}%)" => "Ваше сховище майже повне ({usedSpacePercent}%)",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Ваше завантаження готується. Це може зайняти деякий час, якщо файли завеликі.",
|
||||
"Error moving file" => "Помилка переміщення файлу",
|
||||
"Error" => "Помилка",
|
||||
"Name" => "Ім'я",
|
||||
"Size" => "Розмір",
|
||||
"Modified" => "Змінено",
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<?php
|
||||
$TRANSLATIONS = array(
|
||||
"Error" => "ایرر",
|
||||
"_%n folder_::_%n folders_" => array("",""),
|
||||
"_%n file_::_%n files_" => array("",""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("",""),
|
||||
"Error" => "ایرر"
|
||||
"_Uploading %n file_::_Uploading %n files_" => array("","")
|
||||
);
|
||||
$PLURAL_FORMS = "nplurals=2; plural=(n != 1);";
|
||||
|
|
|
@ -37,10 +37,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "Chia sẻ",
|
||||
"Delete permanently" => "Xóa vĩnh vễn",
|
||||
"Rename" => "Sửa tên",
|
||||
"Error moving file" => "Lỗi di chuyển tập tin",
|
||||
"Error" => "Lỗi",
|
||||
"Pending" => "Đang chờ",
|
||||
"Could not rename file" => "Không thể đổi tên file",
|
||||
"replaced {new_name} with {old_name}" => "đã thay thế {new_name} bằng {old_name}",
|
||||
"undo" => "lùi lại",
|
||||
"Error deleting file." => "Lỗi xóa file,",
|
||||
"_%n folder_::_%n folders_" => array("%n thư mục"),
|
||||
"_%n file_::_%n files_" => array("%n tập tin"),
|
||||
|
@ -51,8 +51,6 @@ $TRANSLATIONS = array(
|
|||
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" => "Ứng dụng mã hóa đã được kích hoạt nhưng bạn chưa khởi tạo khóa. Vui lòng đăng xuất ra và đăng nhập lại",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "Mã hóa đã bị vô hiệu nhưng những tập tin của bạn vẫn được mã hóa. Vui lòng vào phần thiết lập cá nhân để giải mã chúng.",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "Your download is being prepared. This might take some time if the files are big.",
|
||||
"Error moving file" => "Lỗi di chuyển tập tin",
|
||||
"Error" => "Lỗi",
|
||||
"Name" => "Tên",
|
||||
"Size" => "Kích cỡ",
|
||||
"Modified" => "Thay đổi",
|
||||
|
|
|
@ -39,10 +39,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "分享",
|
||||
"Delete permanently" => "永久删除",
|
||||
"Rename" => "重命名",
|
||||
"Error moving file" => "移动文件错误",
|
||||
"Error" => "错误",
|
||||
"Pending" => "等待",
|
||||
"Could not rename file" => "不能重命名文件",
|
||||
"replaced {new_name} with {old_name}" => "已将 {old_name}替换成 {new_name}",
|
||||
"undo" => "撤销",
|
||||
"Error deleting file." => "删除文件出错。",
|
||||
"_%n folder_::_%n folders_" => array("%n 文件夹"),
|
||||
"_%n file_::_%n files_" => array("%n个文件"),
|
||||
|
@ -54,8 +54,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "无效的私有密钥。请到您的个人配置里去更新私有密钥,来恢复对加密文件的访问。",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "加密是被禁用的,但是您的文件还是被加密了。请到您的个人配置里设置文件加密选项。",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "下载正在准备中。如果文件较大可能会花费一些时间。",
|
||||
"Error moving file" => "移动文件错误",
|
||||
"Error" => "错误",
|
||||
"Name" => "名称",
|
||||
"Size" => "大小",
|
||||
"Modified" => "修改日期",
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
$TRANSLATIONS = array(
|
||||
"Files" => "文件",
|
||||
"Share" => "分享",
|
||||
"Error" => "錯誤",
|
||||
"_%n folder_::_%n folders_" => array(""),
|
||||
"_%n file_::_%n files_" => array(""),
|
||||
"_Uploading %n file_::_Uploading %n files_" => array(""),
|
||||
"Error" => "錯誤",
|
||||
"Name" => "名稱",
|
||||
"Upload" => "上傳",
|
||||
"Save" => "儲存",
|
||||
|
|
|
@ -37,10 +37,10 @@ $TRANSLATIONS = array(
|
|||
"Share" => "分享",
|
||||
"Delete permanently" => "永久刪除",
|
||||
"Rename" => "重新命名",
|
||||
"Error moving file" => "移動檔案失敗",
|
||||
"Error" => "錯誤",
|
||||
"Pending" => "等候中",
|
||||
"Could not rename file" => "無法重新命名",
|
||||
"replaced {new_name} with {old_name}" => "使用 {new_name} 取代 {old_name}",
|
||||
"undo" => "復原",
|
||||
"_%n folder_::_%n folders_" => array("%n 個資料夾"),
|
||||
"_%n file_::_%n files_" => array("%n 個檔案"),
|
||||
"{dirs} and {files}" => "{dirs} 和 {files}",
|
||||
|
@ -51,8 +51,6 @@ $TRANSLATIONS = array(
|
|||
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." => "無效的檔案加密私鑰,請在個人設定中更新您的私鑰密語以存取加密的檔案。",
|
||||
"Encryption was disabled but your files are still encrypted. Please go to your personal settings to decrypt your files." => "加密已經被停用,但是您的舊檔案還是處於已加密的狀態,請前往個人設定以解密這些檔案。",
|
||||
"Your download is being prepared. This might take some time if the files are big." => "正在準備您的下載,若您的檔案較大,將會需要更多時間。",
|
||||
"Error moving file" => "移動檔案失敗",
|
||||
"Error" => "錯誤",
|
||||
"Name" => "名稱",
|
||||
"Size" => "大小",
|
||||
"Modified" => "修改時間",
|
||||
|
|
|
@ -84,25 +84,7 @@ class App {
|
|||
) {
|
||||
// successful rename
|
||||
$meta = $this->view->getFileInfo($dir . '/' . $newname);
|
||||
if ($meta['mimetype'] === 'httpd/unix-directory') {
|
||||
$meta['type'] = 'dir';
|
||||
}
|
||||
else {
|
||||
$meta['type'] = 'file';
|
||||
}
|
||||
// these need to be set for determineIcon()
|
||||
$meta['isPreviewAvailable'] = \OC::$server->getPreviewManager()->isMimeSupported($meta['mimetype']);
|
||||
$meta['directory'] = $dir;
|
||||
$fileinfo = array(
|
||||
'id' => $meta['fileid'],
|
||||
'mime' => $meta['mimetype'],
|
||||
'size' => $meta['size'],
|
||||
'etag' => $meta['etag'],
|
||||
'directory' => $meta['directory'],
|
||||
'name' => $newname,
|
||||
'isPreviewAvailable' => $meta['isPreviewAvailable'],
|
||||
'icon' => \OCA\Files\Helper::determineIcon($meta)
|
||||
);
|
||||
$fileinfo = \OCA\Files\Helper::formatFileInfo($meta);
|
||||
$result['success'] = true;
|
||||
$result['data'] = $fileinfo;
|
||||
} else {
|
||||
|
|
|
@ -19,11 +19,17 @@ class Helper
|
|||
'usedSpacePercent' => (int)$storageInfo['relative']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine icon for a given file
|
||||
*
|
||||
* @param \OC\Files\FileInfo $file file info
|
||||
* @return string icon URL
|
||||
*/
|
||||
public static function determineIcon($file) {
|
||||
if($file['type'] === 'dir') {
|
||||
$dir = $file['directory'];
|
||||
$icon = \OC_Helper::mimetypeIcon('dir');
|
||||
$absPath = \OC\Files\Filesystem::getView()->getAbsolutePath($dir.'/'.$file['name']);
|
||||
$absPath = $file->getPath();
|
||||
$mount = \OC\Files\Filesystem::getMountManager()->find($absPath);
|
||||
if (!is_null($mount)) {
|
||||
$sid = $mount->getStorageId();
|
||||
|
@ -38,11 +44,7 @@ class Helper
|
|||
}
|
||||
}
|
||||
}else{
|
||||
if($file['isPreviewAvailable']) {
|
||||
$pathForPreview = $file['directory'] . '/' . $file['name'];
|
||||
return \OC_Helper::previewIcon($pathForPreview) . '&c=' . $file['etag'];
|
||||
}
|
||||
$icon = \OC_Helper::mimetypeIcon($file['mimetype']);
|
||||
$icon = \OC_Helper::mimetypeIcon($file->getMimetype());
|
||||
}
|
||||
|
||||
return substr($icon, 0, -3) . 'svg';
|
||||
|
@ -69,52 +71,58 @@ class Helper
|
|||
}
|
||||
|
||||
/**
|
||||
* Retrieves the contents of the given directory and
|
||||
* returns it as a sorted array.
|
||||
* @param string $dir path to the directory
|
||||
* @return array of files
|
||||
* Formats the file info to be returned as JSON to the client.
|
||||
*
|
||||
* @param \OCP\Files\FileInfo file info
|
||||
* @return array formatted file info
|
||||
*/
|
||||
public static function getFiles($dir) {
|
||||
$content = \OC\Files\Filesystem::getDirectoryContent($dir);
|
||||
$files = array();
|
||||
public static function formatFileInfo($i) {
|
||||
$entry = array();
|
||||
|
||||
foreach ($content as $i) {
|
||||
$i['date'] = \OCP\Util::formatDate($i['mtime']);
|
||||
if ($i['type'] === 'file') {
|
||||
$fileinfo = pathinfo($i['name']);
|
||||
$i['basename'] = $fileinfo['filename'];
|
||||
if (!empty($fileinfo['extension'])) {
|
||||
$i['extension'] = '.' . $fileinfo['extension'];
|
||||
} else {
|
||||
$i['extension'] = '';
|
||||
}
|
||||
}
|
||||
$i['directory'] = $dir;
|
||||
$i['isPreviewAvailable'] = \OC::$server->getPreviewManager()->isMimeSupported($i['mimetype']);
|
||||
$i['icon'] = \OCA\Files\Helper::determineIcon($i);
|
||||
$files[] = $i;
|
||||
$entry['id'] = $i['fileid'];
|
||||
$entry['date'] = \OCP\Util::formatDate($i['mtime']);
|
||||
$entry['mtime'] = $i['mtime'] * 1000;
|
||||
// only pick out the needed attributes
|
||||
$entry['icon'] = \OCA\Files\Helper::determineIcon($i);
|
||||
if (\OC::$server->getPreviewManager()->isMimeSupported($i['mimetype'])) {
|
||||
$entry['isPreviewAvailable'] = true;
|
||||
}
|
||||
$entry['name'] = $i['name'];
|
||||
$entry['permissions'] = $i['permissions'];
|
||||
$entry['mimetype'] = $i['mimetype'];
|
||||
$entry['size'] = $i['size'];
|
||||
$entry['type'] = $i['type'];
|
||||
$entry['etag'] = $i['etag'];
|
||||
if (isset($i['displayname_owner'])) {
|
||||
$entry['shareOwner'] = $i['displayname_owner'];
|
||||
}
|
||||
return $entry;
|
||||
}
|
||||
|
||||
usort($files, array('\OCA\Files\Helper', 'fileCmp'));
|
||||
/**
|
||||
* Format file info for JSON
|
||||
* @param \OCP\Files\FileInfo[] $fileInfos file infos
|
||||
*/
|
||||
public static function formatFileInfos($fileInfos) {
|
||||
$files = array();
|
||||
foreach ($fileInfos as $i) {
|
||||
$files[] = self::formatFileInfo($i);
|
||||
}
|
||||
|
||||
return $files;
|
||||
}
|
||||
|
||||
/**
|
||||
* Splits the given path into a breadcrumb structure.
|
||||
* @param string $dir path to process
|
||||
* @return array where each entry is a hash of the absolute
|
||||
* directory path and its name
|
||||
* Retrieves the contents of the given directory and
|
||||
* returns it as a sorted array of FileInfo.
|
||||
*
|
||||
* @param string $dir path to the directory
|
||||
* @return \OCP\Files\FileInfo[] files
|
||||
*/
|
||||
public static function makeBreadcrumb($dir){
|
||||
$breadcrumb = array();
|
||||
$pathtohere = '';
|
||||
foreach (explode('/', $dir) as $i) {
|
||||
if ($i !== '') {
|
||||
$pathtohere .= '/' . $i;
|
||||
$breadcrumb[] = array('dir' => $pathtohere, 'name' => $i);
|
||||
}
|
||||
}
|
||||
return $breadcrumb;
|
||||
public static function getFiles($dir) {
|
||||
$content = \OC\Files\Filesystem::getDirectoryContent($dir);
|
||||
|
||||
usort($content, array('\OCA\Files\Helper', 'fileCmp'));
|
||||
return $content;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,28 +1,26 @@
|
|||
<?php OCP\Util::addscript('files', 'admin'); ?>
|
||||
|
||||
<form name="filesForm" action='#' method='post'>
|
||||
<fieldset class="personalblock">
|
||||
<h2><?php p($l->t('File handling')); ?></h2>
|
||||
<?php if($_['uploadChangable']):?>
|
||||
<label for="maxUploadSize"><?php p($l->t( 'Maximum upload size' )); ?> </label>
|
||||
<input type="text" name='maxUploadSize' id="maxUploadSize" value='<?php p($_['uploadMaxFilesize']) ?>'/>
|
||||
<?php if($_['displayMaxPossibleUploadSize']):?>
|
||||
(<?php p($l->t('max. possible: ')); p($_['maxPossibleUploadSize']) ?>)
|
||||
<?php endif;?>
|
||||
<br/>
|
||||
<form name="filesForm" class="section" action="#" method="post">
|
||||
<h2><?php p($l->t('File handling')); ?></h2>
|
||||
<?php if($_['uploadChangable']):?>
|
||||
<label for="maxUploadSize"><?php p($l->t( 'Maximum upload size' )); ?> </label>
|
||||
<input type="text" name='maxUploadSize' id="maxUploadSize" value='<?php p($_['uploadMaxFilesize']) ?>'/>
|
||||
<?php if($_['displayMaxPossibleUploadSize']):?>
|
||||
(<?php p($l->t('max. possible: ')); p($_['maxPossibleUploadSize']) ?>)
|
||||
<?php endif;?>
|
||||
<input type="checkbox" name="allowZipDownload" id="allowZipDownload" value="1"
|
||||
title="<?php p($l->t( 'Needed for multi-file and folder downloads.' )); ?>"
|
||||
<?php if ($_['allowZipDownload']): ?> checked="checked"<?php endif; ?> />
|
||||
<label for="allowZipDownload"><?php p($l->t( 'Enable ZIP-download' )); ?></label><br/>
|
||||
<br/>
|
||||
<?php endif;?>
|
||||
<input type="checkbox" name="allowZipDownload" id="allowZipDownload" value="1"
|
||||
title="<?php p($l->t( 'Needed for multi-file and folder downloads.' )); ?>"
|
||||
<?php if ($_['allowZipDownload']): ?> checked="checked"<?php endif; ?> />
|
||||
<label for="allowZipDownload"><?php p($l->t( 'Enable ZIP-download' )); ?></label><br/>
|
||||
|
||||
<input type="text" name="maxZipInputSize" id="maxZipInputSize" style="width:180px;" value='<?php p($_['maxZipInputSize']) ?>'
|
||||
title="<?php p($l->t( '0 is unlimited' )); ?>"
|
||||
<?php if (!$_['allowZipDownload']): ?> disabled="disabled"<?php endif; ?> /><br />
|
||||
<em><?php p($l->t( 'Maximum input size for ZIP files' )); ?> </em><br />
|
||||
<input type="text" name="maxZipInputSize" id="maxZipInputSize" style="width:180px;" value='<?php p($_['maxZipInputSize']) ?>'
|
||||
title="<?php p($l->t( '0 is unlimited' )); ?>"
|
||||
<?php if (!$_['allowZipDownload']): ?> disabled="disabled"<?php endif; ?> /><br />
|
||||
<em><?php p($l->t( 'Maximum input size for ZIP files' )); ?> </em><br />
|
||||
|
||||
<input type="hidden" value="<?php p($_['requesttoken']); ?>" name="requesttoken" />
|
||||
<input type="submit" name="submitFilesAdminSettings" id="submitFilesAdminSettings"
|
||||
value="<?php p($l->t( 'Save' )); ?>"/>
|
||||
</fieldset>
|
||||
<input type="hidden" value="<?php p($_['requesttoken']); ?>" name="requesttoken" />
|
||||
<input type="submit" name="submitFilesAdminSettings" id="submitFilesAdminSettings"
|
||||
value="<?php p($l->t( 'Save' )); ?>"/>
|
||||
</form>
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
<div id="controls">
|
||||
<?php print_unescaped($_['breadcrumb']); ?>
|
||||
<div class="actions creatable <?php if (!$_['isCreatable']):?>hidden<?php endif; ?>">
|
||||
<div class="actions creatable hidden">
|
||||
<?php if(!isset($_['dirToken'])):?>
|
||||
<div id="new" class="button">
|
||||
<a><?php p($l->t('New'));?></a>
|
||||
|
@ -48,20 +47,20 @@
|
|||
</div>
|
||||
</div>
|
||||
<div id="file_action_panel"></div>
|
||||
<div class="notCreatable notPublic <?php if ($_['isCreatable'] or $_['isPublic'] ):?>hidden<?php endif; ?>">
|
||||
<div class="notCreatable notPublic hidden">
|
||||
<?php p($l->t('You don’t have permission to upload or create files here'))?>
|
||||
</div>
|
||||
<input type="hidden" name="permissions" value="<?php p($_['permissions']); ?>" id="permissions">
|
||||
</div>
|
||||
|
||||
<div id="emptycontent" <?php if (!$_['emptyContent']):?>class="hidden"<?php endif; ?>><?php p($l->t('Nothing in here. Upload something!'))?></div>
|
||||
<div id="emptycontent" class="hidden"><?php p($l->t('Nothing in here. Upload something!'))?></div>
|
||||
|
||||
<input type="hidden" id="disableSharing" data-status="<?php p($_['disableSharing']); ?>" />
|
||||
|
||||
<table id="filestable" data-allow-public-upload="<?php p($_['publicUploadEnabled'])?>" data-preview-x="36" data-preview-y="36">
|
||||
<thead>
|
||||
<tr>
|
||||
<th <?php if (!$_['fileHeader']):?>class="hidden"<?php endif; ?> id='headerName'>
|
||||
<th class="hidden" id='headerName'>
|
||||
<div id="headerName-container">
|
||||
<input type="checkbox" id="select_all" />
|
||||
<label for="select_all"></label>
|
||||
|
@ -77,8 +76,8 @@
|
|||
</span>
|
||||
</div>
|
||||
</th>
|
||||
<th <?php if (!$_['fileHeader']):?>class="hidden"<?php endif; ?> id="headerSize"><?php p($l->t('Size')); ?></th>
|
||||
<th <?php if (!$_['fileHeader']):?>class="hidden"<?php endif; ?> id="headerDate">
|
||||
<th class="hidden" id="headerSize"><?php p($l->t('Size')); ?></th>
|
||||
<th class="hidden" id="headerDate">
|
||||
<span id="modified"><?php p($l->t( 'Modified' )); ?></span>
|
||||
<?php if ($_['permissions'] & OCP\PERMISSION_DELETE): ?>
|
||||
<span class="selectedActions"><a href="" class="delete-selected">
|
||||
|
@ -91,7 +90,6 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody id="fileList">
|
||||
<?php print_unescaped($_['fileList']); ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<div id="editor"></div><!-- FIXME Do not use this div in your app! It is deprecated and will be removed in the future! -->
|
||||
|
@ -111,7 +109,6 @@
|
|||
|
||||
<!-- config hints for javascript -->
|
||||
<input type="hidden" name="filesApp" id="filesApp" value="1" />
|
||||
<input type="hidden" name="ajaxLoad" id="ajaxLoad" value="<?php p($_['ajaxLoad']); ?>" />
|
||||
<input type="hidden" name="allowZipDownload" id="allowZipDownload" value="<?php p($_['allowZipDownload']); ?>" />
|
||||
<input type="hidden" name="usedSpacePercent" id="usedSpacePercent" value="<?php p($_['usedSpacePercent']); ?>" />
|
||||
<?php if (!$_['isPublic']) :?>
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
<div class="crumb svg <?php if(!count($_["breadcrumb"])) p('last');?>" data-dir=''>
|
||||
<a href="<?php print_unescaped($_['baseURL']); ?>">
|
||||
<?php if(isset($_['rootBreadCrumb'])):
|
||||
echo $_['rootBreadCrumb'];
|
||||
else:?>
|
||||
<img src="<?php print_unescaped(OCP\image_path('core', 'places/home.svg'));?>" class="svg" />
|
||||
<?php endif;?>
|
||||
</a>
|
||||
</div>
|
||||
<?php for($i=0; $i<count($_["breadcrumb"]); $i++):
|
||||
$crumb = $_["breadcrumb"][$i];
|
||||
$dir = \OCP\Util::encodePath($crumb["dir"]); ?>
|
||||
<div class="crumb <?php if($i == count($_["breadcrumb"])-1) p('last');?> svg"
|
||||
data-dir='<?php p($dir);?>'>
|
||||
<a href="<?php p($_['baseURL'].$dir); ?>"><?php p($crumb["name"]); ?></a>
|
||||
</div>
|
||||
<?php endfor;
|
|
@ -1,67 +0,0 @@
|
|||
<?php $totalfiles = 0;
|
||||
$totaldirs = 0;
|
||||
$totalsize = 0; ?>
|
||||
<?php foreach($_['files'] as $file):
|
||||
// the bigger the file, the darker the shade of grey; megabytes*2
|
||||
$simple_size_color = intval(160-$file['size']/(1024*1024)*2);
|
||||
if($simple_size_color<0) $simple_size_color = 0;
|
||||
$relative_modified_date = OCP\relative_modified_date($file['mtime']);
|
||||
// the older the file, the brighter the shade of grey; days*14
|
||||
$relative_date_color = round((time()-$file['mtime'])/60/60/24*14);
|
||||
if($relative_date_color>160) $relative_date_color = 160;
|
||||
$name = \OCP\Util::encodePath($file['name']);
|
||||
$directory = \OCP\Util::encodePath($file['directory']); ?>
|
||||
<tr data-id="<?php p($file['fileid']); ?>"
|
||||
data-file="<?php p($name);?>"
|
||||
data-type="<?php ($file['type'] == 'dir')?p('dir'):p('file')?>"
|
||||
data-mime="<?php p($file['mimetype'])?>"
|
||||
data-size="<?php p($file['size']);?>"
|
||||
data-etag="<?php p($file['etag']);?>"
|
||||
data-permissions="<?php p($file['permissions']); ?>"
|
||||
|
||||
<?php if(isset($file['displayname_owner'])): ?>
|
||||
data-share-owner="<?php p($file['displayname_owner']) ?>"
|
||||
<?php endif; ?>
|
||||
>
|
||||
|
||||
<?php if(isset($file['isPreviewAvailable']) and $file['isPreviewAvailable']): ?>
|
||||
<td class="filename svg preview-icon"
|
||||
<?php else: ?>
|
||||
<td class="filename svg"
|
||||
<?php endif; ?>
|
||||
style="background-image:url(<?php print_unescaped($file['icon']); ?>)"
|
||||
>
|
||||
<?php if(!isset($_['readonly']) || !$_['readonly']): ?>
|
||||
<input id="select-<?php p($file['fileid']); ?>" type="checkbox" />
|
||||
<label for="select-<?php p($file['fileid']); ?>"></label>
|
||||
<?php endif; ?>
|
||||
<?php if($file['type'] == 'dir'): ?>
|
||||
<a class="name" href="<?php p(rtrim($_['baseURL'],'/').'/'.trim($directory,'/').'/'.$name); ?>" title="">
|
||||
<span class="nametext">
|
||||
<?php print_unescaped(htmlspecialchars($file['name']));?>
|
||||
</span>
|
||||
<span class="uploadtext" currentUploads="0">
|
||||
</span>
|
||||
</a>
|
||||
<?php else: ?>
|
||||
<a class="name" href="<?php p(rtrim($_['downloadURL'],'/').'/'.trim($directory,'/').'/'.$name); ?>">
|
||||
<label class="filetext" title="" for="select-<?php p($file['fileid']); ?>"></label>
|
||||
<span class="nametext"><?php print_unescaped(htmlspecialchars($file['basename']));?><span class='extension'><?php p($file['extension']);?></span></span>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<td class="filesize"
|
||||
style="color:rgb(<?php p($simple_size_color.','.$simple_size_color.','.$simple_size_color) ?>)">
|
||||
<?php print_unescaped(OCP\human_file_size($file['size'])); ?>
|
||||
</td>
|
||||
<td class="date">
|
||||
<span class="modified"
|
||||
title="<?php p($file['date']); ?>"
|
||||
style="color:rgb(<?php p($relative_date_color.','
|
||||
.$relative_date_color.','
|
||||
.$relative_date_color) ?>)">
|
||||
<?php p($relative_modified_date); ?>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;
|
|
@ -92,28 +92,32 @@ class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase {
|
|||
|
||||
$this->viewMock->expects($this->any())
|
||||
->method('getFileInfo')
|
||||
->will($this->returnValue(array(
|
||||
->will($this->returnValue(new \OC\Files\FileInfo(
|
||||
'/test',
|
||||
null,
|
||||
'/test',
|
||||
array(
|
||||
'fileid' => 123,
|
||||
'type' => 'dir',
|
||||
'mimetype' => 'httpd/unix-directory',
|
||||
'mtime' => 0,
|
||||
'permissions' => 31,
|
||||
'size' => 18,
|
||||
'etag' => 'abcdef',
|
||||
'directory' => '/',
|
||||
'name' => 'new_name',
|
||||
)));
|
||||
))));
|
||||
|
||||
$result = $this->files->rename($dir, $oldname, $newname);
|
||||
|
||||
$this->assertTrue($result['success']);
|
||||
$this->assertEquals(123, $result['data']['id']);
|
||||
$this->assertEquals('new_name', $result['data']['name']);
|
||||
$this->assertEquals('/test', $result['data']['directory']);
|
||||
$this->assertEquals(18, $result['data']['size']);
|
||||
$this->assertEquals('httpd/unix-directory', $result['data']['mime']);
|
||||
$this->assertEquals('httpd/unix-directory', $result['data']['mimetype']);
|
||||
$icon = \OC_Helper::mimetypeIcon('dir');
|
||||
$icon = substr($icon, 0, -3) . 'svg';
|
||||
$this->assertEquals($icon, $result['data']['icon']);
|
||||
$this->assertFalse($result['data']['isPreviewAvailable']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -148,29 +152,33 @@ class Test_OC_Files_App_Rename extends \PHPUnit_Framework_TestCase {
|
|||
|
||||
$this->viewMock->expects($this->any())
|
||||
->method('getFileInfo')
|
||||
->will($this->returnValue(array(
|
||||
->will($this->returnValue(new \OC\Files\FileInfo(
|
||||
'/',
|
||||
null,
|
||||
'/',
|
||||
array(
|
||||
'fileid' => 123,
|
||||
'type' => 'dir',
|
||||
'mimetype' => 'httpd/unix-directory',
|
||||
'mtime' => 0,
|
||||
'permissions' => 31,
|
||||
'size' => 18,
|
||||
'etag' => 'abcdef',
|
||||
'directory' => '/',
|
||||
'name' => 'new_name',
|
||||
)));
|
||||
))));
|
||||
|
||||
$result = $this->files->rename($dir, $oldname, $newname);
|
||||
|
||||
$this->assertTrue($result['success']);
|
||||
$this->assertEquals(123, $result['data']['id']);
|
||||
$this->assertEquals('newname', $result['data']['name']);
|
||||
$this->assertEquals('/', $result['data']['directory']);
|
||||
$this->assertEquals('new_name', $result['data']['name']);
|
||||
$this->assertEquals(18, $result['data']['size']);
|
||||
$this->assertEquals('httpd/unix-directory', $result['data']['mime']);
|
||||
$this->assertEquals('httpd/unix-directory', $result['data']['mimetype']);
|
||||
$this->assertEquals('abcdef', $result['data']['etag']);
|
||||
$icon = \OC_Helper::mimetypeIcon('dir');
|
||||
$icon = substr($icon, 0, -3) . 'svg';
|
||||
$this->assertEquals($icon, $result['data']['icon']);
|
||||
$this->assertFalse($result['data']['isPreviewAvailable']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -0,0 +1,248 @@
|
|||
/**
|
||||
* ownCloud
|
||||
*
|
||||
* @author Vincent Petry
|
||||
* @copyright 2014 Vincent Petry <pvince81@owncloud.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/* global BreadCrumb */
|
||||
describe('BreadCrumb tests', function() {
|
||||
describe('Rendering', function() {
|
||||
var bc;
|
||||
beforeEach(function() {
|
||||
bc = new BreadCrumb({
|
||||
getCrumbUrl: function(part, index) {
|
||||
// for testing purposes
|
||||
return part.dir + '#' + index;
|
||||
}
|
||||
});
|
||||
});
|
||||
afterEach(function() {
|
||||
bc = null;
|
||||
});
|
||||
it('Renders its own container', function() {
|
||||
bc.render();
|
||||
expect(bc.$el.hasClass('breadcrumb')).toEqual(true);
|
||||
});
|
||||
it('Renders root by default', function() {
|
||||
var $crumbs;
|
||||
bc.render();
|
||||
$crumbs = bc.$el.find('.crumb');
|
||||
expect($crumbs.length).toEqual(1);
|
||||
expect($crumbs.eq(0).find('a').attr('href')).toEqual('/#0');
|
||||
expect($crumbs.eq(0).find('img').length).toEqual(1);
|
||||
expect($crumbs.eq(0).attr('data-dir')).toEqual('/');
|
||||
});
|
||||
it('Renders root when switching to root', function() {
|
||||
var $crumbs;
|
||||
bc.setDirectory('/somedir');
|
||||
bc.setDirectory('/');
|
||||
$crumbs = bc.$el.find('.crumb');
|
||||
expect($crumbs.length).toEqual(1);
|
||||
expect($crumbs.eq(0).attr('data-dir')).toEqual('/');
|
||||
});
|
||||
it('Renders last crumb with "last" class', function() {
|
||||
bc.setDirectory('/abc/def');
|
||||
expect(bc.$el.find('.crumb:last').hasClass('last')).toEqual(true);
|
||||
});
|
||||
it('Renders single path section', function() {
|
||||
var $crumbs;
|
||||
bc.setDirectory('/somedir');
|
||||
$crumbs = bc.$el.find('.crumb');
|
||||
expect($crumbs.length).toEqual(2);
|
||||
expect($crumbs.eq(0).find('a').attr('href')).toEqual('/#0');
|
||||
expect($crumbs.eq(0).find('img').length).toEqual(1);
|
||||
expect($crumbs.eq(0).attr('data-dir')).toEqual('/');
|
||||
expect($crumbs.eq(1).find('a').attr('href')).toEqual('/somedir#1');
|
||||
expect($crumbs.eq(1).find('img').length).toEqual(0);
|
||||
expect($crumbs.eq(1).attr('data-dir')).toEqual('/somedir');
|
||||
});
|
||||
it('Renders multiple path sections and special chars', function() {
|
||||
var $crumbs;
|
||||
bc.setDirectory('/somedir/with space/abc');
|
||||
$crumbs = bc.$el.find('.crumb');
|
||||
expect($crumbs.length).toEqual(4);
|
||||
expect($crumbs.eq(0).find('a').attr('href')).toEqual('/#0');
|
||||
expect($crumbs.eq(0).find('img').length).toEqual(1);
|
||||
expect($crumbs.eq(0).attr('data-dir')).toEqual('/');
|
||||
|
||||
expect($crumbs.eq(1).find('a').attr('href')).toEqual('/somedir#1');
|
||||
expect($crumbs.eq(1).find('img').length).toEqual(0);
|
||||
expect($crumbs.eq(1).attr('data-dir')).toEqual('/somedir');
|
||||
|
||||
expect($crumbs.eq(2).find('a').attr('href')).toEqual('/somedir/with space#2');
|
||||
expect($crumbs.eq(2).find('img').length).toEqual(0);
|
||||
expect($crumbs.eq(2).attr('data-dir')).toEqual('/somedir/with space');
|
||||
|
||||
expect($crumbs.eq(3).find('a').attr('href')).toEqual('/somedir/with space/abc#3');
|
||||
expect($crumbs.eq(3).find('img').length).toEqual(0);
|
||||
expect($crumbs.eq(3).attr('data-dir')).toEqual('/somedir/with space/abc');
|
||||
});
|
||||
});
|
||||
describe('Events', function() {
|
||||
it('Calls onClick handler when clicking on a crumb', function() {
|
||||
var handler = sinon.stub();
|
||||
var bc = new BreadCrumb({
|
||||
onClick: handler
|
||||
});
|
||||
bc.setDirectory('/one/two/three/four');
|
||||
bc.$el.find('.crumb:eq(3)').click();
|
||||
expect(handler.calledOnce).toEqual(true);
|
||||
expect(handler.getCall(0).thisValue).toEqual(bc.$el.find('.crumb').get(3));
|
||||
|
||||
handler.reset();
|
||||
bc.$el.find('.crumb:eq(0) a').click();
|
||||
expect(handler.calledOnce).toEqual(true);
|
||||
expect(handler.getCall(0).thisValue).toEqual(bc.$el.find('.crumb').get(0));
|
||||
});
|
||||
it('Calls onDrop handler when dropping on a crumb', function() {
|
||||
var droppableStub = sinon.stub($.fn, 'droppable');
|
||||
var handler = sinon.stub();
|
||||
var bc = new BreadCrumb({
|
||||
onDrop: handler
|
||||
});
|
||||
bc.setDirectory('/one/two/three/four');
|
||||
expect(droppableStub.calledOnce).toEqual(true);
|
||||
|
||||
expect(droppableStub.getCall(0).args[0].drop).toBeDefined();
|
||||
// simulate drop
|
||||
droppableStub.getCall(0).args[0].drop({dummy: true});
|
||||
|
||||
expect(handler.calledOnce).toEqual(true);
|
||||
expect(handler.getCall(0).args[0]).toEqual({dummy: true});
|
||||
|
||||
droppableStub.restore();
|
||||
});
|
||||
});
|
||||
describe('Resizing', function() {
|
||||
var bc, widthStub, dummyDir,
|
||||
oldUpdateTotalWidth;
|
||||
|
||||
beforeEach(function() {
|
||||
dummyDir = '/short name/longer name/looooooooooooonger/even longer long long long longer long/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/last one';
|
||||
|
||||
oldUpdateTotalWidth = BreadCrumb.prototype._updateTotalWidth;
|
||||
BreadCrumb.prototype._updateTotalWidth = function() {
|
||||
// need to set display:block for correct offsetWidth (no CSS loaded here)
|
||||
$('div.crumb').css({
|
||||
'display': 'block',
|
||||
'float': 'left'
|
||||
});
|
||||
|
||||
return oldUpdateTotalWidth.apply(this, arguments);
|
||||
};
|
||||
|
||||
bc = new BreadCrumb();
|
||||
widthStub = sinon.stub($.fn, 'width');
|
||||
// append dummy navigation and controls
|
||||
// as they are currently used for measurements
|
||||
$('#testArea').append(
|
||||
'<div id="navigation" style="width: 80px"></div>',
|
||||
'<div id="controls"></div>'
|
||||
);
|
||||
|
||||
// make sure we know the test screen width
|
||||
$('#testArea').css('width', 1280);
|
||||
|
||||
// use test area as we need it for measurements
|
||||
$('#controls').append(bc.$el);
|
||||
$('#controls').append('<div class="actions"><div>Dummy action with a given width</div></div>');
|
||||
});
|
||||
afterEach(function() {
|
||||
BreadCrumb.prototype._updateTotalWidth = oldUpdateTotalWidth;
|
||||
widthStub.restore();
|
||||
bc = null;
|
||||
});
|
||||
it('Hides breadcrumbs to fit window', function() {
|
||||
var $crumbs;
|
||||
|
||||
widthStub.returns(500);
|
||||
// triggers resize implicitly
|
||||
bc.setDirectory(dummyDir);
|
||||
$crumbs = bc.$el.find('.crumb');
|
||||
|
||||
// first one is always visible
|
||||
expect($crumbs.eq(0).hasClass('hidden')).toEqual(false);
|
||||
// second one has ellipsis
|
||||
expect($crumbs.eq(1).hasClass('hidden')).toEqual(false);
|
||||
expect($crumbs.eq(1).find('.ellipsis').length).toEqual(1);
|
||||
// there is only one ellipsis in total
|
||||
expect($crumbs.find('.ellipsis').length).toEqual(1);
|
||||
// subsequent elements are hidden
|
||||
expect($crumbs.eq(2).hasClass('hidden')).toEqual(true);
|
||||
expect($crumbs.eq(3).hasClass('hidden')).toEqual(true);
|
||||
expect($crumbs.eq(4).hasClass('hidden')).toEqual(true);
|
||||
expect($crumbs.eq(5).hasClass('hidden')).toEqual(true);
|
||||
expect($crumbs.eq(6).hasClass('hidden')).toEqual(false);
|
||||
});
|
||||
it('Updates ellipsis on window size increase', function() {
|
||||
var $crumbs;
|
||||
|
||||
widthStub.returns(500);
|
||||
// triggers resize implicitly
|
||||
bc.setDirectory(dummyDir);
|
||||
$crumbs = bc.$el.find('.crumb');
|
||||
|
||||
// simulate increase
|
||||
$('#testArea').css('width', 1800);
|
||||
bc.resize(1800);
|
||||
|
||||
// first one is always visible
|
||||
expect($crumbs.eq(0).hasClass('hidden')).toEqual(false);
|
||||
// second one has ellipsis
|
||||
expect($crumbs.eq(1).hasClass('hidden')).toEqual(false);
|
||||
expect($crumbs.eq(1).find('.ellipsis').length).toEqual(1);
|
||||
// there is only one ellipsis in total
|
||||
expect($crumbs.find('.ellipsis').length).toEqual(1);
|
||||
// subsequent elements are hidden
|
||||
expect($crumbs.eq(2).hasClass('hidden')).toEqual(true);
|
||||
expect($crumbs.eq(3).hasClass('hidden')).toEqual(true);
|
||||
expect($crumbs.eq(4).hasClass('hidden')).toEqual(true);
|
||||
// the rest is visible
|
||||
expect($crumbs.eq(5).hasClass('hidden')).toEqual(false);
|
||||
expect($crumbs.eq(6).hasClass('hidden')).toEqual(false);
|
||||
});
|
||||
it('Updates ellipsis on window size decrease', function() {
|
||||
var $crumbs;
|
||||
|
||||
$('#testArea').css('width', 2000);
|
||||
widthStub.returns(2000);
|
||||
// triggers resize implicitly
|
||||
bc.setDirectory(dummyDir);
|
||||
$crumbs = bc.$el.find('.crumb');
|
||||
|
||||
// simulate decrease
|
||||
bc.resize(500);
|
||||
$('#testArea').css('width', 500);
|
||||
|
||||
// first one is always visible
|
||||
expect($crumbs.eq(0).hasClass('hidden')).toEqual(false);
|
||||
// second one has ellipsis
|
||||
expect($crumbs.eq(1).hasClass('hidden')).toEqual(false);
|
||||
expect($crumbs.eq(1).find('.ellipsis').length).toEqual(1);
|
||||
// there is only one ellipsis in total
|
||||
expect($crumbs.find('.ellipsis').length).toEqual(1);
|
||||
// subsequent elements are hidden
|
||||
expect($crumbs.eq(2).hasClass('hidden')).toEqual(true);
|
||||
expect($crumbs.eq(3).hasClass('hidden')).toEqual(true);
|
||||
expect($crumbs.eq(4).hasClass('hidden')).toEqual(true);
|
||||
// the rest is visible
|
||||
expect($crumbs.eq(5).hasClass('hidden')).toEqual(true);
|
||||
expect($crumbs.eq(6).hasClass('hidden')).toEqual(false);
|
||||
});
|
||||
});
|
||||
});
|
|
@ -22,6 +22,7 @@
|
|||
/* global OC, FileActions, FileList */
|
||||
describe('FileActions tests', function() {
|
||||
var $filesTable;
|
||||
|
||||
beforeEach(function() {
|
||||
// init horrible parameters
|
||||
var $body = $('body');
|
||||
|
@ -34,42 +35,83 @@ describe('FileActions tests', function() {
|
|||
$('#dir, #permissions, #filestable').remove();
|
||||
});
|
||||
it('calling display() sets file actions', function() {
|
||||
// note: download_url is actually the link target, not the actual download URL...
|
||||
var $tr = FileList.addFile('testName.txt', 1234, new Date(), false, false, {download_url: 'test/download/url'});
|
||||
var fileData = {
|
||||
id: 18,
|
||||
type: 'file',
|
||||
name: 'testName.txt',
|
||||
mimetype: 'plain/text',
|
||||
size: '1234',
|
||||
etag: 'a01234c',
|
||||
mtime: '123456'
|
||||
};
|
||||
|
||||
// no actions before call
|
||||
expect($tr.find('.action[data-action=Download]').length).toEqual(0);
|
||||
expect($tr.find('.action[data-action=Rename]').length).toEqual(0);
|
||||
expect($tr.find('.action.delete').length).toEqual(0);
|
||||
// note: FileActions.display() is called implicitly
|
||||
var $tr = FileList.add(fileData);
|
||||
|
||||
FileActions.display($tr.find('td.filename'), true);
|
||||
|
||||
// actions defined after cal
|
||||
expect($tr.find('.action[data-action=Download]').length).toEqual(1);
|
||||
expect($tr.find('.nametext .action[data-action=Rename]').length).toEqual(1);
|
||||
// actions defined after call
|
||||
expect($tr.find('.action.action-download').length).toEqual(1);
|
||||
expect($tr.find('.action.action-download').attr('data-action')).toEqual('Download');
|
||||
expect($tr.find('.nametext .action.action-rename').length).toEqual(1);
|
||||
expect($tr.find('.nametext .action.action-rename').attr('data-action')).toEqual('Rename');
|
||||
expect($tr.find('.action.delete').length).toEqual(1);
|
||||
});
|
||||
it('calling display() twice correctly replaces file actions', function() {
|
||||
var $tr = FileList.addFile('testName.txt', 1234, new Date(), false, false, {download_url: 'test/download/url'});
|
||||
var fileData = {
|
||||
id: 18,
|
||||
type: 'file',
|
||||
name: 'testName.txt',
|
||||
mimetype: 'plain/text',
|
||||
size: '1234',
|
||||
etag: 'a01234c',
|
||||
mtime: '123456'
|
||||
};
|
||||
var $tr = FileList.add(fileData);
|
||||
|
||||
FileActions.display($tr.find('td.filename'), true);
|
||||
FileActions.display($tr.find('td.filename'), true);
|
||||
|
||||
// actions defined after cal
|
||||
expect($tr.find('.action[data-action=Download]').length).toEqual(1);
|
||||
expect($tr.find('.nametext .action[data-action=Rename]').length).toEqual(1);
|
||||
expect($tr.find('.action.action-download').length).toEqual(1);
|
||||
expect($tr.find('.nametext .action.action-rename').length).toEqual(1);
|
||||
expect($tr.find('.action.delete').length).toEqual(1);
|
||||
});
|
||||
it('redirects to download URL when clicking download', function() {
|
||||
var redirectStub = sinon.stub(OC, 'redirect');
|
||||
// note: download_url is actually the link target, not the actual download URL...
|
||||
var $tr = FileList.addFile('test download File.txt', 1234, new Date(), false, false, {download_url: 'test/download/url'});
|
||||
var fileData = {
|
||||
id: 18,
|
||||
type: 'file',
|
||||
name: 'testName.txt',
|
||||
mimetype: 'plain/text',
|
||||
size: '1234',
|
||||
etag: 'a01234c',
|
||||
mtime: '123456'
|
||||
};
|
||||
var $tr = FileList.add(fileData);
|
||||
FileActions.display($tr.find('td.filename'), true);
|
||||
|
||||
$tr.find('.action[data-action=Download]').click();
|
||||
$tr.find('.action-download').click();
|
||||
|
||||
expect(redirectStub.calledOnce).toEqual(true);
|
||||
expect(redirectStub.getCall(0).args[0]).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=test%20download%20File.txt');
|
||||
expect(redirectStub.getCall(0).args[0]).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=testName.txt');
|
||||
redirectStub.restore();
|
||||
});
|
||||
it('deletes file when clicking delete', function() {
|
||||
var deleteStub = sinon.stub(FileList, 'do_delete');
|
||||
var fileData = {
|
||||
id: 18,
|
||||
type: 'file',
|
||||
name: 'testName.txt',
|
||||
mimetype: 'plain/text',
|
||||
size: '1234',
|
||||
etag: 'a01234c',
|
||||
mtime: '123456'
|
||||
};
|
||||
var $tr = FileList.add(fileData);
|
||||
FileActions.display($tr.find('td.filename'), true);
|
||||
|
||||
$tr.find('.action.delete').click();
|
||||
|
||||
expect(deleteStub.calledOnce).toEqual(true);
|
||||
deleteStub.restore();
|
||||
});
|
||||
});
|
||||
|
|
|
@ -21,6 +21,9 @@
|
|||
|
||||
/* global OC, FileList */
|
||||
describe('FileList tests', function() {
|
||||
var testFiles, alertStub, notificationStub,
|
||||
pushStateStub;
|
||||
|
||||
beforeEach(function() {
|
||||
// init horrible parameters
|
||||
var $body = $('body');
|
||||
|
@ -28,45 +31,784 @@ describe('FileList tests', function() {
|
|||
$body.append('<input type="hidden" id="permissions" value="31"></input>');
|
||||
// dummy files table
|
||||
$body.append('<table id="filestable"></table>');
|
||||
|
||||
// prevents URL changes during tests
|
||||
pushStateStub = sinon.stub(window.history, 'pushState');
|
||||
|
||||
alertStub = sinon.stub(OC.dialogs, 'alert');
|
||||
notificationStub = sinon.stub(OC.Notification, 'show');
|
||||
|
||||
// init parameters and test table elements
|
||||
$('#testArea').append(
|
||||
'<input type="hidden" id="dir" value="/subdir"></input>' +
|
||||
'<input type="hidden" id="permissions" value="31"></input>' +
|
||||
// dummy controls
|
||||
'<div id="controls">' +
|
||||
' <div class="actions creatable"></div>' +
|
||||
' <div class="notCreatable"></div>' +
|
||||
'</div>' +
|
||||
// dummy table
|
||||
'<table id="filestable">' +
|
||||
'<thead><tr><th class="hidden">Name</th></tr></thead>' +
|
||||
'<tbody id="fileList"></tbody>' +
|
||||
'</table>' +
|
||||
'<div id="emptycontent">Empty content message</div>'
|
||||
);
|
||||
|
||||
testFiles = [{
|
||||
id: 1,
|
||||
type: 'file',
|
||||
name: 'One.txt',
|
||||
mimetype: 'text/plain',
|
||||
size: 12
|
||||
}, {
|
||||
id: 2,
|
||||
type: 'file',
|
||||
name: 'Two.jpg',
|
||||
mimetype: 'image/jpeg',
|
||||
size: 12049
|
||||
}, {
|
||||
id: 3,
|
||||
type: 'file',
|
||||
name: 'Three.pdf',
|
||||
mimetype: 'application/pdf',
|
||||
size: 58009
|
||||
}, {
|
||||
id: 4,
|
||||
type: 'dir',
|
||||
name: 'somedir',
|
||||
mimetype: 'httpd/unix-directory',
|
||||
size: 250
|
||||
}];
|
||||
|
||||
FileList.initialize();
|
||||
});
|
||||
afterEach(function() {
|
||||
testFiles = undefined;
|
||||
FileList.initialized = false;
|
||||
FileList.isEmpty = true;
|
||||
delete FileList._reloadCall;
|
||||
|
||||
$('#dir, #permissions, #filestable').remove();
|
||||
notificationStub.restore();
|
||||
alertStub.restore();
|
||||
pushStateStub.restore();
|
||||
});
|
||||
it('generates file element with correct attributes when calling addFile', function() {
|
||||
var lastMod = new Date(10000);
|
||||
// note: download_url is actually the link target, not the actual download URL...
|
||||
var $tr = FileList.addFile('testName.txt', 1234, lastMod, false, false, {download_url: 'test/download/url'});
|
||||
|
||||
expect($tr).toBeDefined();
|
||||
expect($tr[0].tagName.toLowerCase()).toEqual('tr');
|
||||
expect($tr.find('a:first').attr('href')).toEqual('test/download/url');
|
||||
expect($tr.attr('data-type')).toEqual('file');
|
||||
expect($tr.attr('data-file')).toEqual('testName.txt');
|
||||
expect($tr.attr('data-size')).toEqual('1234');
|
||||
expect($tr.attr('data-permissions')).toEqual('31');
|
||||
//expect($tr.attr('data-mime')).toEqual('plain/text');
|
||||
describe('Getters', function() {
|
||||
it('Returns the current directory', function() {
|
||||
$('#dir').val('/one/two/three');
|
||||
expect(FileList.getCurrentDirectory()).toEqual('/one/two/three');
|
||||
});
|
||||
it('Returns the directory permissions as int', function() {
|
||||
$('#permissions').val('23');
|
||||
expect(FileList.getDirectoryPermissions()).toEqual(23);
|
||||
});
|
||||
});
|
||||
it('generates dir element with correct attributes when calling addDir', function() {
|
||||
var lastMod = new Date(10000);
|
||||
var $tr = FileList.addDir('testFolder', 1234, lastMod, false);
|
||||
describe('Adding files', function() {
|
||||
var clock, now;
|
||||
beforeEach(function() {
|
||||
// to prevent date comparison issues
|
||||
clock = sinon.useFakeTimers();
|
||||
now = new Date();
|
||||
});
|
||||
afterEach(function() {
|
||||
clock.restore();
|
||||
});
|
||||
it('generates file element with correct attributes when calling add() with file data', function() {
|
||||
var fileData = {
|
||||
id: 18,
|
||||
type: 'file',
|
||||
name: 'testName.txt',
|
||||
mimetype: 'plain/text',
|
||||
size: '1234',
|
||||
etag: 'a01234c',
|
||||
mtime: '123456'
|
||||
};
|
||||
var $tr = FileList.add(fileData);
|
||||
|
||||
expect($tr).toBeDefined();
|
||||
expect($tr[0].tagName.toLowerCase()).toEqual('tr');
|
||||
expect($tr.attr('data-type')).toEqual('dir');
|
||||
expect($tr.attr('data-file')).toEqual('testFolder');
|
||||
expect($tr.attr('data-size')).toEqual('1234');
|
||||
expect($tr.attr('data-permissions')).toEqual('31');
|
||||
//expect($tr.attr('data-mime')).toEqual('httpd/unix-directory');
|
||||
expect($tr).toBeDefined();
|
||||
expect($tr[0].tagName.toLowerCase()).toEqual('tr');
|
||||
expect($tr.attr('data-id')).toEqual('18');
|
||||
expect($tr.attr('data-type')).toEqual('file');
|
||||
expect($tr.attr('data-file')).toEqual('testName.txt');
|
||||
expect($tr.attr('data-size')).toEqual('1234');
|
||||
expect($tr.attr('data-etag')).toEqual('a01234c');
|
||||
expect($tr.attr('data-permissions')).toEqual('31');
|
||||
expect($tr.attr('data-mime')).toEqual('plain/text');
|
||||
expect($tr.attr('data-mtime')).toEqual('123456');
|
||||
expect($tr.find('a.name').attr('href')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=testName.txt');
|
||||
|
||||
expect($tr.find('.filesize').text()).toEqual('1 kB');
|
||||
expect(FileList.findFileEl('testName.txt')[0]).toEqual($tr[0]);
|
||||
});
|
||||
it('generates dir element with correct attributes when calling add() with dir data', function() {
|
||||
var fileData = {
|
||||
id: 19,
|
||||
type: 'dir',
|
||||
name: 'testFolder',
|
||||
mimetype: 'httpd/unix-directory',
|
||||
size: '1234',
|
||||
etag: 'a01234c',
|
||||
mtime: '123456'
|
||||
};
|
||||
var $tr = FileList.add(fileData);
|
||||
|
||||
expect($tr).toBeDefined();
|
||||
expect($tr[0].tagName.toLowerCase()).toEqual('tr');
|
||||
expect($tr.attr('data-id')).toEqual('19');
|
||||
expect($tr.attr('data-type')).toEqual('dir');
|
||||
expect($tr.attr('data-file')).toEqual('testFolder');
|
||||
expect($tr.attr('data-size')).toEqual('1234');
|
||||
expect($tr.attr('data-etag')).toEqual('a01234c');
|
||||
expect($tr.attr('data-permissions')).toEqual('31');
|
||||
expect($tr.attr('data-mime')).toEqual('httpd/unix-directory');
|
||||
expect($tr.attr('data-mtime')).toEqual('123456');
|
||||
|
||||
expect($tr.find('.filesize').text()).toEqual('1 kB');
|
||||
|
||||
expect(FileList.findFileEl('testFolder')[0]).toEqual($tr[0]);
|
||||
});
|
||||
it('generates file element with default attributes when calling add() with minimal data', function() {
|
||||
var fileData = {
|
||||
type: 'file',
|
||||
name: 'testFile.txt'
|
||||
};
|
||||
|
||||
clock.tick(123456);
|
||||
var $tr = FileList.add(fileData);
|
||||
|
||||
expect($tr).toBeDefined();
|
||||
expect($tr[0].tagName.toLowerCase()).toEqual('tr');
|
||||
expect($tr.attr('data-id')).toEqual(null);
|
||||
expect($tr.attr('data-type')).toEqual('file');
|
||||
expect($tr.attr('data-file')).toEqual('testFile.txt');
|
||||
expect($tr.attr('data-size')).toEqual(null);
|
||||
expect($tr.attr('data-etag')).toEqual(null);
|
||||
expect($tr.attr('data-permissions')).toEqual('31');
|
||||
expect($tr.attr('data-mime')).toEqual(null);
|
||||
expect($tr.attr('data-mtime')).toEqual('123456');
|
||||
|
||||
expect($tr.find('.filesize').text()).toEqual('Pending');
|
||||
});
|
||||
it('generates dir element with default attributes when calling add() with minimal data', function() {
|
||||
var fileData = {
|
||||
type: 'dir',
|
||||
name: 'testFolder'
|
||||
};
|
||||
clock.tick(123456);
|
||||
var $tr = FileList.add(fileData);
|
||||
|
||||
expect($tr).toBeDefined();
|
||||
expect($tr[0].tagName.toLowerCase()).toEqual('tr');
|
||||
expect($tr.attr('data-id')).toEqual(null);
|
||||
expect($tr.attr('data-type')).toEqual('dir');
|
||||
expect($tr.attr('data-file')).toEqual('testFolder');
|
||||
expect($tr.attr('data-size')).toEqual(null);
|
||||
expect($tr.attr('data-etag')).toEqual(null);
|
||||
expect($tr.attr('data-permissions')).toEqual('31');
|
||||
expect($tr.attr('data-mime')).toEqual('httpd/unix-directory');
|
||||
expect($tr.attr('data-mtime')).toEqual('123456');
|
||||
|
||||
expect($tr.find('.filesize').text()).toEqual('Pending');
|
||||
});
|
||||
it('generates file element with zero size when size is explicitly zero', function() {
|
||||
var fileData = {
|
||||
type: 'dir',
|
||||
name: 'testFolder',
|
||||
size: '0'
|
||||
};
|
||||
var $tr = FileList.add(fileData);
|
||||
expect($tr.find('.filesize').text()).toEqual('0 B');
|
||||
});
|
||||
it('adds new file to the end of the list before the summary', function() {
|
||||
var fileData = {
|
||||
type: 'file',
|
||||
name: 'P comes after O.txt'
|
||||
};
|
||||
FileList.setFiles(testFiles);
|
||||
$tr = FileList.add(fileData);
|
||||
expect($tr.index()).toEqual(4);
|
||||
expect($tr.next().hasClass('summary')).toEqual(true);
|
||||
});
|
||||
it('adds new file at correct position in insert mode', function() {
|
||||
var fileData = {
|
||||
type: 'file',
|
||||
name: 'P comes after O.txt'
|
||||
};
|
||||
FileList.setFiles(testFiles);
|
||||
$tr = FileList.add(fileData, {insert: true});
|
||||
// after "One.txt"
|
||||
expect($tr.index()).toEqual(1);
|
||||
});
|
||||
it('removes empty content message and shows summary when adding first file', function() {
|
||||
var fileData = {
|
||||
type: 'file',
|
||||
name: 'first file.txt',
|
||||
size: 12
|
||||
};
|
||||
FileList.setFiles([]);
|
||||
expect(FileList.isEmpty).toEqual(true);
|
||||
FileList.add(fileData);
|
||||
$summary = $('#fileList .summary');
|
||||
expect($summary.length).toEqual(1);
|
||||
// yes, ugly...
|
||||
expect($summary.find('.info').text()).toEqual('0 folders and 1 file');
|
||||
expect($summary.find('.dirinfo').hasClass('hidden')).toEqual(true);
|
||||
expect($summary.find('.fileinfo').hasClass('hidden')).toEqual(false);
|
||||
expect($summary.find('.filesize').text()).toEqual('12 B');
|
||||
expect($('#filestable thead th').hasClass('hidden')).toEqual(false);
|
||||
expect($('#emptycontent').hasClass('hidden')).toEqual(true);
|
||||
expect(FileList.isEmpty).toEqual(false);
|
||||
});
|
||||
});
|
||||
describe('Removing files from the list', function() {
|
||||
it('Removes file from list when calling remove() and updates summary', function() {
|
||||
var $removedEl;
|
||||
FileList.setFiles(testFiles);
|
||||
$removedEl = FileList.remove('One.txt');
|
||||
expect($removedEl).toBeDefined();
|
||||
expect($removedEl.attr('data-file')).toEqual('One.txt');
|
||||
expect($('#fileList tr:not(.summary)').length).toEqual(3);
|
||||
expect(FileList.findFileEl('One.txt').length).toEqual(0);
|
||||
|
||||
$summary = $('#fileList .summary');
|
||||
expect($summary.length).toEqual(1);
|
||||
expect($summary.find('.info').text()).toEqual('1 folder and 2 files');
|
||||
expect($summary.find('.dirinfo').hasClass('hidden')).toEqual(false);
|
||||
expect($summary.find('.fileinfo').hasClass('hidden')).toEqual(false);
|
||||
expect($summary.find('.filesize').text()).toEqual('69 kB');
|
||||
expect(FileList.isEmpty).toEqual(false);
|
||||
});
|
||||
it('Shows empty content when removing last file', function() {
|
||||
FileList.setFiles([testFiles[0]]);
|
||||
FileList.remove('One.txt');
|
||||
expect($('#fileList tr:not(.summary)').length).toEqual(0);
|
||||
expect(FileList.findFileEl('One.txt').length).toEqual(0);
|
||||
|
||||
$summary = $('#fileList .summary');
|
||||
expect($summary.length).toEqual(0);
|
||||
expect($('#filestable thead th').hasClass('hidden')).toEqual(true);
|
||||
expect($('#emptycontent').hasClass('hidden')).toEqual(false);
|
||||
expect(FileList.isEmpty).toEqual(true);
|
||||
});
|
||||
});
|
||||
describe('Deleting files', function() {
|
||||
function doDelete() {
|
||||
var request, query;
|
||||
// note: normally called from FileActions
|
||||
FileList.do_delete(['One.txt', 'Two.jpg']);
|
||||
|
||||
expect(fakeServer.requests.length).toEqual(1);
|
||||
request = fakeServer.requests[0];
|
||||
expect(request.url).toEqual(OC.webroot + '/index.php/apps/files/ajax/delete.php');
|
||||
|
||||
query = fakeServer.requests[0].requestBody;
|
||||
expect(OC.parseQueryString(query)).toEqual({'dir': '/subdir', files: '["One.txt","Two.jpg"]'});
|
||||
}
|
||||
it('calls delete.php, removes the deleted entries and updates summary', function() {
|
||||
FileList.setFiles(testFiles);
|
||||
doDelete();
|
||||
|
||||
fakeServer.requests[0].respond(
|
||||
200,
|
||||
{ 'Content-Type': 'application/json' },
|
||||
JSON.stringify({status: 'success'})
|
||||
);
|
||||
|
||||
expect(FileList.findFileEl('One.txt').length).toEqual(0);
|
||||
expect(FileList.findFileEl('Two.jpg').length).toEqual(0);
|
||||
expect(FileList.findFileEl('Three.pdf').length).toEqual(1);
|
||||
expect(FileList.$fileList.find('tr:not(.summary)').length).toEqual(2);
|
||||
|
||||
$summary = $('#fileList .summary');
|
||||
expect($summary.length).toEqual(1);
|
||||
expect($summary.find('.info').text()).toEqual('1 folder and 1 file');
|
||||
expect($summary.find('.dirinfo').hasClass('hidden')).toEqual(false);
|
||||
expect($summary.find('.fileinfo').hasClass('hidden')).toEqual(false);
|
||||
expect($summary.find('.filesize').text()).toEqual('57 kB');
|
||||
expect(FileList.isEmpty).toEqual(false);
|
||||
expect($('#filestable thead th').hasClass('hidden')).toEqual(false);
|
||||
expect($('#emptycontent').hasClass('hidden')).toEqual(true);
|
||||
|
||||
expect(notificationStub.notCalled).toEqual(true);
|
||||
});
|
||||
it('updates summary when deleting last file', function() {
|
||||
FileList.setFiles([testFiles[0], testFiles[1]]);
|
||||
doDelete();
|
||||
|
||||
fakeServer.requests[0].respond(
|
||||
200,
|
||||
{ 'Content-Type': 'application/json' },
|
||||
JSON.stringify({status: 'success'})
|
||||
);
|
||||
|
||||
expect(FileList.$fileList.find('tr:not(.summary)').length).toEqual(0);
|
||||
|
||||
$summary = $('#fileList .summary');
|
||||
expect($summary.length).toEqual(0);
|
||||
expect(FileList.isEmpty).toEqual(true);
|
||||
expect($('#filestable thead th').hasClass('hidden')).toEqual(true);
|
||||
expect($('#emptycontent').hasClass('hidden')).toEqual(false);
|
||||
});
|
||||
it('bring back deleted item when delete call failed', function() {
|
||||
FileList.setFiles(testFiles);
|
||||
doDelete();
|
||||
|
||||
fakeServer.requests[0].respond(
|
||||
200,
|
||||
{ 'Content-Type': 'application/json' },
|
||||
JSON.stringify({status: 'error', data: {message: 'WOOT'}})
|
||||
);
|
||||
|
||||
// files are still in the list
|
||||
expect(FileList.findFileEl('One.txt').length).toEqual(1);
|
||||
expect(FileList.findFileEl('Two.jpg').length).toEqual(1);
|
||||
expect(FileList.$fileList.find('tr:not(.summary)').length).toEqual(4);
|
||||
|
||||
expect(notificationStub.calledOnce).toEqual(true);
|
||||
});
|
||||
});
|
||||
describe('Renaming files', function() {
|
||||
function doRename() {
|
||||
var $input, request;
|
||||
|
||||
FileList.setFiles(testFiles);
|
||||
|
||||
// trigger rename prompt
|
||||
FileList.rename('One.txt');
|
||||
$input = FileList.$fileList.find('input.filename');
|
||||
$input.val('One_renamed.txt').blur();
|
||||
|
||||
expect(fakeServer.requests.length).toEqual(1);
|
||||
var request = fakeServer.requests[0];
|
||||
expect(request.url.substr(0, request.url.indexOf('?'))).toEqual(OC.webroot + '/index.php/apps/files/ajax/rename.php');
|
||||
expect(OC.parseQueryString(request.url)).toEqual({'dir': '/subdir', newname: 'One_renamed.txt', file: 'One.txt'});
|
||||
|
||||
// element is renamed before the request finishes
|
||||
expect(FileList.findFileEl('One.txt').length).toEqual(0);
|
||||
expect(FileList.findFileEl('One_renamed.txt').length).toEqual(1);
|
||||
// input is gone
|
||||
expect(FileList.$fileList.find('input.filename').length).toEqual(0);
|
||||
}
|
||||
it('Keeps renamed file entry if rename ajax call suceeded', function() {
|
||||
doRename();
|
||||
|
||||
fakeServer.requests[0].respond(200, {'Content-Type': 'application/json'}, JSON.stringify({
|
||||
status: 'success',
|
||||
data: {
|
||||
name: 'One_renamed.txt'
|
||||
}
|
||||
}));
|
||||
|
||||
// element stays renamed
|
||||
expect(FileList.findFileEl('One.txt').length).toEqual(0);
|
||||
expect(FileList.findFileEl('One_renamed.txt').length).toEqual(1);
|
||||
|
||||
expect(alertStub.notCalled).toEqual(true);
|
||||
});
|
||||
it('Reverts file entry if rename ajax call failed', function() {
|
||||
doRename();
|
||||
|
||||
fakeServer.requests[0].respond(200, {'Content-Type': 'application/json'}, JSON.stringify({
|
||||
status: 'error',
|
||||
data: {
|
||||
message: 'Something went wrong'
|
||||
}
|
||||
}));
|
||||
|
||||
// element was reverted
|
||||
expect(FileList.findFileEl('One.txt').length).toEqual(1);
|
||||
expect(FileList.findFileEl('One_renamed.txt').length).toEqual(0);
|
||||
|
||||
expect(alertStub.calledOnce).toEqual(true);
|
||||
});
|
||||
it('Correctly updates file link after rename', function() {
|
||||
var $tr;
|
||||
doRename();
|
||||
|
||||
fakeServer.requests[0].respond(200, {'Content-Type': 'application/json'}, JSON.stringify({
|
||||
status: 'success',
|
||||
data: {
|
||||
name: 'One_renamed.txt'
|
||||
}
|
||||
}));
|
||||
|
||||
$tr = FileList.findFileEl('One_renamed.txt');
|
||||
expect($tr.find('a.name').attr('href')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=One_renamed.txt');
|
||||
});
|
||||
// FIXME: fix this in the source code!
|
||||
xit('Correctly updates file link after rename when path has same name', function() {
|
||||
var $tr;
|
||||
// evil case: because of buggy code
|
||||
$('#dir').val('/One.txt/subdir');
|
||||
doRename();
|
||||
|
||||
fakeServer.requests[0].respond(200, {'Content-Type': 'application/json'}, JSON.stringify({
|
||||
status: 'success',
|
||||
data: {
|
||||
name: 'One_renamed.txt'
|
||||
}
|
||||
}));
|
||||
|
||||
$tr = FileList.findFileEl('One_renamed.txt');
|
||||
expect($tr.find('a.name').attr('href')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=One.txt');
|
||||
});
|
||||
});
|
||||
describe('List rendering', function() {
|
||||
it('renders a list of files using add()', function() {
|
||||
var addSpy = sinon.spy(FileList, 'add');
|
||||
FileList.setFiles(testFiles);
|
||||
expect(addSpy.callCount).toEqual(4);
|
||||
expect($('#fileList tr:not(.summary)').length).toEqual(4);
|
||||
addSpy.restore();
|
||||
});
|
||||
it('updates summary using the file sizes', function() {
|
||||
var $summary;
|
||||
FileList.setFiles(testFiles);
|
||||
$summary = $('#fileList .summary');
|
||||
expect($summary.length).toEqual(1);
|
||||
expect($summary.find('.info').text()).toEqual('1 folder and 3 files');
|
||||
expect($summary.find('.filesize').text()).toEqual('69 kB');
|
||||
});
|
||||
it('shows headers, summary and hide empty content message after setting files', function(){
|
||||
FileList.setFiles(testFiles);
|
||||
expect($('#filestable thead th').hasClass('hidden')).toEqual(false);
|
||||
expect($('#emptycontent').hasClass('hidden')).toEqual(true);
|
||||
expect(FileList.$fileList.find('.summary').length).toEqual(1);
|
||||
});
|
||||
it('hides headers, summary and show empty content message after setting empty file list', function(){
|
||||
FileList.setFiles([]);
|
||||
expect($('#filestable thead th').hasClass('hidden')).toEqual(true);
|
||||
expect($('#emptycontent').hasClass('hidden')).toEqual(false);
|
||||
expect(FileList.$fileList.find('.summary').length).toEqual(0);
|
||||
});
|
||||
it('hides headers, empty content message, and summary when list is empty and user has no creation permission', function(){
|
||||
$('#permissions').val(0);
|
||||
FileList.setFiles([]);
|
||||
expect($('#filestable thead th').hasClass('hidden')).toEqual(true);
|
||||
expect($('#emptycontent').hasClass('hidden')).toEqual(true);
|
||||
expect(FileList.$fileList.find('.summary').length).toEqual(0);
|
||||
});
|
||||
it('calling findFileEl() can find existing file element', function() {
|
||||
FileList.setFiles(testFiles);
|
||||
expect(FileList.findFileEl('Two.jpg').length).toEqual(1);
|
||||
});
|
||||
it('calling findFileEl() returns empty when file not found in file', function() {
|
||||
FileList.setFiles(testFiles);
|
||||
expect(FileList.findFileEl('unexist.dat').length).toEqual(0);
|
||||
});
|
||||
it('only add file if in same current directory', function() {
|
||||
$('#dir').val('/current dir');
|
||||
var fileData = {
|
||||
type: 'file',
|
||||
name: 'testFile.txt',
|
||||
directory: '/current dir'
|
||||
};
|
||||
var $tr = FileList.add(fileData);
|
||||
expect(FileList.findFileEl('testFile.txt').length).toEqual(1);
|
||||
});
|
||||
it('triggers "fileActionsReady" event after update', function() {
|
||||
var handler = sinon.stub();
|
||||
FileList.$fileList.on('fileActionsReady', handler);
|
||||
FileList.setFiles(testFiles);
|
||||
expect(handler.calledOnce).toEqual(true);
|
||||
});
|
||||
it('triggers "updated" event after update', function() {
|
||||
var handler = sinon.stub();
|
||||
FileList.$fileList.on('updated', handler);
|
||||
FileList.setFiles(testFiles);
|
||||
expect(handler.calledOnce).toEqual(true);
|
||||
});
|
||||
});
|
||||
describe('file previews', function() {
|
||||
var previewLoadStub;
|
||||
|
||||
function getImageUrl($el) {
|
||||
// might be slightly different cross-browser
|
||||
var url = $el.css('background-image');
|
||||
var r = url.match(/url\(['"]?([^'")]*)['"]?\)/);
|
||||
if (!r) {
|
||||
return url;
|
||||
}
|
||||
return r[1];
|
||||
}
|
||||
|
||||
beforeEach(function() {
|
||||
previewLoadStub = sinon.stub(Files, 'lazyLoadPreview');
|
||||
});
|
||||
afterEach(function() {
|
||||
previewLoadStub.restore();
|
||||
});
|
||||
it('renders default icon for file when none provided and no preview is available', function() {
|
||||
var fileData = {
|
||||
type: 'file',
|
||||
name: 'testFile.txt'
|
||||
};
|
||||
var $tr = FileList.add(fileData);
|
||||
var $td = $tr.find('td.filename');
|
||||
expect(getImageUrl($td)).toEqual(OC.webroot + '/core/img/filetypes/file.svg');
|
||||
expect(previewLoadStub.notCalled).toEqual(true);
|
||||
});
|
||||
it('renders default icon for dir when none provided and no preview is available', function() {
|
||||
var fileData = {
|
||||
type: 'dir',
|
||||
name: 'test dir'
|
||||
};
|
||||
var $tr = FileList.add(fileData);
|
||||
var $td = $tr.find('td.filename');
|
||||
expect(getImageUrl($td)).toEqual(OC.webroot + '/core/img/filetypes/folder.svg');
|
||||
expect(previewLoadStub.notCalled).toEqual(true);
|
||||
});
|
||||
it('renders provided icon for file when provided', function() {
|
||||
var fileData = {
|
||||
type: 'file',
|
||||
name: 'test dir',
|
||||
icon: OC.webroot + '/core/img/filetypes/application-pdf.svg'
|
||||
};
|
||||
var $tr = FileList.add(fileData);
|
||||
var $td = $tr.find('td.filename');
|
||||
expect(getImageUrl($td)).toEqual(OC.webroot + '/core/img/filetypes/application-pdf.svg');
|
||||
expect(previewLoadStub.notCalled).toEqual(true);
|
||||
});
|
||||
it('renders preview when no icon was provided and preview is available', function() {
|
||||
var fileData = {
|
||||
type: 'file',
|
||||
name: 'test dir',
|
||||
isPreviewAvailable: true
|
||||
};
|
||||
var $tr = FileList.add(fileData);
|
||||
var $td = $tr.find('td.filename');
|
||||
expect(getImageUrl($td)).toEqual(OC.webroot + '/core/img/filetypes/file.svg');
|
||||
expect(previewLoadStub.calledOnce).toEqual(true);
|
||||
// third argument is callback
|
||||
previewLoadStub.getCall(0).args[2](OC.webroot + '/somepath.png');
|
||||
expect(getImageUrl($td)).toEqual(OC.webroot + '/somepath.png');
|
||||
});
|
||||
it('renders default file type icon when no icon was provided and no preview is available', function() {
|
||||
var fileData = {
|
||||
type: 'file',
|
||||
name: 'test dir',
|
||||
isPreviewAvailable: false
|
||||
};
|
||||
var $tr = FileList.add(fileData);
|
||||
var $td = $tr.find('td.filename');
|
||||
expect(getImageUrl($td)).toEqual(OC.webroot + '/core/img/filetypes/file.svg');
|
||||
expect(previewLoadStub.notCalled).toEqual(true);
|
||||
});
|
||||
});
|
||||
describe('viewer mode', function() {
|
||||
it('enabling viewer mode hides files table and action buttons', function() {
|
||||
FileList.setViewerMode(true);
|
||||
expect($('#filestable').hasClass('hidden')).toEqual(true);
|
||||
expect($('.actions').hasClass('hidden')).toEqual(true);
|
||||
expect($('.notCreatable').hasClass('hidden')).toEqual(true);
|
||||
});
|
||||
it('disabling viewer mode restores files table and action buttons', function() {
|
||||
FileList.setViewerMode(true);
|
||||
FileList.setViewerMode(false);
|
||||
expect($('#filestable').hasClass('hidden')).toEqual(false);
|
||||
expect($('.actions').hasClass('hidden')).toEqual(false);
|
||||
expect($('.notCreatable').hasClass('hidden')).toEqual(true);
|
||||
});
|
||||
it('disabling viewer mode restores files table and action buttons with correct permissions', function() {
|
||||
$('#permissions').val(0);
|
||||
FileList.setViewerMode(true);
|
||||
FileList.setViewerMode(false);
|
||||
expect($('#filestable').hasClass('hidden')).toEqual(false);
|
||||
expect($('.actions').hasClass('hidden')).toEqual(true);
|
||||
expect($('.notCreatable').hasClass('hidden')).toEqual(false);
|
||||
});
|
||||
});
|
||||
describe('loading file list', function() {
|
||||
beforeEach(function() {
|
||||
var data = {
|
||||
status: 'success',
|
||||
data: {
|
||||
files: testFiles,
|
||||
permissions: 31
|
||||
}
|
||||
};
|
||||
fakeServer.respondWith(/\/index\.php\/apps\/files\/ajax\/list.php\?dir=%2F(subdir|anothersubdir)/, [
|
||||
200, {
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
JSON.stringify(data)
|
||||
]);
|
||||
});
|
||||
it('fetches file list from server and renders it when reload() is called', function() {
|
||||
FileList.reload();
|
||||
expect(fakeServer.requests.length).toEqual(1);
|
||||
var url = fakeServer.requests[0].url;
|
||||
var query = url.substr(url.indexOf('?') + 1);
|
||||
expect(OC.parseQueryString(query)).toEqual({'dir': '/subdir'});
|
||||
fakeServer.respond();
|
||||
expect($('#fileList tr:not(.summary)').length).toEqual(4);
|
||||
expect(FileList.findFileEl('One.txt').length).toEqual(1);
|
||||
});
|
||||
it('switches dir and fetches file list when calling changeDirectory()', function() {
|
||||
FileList.changeDirectory('/anothersubdir');
|
||||
expect(FileList.getCurrentDirectory()).toEqual('/anothersubdir');
|
||||
expect(fakeServer.requests.length).toEqual(1);
|
||||
var url = fakeServer.requests[0].url;
|
||||
var query = url.substr(url.indexOf('?') + 1);
|
||||
expect(OC.parseQueryString(query)).toEqual({'dir': '/anothersubdir'});
|
||||
fakeServer.respond();
|
||||
});
|
||||
it('switches to root dir when current directory does not exist', function() {
|
||||
fakeServer.respondWith(/\/index\.php\/apps\/files\/ajax\/list.php\?dir=%2funexist/, [
|
||||
404, {
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
''
|
||||
]);
|
||||
FileList.changeDirectory('/unexist');
|
||||
fakeServer.respond();
|
||||
expect(FileList.getCurrentDirectory()).toEqual('/');
|
||||
});
|
||||
it('shows mask before loading file list then hides it at the end', function() {
|
||||
var showMaskStub = sinon.stub(FileList, 'showMask');
|
||||
var hideMaskStub = sinon.stub(FileList, 'hideMask');
|
||||
FileList.changeDirectory('/anothersubdir');
|
||||
expect(showMaskStub.calledOnce).toEqual(true);
|
||||
expect(hideMaskStub.calledOnce).toEqual(false);
|
||||
fakeServer.respond();
|
||||
expect(showMaskStub.calledOnce).toEqual(true);
|
||||
expect(hideMaskStub.calledOnce).toEqual(true);
|
||||
showMaskStub.restore();
|
||||
hideMaskStub.restore();
|
||||
});
|
||||
it('changes URL to target dir', function() {
|
||||
FileList.changeDirectory('/somedir');
|
||||
expect(pushStateStub.calledOnce).toEqual(true);
|
||||
expect(pushStateStub.getCall(0).args[0]).toEqual({dir: '/somedir'});
|
||||
expect(pushStateStub.getCall(0).args[2]).toEqual(OC.webroot + '/index.php/apps/files?dir=/somedir');
|
||||
});
|
||||
it('refreshes breadcrumb after update', function() {
|
||||
var setDirSpy = sinon.spy(FileList.breadcrumb, 'setDirectory');
|
||||
FileList.changeDirectory('/anothersubdir');
|
||||
fakeServer.respond();
|
||||
expect(FileList.breadcrumb.setDirectory.calledOnce).toEqual(true);
|
||||
expect(FileList.breadcrumb.setDirectory.calledWith('/anothersubdir')).toEqual(true);
|
||||
setDirSpy.restore();
|
||||
});
|
||||
});
|
||||
describe('breadcrumb events', function() {
|
||||
beforeEach(function() {
|
||||
var data = {
|
||||
status: 'success',
|
||||
data: {
|
||||
files: testFiles,
|
||||
permissions: 31
|
||||
}
|
||||
};
|
||||
fakeServer.respondWith(/\/index\.php\/apps\/files\/ajax\/list.php\?dir=%2Fsubdir/, [
|
||||
200, {
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
JSON.stringify(data)
|
||||
]);
|
||||
});
|
||||
it('clicking on root breadcrumb changes directory to root', function() {
|
||||
FileList.changeDirectory('/subdir/two/three with space/four/five');
|
||||
fakeServer.respond();
|
||||
var changeDirStub = sinon.stub(FileList, 'changeDirectory');
|
||||
FileList.breadcrumb.$el.find('.crumb:eq(0)').click();
|
||||
|
||||
expect(changeDirStub.calledOnce).toEqual(true);
|
||||
expect(changeDirStub.getCall(0).args[0]).toEqual('/');
|
||||
changeDirStub.restore();
|
||||
});
|
||||
it('clicking on breadcrumb changes directory', function() {
|
||||
FileList.changeDirectory('/subdir/two/three with space/four/five');
|
||||
fakeServer.respond();
|
||||
var changeDirStub = sinon.stub(FileList, 'changeDirectory');
|
||||
FileList.breadcrumb.$el.find('.crumb:eq(3)').click();
|
||||
|
||||
expect(changeDirStub.calledOnce).toEqual(true);
|
||||
expect(changeDirStub.getCall(0).args[0]).toEqual('/subdir/two/three with space');
|
||||
changeDirStub.restore();
|
||||
});
|
||||
it('dropping files on breadcrumb calls move operation', function() {
|
||||
var request, query, testDir = '/subdir/two/three with space/four/five';
|
||||
FileList.changeDirectory(testDir);
|
||||
fakeServer.respond();
|
||||
var $crumb = FileList.breadcrumb.$el.find('.crumb:eq(3)');
|
||||
// no idea what this is but is required by the handler
|
||||
var ui = {
|
||||
helper: {
|
||||
find: sinon.stub()
|
||||
}
|
||||
};
|
||||
// returns a list of tr that were dragged
|
||||
// FIXME: why are their attributes different than the
|
||||
// regular file trs ?
|
||||
ui.helper.find.returns([
|
||||
$('<tr data-filename="One.txt" data-dir="' + testDir + '"></tr>'),
|
||||
$('<tr data-filename="Two.jpg" data-dir="' + testDir + '"></tr>')
|
||||
]);
|
||||
// simulate drop event
|
||||
FileList._onDropOnBreadCrumb.call($crumb, new $.Event('drop'), ui);
|
||||
|
||||
// will trigger two calls to move.php (first one was previous list.php)
|
||||
expect(fakeServer.requests.length).toEqual(3);
|
||||
|
||||
request = fakeServer.requests[1];
|
||||
expect(request.method).toEqual('POST');
|
||||
expect(request.url).toEqual(OC.webroot + '/index.php/apps/files/ajax/move.php');
|
||||
query = OC.parseQueryString(request.requestBody);
|
||||
expect(query).toEqual({
|
||||
target: '/subdir/two/three with space',
|
||||
dir: testDir,
|
||||
file: 'One.txt'
|
||||
});
|
||||
|
||||
request = fakeServer.requests[2];
|
||||
expect(request.method).toEqual('POST');
|
||||
expect(request.url).toEqual(OC.webroot + '/index.php/apps/files/ajax/move.php');
|
||||
query = OC.parseQueryString(request.requestBody);
|
||||
expect(query).toEqual({
|
||||
target: '/subdir/two/three with space',
|
||||
dir: testDir,
|
||||
file: 'Two.jpg'
|
||||
});
|
||||
});
|
||||
it('dropping files on same dir breadcrumb does nothing', function() {
|
||||
var request, query, testDir = '/subdir/two/three with space/four/five';
|
||||
FileList.changeDirectory(testDir);
|
||||
fakeServer.respond();
|
||||
var $crumb = FileList.breadcrumb.$el.find('.crumb:last');
|
||||
// no idea what this is but is required by the handler
|
||||
var ui = {
|
||||
helper: {
|
||||
find: sinon.stub()
|
||||
}
|
||||
};
|
||||
// returns a list of tr that were dragged
|
||||
// FIXME: why are their attributes different than the
|
||||
// regular file trs ?
|
||||
ui.helper.find.returns([
|
||||
$('<tr data-filename="One.txt" data-dir="' + testDir + '"></tr>'),
|
||||
$('<tr data-filename="Two.jpg" data-dir="' + testDir + '"></tr>')
|
||||
]);
|
||||
// simulate drop event
|
||||
FileList._onDropOnBreadCrumb.call($crumb, new $.Event('drop'), ui);
|
||||
|
||||
// no extra server request
|
||||
expect(fakeServer.requests.length).toEqual(1);
|
||||
});
|
||||
});
|
||||
describe('Download Url', function() {
|
||||
it('returns correct download URL for single files', function() {
|
||||
expect(FileList.getDownloadUrl('some file.txt')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=some%20file.txt');
|
||||
expect(FileList.getDownloadUrl('some file.txt', '/anotherpath/abc')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fanotherpath%2Fabc&files=some%20file.txt');
|
||||
expect(Files.getDownloadUrl('some file.txt')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=some%20file.txt');
|
||||
expect(Files.getDownloadUrl('some file.txt', '/anotherpath/abc')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fanotherpath%2Fabc&files=some%20file.txt');
|
||||
$('#dir').val('/');
|
||||
expect(FileList.getDownloadUrl('some file.txt')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2F&files=some%20file.txt');
|
||||
expect(Files.getDownloadUrl('some file.txt')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2F&files=some%20file.txt');
|
||||
});
|
||||
it('returns correct download URL for multiple files', function() {
|
||||
expect(FileList.getDownloadUrl(['a b c.txt', 'd e f.txt'])).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=%5B%22a%20b%20c.txt%22%2C%22d%20e%20f.txt%22%5D');
|
||||
expect(Files.getDownloadUrl(['a b c.txt', 'd e f.txt'])).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=%5B%22a%20b%20c.txt%22%2C%22d%20e%20f.txt%22%5D');
|
||||
});
|
||||
it('returns the correct ajax URL', function() {
|
||||
expect(Files.getAjaxUrl('test', {a:1, b:'x y'})).toEqual(OC.webroot + '/index.php/apps/files/ajax/test.php?a=1&b=x%20y');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -16,6 +16,7 @@ $TRANSLATIONS = array(
|
|||
"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Παρακαλώ επιβεβαιώστε ότι η PHP 5.3.3 ή νεότερη είναι εγκατεστημένη και ότι το OpenSSL μαζί με το PHP extension είναι ενεργοποιήμένο και έχει ρυθμιστεί σωστά. Προς το παρόν, η εφαρμογή κρυπτογράφησης είναι απενεργοποιημένη.",
|
||||
"Following users are not set up for encryption:" => "Οι κάτωθι χρήστες δεν έχουν ρυθμιστεί για κρυπογράφηση:",
|
||||
"Initial encryption started... This can take some time. Please wait." => "Η αρχική κρυπτογράφηση άρχισε... Αυτό μπορεί να πάρει κάποια ώρα. Παρακαλώ περιμένετε.",
|
||||
"Initial encryption running... Please try again later." => "Εκτέλεση αρχικής κρυπτογράφησης... Παρακαλώ προσπαθήστε αργότερα.",
|
||||
"Go directly to your " => "Πηγαίνε απευθείας στο ",
|
||||
"personal settings" => "προσωπικές ρυθμίσεις",
|
||||
"Encryption" => "Κρυπτογράφηση",
|
||||
|
|
|
@ -16,6 +16,7 @@ $TRANSLATIONS = array(
|
|||
"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Palun veendu, et on paigaldatud PHP 5.3.3 või uuem ning PHP OpenSSL laiendus on lubatud ning seadistatud korrektselt. Hetkel krüpteerimise rakendus on peatatud.",
|
||||
"Following users are not set up for encryption:" => "Järgmised kasutajad pole seadistatud krüpteeringuks:",
|
||||
"Initial encryption started... This can take some time. Please wait." => "Algne krüpteerimine käivitati... See võib võtta natuke aega. Palun oota.",
|
||||
"Initial encryption running... Please try again later." => "Toimub esmane krüpteerimine... Palun proovi hiljem uuesti.",
|
||||
"Go directly to your " => "Liigu otse oma",
|
||||
"personal settings" => "isiklikes seadetes",
|
||||
"Encryption" => "Krüpteerimine",
|
||||
|
|
|
@ -16,6 +16,7 @@ $TRANSLATIONS = array(
|
|||
"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Kérem gondoskodjon arról, hogy PHP 5.3.3 vagy annál frissebb legyen telepítve, továbbá az OpenSSL a megfelelő PHP-bővítménnyel együtt rendelkezésre álljon és helyesen legyen konfigurálva! A titkosító modul egyelőre kikapcsolásra került.",
|
||||
"Following users are not set up for encryption:" => "A következő felhasználók nem állították be a titkosítást:",
|
||||
"Initial encryption started... This can take some time. Please wait." => "A titkosítási folyamat megkezdődött... Ez hosszabb ideig is eltarthat. Kérem várjon.",
|
||||
"Initial encryption running... Please try again later." => "Kezedeti titkosítás fut... Próbálja később.",
|
||||
"Go directly to your " => "Ugrás ide:",
|
||||
"personal settings" => "személyes beállítások",
|
||||
"Encryption" => "Titkosítás",
|
||||
|
|
|
@ -15,6 +15,8 @@ $TRANSLATIONS = array(
|
|||
"Missing requirements." => "Krav som saknas",
|
||||
"Please make sure that PHP 5.3.3 or newer is installed and that OpenSSL together with the PHP extension is enabled and configured properly. For now, the encryption app has been disabled." => "Kontrollera att PHP 5.3.3 eller senare är installerad och att tillägget OpenSSL PHP är aktiverad och korrekt konfigurerad. Kryptering är tillsvidare inaktiverad.",
|
||||
"Following users are not set up for encryption:" => "Följande användare har inte aktiverat kryptering:",
|
||||
"Initial encryption started... This can take some time. Please wait." => "Initiala krypteringen har påbörjats... Detta kan ta lite tid. Var god vänta.",
|
||||
"Initial encryption running... Please try again later." => "Initiala krypteringen körs... Var god försök igen senare.",
|
||||
"Go directly to your " => "Gå direkt till din",
|
||||
"personal settings" => "personliga inställningar",
|
||||
"Encryption" => "Kryptering",
|
||||
|
|
|
@ -3,9 +3,10 @@
|
|||
/**
|
||||
* ownCloud
|
||||
*
|
||||
* @author Sam Tuke, Robin Appelman
|
||||
* @copyright 2012 Sam Tuke samtuke@owncloud.com, Robin Appelman
|
||||
* icewind1991@gmail.com
|
||||
* @author Bjoern Schiessle, Sam Tuke, Robin Appelman
|
||||
* @copyright 2012 Sam Tuke <samtuke@owncloud.com>
|
||||
* 2012 Robin Appelman <icewind1991@gmail.com>
|
||||
* 2014 Bjoern Schiessle <schiessle@owncloud.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
|
@ -36,37 +37,40 @@ namespace OCA\Encryption;
|
|||
*/
|
||||
class Proxy extends \OC_FileProxy {
|
||||
|
||||
private static $blackList = null; //mimetypes blacklisted from encryption
|
||||
private static $unencryptedSizes = array(); // remember unencrypted size
|
||||
private static $fopenMode = array(); // remember the fopen mode
|
||||
private static $enableEncryption = false; // Enable encryption for the given path
|
||||
|
||||
/**
|
||||
* Check if a file requires encryption
|
||||
* @param string $path
|
||||
* @param string $mode type of access
|
||||
* @return bool
|
||||
*
|
||||
* Tests if server side encryption is enabled, and file is allowed by blacklists
|
||||
* Tests if server side encryption is enabled, and if we should call the
|
||||
* crypt stream wrapper for the given file
|
||||
*/
|
||||
private static function shouldEncrypt($path) {
|
||||
private static function shouldEncrypt($path, $mode = 'w') {
|
||||
|
||||
$userId = Helper::getUser($path);
|
||||
|
||||
if (\OCP\App::isEnabled('files_encryption') === false || Crypt::mode() !== 'server' ||
|
||||
strpos($path, '/' . $userId . '/files') !== 0) {
|
||||
// don't call the crypt stream wrapper, if...
|
||||
if (
|
||||
\OCP\App::isEnabled('files_encryption') === false // encryption is disabled
|
||||
|| Crypt::mode() !== 'server' // we are not in server-side-encryption mode
|
||||
|| strpos($path, '/' . $userId . '/files') !== 0 // path is not in files/
|
||||
|| substr($path, 0, 8) === 'crypt://' // we are already in crypt mode
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (is_null(self::$blackList)) {
|
||||
self::$blackList = explode(',', \OCP\Config::getAppValue('files_encryption', 'type_blacklist', ''));
|
||||
}
|
||||
$view = new \OC_FilesystemView('');
|
||||
$util = new Util($view, $userId);
|
||||
|
||||
if (Crypt::isCatfileContent($path)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$extension = substr($path, strrpos($path, '.') + 1);
|
||||
|
||||
if (array_search($extension, self::$blackList) === false) {
|
||||
// for write operation we always encrypt the files, for read operations
|
||||
// we check if the existing file is encrypted or not decide if it needs to
|
||||
// decrypt it.
|
||||
if (($mode !== 'r' && $mode !== 'rb') || $util->isEncryptedPath($path)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -206,23 +210,16 @@ class Proxy extends \OC_FileProxy {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $path
|
||||
* @return bool
|
||||
*/
|
||||
public function postTouch($path) {
|
||||
$this->handleFile($path);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief remember initial fopen mode because sometimes it gets changed during the request
|
||||
* @param string $path path
|
||||
* @param string $mode type of access
|
||||
*/
|
||||
public function preFopen($path, $mode) {
|
||||
|
||||
self::$fopenMode[$path] = $mode;
|
||||
self::$enableEncryption = self::shouldEncrypt($path, $mode);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -235,26 +232,14 @@ class Proxy extends \OC_FileProxy {
|
|||
|
||||
$path = \OC\Files\Filesystem::normalizePath($path);
|
||||
|
||||
if (!$result) {
|
||||
if (!$result || self::$enableEncryption === false) {
|
||||
|
||||
return $result;
|
||||
|
||||
}
|
||||
|
||||
// split the path parts
|
||||
$pathParts = explode('/', $path);
|
||||
|
||||
// don't try to encrypt/decrypt cache chunks or files in the trash bin
|
||||
if (isset($pathParts[2]) && ($pathParts[2] === 'cache' || $pathParts[2] === 'files_trashbin')) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
// Disable encryption proxy to prevent recursive calls
|
||||
$proxyStatus = \OC_FileProxy::$enabled;
|
||||
\OC_FileProxy::$enabled = false;
|
||||
|
||||
// if we remember the mode from the pre proxy we re-use it
|
||||
// oterwise we fall back to stream_get_meta_data()
|
||||
// otherwise we fall back to stream_get_meta_data()
|
||||
if (isset(self::$fopenMode[$path])) {
|
||||
$mode = self::$fopenMode[$path];
|
||||
unset(self::$fopenMode[$path]);
|
||||
|
@ -263,35 +248,12 @@ class Proxy extends \OC_FileProxy {
|
|||
$mode = $meta['mode'];
|
||||
}
|
||||
|
||||
$view = new \OC_FilesystemView('');
|
||||
// Close the original encrypted file
|
||||
fclose($result);
|
||||
|
||||
$userId = Helper::getUser($path);
|
||||
$util = new Util($view, $userId);
|
||||
|
||||
// If file is already encrypted, decrypt using crypto protocol
|
||||
if (
|
||||
Crypt::mode() === 'server'
|
||||
&& $util->isEncryptedPath($path)
|
||||
) {
|
||||
|
||||
// Close the original encrypted file
|
||||
fclose($result);
|
||||
|
||||
// Open the file using the crypto stream wrapper
|
||||
// protocol and let it do the decryption work instead
|
||||
$result = fopen('crypt://' . $path, $mode);
|
||||
|
||||
} elseif (
|
||||
self::shouldEncrypt($path)
|
||||
and $mode !== 'r'
|
||||
and $mode !== 'rb'
|
||||
|
||||
) {
|
||||
$result = fopen('crypt://' . $path, $mode);
|
||||
}
|
||||
|
||||
// Re-enable the proxy
|
||||
\OC_FileProxy::$enabled = $proxyStatus;
|
||||
// Open the file using the crypto stream wrapper
|
||||
// protocol and let it do the decryption work instead
|
||||
$result = fopen('crypt://' . $path, $mode);
|
||||
|
||||
return $result;
|
||||
|
||||
|
@ -404,39 +366,4 @@ class Proxy extends \OC_FileProxy {
|
|||
return $size;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $path
|
||||
*/
|
||||
public function handleFile($path) {
|
||||
|
||||
// Disable encryption proxy to prevent recursive calls
|
||||
$proxyStatus = \OC_FileProxy::$enabled;
|
||||
\OC_FileProxy::$enabled = false;
|
||||
|
||||
$view = new \OC_FilesystemView('/');
|
||||
$session = new \OCA\Encryption\Session($view);
|
||||
$userId = Helper::getUser($path);
|
||||
$util = new Util($view, $userId);
|
||||
|
||||
// split the path parts
|
||||
$pathParts = explode('/', $path);
|
||||
|
||||
// get relative path
|
||||
$relativePath = \OCA\Encryption\Helper::stripUserFilesPath($path);
|
||||
|
||||
// only if file is on 'files' folder fix file size and sharing
|
||||
if (isset($pathParts[2]) && $pathParts[2] === 'files' && $util->fixFileSize($path)) {
|
||||
|
||||
// get sharing app state
|
||||
$sharingEnabled = \OCP\Share::isEnabled();
|
||||
|
||||
// get users
|
||||
$usersSharing = $util->getSharingUsersArray($sharingEnabled, $relativePath);
|
||||
|
||||
// update sharing-keys
|
||||
$util->setSharedFileKeyfiles($session, $usersSharing, $relativePath);
|
||||
}
|
||||
|
||||
\OC_FileProxy::$enabled = $proxyStatus;
|
||||
}
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue