diff --git a/.gitignore b/.gitignore index 7c0df64b86..819347f540 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,9 @@ nbproject # WebFinger .well-known /.buildpath + +#tests - autogenerated filed +data-autotest +/tests/coverage* +/tests/autoconfig* +/tests/autotest* diff --git a/apps/files/ajax/timezone.php b/apps/files/ajax/timezone.php deleted file mode 100644 index b547d162b3..0000000000 --- a/apps/files/ajax/timezone.php +++ /dev/null @@ -1,2 +0,0 @@ -a { padding:.5em 1.2em .3em; } #new>ul { - display:none; position:fixed; min-width:7em; z-index:-1; - padding:.5em; margin-top:0.075em; margin-left:-.5em; + display:none; position:fixed; min-width:7em; z-index:10; + padding:.5em; padding-bottom:0; margin-top:.075em; margin-left:-.5em; text-align:left; - background:#f8f8f8; border:1px solid #ddd; + background:#f8f8f8; border:1px solid #ddd; border-radius:10px; border-top-left-radius:0; + box-shadow:0 2px 7px rgba(170,170,170,.4); } #new>ul>li { height:20px; margin:.3em; padding-left:2em; padding-bottom:0.1em; background-repeat:no-repeat; cursor:pointer; } #new>ul>li>p { cursor:pointer; } #new>ul>li>input { padding:0.3em; margin:-0.3em; } -#new .popup { border-top-left-radius:0; z-index:10; } #upload { height:27px; padding:0; margin-left:0.2em; overflow:hidden; @@ -64,11 +64,17 @@ tr:hover span.extension { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Op table tr.mouseOver td { background-color:#eee; } table th { height:2em; padding:0 .5em; color:#999; } table th .name { float:left; margin-left:.5em; } -table th.multiselect { background:#ddd; color:#000; font-weight:bold; } table th, table td { border-bottom:1px solid #ddd; text-align:left; font-weight:normal; } table td { border-bottom:1px solid #eee; font-style:normal; background-position:1em .5em; background-repeat:no-repeat; } -table th#headerSize, table td.filesize { width:3em; padding:0 1em; text-align:right; } -table th#headerDate, table td.date { width:11em; padding:0 .1em 0 1em; text-align:left; } +table th#headerName { width:100em; /* not really sure why this works better than 100% … table styling */ } +table th#headerSize, table td.filesize { min-width:3em; padding:0 1em; text-align:right; } +table th#headerDate, table td.date { min-width:11em; padding:0 .1em 0 1em; text-align:left; } + +/* Multiselect bar */ +table.multiselect { top:63px; } +table.multiselect thead { position:fixed; top:82px; z-index:1; } +table.multiselect thead th { background:rgba(230,230,230,.8); color:#000; font-weight:bold; border-bottom:0; } + table td.selection, table th.selection, table td.fileaction { width:2em; text-align:center; } table td.filename a.name { display:block; height:1.5em; vertical-align:middle; margin-left:3em; } table tr[data-type="dir"] td.filename a.name span.nametext {font-weight:bold; } @@ -79,15 +85,28 @@ table td.filename .nametext, .uploadtext, .modified { float:left; padding:.3em 0 table td.filename .nametext { overflow:hidden; text-overflow:ellipsis; } table td.filename .uploadtext { font-weight:normal; margin-left:.5em; } table td.filename form { font-size:.85em; margin-left:3em; margin-right:3em; } -table thead.fixed tr{ position:fixed; top:6.5em; z-index:49; -moz-box-shadow:0 -3px 7px #ddd; -webkit-box-shadow:0 -3px 7px #ddd; box-shadow:0 -3px 7px #ddd; } -table thead.fixed { height:2em; } #fileList tr td.filename>input[type="checkbox"]:first-child { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0; float:left; margin:.7em 0 0 1em; /* bigger clickable area doesn’t work in FF width:2.8em; height:2.4em;*/ -webkit-transition:opacity 200ms; -moz-transition:opacity 200ms; -o-transition:opacity 200ms; transition:opacity 200ms; } #fileList tr td.filename>input[type="checkbox"]:hover:first-child { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; filter:alpha(opacity=80); opacity:.8; } #fileList tr td.filename>input[type="checkbox"]:checked:first-child { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; } -#fileList tr td.filename { -webkit-transition:background-image 500ms; -moz-transition:background-image 500ms; -o-transition:background-image 500ms; transition:background-image 500ms; position:relative; } +#fileList tr td.filename { + position:relative; width:100%; + -webkit-transition:background-image 500ms; -moz-transition:background-image 500ms; -o-transition:background-image 500ms; transition:background-image 500ms; +} #select_all { float:left; margin:.3em 0.6em 0 .5em; } #uploadsize-message,#delete-confirm { display:none; } -.fileactions { position:relative; top:.3em; font-size:.8em; float:right; } + +/* File actions */ +.fileactions { + position:absolute; top:.6em; right:0; + font-size:.8em; +} +#fileList .name { position:relative; /* Firefox needs to explicitly have this default set … */ } +#fileList tr:hover .fileactions { /* background to distinguish when overlaying with file names */ + background:rgba(248,248,248,.9); box-shadow:-5px 0 7px rgba(248,248,248,.9); +} +#fileList tr.selected:hover .fileactions { /* slightly darker color for selected rows */ + background:rgba(238,238,238,.9); box-shadow:-5px 0 7px rgba(238,238,238,.9); +} #fileList .fileactions a.action img { position:relative; top:.2em; } #fileList a.action { display:inline; margin:-.5em 0; padding:1em .5em 1em .5em !important; } a.action.delete { float:right; } diff --git a/apps/files/download.php b/apps/files/download.php index dd356b27e9..ddd23df412 100644 --- a/apps/files/download.php +++ b/apps/files/download.php @@ -40,7 +40,12 @@ if(!\OC\Files\Filesystem::file_exists($filename)) { $ftype=\OC\Files\Filesystem::getMimeType( $filename ); header('Content-Type:'.$ftype); -header('Content-Disposition: attachment; filename="'.basename($filename).'"'); +if ( preg_match( "/MSIE/", $_SERVER["HTTP_USER_AGENT"] ) ) { + header( 'Content-Disposition: attachment; filename="' . rawurlencode( basename($filename) ) . '"' ); +} else { + header( 'Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode( basename($filename) ) + . '; filename="' . rawurlencode( basename($filename) ) . '"' ); +} OCP\Response::disableCaching(); header('Content-Length: '.\OC\Files\Filesystem::filesize($filename)); diff --git a/apps/files/index.php b/apps/files/index.php index 173cef791d..993d8b4dcf 100644 --- a/apps/files/index.php +++ b/apps/files/index.php @@ -1,45 +1,43 @@ . -* -*/ + * ownCloud - ajax frontend + * + * @author Robin Appelman + * @copyright 2010 Robin Appelman icewind1991@gmail.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 . + * + */ // Check if we are a user OCP\User::checkLoggedIn(); // Load the files we need -OCP\Util::addStyle( 'files', 'files' ); -OCP\Util::addscript( 'files', 'jquery.iframe-transport' ); -OCP\Util::addscript( 'files', 'jquery.fileupload' ); -OCP\Util::addscript( 'files', 'files' ); -OCP\Util::addscript( 'files', 'filelist' ); -OCP\Util::addscript( 'files', 'fileactions' ); -OCP\Util::addscript( 'files', 'keyboardshortcuts' ); -if(!isset($_SESSION['timezone'])) { - OCP\Util::addscript( 'files', 'timezone' ); -} -OCP\App::setActiveNavigationEntry( 'files_index' ); +OCP\Util::addStyle('files', 'files'); +OCP\Util::addscript('files', 'jquery.iframe-transport'); +OCP\Util::addscript('files', 'jquery.fileupload'); +OCP\Util::addscript('files', 'files'); +OCP\Util::addscript('files', 'filelist'); +OCP\Util::addscript('files', 'fileactions'); +OCP\Util::addscript('files', 'keyboardshortcuts'); + +OCP\App::setActiveNavigationEntry('files_index'); // Load the files -$dir = isset( $_GET['dir'] ) ? stripslashes($_GET['dir']) : ''; +$dir = isset($_GET['dir']) ? stripslashes($_GET['dir']) : ''; // Redirect if directory does not exist -if(!\OC\Files\Filesystem::is_dir($dir.'/')) { +if(!\OC\Files\Filesystem::is_dir($dir . '/')) { header('Location: '.$_SERVER['SCRIPT_NAME'].''); exit(); } @@ -57,9 +55,9 @@ function fileCmp($a, $b) { $files = array(); foreach( \OC\Files\Filesystem::getDirectoryContent( $dir ) as $i ) { $i['date'] = OCP\Util::formatDate($i['mtime'] ); - if($i['type']=='file') { - $fileinfo=pathinfo($i['name']); - $i['basename']=$fileinfo['filename']; + if($i['type'] == 'file') { + $fileinfo = pathinfo($i['name']); + $i['basename'] = $fileinfo['filename']; if (!empty($fileinfo['extension'])) { $i['extension']='.' . $fileinfo['extension']; } @@ -78,47 +76,47 @@ $breadcrumb = array(); $pathtohere = ''; foreach( explode( '/', $dir ) as $i ) { if( $i != '' ) { - $pathtohere .= '/'.str_replace('+','%20', urlencode($i)); + $pathtohere .= '/' . $i; $breadcrumb[] = array( 'dir' => $pathtohere, 'name' => $i ); } } // make breadcrumb und filelist markup -$list = new OCP\Template( 'files', 'part.list', '' ); -$list->assign( 'files', $files, false ); -$list->assign( 'baseURL', OCP\Util::linkTo('files', 'index.php').'?dir=', false); -$list->assign( 'downloadURL', OCP\Util::linkTo('files', 'download.php').'?file=', false); -$breadcrumbNav = new OCP\Template( 'files', 'part.breadcrumb', '' ); -$breadcrumbNav->assign( 'breadcrumb', $breadcrumb, false ); -$breadcrumbNav->assign( 'baseURL', OCP\Util::linkTo('files', 'index.php').'?dir=', false); +$list = new OCP\Template('files', 'part.list', ''); +$list->assign('files', $files, false); +$list->assign('baseURL', OCP\Util::linkTo('files', 'index.php') . '?dir=', false); +$list->assign('downloadURL', OCP\Util::linkTo('files', 'download.php') . '?file=', false); +$breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', ''); +$breadcrumbNav->assign('breadcrumb', $breadcrumb, false); +$breadcrumbNav->assign('baseURL', OCP\Util::linkTo('files', 'index.php') . '?dir=', false); $upload_max_filesize = OCP\Util::computerFileSize(ini_get('upload_max_filesize')); $post_max_size = OCP\Util::computerFileSize(ini_get('post_max_size')); $maxUploadFilesize = min($upload_max_filesize, $post_max_size); -$freeSpace=\OC\Files\Filesystem::free_space($dir); -$freeSpace=max($freeSpace,0); +$freeSpace = \OC\Files\Filesystem::free_space($dir); +$freeSpace = max($freeSpace,0); $maxUploadFilesize = min($maxUploadFilesize, $freeSpace); $permissions = OCP\PERMISSION_READ; -if (OC_Filesystem::isUpdatable($dir.'/')) { - $permissions |= OCP\PERMISSION_UPDATE; +if (\OC\Files\Filesystem::isUpdatable($dir . '/')) { + $permissions |= OCP\PERMISSION_UPDATE; } -if (OC_Filesystem::isDeletable($dir.'/')) { - $permissions |= OCP\PERMISSION_DELETE; +if (\OC\Files\Filesystem::isDeletable($dir . '/')) { + $permissions |= OCP\PERMISSION_DELETE; } -if (OC_Filesystem::isSharable($dir.'/')) { - $permissions |= OCP\PERMISSION_SHARE; +if (\OC\Files\Filesystem::isSharable($dir . '/')) { + $permissions |= OCP\PERMISSION_SHARE; } $tmpl = new OCP\Template( 'files', 'index', 'user' ); $tmpl->assign( 'fileList', $list->fetchPage(), false ); $tmpl->assign( 'breadcrumb', $breadcrumbNav->fetchPage(), false ); $tmpl->assign( 'dir', \OC\Files\Filesystem::normalizePath($dir)); -$tmpl->assign( 'isCreatable', \OC\Files\Filesystem::isCreatable($dir.'/')); +$tmpl->assign( 'isCreatable', \OC\Files\Filesystem::isCreatable($dir . '/')); $tmpl->assign('permissions', $permissions); -$tmpl->assign( 'files', $files ); -$tmpl->assign( 'uploadMaxFilesize', $maxUploadFilesize); -$tmpl->assign( 'uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize)); -$tmpl->assign( 'allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true))); +$tmpl->assign('files', $files); +$tmpl->assign('uploadMaxFilesize', $maxUploadFilesize); +$tmpl->assign('uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize)); +$tmpl->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true))); $tmpl->printPage(); diff --git a/apps/files/js/files.js b/apps/files/js/files.js index a1f94ad178..7fb451b9a0 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -203,6 +203,9 @@ $(document).ready(function() { var files = data.files; var totalSize=0; if(files){ + if (FileList.lastAction) { + FileList.lastAction(); + } for(var i=0;ispan.name').text(t('files','Name')); $('#headerSize').text(t('files','Size')); $('#modified').text(t('files','Modified')); - $('th').removeClass('multiselect'); + $('table').removeClass('multiselect'); $('.selectedActions').hide(); - $('thead').removeClass('fixed'); - $('#headerName').css('width','auto'); - $('#headerSize').css('width','auto'); - $('#headerDate').css('width','auto'); - $('table').css('padding-top','0'); - }else{ - var width={name:$('#headerName').css('width'),size:$('#headerSize').css('width'),date:$('#headerDate').css('width')}; - $('#headerName').css('width',width.name); - $('#headerSize').css('width',width.size); - $('#headerDate').css('width',width.date); + } + else { $('.selectedActions').show(); var totalSize=0; for(var i=0;ispan.name').text(selection); $('#modified').text(''); - $('th').addClass('multiselect'); + $('table').addClass('multiselect'); } } diff --git a/apps/files/js/keyboardshortcuts.js b/apps/files/js/keyboardshortcuts.js index 562755f55b..cc2b5d4213 100644 --- a/apps/files/js/keyboardshortcuts.js +++ b/apps/files/js/keyboardshortcuts.js @@ -127,6 +127,9 @@ var Files = Files || {}; } Files.bindKeyboardShortcuts = function(document, $) { $(document).keydown(function(event) { //check for modifier keys + if(!$(event.target).is('body')) { + return; + } var preventDefault = false; if ($.inArray(event.keyCode, keys) === -1) keys.push(event.keyCode); if ( diff --git a/apps/files/js/timezone.js b/apps/files/js/timezone.js deleted file mode 100644 index 4749417199..0000000000 --- a/apps/files/js/timezone.js +++ /dev/null @@ -1,12 +0,0 @@ -//send the clients time zone to the server -$(document).ready(function() { - var visitortimezone = (-new Date().getTimezoneOffset()/60); - $.ajax({ - type: "GET", - url: OC.filePath('files', 'ajax', 'timezone.php'), - data: 'time='+ visitortimezone, - success: function(){ - location.reload(); - } - }); -}); \ No newline at end of file diff --git a/apps/files/l10n/da.php b/apps/files/l10n/da.php index 24652622c6..05404d27af 100644 --- a/apps/files/l10n/da.php +++ b/apps/files/l10n/da.php @@ -1,5 +1,6 @@ "Der er ingen fejl, filen blev uploadet med success", +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Den uploadede fil overstiger upload_max_filesize direktivet i php.ini", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Den uploadede fil overskrider MAX_FILE_SIZE -direktivet som er specificeret i HTML-formularen", "The uploaded file was only partially uploaded" => "Den uploadede file blev kun delvist uploadet", "No file was uploaded" => "Ingen fil blev uploadet", @@ -18,6 +19,7 @@ "replaced {new_name} with {old_name}" => "erstattede {new_name} med {old_name}", "unshared {files}" => "ikke delte {files}", "deleted {files}" => "slettede {files}", +"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Ugyldigt navn, '\\', '/', '<', '>', ':' | '?', '\"', '', og '*' er ikke tilladt.", "generating ZIP-file, it may take some time." => "genererer ZIP-fil, det kan tage lidt tid.", "Unable to upload your file as it is a directory or has 0 bytes" => "Kunne ikke uploade din fil, da det enten er en mappe eller er tom", "Upload Error" => "Fejl ved upload", @@ -27,6 +29,7 @@ "{count} files uploading" => "{count} filer uploades", "Upload cancelled." => "Upload afbrudt.", "File upload is in progress. Leaving the page now will cancel the upload." => "Fil upload kører. Hvis du forlader siden nu, vil uploadet blive annuleret.", +"Invalid folder name. Usage of \"Shared\" is reserved by Owncloud" => "Ugyldigt mappenavn. Brug af \"Shared\" er forbeholdt Owncloud", "{count} files scanned" => "{count} filer skannet", "error while scanning" => "fejl under scanning", "Name" => "Navn", @@ -47,6 +50,7 @@ "New" => "Ny", "Text file" => "Tekstfil", "Folder" => "Mappe", +"From link" => "Fra link", "Upload" => "Upload", "Cancel upload" => "Fortryd upload", "Nothing in here. Upload something!" => "Her er tomt. Upload noget!", diff --git a/apps/files/l10n/mk.php b/apps/files/l10n/mk.php index c47fdbdbf4..1d22746156 100644 --- a/apps/files/l10n/mk.php +++ b/apps/files/l10n/mk.php @@ -1,21 +1,44 @@ "Нема грешка, датотеката беше подигната успешно", +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Подигнатата датотека ја надминува upload_max_filesize директивата во php.ini:", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Подигнатата датотеката ја надминува MAX_FILE_SIZE директивата која беше поставена во HTML формата", "The uploaded file was only partially uploaded" => "Датотеката беше само делумно подигната.", "No file was uploaded" => "Не беше подигната датотека", "Missing a temporary folder" => "Не постои привремена папка", "Failed to write to disk" => "Неуспеав да запишам на диск", "Files" => "Датотеки", +"Unshare" => "Не споделувај", "Delete" => "Избриши", +"Rename" => "Преименувај", +"{new_name} already exists" => "{new_name} веќе постои", +"replace" => "замени", +"suggest name" => "предложи име", +"cancel" => "откажи", +"replaced {new_name}" => "земенета {new_name}", +"undo" => "врати", +"replaced {new_name} with {old_name}" => "заменета {new_name} со {old_name}", +"unshared {files}" => "без споделување {files}", +"deleted {files}" => "избришани {files}", +"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Неправилно име. , '\\', '/', '<', '>', ':', '\"', '|', '?' и '*' не се дозволени.", "generating ZIP-file, it may take some time." => "Се генерира ZIP фајлот, ќе треба извесно време.", "Unable to upload your file as it is a directory or has 0 bytes" => "Не може да се преземе вашата датотека бидејќи фолдерот во кој се наоѓа фајлот има големина од 0 бајти", "Upload Error" => "Грешка при преземање", "Close" => "Затвои", "Pending" => "Чека", +"1 file uploading" => "1 датотека се подига", +"{count} files uploading" => "{count} датотеки се подигаат", "Upload cancelled." => "Преземањето е прекинато.", +"File upload is in progress. Leaving the page now will cancel the upload." => "Подигање на датотека е во тек. Напуштење на страницата ќе го прекине.", +"Invalid folder name. Usage of \"Shared\" is reserved by Owncloud" => "Неправилно име на папка. Користењето на „Shared“ е резервирано за Owncloud", +"{count} files scanned" => "{count} датотеки скенирани", +"error while scanning" => "грешка при скенирање", "Name" => "Име", "Size" => "Големина", "Modified" => "Променето", +"1 folder" => "1 папка", +"{count} folders" => "{count} папки", +"1 file" => "1 датотека", +"{count} files" => "{count} датотеки", "File handling" => "Ракување со датотеки", "Maximum upload size" => "Максимална големина за подигање", "max. possible: " => "макс. можно:", @@ -27,6 +50,7 @@ "New" => "Ново", "Text file" => "Текстуална датотека", "Folder" => "Папка", +"From link" => "Од врска", "Upload" => "Подигни", "Cancel upload" => "Откажи прикачување", "Nothing in here. Upload something!" => "Тука нема ништо. Снимете нешто!", diff --git a/apps/files/l10n/ru_RU.php b/apps/files/l10n/ru_RU.php index 5a6c032ed9..bb701aac00 100644 --- a/apps/files/l10n/ru_RU.php +++ b/apps/files/l10n/ru_RU.php @@ -1,5 +1,6 @@ "Ошибка отсутствует, файл загружен успешно.", +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Размер загружаемого файла превышает upload_max_filesize директиву в php.ini:", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Размер загруженного", "The uploaded file was only partially uploaded" => "Загружаемый файл был загружен частично", "No file was uploaded" => "Файл не был загружен", diff --git a/apps/files/l10n/th_TH.php b/apps/files/l10n/th_TH.php index 343138ba12..bad817ab00 100644 --- a/apps/files/l10n/th_TH.php +++ b/apps/files/l10n/th_TH.php @@ -1,5 +1,6 @@ "ไม่มีข้อผิดพลาดใดๆ ไฟล์ถูกอัพโหลดเรียบร้อยแล้ว", +"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "ขนาดไฟล์ที่อัพโหลดมีขนาดเกิน upload_max_filesize ที่ระบุไว้ใน php.ini", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "ไฟล์ที่อัพโหลดมีขนาดเกินคำสั่ง MAX_FILE_SIZE ที่ระบุเอาไว้ในรูปแบบคำสั่งในภาษา HTML", "The uploaded file was only partially uploaded" => "ไฟล์ที่อัพโหลดยังไม่ได้ถูกอัพโหลดอย่างสมบูรณ์", "No file was uploaded" => "ยังไม่มีไฟล์ที่ถูกอัพโหลด", diff --git a/apps/files/templates/admin.php b/apps/files/templates/admin.php index 66fec4cd53..0de12edcba 100644 --- a/apps/files/templates/admin.php +++ b/apps/files/templates/admin.php @@ -15,11 +15,11 @@ ' title="t( '0 is unlimited' ); ?>" - disabled="disabled" /> -
+ disabled="disabled" />
+ t( 'Maximum input size for ZIP files' ); ?>
- \ No newline at end of file + diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php index bd34c9a76d..edf048c7e1 100644 --- a/apps/files/templates/index.php +++ b/apps/files/templates/index.php @@ -5,7 +5,7 @@
t('New');?> -
-
- t('Desktop and Mobile Syncing Clients');?> - t('Download');?> -
+
+ t('Clients');?> + t('Download Desktop Clients');?> + t('Download Android Client');?> + t('Download iOS Client');?> +
+ t('Password');?>
t('Your password was changed');?>
t('Unable to change your password');?>
- +
- + t('Email');?>
t('Fill in an email address to enable password recovery');?>
@@ -35,7 +38,7 @@
- + t('Language');?>