166 lines
5.5 KiB
JavaScript
166 lines
5.5 KiB
JavaScript
/** This file is part of KCFinder project
|
|
*
|
|
* @desc Upload files using drag and drop
|
|
* @package KCFinder
|
|
* @version 3.12
|
|
* @author Pavel Tzonkov
|
|
* @copyright 2010-2014 KCFinder Project
|
|
* @license http://opensource.org/licenses/GPL-3.0 GPLv3
|
|
* @license http://opensource.org/licenses/LGPL-3.0 LGPLv3
|
|
* @link http://kcfinder.sunhater.com
|
|
*/
|
|
|
|
_.initDropUpload = function() {
|
|
|
|
if (!_.access.files.upload)
|
|
return;
|
|
|
|
var files = $('#files'),
|
|
folders = $('#folders').find('div.folder > a'),
|
|
i, dlg, filesSize, uploaded, errors,
|
|
|
|
precheck = function(e) {
|
|
filesSize = uploaded = 0; errors = [];
|
|
var fs = e.dataTransfer.files;
|
|
for (i = 0; i < fs.length; i++)
|
|
filesSize += fs[i].size;
|
|
|
|
dlg = $('<div><div class="info count"> </div><div class="bar count"></div><div class="info size"> </div><div class="bar size"></div><div class="info errors"> </div></div>');
|
|
|
|
dlg.find('.bar.count').progressbar({max: fs.length, value: 0});
|
|
dlg.find('.bar.size').progressbar({max: filesSize, value: 0});
|
|
dlg.find('.info').css('padding', "5px 0").first().css('paddingTop', 0);
|
|
dlg.find('.info').last().css('paddingBottom', 0);
|
|
|
|
dlg = _.dialog(_.label("Uploading files"), dlg, {
|
|
closeOnEscape: false,
|
|
buttons: []
|
|
});
|
|
|
|
dlg.parent().css('paddingBottom', 0).find('.ui-dialog-titlebar button').css('visibility', 'hidden').get(0).disabled = true;
|
|
|
|
return true;
|
|
},
|
|
|
|
localOptions = {
|
|
param: "upload[]",
|
|
maxFilesize: _.dropUploadMaxFilesize,
|
|
|
|
begin: function(xhr, currentFile, count) {
|
|
|
|
dlg.find('.info.count').html(_.label("Uploading file {current} of {count}", {
|
|
current: currentFile,
|
|
count: count
|
|
}));
|
|
|
|
dlg.find('.info.size').html(_.label("Uploaded {uploaded} of {total}", {
|
|
uploaded: _.humanSize(uploaded),
|
|
total: _.humanSize(filesSize)
|
|
}));
|
|
|
|
dlg.find('.info.errors').html(_.label("Errors:") + " " + errors.length);
|
|
dlg.find('.bar.count').progressbar({value: currentFile});
|
|
dlg.find('.bar.size').progressbar({value: uploaded});
|
|
},
|
|
|
|
success: function(xhr, currentFile, count) {
|
|
uploaded += xhr.file.size;
|
|
var response = xhr.responseText;
|
|
if (response.substr(0, 1) != "/")
|
|
errors.push($.$.htmlData(response));
|
|
},
|
|
|
|
error: function(xhr, currentFile, count) {
|
|
uploaded += xhr.file.size;
|
|
errors.push($.$.htmlData(xhr.file.name + ": " + _.label("Failed to upload {filename}!", {
|
|
filename: xhr.file.name
|
|
})));
|
|
},
|
|
|
|
abort: function(xhr, currentFile, filesCount) {
|
|
uploaded += xhr.file.size;
|
|
errors.push($.$.htmlData(xhr.file.name + ": " + _.label("Failed to upload {filename}!", {
|
|
filename: xhr.file.name
|
|
})));
|
|
},
|
|
|
|
filesizeCallback: function(xhr, currentFile, filesCount) {
|
|
uploaded += xhr.file.size;
|
|
errors.push($.$.htmlData(xhr.file.name + ": " + _.label("The uploaded file exceeds {size} bytes.", {
|
|
size: _.dropUploadMaxFilesize
|
|
})));
|
|
},
|
|
|
|
finish: function() {
|
|
_.refresh();
|
|
dlg.find('.bar.size').progressbar({value: uploaded});
|
|
dlg.find('.info.size').html(_.label("Uploaded: {uploaded} of {total}", {
|
|
uploaded: _.humanSize(uploaded),
|
|
total: _.humanSize(filesSize)
|
|
}));
|
|
dlg.find('.info.errors').html(_.label("Errors:") + " " + errors.length);
|
|
var err = errors;
|
|
setTimeout(function() {
|
|
dlg.dialog('destroy').detach();
|
|
if (err.length)
|
|
_.alert(err.join('<br />'));
|
|
}, 500);
|
|
}
|
|
},
|
|
|
|
remoteOptions = {
|
|
ajax: {
|
|
success: function(data) {
|
|
_.refresh();
|
|
if (data.error) {
|
|
_.alert(data.error)
|
|
return;
|
|
}
|
|
},
|
|
error: function() {
|
|
_.refresh();
|
|
_.alert(_.label("Unknown error."));
|
|
},
|
|
abort: function() {
|
|
_.refresh();
|
|
}
|
|
}
|
|
},
|
|
|
|
url = "&dir=" + encodeURIComponent(_.dir);
|
|
|
|
files.shDropUpload($.extend(localOptions, {
|
|
url: _.getURL('upload') + url,
|
|
precheck: function(e) {
|
|
if (!$('#folders span.current').first().parent().data('writable')) {
|
|
_.alert(_.label("Cannot write to upload folder."));
|
|
return false;
|
|
}
|
|
return precheck(e);
|
|
}
|
|
}), $.extend(true, remoteOptions, {
|
|
ajax: {
|
|
url: _.getURL('dragUrl') + url
|
|
}
|
|
}));
|
|
|
|
folders.each(function() {
|
|
var folder = this,
|
|
url = "&dir=" + encodeURIComponent($(folder).data('path'));
|
|
$(folder).shDropUpload($.extend(localOptions, {
|
|
url: _.getURL('upload') + url,
|
|
precheck: function(e) {
|
|
if (!$(folder).data('writable')) {
|
|
_.alert(_.label("Cannot write to upload folder."));
|
|
return false;
|
|
}
|
|
return precheck(e);
|
|
}
|
|
}), $.extend(true, remoteOptions, {
|
|
ajax: {
|
|
url: _.getURL('dragUrl') + url
|
|
}
|
|
}));
|
|
});
|
|
};
|