Implemented files moving (drag'n'drop)

This commit is contained in:
Aleksander Machniak 2013-03-15 15:12:45 +01:00
parent 6000fd925f
commit 2358a0d807
3 changed files with 96 additions and 43 deletions

View file

@ -69,8 +69,8 @@ window.rcmail && rcmail.addEventListener('init', function() {
/*
rcmail.file_list.addEventListener('dragstart', function(o){ p.drag_start(o); });
rcmail.file_list.addEventListener('dragmove', function(e){ p.drag_move(e); });
rcmail.file_list.addEventListener('dragend', function(e){ p.drag_end(e); });
*/
rcmail.file_list.addEventListener('dragend', function(e){ kolab_files_drag_end(e); });
rcmail.file_list.addEventListener('column_replace', function(e){ kolab_files_set_coltypes(e); });
rcmail.file_list.addEventListener('listupdate', function(e){ rcmail.triggerEvent('listupdate', e); });
@ -356,6 +356,17 @@ kolab_files_list_select = function(list)
// rcmail.select_all_mode = false;
};
kolab_files_drag_end = function()
{
var folder = $('#files-folder-list li.droptarget').removeClass('droptarget');
if (folder.length) {
folder = folder.data('folder');
file_api.file_move(kolab_files_selected(), folder);
}
};
kolab_files_selected = function()
{
var files = [];
@ -369,6 +380,11 @@ kolab_files_selected = function()
return files;
};
/***********************************************************/
/********** Commands **********/
/***********************************************************/
rcube_webmail.prototype.files_sort = function(props)
{
var params = {},
@ -507,7 +523,7 @@ function kolab_files_ui()
$.each(this.env.folders, function(i, f) {
var row = $('<li class="mailbox"><span class="branch"></span></li>');
row.attr('id', f.id)
row.attr('id', f.id).data('folder', i)
.append($('<span class="name">').text(f.name))
.click(function() { file_api.folder_select(i); });
@ -516,6 +532,15 @@ function kolab_files_ui()
if (f.virtual)
row.addClass('virtual');
else
row.mouseenter(function() {
if (rcmail.file_list.drag_active)
$(this).addClass('droptarget');
})
.mouseleave(function() {
if (rcmail.file_list.drag_active)
$(this).removeClass('droptarget');
});
list.append(row);
@ -545,6 +570,46 @@ function kolab_files_ui()
this.file_list();
};
// folder create request
this.folder_create = function(folder)
{
this.req = this.set_busy(true, 'kolab_files.foldercreating');
this.get('folder_create', {folder: folder}, 'folder_create_response');
};
// folder create response handler
this.folder_create_response = function(response)
{
if (!this.response(response))
return;
this.display_message('kolab_files.foldercreatenotice', 'confirmation');
// refresh folders list
this.folder_list();
};
// folder delete request
this.folder_delete = function(folder)
{
this.req = this.set_busy(true, 'kolab_files.folderdeleting');
this.get('folder_delete', {folder: folder}, 'folder_delete_response');
};
// folder delete response handler
this.folder_delete_response = function(response)
{
if (!this.response(response))
return;
this.env.folder = null;
rcmail.enable_command('files-folder-delete', 'files-folder-rename', false);
this.display_message('kolab_files.folderdeletenotice', 'confirmation');
// refresh folders list
this.folder_list();
};
this.file_list = function(params)
{
if (!this.env.folder || !rcmail.gui_objects.filelist)
@ -622,46 +687,6 @@ function kolab_files_ui()
$(row).addClass('selected');
};
// folder create request
this.folder_create = function(folder)
{
this.req = this.set_busy(true, 'kolab_files.foldercreating');
this.get('folder_create', {folder: folder}, 'folder_create_response');
};
// folder create response handler
this.folder_create_response = function(response)
{
if (!this.response(response))
return;
this.display_message('kolab_files.foldercreatenotice', 'confirmation');
// refresh folders list
this.folder_list();
};
// folder delete request
this.folder_delete = function(folder)
{
this.req = this.set_busy(true, 'kolab_files.folderdeleting');
this.get('folder_delete', {folder: folder}, 'folder_delete_response');
};
// folder delete response handler
this.folder_delete_response = function(response)
{
if (!this.response(response))
return;
this.env.folder = null;
rcmail.enable_command('files-folder-delete', 'files-folder-rename', false);
this.display_message('kolab_files.folderdeletenotice', 'confirmation');
// refresh folders list
this.folder_list();
};
this.file_search = function(value)
{
if (value) {
@ -708,6 +733,31 @@ function kolab_files_ui()
this.file_list();
};
// file(s) move request
this.file_move = function(files, folder)
{
if (!files || !files.length || !folder)
return;
var list = {};
$.each(files, function(i, v) {
list[v] = folder + file_api.env.directory_separator + file_api.file_name(v);
});
this.req = this.set_busy(true, 'kolab_files.filemoving');
this.get('file_move', {file: list}, 'file_move_response');
};
// file(s) move response handler
this.file_move_response = function(response)
{
if (!this.response(response))
return;
this.display_message('kolab_files.filemovenotice', 'confirmation');
this.file_list();
};
// file upload request
this.file_upload = function(form)
{

View file

@ -462,7 +462,8 @@ class kolab_files_engine
$this->rc->output->add_label('deletefolderconfirm', 'kolab_files.folderdeleting',
'kolab_files.foldercreating', 'kolab_files.uploading', 'kolab_files.filedeleteconfirm',
'kolab_files.folderdeleteconfirm', 'kolab_files.filedeleting');
'kolab_files.folderdeleteconfirm', 'kolab_files.filedeleting', 'kolab_files.filedeletenotice',
'kolab_files.filemoving', 'kolab_files.filemovenotice');
$this->rc->output->set_pagetitle($this->plugin->gettext('files'));
$this->rc->output->send('kolab_files.files');

View file

@ -33,8 +33,10 @@ $labels['foldercreatenotice'] = 'Folder created successfully.';
$labels['saveallnotice'] = 'Successfully saved $n file(s).';
$labels['saveallerror'] = 'Saving $n file(s) failed.';
$labels['attacherror'] = 'Failed to attach file(s) from the cloud';
$labels['filemoving'] = 'Moving file(s)...';
$labels['filedeleting'] = 'Deleting file(s)...';
$labels['filedeleteconfirm'] = 'Are you sure you want to delete selected files?';
$labels['filedeletenotice'] = 'File(s) deleted successfully.';
$labels['filemovenotice'] = 'File(s) moved successfully.';
?>