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 */
var target_id = obj.data('target');
var target_type = 'folder';
@ -839,31 +839,45 @@ function onAddClipboard(ev) { /* {{{ */
}
}
if(target_type == 'folder' && target_id) {
for (var i = 0; i < files.length; i++) {
if(files[i].size <= maxFileSize) {
var fd = new FormData();
fd.append('targettype', target_type);
fd.append('folderid', target_id);
fd.append('formtoken', obj.data('uploadformtoken'));
if (typeof obj.data('comment') !== 'undefined') {
fd.append('comment', obj.data('comment'));
}
if (typeof obj.data('keywords') !== 'undefined') {
fd.append('keywords', obj.data('keywords'));
}
fd.append('userfile', files[i]);
fd.append('command', 'uploaddocument');
this.getFormData(fd, obj.data('attributes'), 'attributes');
this.getFormData(fd, obj.data('categories'), 'categories');
// fd.append('path', files[i].webkitRelativePath);
for (var i = 0; i < items.length; i++) {
var item = items[i].webkitGetAsEntry();
if (item.isFile) {
item.file(function(file) {
if(file.size <= maxFileSize) {
var fd = new FormData();
fd.append('targettype', target_type);
fd.append('folderid', target_id);
fd.append('formtoken', obj.data('uploadformtoken'));
if (typeof obj.data('comment') !== 'undefined') {
fd.append('comment', obj.data('comment'));
}
if (typeof obj.data('keywords') !== 'undefined') {
fd.append('keywords', obj.data('keywords'));
}
fd.append('userfile', file);
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();
var status = new SeedDMSUpload.createStatusbar(statusbar);
status.setFileNameSize(files[i].name,files[i].size);
SeedDMSUpload.sendFileToServer(fd,status,afteruploadfunc);
} else {
statusbar.parent().show();
var status = new SeedDMSUpload.createStatusbar(statusbar);
status.setFileNameSize(file.name,file.size);
SeedDMSUpload.sendFileToServer(fd,status,afteruploadfunc);
} 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({
text: maxFileSizeMsg + '<br /><em>' + files[i].name + ' (' + files[i].size + ' Bytes)</em>',
text: 'Folders currently not supported',
type: 'error',
dismissQueue: true,
layout: 'topRight',
@ -945,9 +959,12 @@ $(document).ready(function() { /* {{{ */
$(this).css('border', '0px dotted #0B85A1');
e.preventDefault();
var files = e.originalEvent.dataTransfer.files;
var items = e.originalEvent.dataTransfer.items;
//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) {
@ -974,9 +991,10 @@ $(document).ready(function() { /* {{{ */
target_name = $(e.currentTarget).data('name')+''; // Force this to be a string
if(target_type == 'folder') {
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);
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 {
var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text"));
source_type = source_info.type;
@ -1075,9 +1093,10 @@ $(document).ready(function() { /* {{{ */
}
} else if(target_type == 'document') {
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);
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 {
var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text"));
source_type = source_info.type;
@ -1160,8 +1179,9 @@ $(document).ready(function() { /* {{{ */
}
} else if(target_type == 'attachment') {
var files = e.originalEvent.dataTransfer.files;
if(files.length > 0) {
SeedDMSUpload.handleFileUpload(files,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/);
var items = e.originalEvent.dataTransfer.items;
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
});
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) {
callback();
}
@ -793,7 +793,7 @@ function onAddClipboard(ev) { /* {{{ */
this.filename = $("<div class='filename'></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.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();
obj.after(this.statusbar);
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 */
var target_id = obj.data('target');
var target_type = 'folder';
@ -870,37 +870,57 @@ function onAddClipboard(ev) { /* {{{ */
}
}
if(target_type == 'folder' && target_id) {
for (var i = 0; i < files.length; i++) {
if(files[i].size <= maxFileSize) {
var fd = new FormData();
fd.append('targettype', target_type);
fd.append('folderid', target_id);
fd.append('formtoken', obj.data('uploadformtoken'));
if (typeof obj.data('comment') !== 'undefined') {
fd.append('comment', obj.data('comment'));
}
if (typeof obj.data('keywords') !== 'undefined') {
fd.append('keywords', obj.data('keywords'));
}
fd.append('userfile', files[i]);
fd.append('command', 'uploaddocument');
this.getFormData(fd, obj.data('attributes'), 'attributes');
this.getFormData(fd, obj.data('categories'), 'categories');
// fd.append('path', files[i].webkitRelativePath);
for (var i = 0; i < items.length; i++) {
var item = items[i]; //.webkitGetAsEntry();
if (item.isFile) {
item.file(function(file) {
if(file.size <= maxFileSize) {
var fd = new FormData();
fd.append('targettype', target_type);
fd.append('folderid', target_id);
fd.append('formtoken', obj.data('uploadformtoken'));
if (typeof obj.data('comment') !== 'undefined') {
fd.append('comment', obj.data('comment'));
}
if (typeof obj.data('keywords') !== 'undefined') {
fd.append('keywords', obj.data('keywords'));
}
fd.append('userfile', file);
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();
var status = new SeedDMSUpload.createStatusbar(statusbar);
status.setFileNameSize(files[i].name,files[i].size);
SeedDMSUpload.sendFileToServer(fd,status,afteruploadfunc);
} else {
statusbar.parent().show();
var status = new SeedDMSUpload.createStatusbar(statusbar);
status.setFileNameSize(file.name,file.size);
SeedDMSUpload.sendFileToServer(fd,status,afteruploadfunc);
} 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({
text: maxFileSizeMsg + '<br /><em>' + files[i].name + ' (' + files[i].size + ' Bytes)</em>',
text: 'Folders currently not supported',
type: 'error',
dismissQueue: true,
layout: 'topRight',
theme: 'defaultTheme',
timeout: 5000
});
*/
}
}
} else if(target_type == 'document' && target_id) {
@ -976,9 +996,20 @@ $(document).ready(function() { /* {{{ */
$(this).css('border', '0px dotted #0B85A1');
e.preventDefault();
var files = e.originalEvent.dataTransfer.files;
var items = e.originalEvent.dataTransfer.items;
//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) {
@ -1005,9 +1036,14 @@ $(document).ready(function() { /* {{{ */
target_name = $(e.currentTarget).data('name')+''; // Force this to be a string
if(target_type == 'folder') {
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);
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 {
var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text"));
source_type = source_info.type;
@ -1118,9 +1154,14 @@ $(document).ready(function() { /* {{{ */
}
} else if(target_type == 'document') {
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);
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 {
var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text"));
source_type = source_info.type;
@ -1210,8 +1251,13 @@ $(document).ready(function() { /* {{{ */
}
} else if(target_type == 'attachment') {
var files = e.originalEvent.dataTransfer.files;
if(files.length > 0) {
SeedDMSUpload.handleFileUpload(files,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/);
var items = e.originalEvent.dataTransfer.items;
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")*/);
}
}
});