diff options
author | Jakob Sack <kde@jakobsack.de> | 2011-07-29 20:42:24 +0200 |
---|---|---|
committer | Jakob Sack <kde@jakobsack.de> | 2011-07-29 20:42:24 +0200 |
commit | 2bfad189e7e9c8ea78e4b5f78c9e779074dd991c (patch) | |
tree | 697204517c95647e382a4723545ade3950420913 /files | |
parent | e69079f9354464d21f31ae8b6d9e47988ba22fb4 (diff) | |
parent | d12d08e2f3553b06df6371535f971c9f193bd388 (diff) | |
download | nextcloud-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.php | 2 | ||||
-rw-r--r-- | files/css/files.css | 159 | ||||
-rw-r--r-- | files/img/drop-arrow.png | bin | 2899 -> 0 bytes | |||
-rw-r--r-- | files/js/fileactions.js | 100 | ||||
-rw-r--r-- | files/js/filelist.js | 92 | ||||
-rw-r--r-- | files/js/files.js | 339 | ||||
-rw-r--r-- | files/templates/admin.php | 8 | ||||
-rw-r--r-- | files/templates/index.php | 39 | ||||
-rw-r--r-- | files/templates/part.breadcrumb.php | 5 | ||||
-rw-r--r-- | files/templates/part.list.php | 22 |
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 Binary files differdeleted file mode 100644 index 315395d5d42..00000000000 --- a/files/img/drop-arrow.png +++ /dev/null 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" /> - <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; ?> |