diff --git a/plugins/kolab_files/kolab_files.js b/plugins/kolab_files/kolab_files.js
index 195b8479..35304ac7 100644
--- a/plugins/kolab_files/kolab_files.js
+++ b/plugins/kolab_files/kolab_files.js
@@ -198,6 +198,38 @@ function kolab_files_init()
file_api.env.init_collection = rcmail.env.collection;
file_api.folder_list();
file_api.browser_capabilities_check();
+
+ if (rcmail.env.contextmenu) {
+ rcmail.env.folders_cm = rcmail.contextmenu.init({menu_name: 'foldercontextmenu', menu_source: '#folderoptions > ul', list_object: 'folder_list'}, {
+ addmenuitem: function(p) {
+ // don't add Mount option to the menu
+ var str = $(p.el).children('a').first().attr('onclick');
+ if (str && str.match(/folder-mount/))
+ return {result: false, abort: true};
+ },
+ activate: function(p) {
+ var folder = rcmail.env.context_menu_source_id;
+ switch (p.command) {
+ case 'files-folder-delete':
+ case 'folder-rename':
+ return !folder.match(/^folder-collection-(.*)$/);
+ case 'folder-share':
+ return !folder.match(/^folder-collection-(.*)$/) && file_api.is_shareable(folder);
+ case 'folder-create':
+ case 'folder-mount':
+ return true;
+ }
+ },
+ beforecommand: function(e) {
+ rcmail.env.file_api_context = [file_api.env.folder, file_api.env.collection];
+ file_api.env.folder = rcmail.env.context_menu_source_id;
+ },
+ aftercommand: function(e) {
+ file_api.env.folder = rcmail.env.file_api_context[0];
+ file_api.env.collection = rcmail.env.file_api_context[1];
+ }
+ });
+ }
}
}
@@ -481,7 +513,8 @@ function kolab_files_folder_edit_dialog()
var dialog = $('#files-folder-edit-dialog'),
buttons = {},
separator = file_api.env.directory_separator,
- arr = file_api.env.folder.split(separator),
+ current_folder = file_api.env.folder,
+ arr = current_folder.split(separator),
folder = arr.pop(),
path = arr.join(separator),
select = $('select[name="parent"]', dialog).html(''),
@@ -498,7 +531,7 @@ function kolab_files_folder_edit_dialog()
folder += name;
- file_api.folder_rename(file_api.env.folder, folder);
+ file_api.folder_rename(current_folder, folder);
kolab_dialog_close(this);
};
@@ -2209,6 +2242,13 @@ function kolab_files_ui()
return file_api.folder_list_subscription_button_click(this);
});
+ if (rcmail.env.contextmenu)
+ list.on('contextmenu', function(e) {
+ var elem = $(e.target).closest('li');
+ id = rcmail.html_identifier_decode(elem.attr('id').replace(/^rcmli/, ''));
+ rcmail.contextmenu.show_one(e, elem[0], id, rcmail.env.folders_cm);
+ });
+
if (rcmail.folder_list) {
rcmail.folder_list.reset();
this.search_results_widget = null;
@@ -2276,7 +2316,7 @@ function kolab_files_ui()
this.folder_select = function(folder)
{
- if (rcmail.busy)
+ if (rcmail.busy || !folder)
return;
rcmail.triggerEvent('files-folder-select', {folder: folder});
@@ -2703,13 +2743,12 @@ function kolab_files_ui()
if (folder == new_name)
return;
- this.env.folder_rename = new_name;
this.req = this.set_busy(true, 'kolab_files.folderupdating');
this.request('folder_move', {folder: folder, 'new': new_name}, 'folder_rename_response');
};
// folder create response handler
- this.folder_rename_response = function(response)
+ this.folder_rename_response = function(response, data)
{
if (!this.response(response))
return;
@@ -2717,7 +2756,9 @@ function kolab_files_ui()
this.display_message('kolab_files.folderupdatenotice', 'confirmation');
// refresh folders and files list
- this.env.folder = this.env.folder_rename;
+ if (this.env.folder == data.folder)
+ this.env.folder = data['new'];
+
this.folder_list();
};
@@ -2748,15 +2789,18 @@ function kolab_files_ui()
};
// folder delete response handler
- this.folder_delete_response = function(response)
+ this.folder_delete_response = function(response, data)
{
if (!this.response(response))
return;
- this.env.folder = null;
- rcmail.enable_command('files-folder-delete', 'folder-rename', 'files-list', false);
this.display_message('kolab_files.folderdeletenotice', 'confirmation');
+ if (this.env.folder == data.folder) {
+ this.env.folder = null;
+ rcmail.enable_command('files-folder-delete', 'folder-rename', 'files-list', false);
+ }
+
// refresh folders list
this.folder_list();
this.quota();
diff --git a/plugins/kolab_files/skins/elastic/templates/files.html b/plugins/kolab_files/skins/elastic/templates/files.html
index 76d8a320..10606650 100644
--- a/plugins/kolab_files/skins/elastic/templates/files.html
+++ b/plugins/kolab_files/skins/elastic/templates/files.html
@@ -10,7 +10,7 @@