From 8fb4dfd2eabcc267725d3c151d93644d6f28f010 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Fri, 23 Nov 2012 00:20:46 +0100 Subject: use background scanner --- apps/files/js/files.js | 38 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 23 deletions(-) (limited to 'apps/files/js/files.js') diff --git a/apps/files/js/files.js b/apps/files/js/files.js index bb80841055b..f95bfa2bf8f 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -602,12 +602,8 @@ $(document).ready(function() { }); }); - //check if we need to scan the filesystem - $.get(OC.filePath('files','ajax','scan.php'),{checkonly:'true'}, function(response) { - if(response.data.done){ - scanFiles(); - } - }, "json"); + //do a background scan if needed + scanFiles(); var lastWidth = 0; var breadcrumbs = []; @@ -676,27 +672,23 @@ $(document).ready(function() { resizeBreadcrumbs(true); }); -function scanFiles(force,dir){ +function scanFiles(force, dir){ if(!dir){ - dir=''; + dir = ''; } - force=!!force; //cast to bool - scanFiles.scanning=true; - $('#scanning-message').show(); - $('#fileList').remove(); - var scannerEventSource=new OC.EventSource(OC.filePath('files','ajax','scan.php'),{force:force,dir:dir}); - scanFiles.cancel=scannerEventSource.close.bind(scannerEventSource); - scannerEventSource.listen('scanning',function(data){ - $('#scan-count').text(t('files', '{count} files scanned', {count: data.count})); - $('#scan-current').text(data.file+'/'); + force = !!force; //cast to bool + scanFiles.scanning = true; + var scannerEventSource = new OC.EventSource(OC.filePath('files','ajax','scan.php'),{force:force,dir:dir}); + scanFiles.cancel = scannerEventSource.close.bind(scannerEventSource); + scannerEventSource.listen('count',function(count){ + console.log(count + 'files scanned') + }); + scannerEventSource.listen('folder',function(path){ + console.log('now scanning ' + path) }); - scannerEventSource.listen('success',function(success){ + scannerEventSource.listen('done',function(count){ scanFiles.scanning=false; - if(success){ - window.location.reload(); - }else{ - alert(t('files', 'error while scanning')); - } + console.log('done after ' + count + 'files'); }); } scanFiles.scanning=false; -- cgit v1.2.3 From 9d77317de82cb5ea3e3e8e2a3d13122134e0ca0c Mon Sep 17 00:00:00 2001 From: Björn Schießle Date: Tue, 15 Jan 2013 20:35:15 +0100 Subject: add trash button to web interface --- apps/files/css/files.css | 4 +++- apps/files/index.php | 1 + apps/files/js/files.js | 5 +++++ apps/files/templates/index.php | 6 +++++- 4 files changed, 14 insertions(+), 2 deletions(-) (limited to 'apps/files/js/files.js') diff --git a/apps/files/css/files.css b/apps/files/css/files.css index 0c97b009b88..f9406f58652 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -23,7 +23,9 @@ #new>ul>li>p { cursor:pointer; } #new>ul>li>form>input { padding:0.3em; margin:-0.3em; } -#upload { +#trash { height:17px; margin:0 0 0 1em; z-index:1010; position:absolute; right:13.5em; } + +#upload { height:27px; padding:0; margin-left:0.2em; overflow:hidden; } #upload a { diff --git a/apps/files/index.php b/apps/files/index.php index 1c4b7fbd497..8861be72283 100644 --- a/apps/files/index.php +++ b/apps/files/index.php @@ -100,6 +100,7 @@ $tmpl->assign('dir', OC_Filesystem::normalizePath($dir)); $tmpl->assign('isCreatable', OC_Filesystem::isCreatable($dir . '/')); $tmpl->assign('permissions', $permissions); $tmpl->assign('files', $files); +$tmpl->assign('trash', \OCP\App::isEnabled('files_trashbin')); $tmpl->assign('uploadMaxFilesize', $maxUploadFilesize); $tmpl->assign('uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize)); $tmpl->assign('allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true))); diff --git a/apps/files/js/files.js b/apps/files/js/files.js index c1abe205151..9f5169fea58 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -99,6 +99,11 @@ $(document).ready(function() { $(this).parent().children('#file_upload_start').trigger('click'); return false; }); + + // Show Trash bin + $('#trash a').live('click', function() { + console.log("hello"); + }); var lastChecked; diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php index 2e0772443f2..f6b4c29d5a2 100644 --- a/apps/files/templates/index.php +++ b/apps/files/templates/index.php @@ -35,6 +35,11 @@ + + +
-
-- cgit v1.2.3 From dfab3d3d7f0e42fde5de8a5438a97d6d428977a7 Mon Sep 17 00:00:00 2001 From: Björn Schießle Date: Fri, 18 Jan 2013 10:23:31 +0100 Subject: call the trash bin view --- apps/files/js/files.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'apps/files/js/files.js') diff --git a/apps/files/js/files.js b/apps/files/js/files.js index 9f5169fea58..795e065c0f3 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -100,9 +100,9 @@ $(document).ready(function() { return false; }); - // Show Trash bin + // Show trash bin $('#trash a').live('click', function() { - console.log("hello"); + window.location=OC.filePath('files_trashbin', '', 'index.php'); }); var lastChecked; -- cgit v1.2.3 From 0089b17749fa3d8bb0b7eaa7abf493e49b9a7e11 Mon Sep 17 00:00:00 2001 From: Jörn Friedrich Dreyer Date: Fri, 18 Jan 2013 21:49:38 +0100 Subject: add multselect dnd --- apps/files/css/files.css | 11 ++++ apps/files/js/files.js | 129 +++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 119 insertions(+), 21 deletions(-) (limited to 'apps/files/js/files.js') diff --git a/apps/files/css/files.css b/apps/files/css/files.css index e65f724f688..9ff550189db 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -122,3 +122,14 @@ a.action>img { max-height:16px; max-width:16px; vertical-align:text-bottom; } #scanning-message{ top:40%; left:40%; position:absolute; display:none; } div.crumb a{ padding:0.9em 0 0.7em 0; } + +table.dragshadow { + width:auto; +} +table.dragshadow td.filename { + padding-left:36px; + padding-right:16px; +} +table.dragshadow td.size { + padding-right:8px; +} \ No newline at end of file diff --git a/apps/files/js/files.js b/apps/files/js/files.js index c817d8431e2..00887784577 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -813,32 +813,102 @@ function updateBreadcrumb(breadcrumbHtml) { $('p.nav').empty().html(breadcrumbHtml); } -//options for file drag/dropp +var createDragShadow = function(event){ + //select dragged file + $(event.target).parents('tr').find('td input:first').prop('checked', true); + + var selectedFiles = getSelectedFiles(); + + //also update class when we dragged more than one file + if (selectedFiles.length > 1) { + $(event.target).parents('tr').addClass('selected'); + } + + // build dragshadow + var dragshadow = $('
'); + var tbody = $(''); + dragshadow.append(tbody); + + var dir=$('#dir').val(); + + $(selectedFiles).each(function(i,elem){ + var selected= $(event.target).parents('tr').hasClass('selected'); + var newtr = $('' + +''+elem.name+''+humanFileSize(elem.size)+'' + +''); + tbody.append(newtr); + if (elem.type === 'dir') { + newtr.find('td.filename').attr('style','background-image:url('+OC.imagePath('core', 'filetypes/folder.png')+')'); + } else { + getMimeIcon(elem.mime,function(path){ + newtr.find('td.filename').attr('style','background-image:url('+path+')'); + }); + } + }); + + return dragshadow; +} + +//options for file drag/drop var dragOptions={ - distance: 20, revert: 'invalid', opacity: 0.7, helper: 'clone', + revert: 'invalid', opacity: 0.7, zIndex: 100, appendTo: 'body', cursorAt: { left: -5, top: -5 }, + helper: createDragShadow, cursor: 'move', stop: function(event, ui) { $('#fileList tr td.filename').addClass('ui-draggable'); + //reset selection + $(ui.helper.find('tr')).each(function(i,row){ + var file = $(row).data('filename'); + var selected = $(row).data('selected'); + $('#fileList tr').filterAttr('data-file',file).find('td input:first').prop('checked',selected); + }); } -}; +} + var folderDropOptions={ drop: function( event, ui ) { - var file=ui.draggable.parent().data('file'); + //don't allow moving a file into a selected folder + if ($(event.target).parents('tr').find('td input:first').prop('checked') === true) { + return false; + } + var target=$(this).find('.nametext').text().trim(); - var dir=$('#dir').val(); - $.ajax({ - url: OC.filePath('files', 'ajax', 'move.php'), - data: "dir="+encodeURIComponent(dir)+"&file="+encodeURIComponent(file)+'&target='+encodeURIComponent(dir)+'/'+encodeURIComponent(target), - complete: function(data){boolOperationFinished(data, function(){ - var el = $('#fileList tr').filterAttr('data-file',file).find('td.filename'); - el.draggable('destroy'); - FileList.remove(file); - });} + + var files = ui.helper.find('tr'); + $(files).each(function(i,row){ + var dir = $(row).data('dir'); + var file = $(row).data('filename'); + $.get(OC.filePath('files', 'ajax', 'move.php'), { dir: dir, file: file, target: dir+'/'+target }, function(result) { + if (result) { + if (result.status === 'success') { + //recalculate folder size + var oldSize = $('#fileList tr').filterAttr('data-file',target).data('size'); + var newSize = oldSize + $('#fileList tr').filterAttr('data-file',file).data('size'); + $('#fileList tr').filterAttr('data-file',target).data('size', newSize); + $('#fileList tr').filterAttr('data-file',target).find('td.filesize').text(humanFileSize(newSize)); + + FileList.remove(file); + procesSelection(); + $('#notification').hide(); + } else { + $('#notification').hide(); + $('#notification').text(result.data.message); + $('#notification').fadeIn(); + } + } else { + OC.dialogs.alert(t('Error moving file')); + } + }); }); - } + //reset checkbox if we dragged a single file + if (files.length == 1) { + $(event.target).parents('tr').find('td input:first').prop('checked', $(event.target).parents('tr').hasClass('selected')); + } + }, + tolerance: 'pointer' } + var crumbDropOptions={ drop: function( event, ui ) { - var file=ui.draggable.parent().data('file'); var target=$(this).data('dir'); var dir=$('#dir').val(); while(dir.substr(0,1)=='/'){//remove extra leading /'s @@ -851,13 +921,30 @@ var crumbDropOptions={ if(target==dir || target+'/'==dir){ return; } - $.ajax({ - url: OC.filePath('files', 'ajax', 'move.php'), - data: "dir="+encodeURIComponent(dir)+"&file="+encodeURIComponent(file)+'&target='+encodeURIComponent(target), - complete: function(data){boolOperationFinished(data, function(){ - FileList.remove(file); - });} + var files = ui.helper.find('tr'); + $(files).each(function(i,row){ + var dir = $(row).data('dir'); + var file = $(row).data('filename'); + $.get(OC.filePath('files', 'ajax', 'move.php'), { dir: dir, file: file, target: target }, function(result) { + if (result) { + if (result.status === 'success') { + FileList.remove(file); + procesSelection(); + $('#notification').hide(); + } else { + $('#notification').hide(); + $('#notification').text(result.data.message); + $('#notification').fadeIn(); + } + } else { + OC.dialogs.alert(t('Error moving file')); + } + }); }); + //reset checkbox if we dragged a single file + if (files.length == 1) { + $(event.target).parents('tr').find('td input:first').prop('checked', $(event.target).parents('tr').hasClass('selected')); + } }, tolerance: 'pointer' } -- cgit v1.2.3 From 1d0ee61f3a136372b26e90fa35f726c77aa95416 Mon Sep 17 00:00:00 2001 From: Jörn Friedrich Dreyer Date: Fri, 18 Jan 2013 22:16:04 +0100 Subject: use post instead of get --- apps/files/ajax/move.php | 6 +++--- apps/files/js/files.js | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'apps/files/js/files.js') diff --git a/apps/files/ajax/move.php b/apps/files/ajax/move.php index 4ebc3f42d9f..74374c57b8b 100644 --- a/apps/files/ajax/move.php +++ b/apps/files/ajax/move.php @@ -7,9 +7,9 @@ OCP\JSON::checkLoggedIn(); OCP\JSON::callCheck(); // Get data -$dir = stripslashes($_GET["dir"]); -$file = stripslashes($_GET["file"]); -$target = stripslashes(rawurldecode($_GET["target"])); +$dir = stripslashes($_POST["dir"]); +$file = stripslashes($_POST["file"]); +$target = stripslashes(rawurldecode($_POST["target"])); $l=OC_L10N::get('files'); diff --git a/apps/files/js/files.js b/apps/files/js/files.js index 00887784577..34772915a62 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -877,7 +877,7 @@ var folderDropOptions={ $(files).each(function(i,row){ var dir = $(row).data('dir'); var file = $(row).data('filename'); - $.get(OC.filePath('files', 'ajax', 'move.php'), { dir: dir, file: file, target: dir+'/'+target }, function(result) { + $.post(OC.filePath('files', 'ajax', 'move.php'), { dir: dir, file: file, target: dir+'/'+target }, function(result) { if (result) { if (result.status === 'success') { //recalculate folder size @@ -925,7 +925,7 @@ var crumbDropOptions={ $(files).each(function(i,row){ var dir = $(row).data('dir'); var file = $(row).data('filename'); - $.get(OC.filePath('files', 'ajax', 'move.php'), { dir: dir, file: file, target: target }, function(result) { + $.post(OC.filePath('files', 'ajax', 'move.php'), { dir: dir, file: file, target: target }, function(result) { if (result) { if (result.status === 'success') { FileList.remove(file); -- cgit v1.2.3 From 99dfaee1f616c6ffdba8007badc9b5afe427c653 Mon Sep 17 00:00:00 2001 From: Jörn Friedrich Dreyer Date: Mon, 21 Jan 2013 14:58:55 +0100 Subject: reset checkbox after getting selected files instead of ofter dragging, speed up revert --- apps/files/js/files.js | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) (limited to 'apps/files/js/files.js') diff --git a/apps/files/js/files.js b/apps/files/js/files.js index 34772915a62..288a87c7e3e 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -815,10 +815,19 @@ function updateBreadcrumb(breadcrumbHtml) { var createDragShadow = function(event){ //select dragged file - $(event.target).parents('tr').find('td input:first').prop('checked', true); + var isDragSelected = $(event.target).parents('tr').find('td input:first').prop('checked'); + if (!isDragSelected) { + //select dragged file + $(event.target).parents('tr').find('td input:first').prop('checked',true); + } var selectedFiles = getSelectedFiles(); + if (!isDragSelected && selectedFiles.length == 1) { + //revert the selection + $(event.target).parents('tr').find('td input:first').prop('checked',false); + } + //also update class when we dragged more than one file if (selectedFiles.length > 1) { $(event.target).parents('tr').addClass('selected'); @@ -832,8 +841,7 @@ var createDragShadow = function(event){ var dir=$('#dir').val(); $(selectedFiles).each(function(i,elem){ - var selected= $(event.target).parents('tr').hasClass('selected'); - var newtr = $('' + var newtr = $('' +''+elem.name+''+humanFileSize(elem.size)+'' +''); tbody.append(newtr); @@ -851,16 +859,11 @@ var createDragShadow = function(event){ //options for file drag/drop var dragOptions={ - revert: 'invalid', opacity: 0.7, zIndex: 100, appendTo: 'body', cursorAt: { left: -5, top: -5 }, + revert: 'invalid', revertDuration: 300, + opacity: 0.7, zIndex: 100, appendTo: 'body', cursorAt: { left: -5, top: -5 }, helper: createDragShadow, cursor: 'move', stop: function(event, ui) { $('#fileList tr td.filename').addClass('ui-draggable'); - //reset selection - $(ui.helper.find('tr')).each(function(i,row){ - var file = $(row).data('filename'); - var selected = $(row).data('selected'); - $('#fileList tr').filterAttr('data-file',file).find('td input:first').prop('checked',selected); - }); } } @@ -899,10 +902,6 @@ var folderDropOptions={ } }); }); - //reset checkbox if we dragged a single file - if (files.length == 1) { - $(event.target).parents('tr').find('td input:first').prop('checked', $(event.target).parents('tr').hasClass('selected')); - } }, tolerance: 'pointer' } @@ -941,10 +940,6 @@ var crumbDropOptions={ } }); }); - //reset checkbox if we dragged a single file - if (files.length == 1) { - $(event.target).parents('tr').find('td input:first').prop('checked', $(event.target).parents('tr').hasClass('selected')); - } }, tolerance: 'pointer' } -- cgit v1.2.3 From 81a398c22c1bf43c72b91c7639671c4eb5729ab0 Mon Sep 17 00:00:00 2001 From: Jörn Friedrich Dreyer Date: Wed, 30 Jan 2013 13:29:24 +0100 Subject: use $.trim() for IE8 --- apps/files/js/files.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'apps/files/js/files.js') diff --git a/apps/files/js/files.js b/apps/files/js/files.js index 288a87c7e3e..13367b33628 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -874,7 +874,7 @@ var folderDropOptions={ return false; } - var target=$(this).find('.nametext').text().trim(); + var target=$.trim($(this).find('.nametext').text()); var files = ui.helper.find('tr'); $(files).each(function(i,row){ @@ -1045,7 +1045,7 @@ function getUniqueName(name){ num=parseInt(numMatch[numMatch.length-1])+1; base=base.split('(') base.pop(); - base=base.join('(').trim(); + base=$.trim(base.join('(')); } name=base+' ('+num+')'; if (extension) { -- cgit v1.2.3