summaryrefslogtreecommitdiffstats
path: root/files
diff options
context:
space:
mode:
authorJakob Sack <kde@jakobsack.de>2011-07-29 20:42:24 +0200
committerJakob Sack <kde@jakobsack.de>2011-07-29 20:42:24 +0200
commit2bfad189e7e9c8ea78e4b5f78c9e779074dd991c (patch)
tree697204517c95647e382a4723545ade3950420913 /files
parente69079f9354464d21f31ae8b6d9e47988ba22fb4 (diff)
parentd12d08e2f3553b06df6371535f971c9f193bd388 (diff)
downloadnextcloud-server-2bfad189e7e9c8ea78e4b5f78c9e779074dd991c.tar.gz
nextcloud-server-2bfad189e7e9c8ea78e4b5f78c9e779074dd991c.zip
Merge branch 'master' of git://anongit.kde.org/owncloud into autoload
Conflicts: lib/base.php lib/filestorage.php
Diffstat (limited to 'files')
-rw-r--r--files/ajax/rename.php2
-rw-r--r--files/css/files.css159
-rw-r--r--files/img/drop-arrow.pngbin2899 -> 0 bytes
-rw-r--r--files/js/fileactions.js100
-rw-r--r--files/js/filelist.js92
-rw-r--r--files/js/files.js339
-rw-r--r--files/templates/admin.php8
-rw-r--r--files/templates/index.php39
-rw-r--r--files/templates/part.breadcrumb.php5
-rw-r--r--files/templates/part.list.php22
10 files changed, 478 insertions, 288 deletions
diff --git a/files/ajax/rename.php b/files/ajax/rename.php
index 65763fceb94..7554aa0dd62 100644
--- a/files/ajax/rename.php
+++ b/files/ajax/rename.php
@@ -1,7 +1,7 @@
<?php
// Init owncloud
-require_once('../lib/base.php');
+require_once('../../lib/base.php');
// We send json data
header( "Content-Type: application/jsonrequest" );
diff --git a/files/css/files.css b/files/css/files.css
index f4da6fae98c..50b61a488d1 100644
--- a/files/css/files.css
+++ b/files/css/files.css
@@ -1,121 +1,48 @@
/* FILE MENU */
-
-#file_menu
-{
- display: none;
- position: absolute;
- right:0px;
- background-color: #EEE;
-}
-
-#file_menu ul
-{
- list-style-type: none;
-}
-
-#file_menu li a
-{
- display: block;
- padding: 0.5em 5em 0.5em 2em;
- text-decoration: none;
-}
-
-.file_upload_form, #file_newfolder_form {
- display: inline;
- margin-left:3em;
-}
-
-#fileSelector, #file_upload_submit, #file_newfolder_submit {
- display: none;
-}
-
-.file_upload_filename, #file_newfolder_name {
- background-repeat: no-repeat;
- background-position: 0.5em 0;
- padding-left: 2em;
-}
-
-.file_upload_filename {
- background-image:url(../img/file.png); font-weight:bold;
-}
-.file_upload_start {opacity:0;filter: alpha(opacity = 0);}
-
-#file_newfolder_name {
- background-image:url(../img/folder.png); font-weight:bold;
- width: 14em;
-}
-
-.file_upload_start, .file_upload_filename{
- position:absolute;
- top:0px;
- left:0px;
- width:30ex;
- font-size: 0.9em;
-}
-
-.file_upload_wrapper{
- position:relative;
- top:-1.2em;
- left:-2em;
- display: -moz-inline-box; /* fallback for older firefox versions*/
- display: inline-block;
- width:30ex;
-}
-
-#file_newfolder_submit, #file_upload_submit {
- width: 3em;
-}
-
-.file_upload_target {
- display: none;
-}
+.actions { padding:.6em; float:right; margin-right:16em; }
+#file_menu { right:0px; position:absolute; top:0; }
+#file_menu a { display:block; float:left; background-image:none; text-decoration:none; }
+.file_upload_form, #file_newfolder_form { display:inline; }
+#fileSelector, #file_upload_submit, #file_newfolder_submit { display:none; }
+.file_upload_filename, #file_newfolder_name { background-repeat:no-repeat; background-position:0.5em 0; padding-left:2em; }
+.file_upload_filename { background-image:url("../img/file.png"); font-weight:bold; }.file_upload_start { opacity:0;filter:alpha(opacity = 0); }
+
+#file_newfolder_name { background-image:url("../img/folder.png"); font-weight:bold; width:11em; }
+.file_upload_start, .file_upload_filename { position:absolute; top:0px; left:0px; width:11em; font-size:0.9em; }
+.file_upload_wrapper { position:relative; top:-1.2em; left:-2em; display:-moz-inline-box; /* fallback for older firefox versions*/ display:inline-block; width:12em; }
+#file_newfolder_submit, #file_upload_submit { width:3em; }
+.file_upload_target { display:none; }
/* FILE TABLE */
-
-table {
- width: 90%;
-}
-
+span#emptyfolder { position:absolute; margin:10em 0 0 10em; font-size:1.5em; font-weight:bold; color:#888; text-shadow:#fff 0 1px 0; }
+table { position:relative; top:37px; width:100%; }
tbody tr:hover, tbody tr:active, tbody tr.selected { background-color:#eee; }
tbody a { color:#000; }
-
-table td.filesize, table td.date
-{
- width: 5em;
- padding: 0.5em 1em;
- text-align: right;
-}
-
-table td.date
-{
- width: 11em;
-}
-
-table td.selection, table th.selection, table td.fileaction
-{
- width: 2em;
- text-align: center;
-}
-
-table td.filename a
-{
- display: block;
- background-image: url(../img/file.png);
- text-decoration: none;
-}
-
-.dropArrow{
- height:16px;
- width:16px;
- display: -moz-inline-box; /* fallback for older firefox versions*/
- display: inline-block;
- background-image:url('../img/drop-arrow.png');
-}
-
-span.extention{
- color:#999;
-}
-
-div.crumb{
- float:left;
-} \ No newline at end of file
+span.extention, td.date { color:#999; }
+div.crumb { float:left; display:block; background:no-repeat right 0; font-weight:bold; padding:8px 1.5em 0 1em; height:28px; /*36-8*/ }
+table tr.mouseOver td { background-color:#eee; }
+table th { padding:.5em; height:2em; }
+table th .name { float:left; margin-left:.5em; }
+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; }
+table th#headerSize, table td.filesize { width:5em; padding:0 1em; text-align:right; }
+table th#headerDate, table td.date { width:11em; padding:0 .1em 0 1em; text-align:left; }
+table td.selection, table th.selection, table td.fileaction { width:2em; text-align:center; }
+table td.filename a.name { display:block; background-image:url('../img/file.png'); height:1.5em; vertical-align:middle; }
+table tr[data-type="dir"] td.filename a.name {font-weight:bold; }
+table td.filename a.name input, table td.filename a.name form { width:100%; cursor:text }
+table td.filename a, table td.login, table td.logout, table td.download, table td.upload, table td.create, table td.delete { padding:.2em .5em .5em 3em; background-position:1em .5em; background-repeat:no-repeat; }
+table td.filename .nametext, .modified { float:left; padding:.3em 0; }
+table td.filename .nametext { width:80%; }
+table td.filename form { float:left; font-size:.85em; }
+#fileList tr input[type=checkbox] { display:none; float:left; margin:.7em 0 0 1em; /* bigger clickable area doesn’t work in FF width:2.8em; height:2.4em;*/ }
+#fileList tr input[type=checkbox]:checked, #fileList tr:hover input[type=checkbox] { display:inline; }
+#fileList tr.selected td.filename a, #fileList tr:hover td.filename a { background-image:none !important }
+#select_all { float:left; margin:0.2em; margin-left:0.6em; }
+#uploadsize-message,#delete-confirm { display:none; }
+.selectedActions a, a.file_action { float:right; display:inline; margin:0 .5em; padding:.3em .3em 0 .3em !important; }
+.selectedActions { display:none; }
+.selectedActions a:hover, a.file_action:hover { background:#fff; -moz-box-shadow:0 0 10px #fff; -webkit-box-shadow:0 0 10px #fff; box-shadow:0 0 10px #fff; -moz-border-radius:10px; -webkit-border-radius:10px; border-radius:10px; }
+
+/* add breadcrumb divider to the File item in navigation panel */
+#plugins li:first-child { background-position:15.7em 0px; background-repeat:no-repeat; background-image:url("/owncloud/core/img/breadcrumb-divider-start.png"); width:15.7em; padding-right:11px; }
diff --git a/files/img/drop-arrow.png b/files/img/drop-arrow.png
deleted file mode 100644
index 315395d5d42..00000000000
--- a/files/img/drop-arrow.png
+++ /dev/null
Binary files differ
diff --git a/files/js/fileactions.js b/files/js/fileactions.js
index b683dc0cd3a..359e54dda3c 100644
--- a/files/js/fileactions.js
+++ b/files/js/fileactions.js
@@ -1,11 +1,14 @@
FileActions={
actions:{},
defaults:{},
- register:function(mime,name,action){
+ icons:{},
+ currentFile:null,
+ register:function(mime,name,icon,action){
if(!FileActions.actions[mime]){
FileActions.actions[mime]={};
}
FileActions.actions[mime][name]=action;
+ FileActions.icons[name]=icon;
},
setDefault:function(mime,name){
FileActions.defaults[mime]=name;
@@ -49,56 +52,105 @@ FileActions={
return actions[name];
},
display:function(parent){
- $('#file_menu ul').empty();
- parent.append($('#file_menu'));
+ FileActions.currentFile=parent;
var actions=FileActions.get(FileActions.getCurrentMimeType(),FileActions.getCurrentType());
+ var file=FileActions.getCurrentFile();
+ if($('tr[data-file="'+file+'"]').data('renaming')){
+ return;
+ }
+ var defaultAction=FileActions.getDefault(FileActions.getCurrentMimeType(),FileActions.getCurrentType());
for(name in actions){
- var html='<li><a href="" alt="'+name+'">'+name+'</a></li>';
+ if((name=='Download' || actions[name]!=defaultAction) && name!='Delete'){
+ var img=FileActions.icons[name];
+ var html='<a href="#" title="'+name+'" class="file_action"/>';
+ var element=$(html);
+ if(img){
+ element.append($('<img src="'+img+'"/>'));
+ }
+ element.data('action',name);
+ element.click(function(event){
+ event.stopPropagation();
+ event.preventDefault();
+ var action=actions[$(this).data('action')];
+ var currentFile=FileActions.getCurrentFile();
+ FileActions.hide();
+ action(currentFile);
+ });
+ parent.children('a.name').append(element);
+ }
+ }
+ if(actions['Delete']){
+ var img=FileActions.icons['Delete'];
+ var html='<a href="#" title="Delete" class="file_action"/>';
var element=$(html);
- element.data('action',name);
+ if(img){
+ element.append($('<img src="'+img+'"/>'));
+ }
+ element.data('action','Delete');
element.click(function(event){
+ event.stopPropagation();
event.preventDefault();
- $('#file_menu').slideToggle(250);
var action=actions[$(this).data('action')];
- $('#file_menu ul').empty();
- action(FileActions.getCurrentFile());
+ var currentFile=FileActions.getCurrentFile();
+ FileActions.hide();
+ action(currentFile);
});
- $('#file_menu>ul').append(element);
+ parent.parent().children().last().append(element);
}
- $('#file_menu').slideToggle(250);
return false;
},
+ hide:function(){
+ $('.file_action').remove();
+ },
getCurrentFile:function(){
- return $('#file_menu').parents('tr:first').attr('data-file');
+ return FileActions.currentFile.parent().attr('data-file');
},
getCurrentMimeType:function(){
- return $('#file_menu').parents('tr:first').attr('data-mime');
+ return FileActions.currentFile.parent().attr('data-mime');
},
getCurrentType:function(){
- return $('#file_menu').parents('tr:first').attr('data-type');
+ return FileActions.currentFile.parent().attr('data-type');
}
}
-FileActions.register('all','Download',function(filename){
+FileActions.register('all','Download',OC.imagePath('core','actions/download'),function(filename){
window.location='ajax/download.php?files='+filename+'&dir='+$('#dir').val();
});
-FileActions.register('all','Delete',function(filename){
- $.ajax({
- url: 'ajax/delete.php',
- data: "dir="+encodeURIComponent($('#dir').val())+"&file="+encodeURIComponent(filename),
- complete: function(data){
- boolOperationFinished(data, function(){
- FileList.remove(filename);
- });
+FileActions.register('all','Delete',OC.imagePath('core','actions/delete'),function(filename){
+ $( "#delete-confirm" ).dialog({
+ resizable: false,
+ height:200,
+ title:"Delete "+filename,
+ modal: true,
+ buttons: {
+ "Delete": function() {
+ $( this ).dialog( "close" );
+ $.ajax({
+ url: 'ajax/delete.php',
+ data: "dir="+encodeURIComponent($('#dir').val())+"&file="+encodeURIComponent(filename),
+ complete: function(data){
+ boolOperationFinished(data, function(){
+ FileList.remove(filename);
+ });
+ }
+ });
+ },
+ Cancel: function() {
+ $( this ).dialog( "close" );
+ }
}
});
});
+FileActions.register('all','Rename',OC.imagePath('core','actions/rename'),function(filename){
+ FileList.rename(filename);
+});
+
FileActions.setDefault('all','Download');
-FileActions.register('dir','Open',function(filename){
+FileActions.register('dir','Open','',function(filename){
window.location='index.php?dir='+$('#dir').val()+'/'+filename;
});
-FileActions.setDefault('dir','Open'); \ No newline at end of file
+FileActions.setDefault('dir','Open');
diff --git a/files/js/filelist.js b/files/js/filelist.js
index 467168df95d..c3a2522fb6a 100644
--- a/files/js/filelist.js
+++ b/files/js/filelist.js
@@ -4,12 +4,30 @@ FileList={
},
addFile:function(name,size,lastModified,loading){
var img=(loading)?'img/loading.gif':'img/file.png';
- var html='<tr data-file="'+name+'" data-type="file">';
- html+='<td class="selection"><input type="checkbox" /></td>';
- html+='<td class="filename"><a style="background-image:url('+img+')" href="download.php?file='+$('#dir').val()+'/'+name+'">'+name+'</a></td>';
- html+='<td class="filesize">'+size+'</td>';
- html+='<td class="date">'+lastModified+'</td>';
- html+='<td class="fileaction"><a href="" title="+" class="dropArrow"></a></td>';
+ var html='<tr data-file="'+name+'" data-type="file" data-size="'+size+'">';
+ if(name.indexOf('.')!=-1){
+ var basename=name.substr(0,name.indexOf('.'));
+ var extention=name.substr(name.indexOf('.'));
+ }else{
+ var basename=name;
+ var extention=false;
+ }
+ html+='<td class="filename"><input type="checkbox" />';
+ html+='<a class="name" style="background-image:url('+img+')" href="download.php?file='+$('#dir').val()+'/'+name+'"><span class="nametext">'+basename
+ if(extention){
+ html+='<span class="extention">'+extention+'</span>';
+ }
+ html+='</span></a></td>';
+ if(size!='Pending'){
+ simpleSize=simpleFileSize(size);
+ }else{
+ simpleSize='Pending';
+ }
+ sizeColor = Math.round(200-Math.pow((size/(1024*1024)),2));
+ lastModifiedTime=Math.round(lastModified.getTime() / 1000);
+ modifiedColor=Math.round((Math.round((new Date()).getTime() / 1000)-lastModifiedTime)/60/60/24*5);
+ html+='<td class="filesize" title="'+humanFileSize(size)+'" style="color:rgb('+sizeColor+','+sizeColor+','+sizeColor+')">'+simpleSize+'</td>';
+ html+='<td class="date" title="'+formatDate(lastModified)+'" style="color:rgb('+modifiedColor+','+modifiedColor+','+modifiedColor+')">'+relative_modified_date(lastModified.getTime() / 1000)+'</td>';
html+='</tr>';
FileList.insertElement(name,'file',$(html));
if(loading){
@@ -19,12 +37,18 @@ FileList={
}
},
addDir:function(name,size,lastModified){
- var html='<tr data-file="'+name+'" data-type="dir">';
- html+='<td class="selection"><input type="checkbox" /></td>';
- html+='<td class="filename"><a style="background-image:url(img/folder.png)" href="index.php?dir='+$('#dir').val()+'/'+name+'"><strong>'+name+'</strong></a></td>';
- html+='<td class="filesize">'+size+'</td>';
- html+='<td class="date">'+lastModified+'</td>';
- html+='<td class="fileaction"><a href="" title="+" class="dropArrow"></a></td>';
+ var html='<tr data-file="'+name+'" data-type="dir" data-size="'+size+'">';
+ html+='<td class="filename"><input type="checkbox" /><a class="name" style="background-image:url(img/folder.png)" href="index.php?dir='+$('#dir').val()+'/'+name+'">'+name+'</a></td>';
+ if(size!='Pending'){
+ simpleSize=simpleFileSize(size);
+ }else{
+ simpleSize='Pending';
+ }
+ sizeColor = Math.round(200-Math.pow((size/(1024*1024)),2));
+ lastModifiedTime=Math.round(lastModified.getTime() / 1000);
+ modifiedColor=Math.round((Math.round((new Date()).getTime() / 1000)-lastModifiedTime)/60/60/24*5);
+ html+='<td class="filesize" title="'+humanFileSize(size)+'" style="color:rgb('+sizeColor+','+sizeColor+','+sizeColor+')">'+simpleSize+'</td>';
+ html+='<td class="date" title="'+formatDate(lastModified)+'" style="color:rgb('+modifiedColor+','+modifiedColor+','+modifiedColor+')">'+relative_modified_date(lastModified.getTime() / 1000)+'</td>';
html+='</tr>';
FileList.insertElement(name,'dir',$(html));
@@ -72,10 +96,52 @@ FileList={
},
loadingDone:function(name){
$('tr[data-file="'+name+'"]').data('loading',false);
- $('tr[data-file="'+name+'"] td.filename a').attr('style','background-image:url(img/file.png');
+ var mime=$('tr[data-file="'+name+'"]').data('mime');
+ $('tr[data-file="'+name+'"] td.filename a').attr('style','background-image:url('+getMimeIcon(mime)+')');
$('tr[data-file="'+name+'"] td.filename').draggable(dragOptions);
},
isLoading:function(name){
return $('tr[data-file="'+name+'"]').data('loading');
+ },
+ rename:function(name){
+ var tr=$('tr[data-file="'+name+'"]');
+ tr.data('renaming',true);
+ var td=tr.children('td.filename');
+ var input=$('<input value='+name+' class="filename"></input>');
+ var form=$('<form action="#"></form>')
+ form.append(input);
+ td.children('a.name').text('');
+ td.children('a.name').append(form)
+ input.focus();
+ form.submit(function(event){
+ event.stopPropagation();
+ event.preventDefault();
+ var newname=input.val();
+ tr.data('renaming',false);
+ tr.attr('data-file',newname);
+ td.children('a.name').empty();
+ if(newname.indexOf('.')>0){
+ basename=newname.substr(0,newname.indexOf('.'));
+ }else{
+ basename=newname;
+ }
+ var span=$('<span class="nametext"></span>');
+ span.text(basename);
+ td.children('a.name').append(span);
+ if(newname.indexOf('.')>0){
+ span.append($('<span class="extention">'+newname.substr(newname.indexOf('.'))+'</span>'));
+ }
+ $.ajax({
+ url: 'ajax/rename.php',
+ data: "dir="+$('#dir').val()+"&newname="+encodeURIComponent(newname)+"&file="+encodeURIComponent(name)
+ });
+ });
+ form.click(function(event){
+ event.stopPropagation();
+ event.preventDefault();
+ });
+ input.blur(function(){
+ form.trigger('submit');
+ });
}
}
diff --git a/files/js/files.js b/files/js/files.js
index 7750842dd5a..be7e48aeeeb 100644
--- a/files/js/files.js
+++ b/files/js/files.js
@@ -4,45 +4,25 @@ $(document).ready(function() {
//drag/drop of files
$('#fileList tr td.filename').draggable(dragOptions);
$('#fileList tr[data-type="dir"] td.filename').droppable(folderDropOptions);
- $('div.crumb').droppable({
- drop: function( event, ui ) {
- var file=ui.draggable.text().trim();
- var target=$(this).attr('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){
- return;
- }
- $.ajax({
- url: 'ajax/move.php',
- data: "dir="+dir+"&file="+file+'&target='+target,
- complete: function(data){boolOperationFinished(data, function(){
- FileList.remove(file);
- });}
- });
- },
- tolerance: 'pointer'
- });
+ $('div.crumb').droppable(crumbDropOptions);
+ $('#plugins>ul>li:first-child').data('dir','');
+ $('#plugins>ul>li:first-child').droppable(crumbDropOptions);
// Sets the file-action buttons behaviour :
- $('td.fileaction a').live('click',function(event) {
- event.preventDefault();
- FileActions.display($(this).parent());
+ $('tr').live('mouseenter',function(event) {
+ FileActions.display($(this).children('td.filename'));
});
-
+ $('tr').live('mouseleave',function(event) {
+ FileActions.hide();
+ });
+
// Sets the file link behaviour :
$('td.filename a').live('click',function(event) {
event.preventDefault();
- var filename=$(this).parent().parent().attr('data-file');
+ var filename=$(this).parent().parent().data('file');
if(!FileList.isLoading(filename)){
- var mime=$(this).parent().parent().attr('data-mime');
- var type=$(this).parent().parent().attr('data-type');
+ var mime=$(this).parent().parent().data('mime');
+ var type=$(this).parent().parent().data('type');
var action=FileActions.getDefault(mime,type);
if(action){
action(filename);
@@ -54,24 +34,27 @@ $(document).ready(function() {
$('#select_all').click(function() {
if($(this).attr('checked')){
// Check all
- $('td.selection input:checkbox').attr('checked', true);
- $('td.selection input:checkbox').parent().parent().addClass('selected');
+ $('td.filename input:checkbox').attr('checked', true);
+ $('td.filename input:checkbox').parent().parent().addClass('selected');
}else{
// Uncheck all
- $('td.selection input:checkbox').attr('checked', false);
- $('td.selection input:checkbox').parent().parent().removeClass('selected');
+ $('td.filename input:checkbox').attr('checked', false);
+ $('td.filename input:checkbox').parent().parent().removeClass('selected');
}
+ procesSelection();
});
- $('td.selection input:checkbox').live('click',function() {
+ $('td.filename input:checkbox').live('click',function() {
+ var selectedCount=$('td.filename input:checkbox:checked').length;
$(this).parent().parent().toggleClass('selected');
if(!$(this).attr('checked')){
$('#select_all').attr('checked',false);
}else{
- if($('td.selection input:checkbox:checked').length==$('td.selection input:checkbox').length){
+ if(selectedCount==$('td.filename input:checkbox').length){
$('#select_all').attr('checked',true);
}
}
+ procesSelection();
});
$('#file_newfolder_form').submit(function(event) {
@@ -80,11 +63,12 @@ $(document).ready(function() {
url: 'ajax/newfolder.php',
data: "dir="+$('#dir').val()+"&foldername="+$('#file_newfolder_name').val(),
complete: function(data){boolOperationFinished(data, function(){
- var date=formatDate(new Date());
- FileList.addDir($('#file_newfolder_name').val(),'0 B',date)
+ var date=new Date();
+ FileList.addDir($('#file_newfolder_name').val(),0,date);
+ $('#file_newfolder_name').val('New Folder');
+ $('#file_newfolder_name').blur();
});}
});
- $('#file_newfolder_submit').fadeOut(250).trigger('vanish');
});
$('#file_newfolder_name').click(function(){
@@ -93,21 +77,7 @@ $(document).ready(function() {
}
});
- $('#file_newfolder_name').bind('keyup', adjustNewFolderSize);
-
- $('#file_newfolder_submit').bind('vanish', function() {
- $('#file_newfolder_name').bind('keyup', adjustNewFolderSize);
- unsplitSize($('#file_newfolder_name'),$('#file_newfolder_submit'));
- });
-
- $('#file_newfolder_name').focusout(function(){
- if($('#file_newfolder_name').val() == '') {
- $('#file_newfolder_form')[0].reset();
- $('#file_newfolder_submit').fadeOut(250).trigger('vanish');
- }
- });
-
- $('.download').live('click',function(event) {
+ $('.download').click('click',function(event) {
var files=getSelectedFiles('name').join(';');
//send the browser to the download location
@@ -117,18 +87,41 @@ $(document).ready(function() {
return false;
});
- $('.delete').live('click',function(event) {
- var files=getSelectedFiles('name').join(';');
-
- $.ajax({
- url: 'ajax/delete.php',
- data: "dir="+$('#dir').val()+"&files="+encodeURIComponent(files),
- complete: function(data){
- boolOperationFinished(data, function(){
- $('td.selection input:checkbox:checked').parent().parent().each(function(i,element){
- FileList.remove($(element).attr('data-file'));
+ $('.delete').click(function(event) {
+ var fileNames=getSelectedFiles('name');
+ var files=fileNames.join(';');
+ var lastFileName=fileNames.pop();
+ if(fileNames.length>0){
+ fileNames=fileNames.join(', ')+' and '+lastFileName;
+ }else{
+ fileNames=lastFileName;
+ }
+
+ $( "#delete-confirm" ).dialog({
+ resizable: false,
+ height:200,
+ modal: true,
+ title:"Delete "+fileNames,
+ buttons: {
+ "Delete": function() {
+ $( this ).dialog( "close" );
+ $.ajax({
+ url: 'ajax/delete.php',
+ data: "dir="+$('#dir').val()+"&files="+encodeURIComponent(files),
+ complete: function(data){
+ boolOperationFinished(data, function(){
+ var files=getSelectedFiles('name');
+ for(var i=0;i<files.length;i++){
+ FileList.remove(files[i]);
+ }
+ procesSelection();
+ });
+ }
});
- });
+ },
+ Cancel: function() {
+ $( this ).dialog( "close" );
+ }
}
});
@@ -140,46 +133,82 @@ $(document).ready(function() {
var uploadId=form.attr('data-upload-id');
var files=this.files;
var target=form.children('iframe');
- target.load(function(){
- var response=jQuery.parseJSON(target.contents().find('body').text());
- //set mimetype and if needed filesize
- if(response){
- for(var i=0;i<response.length;i++){
- var file=response[i];
- $('tr[data-file="'+file.name+'"]').attr('data-mime',file.mime);
- if(size=='Pending'){
- $('tr[data-file='+file.name+'] td.filesize').text(file.size);
+ var totalSize=0;
+ for(var i=0;i<files.length;i++){
+ totalSize+=files[i].size;
+ }
+ if(totalSize>$('#max_upload').val()){
+ $( "#uploadsize-message" ).dialog({
+ modal: true,
+ buttons: {
+ Close: function() {
+ $( this ).dialog( "close" );
}
- FileList.loadingDone(file.name);
}
+ });
+ }else{
+ target.load(function(){
+ var response=jQuery.parseJSON(target.contents().find('body').text());
+ //set mimetype and if needed filesize
+ if(response){
+ for(var i=0;i<response.length;i++){
+ var file=response[i];
+ $('tr[data-file="'+file.name+'"]').data('mime',file.mime);
+ if(size=='Pending'){
+ $('tr[data-file='+file.name+'] td.filesize').text(file.size);
+ }
+ FileList.loadingDone(file.name);
+ }
+ }
+ });
+ form.submit();
+ var date=new Date();
+ for(var i=0;i<files.length;i++){
+ if(files[i].size>0){
+ var size=files[i].size;
+ }else{
+ var size='Pending';
+ }
+ FileList.addFile(files[i].name,size,date,true);
}
- });
- form.submit();
- var date=new Date();
- var uploadTime=formatDate(date);
- for(var i=0;i<files.length;i++){
- if(files[i].size>0){
- var size=simpleFileSize(files[i].size);
- }else{
- var size='Pending';
- }
- FileList.addFile(files[i].name,size,uploadTime,true);
+
+ //clone the upload form and hide the new one to allow users to start a new upload while the old one is still uploading
+ var clone=form.clone();
+ uploadId++;
+ clone.attr('data-upload-id',uploadId);
+ clone.attr('target','file_upload_target_'+uploadId);
+ clone.children('iframe').attr('name','file_upload_target_'+uploadId)
+ clone.insertBefore(form);
+ form.hide();
}
-
- //clone the upload form and hide the new one to allow users to start a new upload while the old one is still uploading
- var clone=form.clone();
- uploadId++;
- clone.attr('data-upload-id',uploadId);
- clone.attr('target','file_upload_target_'+uploadId);
- clone.children('iframe').attr('name','file_upload_target_'+uploadId)
- clone.insertBefore(form);
- form.hide();
});
//add multiply file upload attribute to all browsers except konqueror (which crashes when it's used)
if(navigator.userAgent.search(/konqueror/i)==-1){
$('.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);
+ }
});
var adjustNewFolderSize = function() {
@@ -238,7 +267,7 @@ function humanFileSize(bytes){
}
function simpleFileSize(bytes) {
- mbytes = Math.round(bytes/(1024*1024),1);
+ mbytes = Math.round(bytes/(1024*1024/10))/10;
if(bytes == 0) { return '0'; }
else if(mbytes < 0.1) { return '< 0.1'; }
else if(mbytes > 1000) { return '> 1000'; }
@@ -275,29 +304,133 @@ var folderDropOptions={
});
}
}
+var crumbDropOptions={
+ drop: function( event, ui ) {
+ var file=ui.draggable.text().trim();
+ 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){
+ return;
+ }
+ $.ajax({
+ url: 'ajax/move.php',
+ data: "dir="+dir+"&file="+file+'&target='+target,
+ complete: function(data){boolOperationFinished(data, function(){
+ FileList.remove(file);
+ });}
+ });
+ },
+ tolerance: 'pointer'
+}
+
+function procesSelection(){
+ var selected=getSelectedFiles();
+ var selectedFiles=selected.filter(function(el){return el.type=='file'});
+ var selectedFolders=selected.filter(function(el){return el.type=='dir'});
+ if(selectedFiles.length==0 && selectedFolders.length==0){
+ $('#headerName>span.name').text('Name');
+ $('#headerSize').text('Size MB');
+ $('#modified').text('Modified');
+ $('th').css({background:'#fff',fontWeight:'normal'});
+ $('.selectedActions').hide();
+ }else{
+ $('.selectedActions').show();
+ var totalSize=0;
+ for(var i=0;i<selectedFiles.length;i++){
+ totalSize+=selectedFiles[i].size;
+ };
+ for(var i=0;i<selectedFolders.length;i++){
+ totalSize+=selectedFolders[i].size;
+ };
+ simpleSize=simpleFileSize(totalSize);
+ $('#headerSize').text(simpleSize+' MB');
+ $('#headerSize').attr('title',humanFileSize(totalSize));
+ var selection='';
+ if(selectedFolders.length>0){
+ if(selectedFolders.length==1){
+ selection+='1 folder';
+ }else{
+ selection+=selectedFolders.length+' folders';
+ }
+ if(selectedFiles.length>0){
+ selection+=' & ';
+ }
+ }
+ if(selectedFiles.length>0){
+ if(selectedFiles.length==1){
+ selection+='1 file';
+ }else{
+ selection+=selectedFiles.length+' files';
+ }
+ }
+ $('#headerName>span.name').text(selection);
+ $('#modified').text('');
+ $('th').css({background:'#ddd', fontWeight:'bold'});
+ }
+}
/**
* @brief get a list of selected files
* @param string property (option) the property of the file requested
* @return array
*
- * possible values for property: name, mime
+ * possible values for property: name, mime, size and type
* 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 getSelectedFiles(property){
- var elements=$('td.selection input:checkbox:checked').parent().parent();
+ var elements=$('td.filename input:checkbox:checked').parent().parent();
var files=[];
elements.each(function(i,element){
var file={
- name:$(element).attr('data-file'),
- mime:$(element).attr('data-mime')
+ name:$(element).data('file'),
+ mime:$(element).data('mime'),
+ type:$(element).data('type'),
+ size:$(element).data('size'),
};
if(property){
files.push(file[property]);
}else{
- files.push();
+ files.push(file);
}
});
return files;
+}
+
+function relative_modified_date(timestamp) {
+ var timediff = Math.round((new Date()).getTime() / 1000) - timestamp;
+ var diffminutes = Math.round(timediff/60);
+ var diffhours = Math.round(diffminutes/60);
+ var diffdays = Math.round(diffhours/24);
+ var diffmonths = Math.round(diffdays/31);
+ var diffyears = Math.round(diffdays/365);
+ if(timediff < 60) { return 'seconds ago'; }
+ else if(timediff < 120) { return '1 minute ago'; }
+ else if(timediff < 3600) { return diffminutes+' minutes ago'; }
+ //else if($timediff < 7200) { return '1 hour ago'; }
+ //else if($timediff < 86400) { return $diffhours.' hours ago'; }
+ else if(timediff < 86400) { return 'today'; }
+ else if(timediff < 172800) { return 'yesterday'; }
+ else if(timediff < 2678400) { return diffdays+' days ago'; }
+ else if(timediff < 5184000) { return 'last month'; }
+ //else if($timediff < 31556926) { return $diffmonths.' months ago'; }
+ else if(timediff < 31556926) { return 'months ago'; }
+ else if(timediff < 63113852) { return 'last year'; }
+ else { return diffyears+' years ago'; }
+}
+
+function getMimeIcon(mime){
+ mime=mime.substr(0,mime.indexOf('/'));
+ var knownMimes=['image','audio'];
+ if(knownMimes.indexOf(mime)==-1){
+ mime='file';
+ }
+ return OC.imagePath('core','mimetypes/'+mime+'.png');
} \ No newline at end of file
diff --git a/files/templates/admin.php b/files/templates/admin.php
index ff331f860e6..40880d34911 100644
--- a/files/templates/admin.php
+++ b/files/templates/admin.php
@@ -3,8 +3,11 @@
<form name="filesForm" action='#' method='post'>
<?php if($_['htaccessWorking']):?>
<label for="maxUploadSize"><?php echo $l->t( 'Maximum upload size' ); ?> </label><input name='maxUploadSize' id="maxUploadSize" value='<?php echo $_['uploadMaxFilesize'] ?>'/><br/>
+ <input type='submit' value='Save'/>
+ <?php else:?>
+ No settings currently available.
<?php endif;?>
- <input type="checkbox" name="publicEnable" id="publicEnable" /><label for="publicEnable"> <?php echo $l->t( 'Allow public folders' ); ?></label><br>
+<!-- <input type="checkbox" name="publicEnable" id="publicEnable" /><label for="publicEnable"> <?php echo $l->t( 'Allow public folders' ); ?></label><br>
<div style="padding-left: 20px">
<input type="radio" name="sharingaim" id="separated" /><label for="separated"> <?php echo $l->t( 'separated from webdav storage' ); ?></label><br>
@@ -13,6 +16,5 @@
</div>
<input type="checkbox" id="downloadShared" /><label for="downloadShared"> <?php echo $l->t( 'Allow downloading shared files' ); ?></label><br>
- <input type="checkbox" id="uploadShared" /><label for="uploadShared"> <?php echo $l->t( 'Allow uploading in shared directory' ); ?></label><br>
- <input type='submit' value='Save'/>
+ <input type="checkbox" id="uploadShared" /><label for="uploadShared"> <?php echo $l->t( 'Allow uploading in shared directory' ); ?></label><br>-->
</form>
diff --git a/files/templates/index.php b/files/templates/index.php
index efc92900637..df78cf0bb2d 100644
--- a/files/templates/index.php
+++ b/files/templates/index.php
@@ -1,4 +1,7 @@
<div class="controls">
+ <span class="nav">
+ <?php echo($_['breadcrumb']); ?>
+ </span>
<div class="actions">
<form data-upload-id='1' class="file_upload_form" action="ajax/upload.php" method="post" enctype="multipart/form-data" target="file_upload_target_1">
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $_["uploadMaxFilesize"] ?>" id="max_upload">
@@ -12,28 +15,25 @@
</form>
<form id="file_newfolder_form">
<input type="text" class="prettybutton" name="file_newfolder_name" id="file_newfolder_name" value="New Folder" />&nbsp;
- <input class="prettybutton" type="submit" id="file_newfolder_submit" name="file_newfolder_submit" value="OK" />
</form>
- <a href="" title="" class="download"><?php echo $l->t( 'Download' ); ?></a>
- <!--<a href="" title="" class="share"><?php echo $l->t( 'Share' ); ?></a>-->
- <a href="" title="" class="delete"><?php echo $l->t( 'Delete' ); ?></a>
</div>
<div id="file_action_panel">
</div>
</div>
-<span class="nav">
- <?php echo($_['breadcrumb']); ?>
-</span>
-
<table cellspacing="0">
<thead>
<tr>
- <th><input type="checkbox" id="select_all" /></th>
- <th><?php echo $l->t( 'Name' ); ?></th>
- <th><?php echo $l->t( 'Size (MB)' ); ?></th>
- <th><?php echo $l->t( 'Modified' ); ?></th>
- <th></th>
+ <th id='headerName'>
+ <input type="checkbox" id="select_all" />
+ <span class='name'><?php echo $l->t( 'Name' ); ?></span>
+ <span class='selectedActions'>
+ <a href="" title="Download" class="download"><img class='svg' alt="Download" src="../core/img/actions/download.svg" /></a>
+ <!--<a href="" title="" class="share">Share</a>-->
+ </span>
+ </th>
+ <th id='headerSize'><?php echo $l->t( 'Size MB' ); ?></th>
+ <th id='headerDate'><span id="modified"><?php echo $l->t( 'Modified' ); ?></span><span class='selectedActions'><a href="" title="Delete" class="delete"><img class='svg' alt="Delete" src="../core/img/actions/delete.svg" /></a></span></th>
</tr>
</thead>
<tbody id="fileList">
@@ -41,7 +41,14 @@
</tbody>
</table>
-<div id="file_menu">
- <ul>
- </ul>
+<div id="uploadsize-message" title="Upload too large">
+ <p>
+ <?php echo $l->t( 'The files you are trying to upload exceed the maximum size for file uploads on this server.' ); ?>
+ </p>
+</div>
+
+<div id="delete-confirm" title="">
+ <p><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span>These items will be permanently deleted and cannot be recovered. Are you sure?</p>
</div>
+
+<span id="file_menu"/>
diff --git a/files/templates/part.breadcrumb.php b/files/templates/part.breadcrumb.php
index 64e0a474728..20c436926c6 100644
--- a/files/templates/part.breadcrumb.php
+++ b/files/templates/part.breadcrumb.php
@@ -1,8 +1,5 @@
- <div class='crumb' data-dir='/'>
- <a href="<?php echo link_to("files", "index.php"); ?>"><img src="<?php echo image_path("", "actions/go-home.png"); ?>" alt="Root"/></a>
- </div>
<?php foreach($_["breadcrumb"] as $crumb): ?>
- <div class='crumb' data-dir='<?php echo $crumb["dir"];?>'>
+ <div class='crumb' data-dir='<?php echo $crumb["dir"];?>' style='background-image:url("<?php echo image_path('core','breadcrumb-divider.png');?>")'>
<a href="<?php echo link_to("files", "index.php?dir=".$crumb["dir"]); ?>"><?php echo htmlspecialchars($crumb["name"]); ?></a>
</div>
<?php endforeach; ?> \ No newline at end of file
diff --git a/files/templates/part.list.php b/files/templates/part.list.php
index d717f288851..d249455c55c 100644
--- a/files/templates/part.list.php
+++ b/files/templates/part.list.php
@@ -1,19 +1,25 @@
- <?php foreach($_['files'] as $file):
+ <?php if(!$_['files']) echo '<span id="emptyfolder">Nothing in here. Upload something!</span><style>.file_upload_filename { background-color:#ffc100; border:#dda600 1px solid; }</style>';
+ foreach($_['files'] as $file):
$simple_file_size = simple_file_size($file['size']);
- $simple_size_color = 200-intval(pow(($file['size']/(1024*1024)),2)); ?>
- <tr data-file="<?php echo $file['name'];?>" data-type="<?php echo ($file['type'] == 'dir')?'dir':'file'?>" data-mime="<?php echo $file['mime']?>">
- <td class="selection"><input type="checkbox" /></td>
+ $simple_size_color = 200-intval($file['size']/(1024*1024)*5);
+ if($simple_size_color<0) $simple_size_color = 0;
+ $relative_modified_date = relative_modified_date($file['mtime']);
+ $relative_date_color = round((time()-$file['mtime'])/60/60/24*7); //days ago
+ if($relative_date_color>200) $relative_date_color = 200; ?>
+ <tr data-file="<?php echo $file['name'];?>" data-type="<?php echo ($file['type'] == 'dir')?'dir':'file'?>" data-mime="<?php echo $file['mime']?>" data-size='<?php echo $file['size'];?>'>
<td class="filename">
- <a style="background-image:url(<?php if($file['type'] == 'dir') echo mimetype_icon('dir'); else echo mimetype_icon($file['mime']); ?>)" href="<?php if($file['type'] == 'dir') echo link_to('files', 'index.php?dir='.$file['directory'].'/'.$file['name']); else echo link_to('files', 'download.php?file='.$file['directory'].'/'.$file['name']); ?>" title="">
+ <input type="checkbox" />
+ <a class="name" style="background-image:url(<?php if($file['type'] == 'dir') echo mimetype_icon('dir'); else echo mimetype_icon($file['mime']); ?>)" href="<?php if($file['type'] == 'dir') echo link_to('files', 'index.php?dir='.$file['directory'].'/'.$file['name']); else echo link_to('files', 'download.php?file='.$file['directory'].'/'.$file['name']); ?>" title="">
+ <span class="nametext">
<?php if($file['type'] == 'dir'):?>
- <strong><?php echo htmlspecialchars($file['name']);?></strong>
+ <?php echo htmlspecialchars($file['name']);?>
<?php else:?>
<?php echo htmlspecialchars($file['basename']);?><span class='extention'><?php echo $file['extention'];?></span>
<?php endif;?>
+ </span>
</a>
</td>
<td class="filesize" title="<?php echo human_file_size($file['size']); ?>" style="color:rgb(<?php echo $simple_size_color.','.$simple_size_color.','.$simple_size_color ?>)"><?php echo $simple_file_size; ?></td>
- <td class="date"><?php echo $file['date']; ?></td>
- <td class="fileaction"><a href="" title="+" class="dropArrow"></a></td>
+ <td class="date"><span class="modified" title="<?php echo $file['date']; ?>" style="color:rgb(<?php echo $relative_date_color.','.$relative_date_color.','.$relative_date_color ?>)"><?php echo $relative_modified_date; ?></span></td>
</tr>
<?php endforeach; ?>