initial support to upload folders by drag and drop

This commit is contained in:
Uwe Steinmann 2023-06-13 15:28:18 +02:00
parent 26553cf69d
commit d868438af9
2 changed files with 130 additions and 64 deletions

View File

@ -819,7 +819,7 @@ function onAddClipboard(ev) { /* {{{ */
} }
} }
SeedDMSUpload.handleFileUpload = function(files,obj,statusbar) { SeedDMSUpload.handleFileUpload = function(items,obj,statusbar) {
/* target is set for the quick upload area */ /* target is set for the quick upload area */
var target_id = obj.data('target'); var target_id = obj.data('target');
var target_type = 'folder'; var target_type = 'folder';
@ -839,31 +839,45 @@ function onAddClipboard(ev) { /* {{{ */
} }
} }
if(target_type == 'folder' && target_id) { if(target_type == 'folder' && target_id) {
for (var i = 0; i < files.length; i++) { for (var i = 0; i < items.length; i++) {
if(files[i].size <= maxFileSize) { var item = items[i].webkitGetAsEntry();
var fd = new FormData(); if (item.isFile) {
fd.append('targettype', target_type); item.file(function(file) {
fd.append('folderid', target_id); if(file.size <= maxFileSize) {
fd.append('formtoken', obj.data('uploadformtoken')); var fd = new FormData();
if (typeof obj.data('comment') !== 'undefined') { fd.append('targettype', target_type);
fd.append('comment', obj.data('comment')); fd.append('folderid', target_id);
} fd.append('formtoken', obj.data('uploadformtoken'));
if (typeof obj.data('keywords') !== 'undefined') { if (typeof obj.data('comment') !== 'undefined') {
fd.append('keywords', obj.data('keywords')); fd.append('comment', obj.data('comment'));
} }
fd.append('userfile', files[i]); if (typeof obj.data('keywords') !== 'undefined') {
fd.append('command', 'uploaddocument'); fd.append('keywords', obj.data('keywords'));
this.getFormData(fd, obj.data('attributes'), 'attributes'); }
this.getFormData(fd, obj.data('categories'), 'categories'); fd.append('userfile', file);
// fd.append('path', files[i].webkitRelativePath); fd.append('command', 'uploaddocument');
SeedDMSUpload.getFormData(fd, obj.data('attributes'), 'attributes');
SeedDMSUpload.getFormData(fd, obj.data('categories'), 'categories');
// fd.append('path', file.webkitRelativePath);
statusbar.parent().show(); statusbar.parent().show();
var status = new SeedDMSUpload.createStatusbar(statusbar); var status = new SeedDMSUpload.createStatusbar(statusbar);
status.setFileNameSize(files[i].name,files[i].size); status.setFileNameSize(file.name,file.size);
SeedDMSUpload.sendFileToServer(fd,status,afteruploadfunc); SeedDMSUpload.sendFileToServer(fd,status,afteruploadfunc);
} else { } else {
noty({
text: maxFileSizeMsg + '<br /><em>' + file.name + ' (' + file.size + ' Bytes)</em>',
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 5000
});
}
});
} else if(item.isDirectory) {
noty({ noty({
text: maxFileSizeMsg + '<br /><em>' + files[i].name + ' (' + files[i].size + ' Bytes)</em>', text: 'Folders currently not supported',
type: 'error', type: 'error',
dismissQueue: true, dismissQueue: true,
layout: 'topRight', layout: 'topRight',
@ -945,9 +959,12 @@ $(document).ready(function() { /* {{{ */
$(this).css('border', '0px dotted #0B85A1'); $(this).css('border', '0px dotted #0B85A1');
e.preventDefault(); e.preventDefault();
var files = e.originalEvent.dataTransfer.files; var files = e.originalEvent.dataTransfer.files;
var items = e.originalEvent.dataTransfer.items;
//We need to send dropped files to Server //We need to send dropped files to Server
SeedDMSUpload.handleFileUpload(files, $(this), $(this)); if(items.length > 0) {
SeedDMSUpload.handleFileUpload(items, $(this), $(this));
}
}); });
$(document).on('dragenter', '.droptarget', function (e) { $(document).on('dragenter', '.droptarget', function (e) {
@ -974,9 +991,10 @@ $(document).ready(function() { /* {{{ */
target_name = $(e.currentTarget).data('name')+''; // Force this to be a string target_name = $(e.currentTarget).data('name')+''; // Force this to be a string
if(target_type == 'folder') { if(target_type == 'folder') {
var files = e.originalEvent.dataTransfer.files; var files = e.originalEvent.dataTransfer.files;
if(files.length > 0) { var items = e.originalEvent.dataTransfer.items;
if(items.length > 0) {
// console.log('Drop '+files.length+' files on '+target_type+' '+target_id); // console.log('Drop '+files.length+' files on '+target_type+' '+target_id);
SeedDMSUpload.handleFileUpload(files,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/); SeedDMSUpload.handleFileUpload(items,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/);
} else { } else {
var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text")); var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text"));
source_type = source_info.type; source_type = source_info.type;
@ -1075,9 +1093,10 @@ $(document).ready(function() { /* {{{ */
} }
} else if(target_type == 'document') { } else if(target_type == 'document') {
var files = e.originalEvent.dataTransfer.files; var files = e.originalEvent.dataTransfer.files;
if(files.length > 0) { var items = e.originalEvent.dataTransfer.items;
if(items.length > 0) {
// console.log('Drop '+files.length+' files on '+target_type+' '+target_id); // console.log('Drop '+files.length+' files on '+target_type+' '+target_id);
SeedDMSUpload.handleFileUpload(files,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/); SeedDMSUpload.handleFileUpload(items,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/);
} else { } else {
var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text")); var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text"));
source_type = source_info.type; source_type = source_info.type;
@ -1160,8 +1179,9 @@ $(document).ready(function() { /* {{{ */
} }
} else if(target_type == 'attachment') { } else if(target_type == 'attachment') {
var files = e.originalEvent.dataTransfer.files; var files = e.originalEvent.dataTransfer.files;
if(files.length > 0) { var items = e.originalEvent.dataTransfer.items;
SeedDMSUpload.handleFileUpload(files,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/); if(items.length > 0) {
SeedDMSUpload.handleFileUpload(items,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/);
} }
} }
}); });

View File

@ -763,7 +763,7 @@ function onAddClipboard(ev) { /* {{{ */
timeout: 1500 timeout: 1500
}); });
if(editBtnLabel) if(editBtnLabel)
status.statusbar.after($('<a href="'+seeddms_webroot+'out/out.EditDocument.php?documentid=' + data.data + '" class="btn btn-mini btn-primary">' + editBtnLabel + '</a>')); status.statusbar.after($('<a href="'+seeddms_webroot+'out/out.EditDocument.php?documentid=' + data.data + '" class="btn btn-mini btn-sm btn-primary">' + editBtnLabel + '</a>'));
if(callback) { if(callback) {
callback(); callback();
} }
@ -793,7 +793,7 @@ function onAddClipboard(ev) { /* {{{ */
this.filename = $("<div class='filename'></div>").appendTo(this.statusbar); this.filename = $("<div class='filename'></div>").appendTo(this.statusbar);
this.size = $("<div class='filesize'></div>").appendTo(this.statusbar); this.size = $("<div class='filesize'></div>").appendTo(this.statusbar);
this.progressBar = $("<div class='progress'><div class='bar bg-success'></div></div>").appendTo(this.statusbar); this.progressBar = $("<div class='progress'><div class='bar bg-success'></div></div>").appendTo(this.statusbar);
this.abort = $("<div class='btn btn-mini btn-danger'>" + abortBtnLabel + "</div>").appendTo(this.statusbar); this.abort = $("<div class='btn btn-mini btn-sm btn-danger'>" + abortBtnLabel + "</div>").appendTo(this.statusbar);
// $('.statusbar').empty(); // $('.statusbar').empty();
obj.after(this.statusbar); obj.after(this.statusbar);
this.setFileNameSize = function(name,size) { this.setFileNameSize = function(name,size) {
@ -850,7 +850,7 @@ function onAddClipboard(ev) { /* {{{ */
} }
} }
SeedDMSUpload.handleFileUpload = function(files,obj,statusbar) { SeedDMSUpload.handleFileUpload = function(items,obj,statusbar) {
/* target is set for the quick upload area */ /* target is set for the quick upload area */
var target_id = obj.data('target'); var target_id = obj.data('target');
var target_type = 'folder'; var target_type = 'folder';
@ -870,37 +870,57 @@ function onAddClipboard(ev) { /* {{{ */
} }
} }
if(target_type == 'folder' && target_id) { if(target_type == 'folder' && target_id) {
for (var i = 0; i < files.length; i++) { for (var i = 0; i < items.length; i++) {
if(files[i].size <= maxFileSize) { var item = items[i]; //.webkitGetAsEntry();
var fd = new FormData(); if (item.isFile) {
fd.append('targettype', target_type); item.file(function(file) {
fd.append('folderid', target_id); if(file.size <= maxFileSize) {
fd.append('formtoken', obj.data('uploadformtoken')); var fd = new FormData();
if (typeof obj.data('comment') !== 'undefined') { fd.append('targettype', target_type);
fd.append('comment', obj.data('comment')); fd.append('folderid', target_id);
} fd.append('formtoken', obj.data('uploadformtoken'));
if (typeof obj.data('keywords') !== 'undefined') { if (typeof obj.data('comment') !== 'undefined') {
fd.append('keywords', obj.data('keywords')); fd.append('comment', obj.data('comment'));
} }
fd.append('userfile', files[i]); if (typeof obj.data('keywords') !== 'undefined') {
fd.append('command', 'uploaddocument'); fd.append('keywords', obj.data('keywords'));
this.getFormData(fd, obj.data('attributes'), 'attributes'); }
this.getFormData(fd, obj.data('categories'), 'categories'); fd.append('userfile', file);
// fd.append('path', files[i].webkitRelativePath); fd.append('command', 'uploaddocument');
SeedDMSUpload.getFormData(fd, obj.data('attributes'), 'attributes');
SeedDMSUpload.getFormData(fd, obj.data('categories'), 'categories');
// fd.append('path', file.webkitRelativePath);
statusbar.parent().show(); statusbar.parent().show();
var status = new SeedDMSUpload.createStatusbar(statusbar); var status = new SeedDMSUpload.createStatusbar(statusbar);
status.setFileNameSize(files[i].name,files[i].size); status.setFileNameSize(file.name,file.size);
SeedDMSUpload.sendFileToServer(fd,status,afteruploadfunc); SeedDMSUpload.sendFileToServer(fd,status,afteruploadfunc);
} else { } else {
noty({
text: maxFileSizeMsg + '<br /><em>' + file.name + ' (' + file.size + ' Bytes)</em>',
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 5000
});
}
});
} else if(item.isDirectory) {
var dirReader = item.createReader();
dirReader.readEntries(function(entries) {
SeedDMSUpload.handleFileUpload(entries, obj, statusbar);
});
/*
noty({ noty({
text: maxFileSizeMsg + '<br /><em>' + files[i].name + ' (' + files[i].size + ' Bytes)</em>', text: 'Folders currently not supported',
type: 'error', type: 'error',
dismissQueue: true, dismissQueue: true,
layout: 'topRight', layout: 'topRight',
theme: 'defaultTheme', theme: 'defaultTheme',
timeout: 5000 timeout: 5000
}); });
*/
} }
} }
} else if(target_type == 'document' && target_id) { } else if(target_type == 'document' && target_id) {
@ -976,9 +996,20 @@ $(document).ready(function() { /* {{{ */
$(this).css('border', '0px dotted #0B85A1'); $(this).css('border', '0px dotted #0B85A1');
e.preventDefault(); e.preventDefault();
var files = e.originalEvent.dataTransfer.files; var files = e.originalEvent.dataTransfer.files;
var items = e.originalEvent.dataTransfer.items;
//We need to send dropped files to Server //We need to send dropped files to Server
SeedDMSUpload.handleFileUpload(files, $(this), $(this)); console.log(items[0]);
console.log(items[0].webkitGetAsEntry());
newitems = [];
if(items.length > 0) {
for (var i=0; i<items.length; i++) {
newitems.push(items[i].webkitGetAsEntry());
}
console.log(newitems);
SeedDMSUpload.handleFileUpload(newitems, $(this), $(this));
}
}); });
$(document).on('dragenter', '.droptarget', function (e) { $(document).on('dragenter', '.droptarget', function (e) {
@ -1005,9 +1036,14 @@ $(document).ready(function() { /* {{{ */
target_name = $(e.currentTarget).data('name')+''; // Force this to be a string target_name = $(e.currentTarget).data('name')+''; // Force this to be a string
if(target_type == 'folder') { if(target_type == 'folder') {
var files = e.originalEvent.dataTransfer.files; var files = e.originalEvent.dataTransfer.files;
if(files.length > 0) { var items = e.originalEvent.dataTransfer.items;
if(items.length > 0) {
// console.log('Drop '+files.length+' files on '+target_type+' '+target_id); // console.log('Drop '+files.length+' files on '+target_type+' '+target_id);
SeedDMSUpload.handleFileUpload(files,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/); newitems = [];
for (var i=0; i<items.length; i++) {
newitems.push(items[i].webkitGetAsEntry());
}
SeedDMSUpload.handleFileUpload(newitems,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/);
} else { } else {
var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text")); var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text"));
source_type = source_info.type; source_type = source_info.type;
@ -1118,9 +1154,14 @@ $(document).ready(function() { /* {{{ */
} }
} else if(target_type == 'document') { } else if(target_type == 'document') {
var files = e.originalEvent.dataTransfer.files; var files = e.originalEvent.dataTransfer.files;
if(files.length > 0) { var items = e.originalEvent.dataTransfer.items;
if(items.length > 0) {
// console.log('Drop '+files.length+' files on '+target_type+' '+target_id); // console.log('Drop '+files.length+' files on '+target_type+' '+target_id);
SeedDMSUpload.handleFileUpload(files,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/); newitems = [];
for (var i=0; i<items.length; i++) {
newitems.push(items[i].webkitGetAsEntry());
}
SeedDMSUpload.handleFileUpload(newitems,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/);
} else { } else {
var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text")); var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text"));
source_type = source_info.type; source_type = source_info.type;
@ -1210,8 +1251,13 @@ $(document).ready(function() { /* {{{ */
} }
} else if(target_type == 'attachment') { } else if(target_type == 'attachment') {
var files = e.originalEvent.dataTransfer.files; var files = e.originalEvent.dataTransfer.files;
if(files.length > 0) { var items = e.originalEvent.dataTransfer.items;
SeedDMSUpload.handleFileUpload(files,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/); if(items.length > 0) {
newitems = [];
for (var i=0; i<items.length; i++) {
newitems.push(items[i].webkitGetAsEntry());
}
SeedDMSUpload.handleFileUpload(newitems,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/);
} }
} }
}); });