Implemented file rename, improvements files list request handling
This commit is contained in:
parent
aa1d7894ba
commit
8f06095640
5 changed files with 152 additions and 34 deletions
|
@ -83,7 +83,7 @@ window.rcmail && rcmail.addEventListener('init', function() {
|
|||
}
|
||||
|
||||
// "one file only" commands
|
||||
rcmail.env.file_commands = ['files-get'];
|
||||
rcmail.env.file_commands = ['files-get', 'files-edit'];
|
||||
// "one or more file" commands
|
||||
rcmail.env.file_commands_all = ['files-delete', 'files-move', 'files-copy'];
|
||||
|
||||
|
@ -176,18 +176,14 @@ function kolab_directory_selector_dialog(id)
|
|||
};
|
||||
|
||||
// show dialog window
|
||||
dialog.dialog({
|
||||
modal: true,
|
||||
resizable: !bw.ie6,
|
||||
closeOnEscape: (!bw.ie6 && !bw.ie7), // disable for performance reasons
|
||||
kolab_dialog_show(dialog, {
|
||||
title: rcmail.gettext('kolab_files.' + (id ? 'saveto' : 'saveall')),
|
||||
// close: function() { rcmail.dialog_close(); },
|
||||
buttons: buttons,
|
||||
minWidth: 250,
|
||||
minHeight: 300,
|
||||
height: 350,
|
||||
width: 300
|
||||
}).show();
|
||||
});
|
||||
|
||||
if (!rcmail.env.folders_loaded) {
|
||||
file_api.folder_list();
|
||||
|
@ -229,18 +225,14 @@ function kolab_files_selector_dialog()
|
|||
};
|
||||
|
||||
// show dialog window
|
||||
dialog.dialog({
|
||||
modal: true,
|
||||
resizable: !bw.ie6,
|
||||
closeOnEscape: (!bw.ie6 && !bw.ie7), // disable for performance reasons
|
||||
kolab_dialog_show(dialog, {
|
||||
title: rcmail.gettext('kolab_files.selectfiles'),
|
||||
// close: function() { rcmail.dialog_close(); },
|
||||
buttons: buttons,
|
||||
minWidth: 500,
|
||||
minHeight: 300,
|
||||
width: 700,
|
||||
height: 500
|
||||
}).show();
|
||||
});
|
||||
|
||||
if (!rcmail.env.files_loaded) {
|
||||
file_api.folder_list();
|
||||
|
@ -289,18 +281,14 @@ function kolab_files_folder_create_dialog()
|
|||
};
|
||||
|
||||
// show dialog window
|
||||
dialog.dialog({
|
||||
modal: true,
|
||||
resizable: !bw.ie6,
|
||||
closeOnEscape: (!bw.ie6 && !bw.ie7), // disable for performance reasons
|
||||
kolab_dialog_show(dialog, {
|
||||
title: rcmail.gettext('kolab_files.foldercreate'),
|
||||
// close: function() { rcmail.dialog_close(); },
|
||||
buttons: buttons,
|
||||
minWidth: 400,
|
||||
minHeight: 300,
|
||||
width: 500,
|
||||
height: 400
|
||||
}).show();
|
||||
});
|
||||
|
||||
// build parent selector
|
||||
select.append($('<option>').val('').text('---'));
|
||||
|
@ -317,6 +305,52 @@ function kolab_files_folder_create_dialog()
|
|||
});
|
||||
};
|
||||
|
||||
// file edition dialog
|
||||
function kolab_files_file_edit_dialog(file)
|
||||
{
|
||||
var dialog = $('#files-file-edit-dialog'),
|
||||
buttons = {}, name = file_api.file_name(file)
|
||||
input = $('input[name="name"]', dialog).val(name);
|
||||
|
||||
buttons[rcmail.gettext('kolab_files.save')] = function () {
|
||||
var folder = file_api.file_path(file), name = input.val();
|
||||
|
||||
if (!name)
|
||||
return;
|
||||
|
||||
name = folder + file_api.env.directory_separator + name;
|
||||
|
||||
// @TODO: now we only update filename
|
||||
if (name != file)
|
||||
file_api.file_rename(file, name);
|
||||
dialog.dialog('destroy').hide();
|
||||
};
|
||||
buttons[rcmail.gettext('kolab_files.cancel')] = function () {
|
||||
dialog.dialog('destroy').hide();
|
||||
};
|
||||
|
||||
// show dialog window
|
||||
kolab_dialog_show(dialog, {
|
||||
title: rcmail.gettext('kolab_files.fileedit'),
|
||||
buttons: buttons
|
||||
});
|
||||
};
|
||||
|
||||
function kolab_dialog_show(dialog, params)
|
||||
{
|
||||
params = $.extend({
|
||||
modal: true,
|
||||
resizable: !bw.ie6,
|
||||
closeOnEscape: (!bw.ie6 && !bw.ie7), // disabled for performance reasons
|
||||
minWidth: 400,
|
||||
minHeight: 300,
|
||||
width: 500,
|
||||
height: 400
|
||||
}, params || {});
|
||||
|
||||
dialog.dialog(params).show();
|
||||
};
|
||||
|
||||
// smart upload button
|
||||
function kolab_files_upload_input(button)
|
||||
{
|
||||
|
@ -632,6 +666,14 @@ rcube_webmail.prototype.files_open = function()
|
|||
file_api.file_open(files[0], rcmail.env.viewer);
|
||||
};
|
||||
|
||||
rcube_webmail.prototype.files_edit = function()
|
||||
{
|
||||
var files = this.env.file ? [this.env.file] : kolab_files_selected();
|
||||
|
||||
if (files.length == 1)
|
||||
file_api.file_edit_start(files[0]);
|
||||
};
|
||||
|
||||
rcube_webmail.prototype.files_set_quota = function(p)
|
||||
{
|
||||
if (p.total) {
|
||||
|
@ -653,6 +695,8 @@ rcube_webmail.prototype.files_set_quota = function(p)
|
|||
|
||||
function kolab_files_ui()
|
||||
{
|
||||
this.requests = {};
|
||||
|
||||
/*
|
||||
// Called on "session expired" session
|
||||
this.logout = function(response) {};
|
||||
|
@ -795,8 +839,6 @@ function kolab_files_ui()
|
|||
rcmail.enable_command('files-folder-delete', 'files-upload', false);
|
||||
this.env.folder = null;
|
||||
this.env.collection = null;
|
||||
|
||||
this.quota();
|
||||
};
|
||||
|
||||
// folder create request
|
||||
|
@ -864,6 +906,13 @@ function kolab_files_ui()
|
|||
if (!params)
|
||||
params = {};
|
||||
|
||||
// reset all pending list requests
|
||||
for (i in this.requests) {
|
||||
this.requests[i].abort();
|
||||
rcmail.hide_message(i);
|
||||
delete this.requests[i];
|
||||
}
|
||||
|
||||
if (params.all_folders) {
|
||||
params.collection = null;
|
||||
params.folder = null;
|
||||
|
@ -891,20 +940,23 @@ function kolab_files_ui()
|
|||
|
||||
// empty the list
|
||||
this.env.file_list = [];
|
||||
rcmail.file_list.clear();
|
||||
rcmail.file_list.clear(true);
|
||||
|
||||
// request
|
||||
if (params.collection || params.all_folders)
|
||||
this.file_list_loop(params);
|
||||
else if (this.env.folder) {
|
||||
this.req = this.set_busy(true, 'loading');
|
||||
this.request('file_list', params, 'file_list_response');
|
||||
params.req_id = this.set_busy(true, 'loading');
|
||||
this.requests[params.req_id] = this.request('file_list', params, 'file_list_response');
|
||||
}
|
||||
};
|
||||
|
||||
// file list response handler
|
||||
this.file_list_response = function(response)
|
||||
{
|
||||
if (response.req_id)
|
||||
rcmail.hide_message(response.req_id);
|
||||
|
||||
if (!this.response(response))
|
||||
return;
|
||||
|
||||
|
@ -945,9 +997,9 @@ function kolab_files_ui()
|
|||
this.env.folders_loop_lock = false;
|
||||
|
||||
for (i=0; i<folders.length && i<limit; i++) {
|
||||
this.req = this.set_busy(true, 'loading');
|
||||
params.req_id = this.set_busy(true, 'loading');
|
||||
params.folder = folders.shift();
|
||||
this.request('file_list', params, 'file_list_loop_response');
|
||||
this.requests[params.req_id] = this.request('file_list', params, 'file_list_loop_response');
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -959,10 +1011,13 @@ function kolab_files_ui()
|
|||
limit = Math.max(this.env.search_threads || 1, 1),
|
||||
valid = this.response(response);
|
||||
|
||||
if (response.req_id)
|
||||
rcmail.hide_message(response.req_id);
|
||||
|
||||
for (i=0; i<folders.length && i<limit; i++) {
|
||||
this.req = this.set_busy(true, 'loading');
|
||||
params.req_id = this.set_busy(true, 'loading');
|
||||
params.folder = folders.shift();
|
||||
this.request('file_list', params, 'file_list_loop_response');
|
||||
this.requests[params.req_id] = this.request('file_list', params, 'file_list_loop_response');
|
||||
}
|
||||
|
||||
if (!valid)
|
||||
|
@ -1060,7 +1115,7 @@ function kolab_files_ui()
|
|||
else if (c == 'size')
|
||||
col = '<td class="size">' + this.file_size(data.size) + '</td>';
|
||||
else if (c == 'options')
|
||||
col = '<td class="options"></td>'; // @TODO
|
||||
col = '<td class="options"><span></span></td>';
|
||||
else
|
||||
col = '<td class="' + c + '"></td>';
|
||||
|
||||
|
@ -1071,6 +1126,10 @@ function kolab_files_ui()
|
|||
.html(row)
|
||||
.attr({id: 'rcmrow' + index, 'data-file': file, 'data-type': data.type});
|
||||
|
||||
$('td.options > span', row).click(function(e) {
|
||||
kolab_files_file_edit_dialog(file);
|
||||
});
|
||||
|
||||
// collection (or search) lists files from all folders
|
||||
// display file name with full path as title
|
||||
if (!this.env.folder)
|
||||
|
@ -1259,15 +1318,12 @@ function kolab_files_ui()
|
|||
};
|
||||
|
||||
// open jquery UI dialog
|
||||
dialog.dialog({
|
||||
modal: true,
|
||||
resizable: !bw.ie6,
|
||||
closeOnEscape: (!bw.ie6 && !bw.ie7), // disable for performance reasons
|
||||
kolab_dialog_show(dialog.html(text), {
|
||||
close: skip_func,
|
||||
buttons: buttons,
|
||||
minWidth: 400,
|
||||
width: 400
|
||||
}).html(text).show();
|
||||
});
|
||||
};
|
||||
|
||||
// file move (with overwrite) response handler
|
||||
|
@ -1286,6 +1342,23 @@ function kolab_files_ui()
|
|||
}
|
||||
};
|
||||
|
||||
// file(s) rename request
|
||||
this.file_rename = function(oldfile, newfile)
|
||||
{
|
||||
this.req = this.set_busy(true, 'kolab_files.fileupdating');
|
||||
this.request('file_move', {file: oldfile, 'new': newfile}, 'file_rename_response');
|
||||
};
|
||||
|
||||
// file(s) move response handler
|
||||
this.file_rename_response = function(response)
|
||||
{
|
||||
if (!this.response(response))
|
||||
return;
|
||||
|
||||
// @TODO: we could update metadata instead
|
||||
this.file_list();
|
||||
};
|
||||
|
||||
// file upload request
|
||||
this.file_upload = function(form)
|
||||
{
|
||||
|
|
|
@ -100,6 +100,7 @@ class kolab_files_engine
|
|||
$this->rc->output->add_handlers(array(
|
||||
'folder-create-form' => array($this, 'folder_create_form'),
|
||||
'file-search-form' => array($this, 'file_search_form'),
|
||||
'file-edit-form' => array($this, 'file_edit_form'),
|
||||
'filelist' => array($this, 'file_list'),
|
||||
'filequotadisplay' => array($this, 'quota_display'),
|
||||
));
|
||||
|
@ -167,6 +168,35 @@ class kolab_files_engine
|
|||
return $out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Template object for file_edit form
|
||||
*/
|
||||
public function file_edit_form($attrib)
|
||||
{
|
||||
$attrib['name'] = 'file-edit-form';
|
||||
if (empty($attrib['id'])) {
|
||||
$attrib['id'] = 'file-edit-form';
|
||||
}
|
||||
|
||||
$input_name = new html_inputfield(array('id' => 'file-name', 'name' => 'name', 'size' => 30));
|
||||
$table = new html_table(array('cols' => 2, 'class' => 'propform'));
|
||||
|
||||
$table->add('title', html::label('file-name', Q($this->plugin->gettext('filename'))));
|
||||
$table->add(null, $input_name->show());
|
||||
|
||||
$out = $table->show();
|
||||
|
||||
// add form tag around text field
|
||||
if (empty($attrib['form'])) {
|
||||
$out = $this->rc->output->form_tag($attrib, $out);
|
||||
}
|
||||
|
||||
$this->plugin->add_label('save', 'cancel', 'fileupdating', 'fileedit');
|
||||
$this->rc->output->add_gui_object('file-edit-form', $attrib['id']);
|
||||
|
||||
return $out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Template object for file search form in "From cloud" dialog
|
||||
*/
|
||||
|
|
|
@ -26,7 +26,9 @@ $labels['get'] = 'Download';
|
|||
$labels['getfile'] = 'Download file';
|
||||
$labels['view'] = 'View';
|
||||
$labels['viewfile'] = 'View file';
|
||||
$labels['rename'] = 'Rename file';
|
||||
$labels['deletefile'] = 'Delete selected file(s)';
|
||||
$labels['fileedit'] = 'File properties';
|
||||
|
||||
$labels['collection_audio'] = 'Audio';
|
||||
$labels['collection_video'] = 'Video';
|
||||
|
@ -43,6 +45,7 @@ $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['fileupdating'] = 'Updating file...';
|
||||
$labels['filemoving'] = 'Moving file(s)...';
|
||||
$labels['filecopying'] = 'Copying file(s)...';
|
||||
$labels['filedeleting'] = 'Deleting file(s)...';
|
||||
|
|
|
@ -168,6 +168,7 @@
|
|||
|
||||
#filelist tr td.options {
|
||||
width: 26px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#filelist thead tr td.filename,
|
||||
|
@ -214,6 +215,13 @@
|
|||
padding: 0 3px;
|
||||
}
|
||||
|
||||
#filelist tbody tr td.options:hover span {
|
||||
width: 26px;
|
||||
height: 18px;
|
||||
background: url(../../../../skins/larry/images/buttons.png) -5px -418px no-repeat;
|
||||
display: block;
|
||||
}
|
||||
|
||||
#filelist td.filename {
|
||||
padding: 0 4px;
|
||||
}
|
||||
|
@ -249,6 +257,7 @@
|
|||
|
||||
#files-dialog,
|
||||
#files-compose-dialog,
|
||||
#files-file-edit-dialog,
|
||||
#files-folder-create-dialog {
|
||||
display: none;
|
||||
}
|
||||
|
|
|
@ -60,6 +60,9 @@
|
|||
<div id="files-folder-create-dialog">
|
||||
<roundcube:object name="folder-create-form" />
|
||||
</div>
|
||||
<div id="files-file-edit-dialog">
|
||||
<roundcube:object name="file-edit-form" />
|
||||
</div>
|
||||
|
||||
<div id="listoptions" class="propform popupdialog">
|
||||
<roundcube:if condition="!in_array('kolab_files_list_cols', (array)config:dont_override)" />
|
||||
|
|
Loading…
Add table
Reference in a new issue