Fix compatibility with contextmenu 2.x (#3560)

Warning: removed compatibility with contextmenu 1.x
This commit is contained in:
Aleksander Machniak 2014-09-03 12:23:48 +02:00
parent fdde6fcbf0
commit ecfb1354e2
5 changed files with 92 additions and 90 deletions

View file

@ -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');
}
}
}

View file

@ -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);
});
};

View file

@ -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');
}

View file

@ -135,3 +135,7 @@
padding-right: 36px;
}
/* for contextmenu */
#directorylist a.contextRow {
background-color: #C7E3EF;
}

View file

@ -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');
}
});