Fix compatibility with contextmenu 2.x (#3560)
Warning: removed compatibility with contextmenu 1.x
This commit is contained in:
parent
fdde6fcbf0
commit
ecfb1354e2
5 changed files with 92 additions and 90 deletions
|
@ -125,15 +125,6 @@ window.rcmail && rcmail.addEventListener('init', function(evt) {
|
|||
rcmail.enable_command('attachment-save-calendar', mimetype == 'text/calendar' || mimetype == 'text/x-vcalendar' || mimetype == 'application/ics');
|
||||
}
|
||||
});
|
||||
|
||||
// add contextmenu item
|
||||
if (window.rcm_contextmenu_register_command) {
|
||||
rcm_contextmenu_register_command(
|
||||
'calendar-create-from-mail',
|
||||
function(cmd,el){ cal.create_from_mail() },
|
||||
'calendar.createfrommail',
|
||||
'moveto');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -33,60 +33,8 @@ if (window.rcmail) {
|
|||
rcmail.enable_command('book-save', true);
|
||||
}
|
||||
|
||||
// add contextmenu items
|
||||
if (window.rcm_contextmenu_register_command) {
|
||||
var menu = $('#rcmGroupMenu');
|
||||
rcm_contextmenu_register_command(
|
||||
'book-edit',
|
||||
function(cmd,el){ rcmail.book_edit() },
|
||||
'kolab_addressbook.bookedit',
|
||||
null,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
menu
|
||||
);
|
||||
rcm_contextmenu_register_command(
|
||||
'book-delete',
|
||||
function(cmd,el){ rcmail.book_delete() },
|
||||
'kolab_addressbook.bookdelete',
|
||||
null,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
menu
|
||||
);
|
||||
|
||||
if (rcmail.env.kolab_addressbook_carddav_url) {
|
||||
rcm_contextmenu_register_command(
|
||||
'book-showurl',
|
||||
function(cmd,el){ rcmail.book_showurl() },
|
||||
'kolab_addressbook.bookshowurl',
|
||||
null,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
menu
|
||||
);
|
||||
}
|
||||
|
||||
// adjust menu items when shown
|
||||
rcmail.addEventListener('contextmenu_show', function(p){
|
||||
if (p.menu.attr('id') != 'rcmGroupMenu')
|
||||
return;
|
||||
|
||||
var m = String(p.src.attr('id')).match(/rcmli([a-z0-9\-_=]+)/i),
|
||||
source = m && m.length ? rcmail.html_identifier_decode(m[1]) : null,
|
||||
sources = rcmail.env.address_sources,
|
||||
editable = source && sources[source] && sources[source].kolab && sources[source].editable,
|
||||
showurl = source && sources[source] && sources[source].carddavurl;
|
||||
|
||||
if (p.menu) {
|
||||
p.menu[editable ? 'enableContextMenuItems' : 'disableContextMenuItems']('#book-edit,#book-delete');
|
||||
p.menu[showurl ? 'enableContextMenuItems' : 'disableContextMenuItems']('#book-showurl');
|
||||
}
|
||||
});
|
||||
}
|
||||
// contextmenu
|
||||
kolab_addressbook_contextmenu();
|
||||
|
||||
// append search form for address books
|
||||
if (rcmail.gui_objects.folderlist) {
|
||||
|
@ -174,6 +122,7 @@ if (window.rcmail) {
|
|||
});
|
||||
}
|
||||
});
|
||||
|
||||
rcmail.addEventListener('listupdate', function() {
|
||||
rcmail.set_book_actions();
|
||||
});
|
||||
|
@ -310,10 +259,10 @@ rcube_webmail.prototype.book_delete_done = function(id, recur)
|
|||
rcube_webmail.prototype.book_update = function(data, old)
|
||||
{
|
||||
var classes = ['addressbook'],
|
||||
oldid = old ? rcmail.html_identifier_encode(old) : null,
|
||||
content = $('<div class="subscribed">').append(
|
||||
$('<a>').html(data.name).attr({
|
||||
href: this.url('', { _source: data.id }),
|
||||
$('<a>').html(data.listname).attr({
|
||||
href: this.url('', {_source: data.id}),
|
||||
id: 'kabt:' + data.id,
|
||||
rel: data.id,
|
||||
onclick: "return rcmail.command('list', '" + data.id + "', this)"
|
||||
}),
|
||||
|
@ -336,7 +285,7 @@ rcube_webmail.prototype.book_update = function(data, old)
|
|||
// update (remove old row)
|
||||
if (old) {
|
||||
// is the folder subscribed?
|
||||
if (!$('#rcmli' + oldid + ' > div.subscribed').length) {
|
||||
if (!data.subscribed) {
|
||||
content.removeClass('subscribed').find('span').attr('aria-checked', false);
|
||||
}
|
||||
|
||||
|
@ -353,6 +302,9 @@ rcube_webmail.prototype.book_update = function(data, old)
|
|||
this.treelist.select(data.id);
|
||||
this.env.source = data.id;
|
||||
}
|
||||
|
||||
// update contextmenu
|
||||
kolab_addressbook_contextmenu();
|
||||
};
|
||||
|
||||
// returns real IMAP folder name
|
||||
|
@ -361,3 +313,75 @@ rcube_webmail.prototype.book_realname = function()
|
|||
var source = this.env.source, sources = this.env.address_sources;
|
||||
return source != '' && sources[source] && sources[source].realname ? sources[source].realname : '';
|
||||
};
|
||||
|
||||
function kolab_addressbook_contextmenu()
|
||||
{
|
||||
if (!window.rcm_callbackmenu_init) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!rcmail.env.kolab_addressbook_contextmenu) {
|
||||
// adjust default addressbook menu actions
|
||||
rcmail.addEventListener('contextmenu_init', function(menu) {
|
||||
if (menu.menu_name == 'abooklist') {
|
||||
menu.addEventListener('activate', function(p) {
|
||||
// deactivate kolab addressbook actions
|
||||
if (p.command.match(/^book-/)) {
|
||||
return p.command == 'book-create';
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
rcmail.env.kolab_addressbook_contextmenu = true;
|
||||
|
||||
// add menu on kolab addressbooks
|
||||
var menu = rcm_callbackmenu_init({
|
||||
menu_name: 'kolab_abooklist',
|
||||
mouseover_timeout: -1, // no submenus here
|
||||
menu_source: ['#directorylist-footer', '#groupoptionsmenu']
|
||||
}, {
|
||||
'activate': function(p) {
|
||||
var source = rcmail.env.source,
|
||||
sources = rcmail.env.address_sources;
|
||||
|
||||
if (p.command == 'book-create') {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (p.command == 'book-edit' || p.command == 'book-delete' || p.command == 'group-create') {
|
||||
return !!(source && sources[source] && sources[source].kolab && sources[source].editable);
|
||||
}
|
||||
|
||||
if (p.command == 'book-showurl') {
|
||||
return !!(source && sources[source] && sources[source].carddavurl);
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
'beforeactivate': function(p) {
|
||||
// remove dummy items
|
||||
$('li.submenu', p.ref.container).remove();
|
||||
|
||||
rcmail.env.kolab_old_source = rcmail.env.source;
|
||||
rcmail.env.kolab_old_group = rcmail.env.group;
|
||||
|
||||
var onclick = $(p.source).attr('onclick');
|
||||
if (onclick && onclick.match(rcmail.context_menu_command_pattern)) {
|
||||
rcmail.env.source = RegExp.$2;
|
||||
rcmail.env.group = null;
|
||||
}
|
||||
},
|
||||
'aftercommand': function(p) {
|
||||
rcmail.env.source = rcmail.env.kolab_old_source;
|
||||
rcmail.env.group = rcmail.env.kolab_old_group;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
$('#directorylist div > a').off('contextmenu').on('contextmenu', function(e) {
|
||||
$(this).blur();
|
||||
rcm_show_menu(e, this, $(this).attr('rel'), menu);
|
||||
});
|
||||
};
|
||||
|
|
|
@ -620,24 +620,16 @@ class kolab_addressbook extends rcube_plugin
|
|||
}
|
||||
|
||||
if ($result) {
|
||||
$storage = $this->rc->get_storage();
|
||||
$delimiter = $storage->get_hierarchy_delimiter();
|
||||
$kolab_folder = kolab_storage::get_folder($folder);
|
||||
|
||||
// get folder/addressbook properties
|
||||
$abook = new rcube_kolab_contacts($folder);
|
||||
$props = $this->abook_prop(kolab_storage::folder_id($folder, true), $abook);
|
||||
$props['parent'] = kolab_storage::folder_id($kolab_folder->get_parent(), true);
|
||||
|
||||
$this->rc->output->show_message('kolab_addressbook.book'.$type.'d', 'confirmation');
|
||||
$this->rc->output->command('set_env', 'delimiter', $delimiter);
|
||||
$this->rc->output->command('book_update', array(
|
||||
'id' => kolab_storage::folder_id($folder, true),
|
||||
'name' => $kolab_folder->get_foldername(),
|
||||
'readonly' => false,
|
||||
'editable' => true,
|
||||
'groups' => true,
|
||||
'realname' => rcube_charset::convert($folder, 'UTF7-IMAP'), // IMAP folder name
|
||||
'group' => $kolab_folder->get_namespace(),
|
||||
'parent' => kolab_storage::folder_id($kolab_folder->get_parent()),
|
||||
'kolab' => true,
|
||||
), kolab_storage::folder_id($prop['oldname'], true));
|
||||
|
||||
$this->rc->output->command('book_update', $props, kolab_storage::folder_id($prop['oldname'], true));
|
||||
$this->rc->output->send('iframe');
|
||||
}
|
||||
|
||||
|
|
|
@ -135,3 +135,7 @@
|
|||
padding-right: 36px;
|
||||
}
|
||||
|
||||
/* for contextmenu */
|
||||
#directorylist a.contextRow {
|
||||
background-color: #C7E3EF;
|
||||
}
|
||||
|
|
|
@ -120,13 +120,4 @@ window.rcmail && rcmail.env.task == 'mail' && rcmail.addEventListener('init', fu
|
|||
rcmail.enable_command('attachment-save-task', is_ics);
|
||||
}
|
||||
});
|
||||
|
||||
// add contextmenu item
|
||||
if (window.rcm_contextmenu_register_command) {
|
||||
rcm_contextmenu_register_command(
|
||||
'tasklist-create-from-mail',
|
||||
function(cmd,el){ tasks.create_from_mail() },
|
||||
'tasklist.createfrommail',
|
||||
'moveto');
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Add table
Reference in a new issue