Drag files from desktop anywhere onto filemanager uploads

This commit is contained in:
Nathan Gray 2013-08-09 23:34:42 +00:00
parent b74eec3d3f
commit 6fdeb9f5f8
4 changed files with 30 additions and 12 deletions

View File

@ -113,7 +113,7 @@ var et2_file = et2_inputWidget.extend(
return self.onStart(event, file_count);
},
onFinish: function(event, file_count) {
self.onFinish(event, file_count);
self.onFinish.apply(self, [event, file_count]);
// Fire legacy change action when done
self.change(self.input);
@ -209,18 +209,38 @@ var et2_file = et2_inputWidget.extend(
};
$j(drop_target)
.on("drop", jQuery.proxy(function(event) {
event.stopPropagation();
event.preventDefault();
this.input.removeClass("ui-state-active");
if(event.dataTransfer && event.dataTransfer.files.length > 0)
{
this.input[0].files = event.dataTransfer.files;
this.input.trigger("start.html5_upload");
}
return false;
}, this))
.on("dragenter",function(e) {
return !self.disabled;
//self.checkMime(this.files[index]))
// Accept the drop if at least one mimetype matches
// Individual files will be rejected later
var mime_ok = false;
for(var file in e.dataTransfer.files)
{
mime_ok = mime_ok || self.checkMime(file);
}
if(!self.disabled && mime_ok)
{
self.input.addClass("ui-state-active");
}
// Returning true cancels, return false to allow
return self.disabled || !mime_ok;
})
.on("dragleave", function(e) {
self.input.removeClass("ui-state-active");
// Returning true cancels, return false to allow
return self.disabled
})
.on("dragover", function(e) {
return !self.disabled;
// Returning true cancels, return false to allow
return self.disabled;
})
.on("dragend", false);
}
@ -381,7 +401,7 @@ var et2_file = et2_inputWidget.extend(
$j("div.remove",status).click(this, this.cancel);
if(error != "")
{
status.addClass("message validation_error");
status.addClass("message ui-state-error");
status.append("<div>"+error+"</diff>");
$j(".progressBar",status).css("display", "none");
}
@ -431,7 +451,7 @@ console.warn(event,name,error);
else if (this.progress)
{
$j("[file='"+name+"']",this.progress)
.addClass("error")
.addClass("ui-state-error")
.css("display", "block")
.text(this.egw().lang("Server error"));
}
@ -467,7 +487,7 @@ console.info(filename);
e.preventDefault();
// Look for file name in list
var target = $j(e.target).parents("li.message");
e.data.remove_file.apply(e.data,target.attr("file"));
e.data.remove_file.apply(e.data,[target.attr("file")]);
// In case it didn't make it to the list (error)
target.remove();
$j(e.target).remove();

View File

@ -452,7 +452,6 @@ action buttons, left aligned for "extra" controls
}
.et2_file .progress li {
color: blue;
margin: .5ex;
}
/* Hide progress bar when completed */

View File

@ -183,11 +183,10 @@ app.filemanager = AppJS.extend(
*/
upload: function(_event, _file_count)
{
if (_file_count)
if (_file_count && !jQuery.isEmptyObject(_event.data.getValue()))
{
var widget = _event.data;
var request = new egw_json_request('filemanager_ui::ajax_action', ['upload', widget.getValue(), this.get_path()], this);
widget.progress.remove();
widget.set_value('');
request.sendRequest(false, this._upload_callback, this);
}

View File

@ -68,7 +68,7 @@
<buttononly id="button[linkpaste]" onclick="app.filemanager.paste('linkpaste');" options="linkpaste,linkpaste_disabled"/>
<buttononly id="button[mailpaste]" onclick="app.filemanager.paste('mailpaste');" options="mailpaste,mailpaste_disabled"/>
<button label="File a file" onclick="window.open(egw::link('/index.php','menuaction=stylite.stylite_filemanager.upload'),'_blank','dependent=yes,width=550,height=350,scrollbars=yes,status=yes'); return false;" image="upload"/>
<file statustext="Select file to upload in current directory" id="upload"/>
<file statustext="Select file to upload in current directory" id="upload" drop_target ="divAppbox"/>
</hbox>
</template>
<template id="filemanager.index" template="" lang="" group="0" version="1.9.003">