]> source.dussan.org Git - nextcloud-server.git/commitdiff
return created table row, use as context in fileupload events
authorJörn Friedrich Dreyer <jfd@butonic.de>
Wed, 13 Mar 2013 16:26:37 +0000 (17:26 +0100)
committerThomas Müller <thomas.mueller@tmit.eu>
Mon, 1 Jul 2013 17:34:47 +0000 (19:34 +0200)
apps/files/js/filelist.js

index 1db54f45bb82839d86cc41ec6f68a16178de636f..4fdb76b1026899134bb46ba5a08cf36378616fc4 100644 (file)
@@ -88,17 +88,17 @@ var FileList={
                        $('#permissions').val()
                );
 
-               FileList.insertElement(name, 'file', tr.attr('data-file',name));
-               var row = $('tr').filterAttr('data-file',name);
+               FileList.insertElement(name, 'file', tr);
                if(loading){
-                       row.data('loading',true);
+                       tr.data('loading',true);
                }else{
-                       row.find('td.filename').draggable(dragOptions);
+                       tr.find('td.filename').draggable(dragOptions);
                }
                if (hidden) {
-                       row.hide();
+                       tr.hide();
                }
-               FileActions.display(row.find('td.filename'));
+               FileActions.display(tr.find('td.filename'));
+               return tr;
        },
        addDir:function(name,size,lastModified,hidden){
 
@@ -113,13 +113,14 @@ var FileList={
                );
 
                FileList.insertElement(name,'dir',tr);
-               var row = $('tr').filterAttr('data-file',name);
-               row.find('td.filename').draggable(dragOptions);
-               row.find('td.filename').droppable(folderDropOptions);
+               var td = tr.find('td.filename');
+               td.draggable(dragOptions);
+               td.droppable(folderDropOptions);
                if (hidden) {
-                       row.hide();
+                       tr.hide();
                }
-               FileActions.display(row.find('td.filename'));
+               FileActions.display(tr.find('td.filename'));
+               return tr;
        },
        refresh:function(data) {
                var result = jQuery.parseJSON(data.responseText);
@@ -351,6 +352,147 @@ var FileList={
 };
 
 $(document).ready(function(){
+
+       // handle upload events
+       $('#file_upload_start').on('fileuploaddrop', function(e, data) {
+               // only handle drop to dir if fileList exists
+               if ($('#fileList').length > 0) {
+                       var dropTarget = $(e.originalEvent.target).closest('tr');
+                       if(dropTarget && dropTarget.data('type') === 'dir') { // drag&drop upload to folder
+                               var dirName = dropTarget.data('file');
+                               // update folder in form
+                               data.formData = function(form) {
+                                       var formArray = form.serializeArray();
+                                       // array index 0 contains the max files size
+                                       // array index 1 contains the request token
+                                       // array index 2 contains the directory
+                                       var parentDir = formArray[2]['value'];
+                                       if (parentDir === '/') {
+                                               formArray[2]['value'] += dirName;
+                                       } else {
+                                               formArray[2]['value'] += '/'+dirName;
+                                       }
+                                       return formArray;
+                               }
+                       }
+               }
+       });
+       $('#file_upload_start').on('fileuploadadd', function(e, data) {
+               // only add to fileList if it exists
+               if ($('#fileList').length > 0) {
+
+                       if(FileList.deleteFiles && FileList.deleteFiles.indexOf(data.files[0].name)!=-1){//finish delete if we are uploading a deleted file
+                               FileList.finishDelete(null, true); //delete file before continuing
+                       }
+
+                       // add ui visualization to existing folder or as new stand-alone file?
+                       var dropTarget = $(e.originalEvent.target).closest('tr');
+                       if(dropTarget && dropTarget.data('type') === 'dir') {
+                               // add to existing folder
+                               var dirName = dropTarget.data('file');
+
+                               // set dir context
+                               data.context = $('tr').filterAttr('data-type', 'dir').filterAttr('data-file', dirName);
+
+                               // update upload counter ui
+                               var uploadtext = data.context.find('.uploadtext');
+                               var currentUploads = parseInt(uploadtext.attr('currentUploads'));
+                               currentUploads += 1;
+                               uploadtext.attr('currentUploads', currentUploads);
+                               if(currentUploads === 1) {
+                                       var img = OC.imagePath('core', 'loading.gif');
+                                       data.context.find('td.filename').attr('style','background-image:url('+img+')');
+                                       uploadtext.text(t('files', '1 file uploading'));
+                                       uploadtext.show();
+                               } else {
+                                       uploadtext.text(currentUploads + ' ' + t('files', 'files uploading'));
+                               }
+                       } else {
+                               // add as stand-alone row to filelist
+                               var uniqueName = getUniqueName(data.files[0].name);
+                               var size=t('files','Pending');
+                               if(data.files[0].size>=0){
+                                       size=data.files[0].size;
+                               }
+                               var date=new Date();
+                               // create new file context
+                               data.context = FileList.addFile(uniqueName,size,date,true,false);
+
+                       }
+               }
+       });
+       $('#file_upload_start').on('fileuploaddone', function(e, data) {
+               // only update the fileList if it exists
+               if ($('#fileList').length > 0) {
+                       var response;
+                       if (typeof data.result === 'string') {
+                               response = data.result;
+                       } else {
+                               // fetch response from iframe
+                               response = data.result[0].body.innerText;
+                       }
+                       var result=$.parseJSON(response);
+
+                       if(typeof result[0] !== 'undefined' && result[0].status === 'success') {
+                               var file = result[0];
+
+                               if (data.context.data('type') === 'file') {
+                                       // update file data
+                                       data.context.attr('data-mime',file.mime).attr('data-id',file.id);
+                                       var size = data.context.data('size');
+                                       if(size!=file.size){
+                                               data.context.attr('data-size', file.size);
+                                               data.context.find('td.filesize').text(humanFileSize(file.size));
+                                       }
+                                       if (FileList.loadingDone) {
+                                               FileList.loadingDone(file.name, file.id);
+                                       }
+                               } else {
+                                       // update upload counter ui
+                                       var uploadtext = data.context.find('.uploadtext');
+                                       var currentUploads = parseInt(uploadtext.attr('currentUploads'));
+                                       currentUploads -= 1;
+                                       uploadtext.attr('currentUploads', currentUploads);
+                                       if(currentUploads === 0) {
+                                               var img = OC.imagePath('core', 'filetypes/folder.png');
+                                               data.context.find('td.filename').attr('style','background-image:url('+img+')');
+                                               uploadtext.text('');
+                                               uploadtext.hide();
+                                       } else {
+                                               uploadtext.text(currentUploads + ' ' + t('files', 'files uploading'));
+                                       }
+
+                                       // update folder size
+                                       var size =  parseInt(data.context.data('size'));
+                                       size +=  parseInt(file.size)    ;
+                                       data.context.attr('data-size', size);
+                                       data.context.find('td.filesize').text(humanFileSize(size));
+
+                               }
+                       }
+               }
+       });
+       $('#file_upload_start').on('fileuploadfail', function(e, data) {
+               // only update the fileList if it exists
+               // cleanup files, error notification has been shown by fileupload code
+               var tr = data.context;
+               if (typeof tr === 'undefined') {
+                       tr = $('tr').filterAttr('data-file', data.files[0].name);
+               }
+               if (tr.attr('data-type') === 'dir') {
+                       //cleanup uploading to a dir
+                       var uploadtext = tr.find('.uploadtext');
+                       var img = OC.imagePath('core', 'filetypes/folder.png');
+                       tr.find('td.filename').attr('style','background-image:url('+img+')');
+                       uploadtext.text('');
+                       uploadtext.hide(); //TODO really hide already
+               } else {
+                       //remove file
+                       tr.fadeOut();
+                       tr.remove();
+               }
+       });
+
        $('#notification').hide();
        $('#notification').on('click', '.undo', function(){
                if (FileList.deleteFiles) {