diff options
author | Hugues Hiegel <root@paranoid> | 2014-08-05 16:46:22 +0200 |
---|---|---|
committer | Hugues Hiegel <root@paranoid> | 2014-08-05 16:46:22 +0200 |
commit | 59478e06c25303a790a0840ab2ac30662c4ef781 (patch) | |
tree | 8d5e964a8f94adaef41efebb0597629f11495c42 /plugins/contextmenu | |
parent | 7c494b677f9e470ee0d32e62cfa8dc709f39e748 (diff) |
c'est la merde..working
Diffstat (limited to 'plugins/contextmenu')
39 files changed, 2113 insertions, 0 deletions
diff --git a/plugins/contextmenu/contextmenu.js b/plugins/contextmenu/contextmenu.js new file mode 100644 index 000000000..6d83f1fbe --- /dev/null +++ b/plugins/contextmenu/contextmenu.js @@ -0,0 +1,595 @@ +/** + * ContextMenu plugin script + */ + +rcube_webmail.prototype.contextmenu_command_handlers = new Object(); +rcube_webmail.prototype.contextmenu_disable_multi = new Array('#reply','#reply-all','#reply-list','#forward-inline','#print','#edit','#viewsource','#download','#open','#edit'); + +function rcm_contextmenu_update() { + //if (!rcmail.env.flag_for_deletion && rcmail.env.trash_mailbox && rcmail.env.mailbox != rcmail.env.trash_mailbox) + // $("#rcm_delete").html('<span>' + rcmail.gettext('movemessagetotrash') + '</span>'); + //else + // $("#rcm_delete").html('<span>' + rcmail.gettext('deletemessage') + '</span>'); +} + +function rcm_contextmenu_init(row) { + $("#" + row).contextMenu({ + menu: 'rcmContextMenu', + submenu_delay: 400 + }, + function(command, el, pos) { + var matches = String($(el).attr('id')).match(/rcmrow([a-z0-9\-_=]+)/i); + if ($(el) && matches) { + var prev_uid = rcmail.env.uid; + if (rcmail.message_list.selection.length <= 1 || !rcmail.message_list.in_selection(matches[1])) + rcmail.env.uid = matches[1]; + + // fix command string in IE + if (command.indexOf("#") > 0) + command = command.substr(command.indexOf("#") + 1); + + // enable the required command + cmd = (command == 'read' || command == 'unread' || command == 'flagged' || command == 'unflagged') ? 'mark' : command; + var prev_command = rcmail.commands[cmd]; + rcmail.enable_command(cmd, true); + + // process external commands + if (typeof rcmail.contextmenu_command_handlers[command] == 'function') { + rcmail.contextmenu_command_handlers[command](command, el, pos); + } + else if (typeof rcmail.contextmenu_command_handlers[command] == 'string') { + window[rcmail.contextmenu_command_handlers[command]](command, el, pos); + } + else { + switch (command) { + case 'read': + case 'unread': + case 'flagged': + case 'unflagged': + rcmail.command('mark', command, $(el)); + break; + case 'reply': + case 'reply-all': + case 'reply-list': + case 'forward-inline': + case 'forward-attachment': + case 'print': + case 'download': + case 'viewsource': + rcmail.command(command, '', $(el)); + break; + case 'edit': + rcmail.command(command, 'new', $(el)); + break; + case 'open': + rcmail.command(command, '', rcube_find_object('rcm_open')); + rcmail.sourcewin = window.open(rcube_find_object('rcm_open').href); + if (rcmail.sourcewin) + window.setTimeout(function() { rcmail.sourcewin.focus(); }, 20); + + rcube_find_object('rcm_open').href = '#open'; + break; + case 'delete': + case 'moveto': + if (command == 'moveto' && rcmail.env.rcm_destfolder == rcmail.env.mailbox) + return; + + var prev_sel = null; + + // also select childs of (collapsed) threads + if (rcmail.env.uid) { + if (!rcmail.message_list.in_selection(rcmail.env.uid)) { + prev_sel = rcmail.message_list.get_selection(); + rcmail.message_list.select_row(rcmail.env.uid); + } + + if (rcmail.message_list.rows[rcmail.env.uid].has_children && !rcmail.message_list.rows[rcmail.env.uid].expanded) + rcmail.message_list.select_childs(rcmail.env.uid); + + rcmail.env.uid = null; + } + + rcmail.command(command, rcmail.env.rcm_destfolder, $(el)); + + if (prev_sel) { + rcmail.message_list.clear_selection(); + + for (var i in prev_sel) + rcmail.message_list.select_row(prev_sel[i], CONTROL_KEY); + } + + delete rcmail.env.rcm_destfolder; + break; + } + } + + rcmail.enable_command(cmd, prev_command); + rcmail.env.uid = prev_uid; + } + }); +} + +function rcm_set_dest_folder(folder) { + rcmail.env.rcm_destfolder = folder; +} + +function rcm_contextmenu_register_command(command, callback, label, pos, sep, multi, newSub, menu, liclass) { + if (!menu) + menu = $('#rcmContextMenu'); + + if (!liclass) + liclass = command; + + if (typeof label != 'string') { + var menuItem = label.children('li'); + } + else { + var menuItem = $('<li>').addClass(liclass); + $('<a>').attr('href', '#' + command).addClass('active').html('<span>' + rcmail.gettext(label) + '</span>').appendTo(menuItem); + } + + rcmail.contextmenu_command_handlers[command] = callback; + + if (pos && menu.children('li.' + pos) && newSub) { + subMenu = menu.children('li.' + pos); + subMenu.addClass('submenu'); + + var mainLink = null; + if (subMenu.children('a') && !subMenu.hasClass('sublink')) { + subMenu.addClass('sublink'); + + var mainLink = $('<li>').addClass(pos); + subMenu.children('a').clone().appendTo(mainLink) + subMenu.children('a').addClass('mainlink'); + } + + var newMenu = $('<ul>').addClass('toolbarmenu').appendTo(subMenu); + + if (mainLink) + newMenu.append(mainLink); + + newMenu.append(menuItem); + } + else if (pos && menu.children('li.' + pos)) { + menu.children('li.' + pos).before(menuItem); + } + else { + menu.append(menuItem); + } + + if (sep == 'before') + menuItem.addClass('separator_above'); + else if (sep == 'after') + menuItem.addClass('separator_below'); + + if (!multi) + rcmail.contextmenu_disable_multi[rcmail.contextmenu_disable_multi.length] = '#' + command; +} + +function rcm_foldermenu_init() { + $("#mailboxlist li").contextMenu({ + menu: 'rcmFolderMenu' + }, + function(command, el, pos) { + var matches = String($(el).children('a').attr('onclick')).match(/.*rcmail.command\(["']list["'],\s*["']([^"']*)["'],\s*this\).*/i); + if ($(el) && matches) { + var mailbox = matches[1]; + var messagecount = 0; + + if (command == 'readfolder' || command == 'expunge' || command == 'purge') { + if (mailbox == rcmail.env.mailbox) { + messagecount = rcmail.env.messagecount; + } + else if (rcmail.env.unread_counts[mailbox] == 0) { + var lock = rcmail.set_busy(true, 'loading'); + + querystring = '_mbox=' + urlencode(mailbox); + querystring += (querystring ? '&' : '') + '_remote=1'; + var url = rcmail.env.comm_path + '&_action=' + 'plugin.contextmenu.messagecount' + '&' + querystring + + // send request + console.log('HTTP POST: ' + url); + + jQuery.ajax({ + url: url, + dataType: "json", + success: function(response) { messagecount = response.env.messagecount; }, + async: false + }); + + rcmail.set_busy(false, null, lock); + } + + if (rcmail.env.unread_counts[mailbox] == 0 && messagecount == 0) { + rcmail.display_message(rcmail.get_label('nomessagesfound'), 'notice'); + return false; + } + } + + // fix command string in IE + if (command.indexOf("#") > 0) + command = command.substr(command.indexOf("#") + 1); + + // enable the required command + var prev_command = rcmail.commands[command]; + rcmail.enable_command(command, true); + + // process external commands + if (typeof rcmail.contextmenu_command_handlers[command] == 'function') { + rcmail.contextmenu_command_handlers[command](command, el, pos); + } + else if (typeof rcmail.contextmenu_command_handlers[command] == 'string') { + window[rcmail.contextmenu_command_handlers[command]](command, el, pos); + } + else { + switch (command) { + case 'readfolder': + var lock = rcmail.set_busy(true, 'loading'); + rcmail.http_request('plugin.contextmenu.readfolder', '_mbox=' + urlencode(mailbox) + '&_cur=' + rcmail.env.mailbox + '&_oact=' + rcmail.env.action, lock); + break; + case 'expunge': + rcmail.expunge_mailbox(mailbox); + break; + case 'purge': + rcmail.purge_mailbox(mailbox); + break; + case 'collapseall': + case 'expandall': + targetdiv = (command == 'collapseall') ? 'expanded' : 'collapsed'; + $("#mailboxlist div." + targetdiv).each( function() { + var el = $(this); + var matches = String($(el).attr('onclick')).match(/.*rcmail.command\(["']collapse-folder["'],\s*["']([^"']*)["']\).*/i); + rcmail.collapse_folder(matches[1]); + }); + break; + case 'openfolder': + rcube_find_object('rcm_openfolder').href = '?_task=mail&_mbox='+urlencode(mailbox); + rcmail.sourcewin = window.open(rcube_find_object('rcm_openfolder').href); + if (rcmail.sourcewin) + window.setTimeout(function() { rcmail.sourcewin.focus(); }, 20); + + rcube_find_object('rcm_openfolder').href = '#openfolder'; + break; + } + } + + rcmail.enable_command(command, prev_command); + } + }); +} + +function rcm_update_options(el) { + if (el.hasClass('message')) { + $('#rcmContextMenu').disableContextMenuItems('#reply-list'); + var matches = String($(el).attr('id')).match(/rcmrow([a-z0-9\-_=]+)/i); + if ($(el) && matches) { + if (rcmail.message_list.selection.length > 1 && rcmail.message_list.in_selection(matches[1])) { + $('#rcmContextMenu').disableContextMenuItems(rcmail.contextmenu_disable_multi.join(',')); + } + else { + $('#rcmContextMenu').enableContextMenuItems(rcmail.contextmenu_disable_multi.join(',')); + + var msg = rcmail.env.messages[matches[1]]; + if (!msg.ml) + $('#rcmContextMenu').disableContextMenuItems('#reply-list'); + } + } + } + else if (el.hasClass('mailbox')) { + $('#rcmFolderMenu').disableContextMenuItems('#readfolder,#purge,#collapseall,#expandall'); + var matches = String($(el).children('a').attr('onclick')).match(/.*rcmail.command\(["']list["'],\s*["']([^"']*)["'],\s*this\).*/i); + if ($(el) && matches) { + var mailbox = matches[1]; + + if (rcmail.env.unread_counts[mailbox] > 0) + $('#rcmFolderMenu').enableContextMenuItems('#readfolder'); + + if (mailbox == rcmail.env.trash_mailbox || mailbox == rcmail.env.junk_mailbox + || mailbox.match('^' + RegExp.escape(rcmail.env.trash_mailbox) + RegExp.escape(rcmail.env.delimiter)) + || mailbox.match('^' + RegExp.escape(rcmail.env.junk_mailbox) + RegExp.escape(rcmail.env.delimiter))) + $('#rcmFolderMenu').enableContextMenuItems('#purge'); + + if ($("#mailboxlist div.expanded").length > 0) + $('#rcmFolderMenu').enableContextMenuItems('#collapseall'); + + if ($("#mailboxlist div.collapsed").length > 0) + $('#rcmFolderMenu').enableContextMenuItems('#expandall'); + } + } + else if (el.hasClass('addressbook') || el.hasClass('contactgroup')) { + $('#rcmGroupMenu').disableContextMenuItems('#group-create,#group-rename,#group-delete'); + + if ($(el).hasClass('contactgroup') && $(el).children('a').attr('rel')) { + var matches = $(el).children('a').attr('rel').match(/([A-Z0-9\-_]+):?([A-Z0-9\-_]+)?/i); + + if (!rcmail.env.address_sources[matches[1]].readonly) { + if (!rcmail.name_input) + $('#rcmGroupMenu').enableContextMenuItems('#group-rename'); + + $('#rcmGroupMenu').enableContextMenuItems('#group-delete'); + } + } + else if ($(el).hasClass('addressbook')) { + var source = $(el).children('a').attr('rel'); + + if (!rcmail.env.address_sources[source].readonly) + $('#rcmGroupMenu').enableContextMenuItems('#group-create') + } + } + else if (rcmail.env.task == 'addressbook') { + var matches = String($(el).attr('id')).match(/rcmrow([a-z0-9\-_=]+)/i); + if ($(el) && matches) { + if (rcmail.contact_list.selection.length > 1 && rcmail.contact_list.in_selection(matches[1])) + $('#rcmAddressMenu').disableContextMenuItems(rcmail.contextmenu_disable_multi.join(',')); + else + $('#rcmAddressMenu').enableContextMenuItems(rcmail.contextmenu_disable_multi.join(',')); + + if (rcmail.env.group && rcmail.contact_list.in_selection(matches[1])) + $('#rcmAddressMenu').enableContextMenuItems('#group-remove-selected'); + else + $('#rcmAddressMenu').disableContextMenuItems('#group-remove-selected'); + + var ab_src = rcmail.env.source ? rcmail.env.source : matches[1].split('-', 2)[1]; + + if (rcmail.env.address_sources[ab_src].readonly) + $('#rcmAddressMenu').disableContextMenuItems('#edit,#delete,#group-remove-selected'); + } + } +} + +function rcm_addressmenu_init(row) { + $("tr[id=" + row + "]").contextMenu({ + menu: 'rcmAddressMenu' + }, + function(command, el, pos) { + var matches = String($(el).attr('id')).match(/rcmrow([a-z0-9\-_=]+)/i); + if ($(el) && matches) { + var prev_cid = rcmail.env.cid; + if (rcmail.contact_list.selection.length <= 1 || !rcmail.contact_list.in_selection(matches[1])) + rcmail.env.cid = matches[1]; + + // fix command string in IE + if (command.indexOf("#") > 0) + command = command.substr(command.indexOf("#") + 1); + + // enable the required command + cmd = command; + var prev_command = rcmail.commands[cmd]; + rcmail.enable_command(cmd, true); + + // process external commands + if (typeof rcmail.contextmenu_command_handlers[command] == 'function') { + rcmail.contextmenu_command_handlers[command](command, el, pos); + } + else if (typeof rcmail.contextmenu_command_handlers[command] == 'string') { + window[rcmail.contextmenu_command_handlers[command]](command, el, pos); + } + else { + switch (command) { + case 'edit': + rcmail.contact_list.select(rcmail.env.cid); + clearTimeout(rcmail.preview_timer) + rcmail.command(command, '', $(el)); + break; + case 'compose': + case 'delete': + case 'moveto': + case 'group-remove-selected': + var ab_src = rcmail.env.source ? rcmail.env.source : matches[1].split('-', 2)[1]; + + if (command == 'moveto') { + // check for valid taget + if (rcmail.env.rcm_destbook == ab_src || (rcmail.env.rcm_destgroup && rcmail.env.contactfolders['G' + rcmail.env.rcm_destsource + rcmail.env.rcm_destgroup].id == rcmail.env.group)) + return; + } + + var prev_sel = null; + + if (rcmail.env.cid) { + if (!rcmail.contact_list.in_selection(rcmail.env.cid)) { + prev_sel = rcmail.contact_list.get_selection(); + rcmail.contact_list.select(rcmail.env.cid); + } + else if (rcmail.contact_list.get_single_selection() == rcmail.env.cid) { + rcmail.env.cid = null; + } + else { + prev_sel = rcmail.contact_list.get_selection(); + rcmail.contact_list.select(rcmail.env.cid); + } + } + + if (command == 'delete') + rcmail.env.cid = null; + + rcmail.drag_active = true; + if (rcmail.env.rcm_destgroup) + rcmail.command(command, rcmail.env.contactfolders['G' + rcmail.env.rcm_destsource + rcmail.env.rcm_destgroup], $(el)); + else + rcmail.command(command, rcmail.env.contactfolders[rcmail.env.rcm_destsource], $(el)); + rcmail.drag_active = false; + + if (prev_sel) { + rcmail.contact_list.clear_selection(); + + for (var i in prev_sel) + rcmail.contact_list.select_row(prev_sel[i], CONTROL_KEY); + } + + rcmail.env.rcm_destbook = null; + rcmail.env.rcm_destsource = null; + rcmail.env.rcm_destgroup = null; + break; + } + } + + rcmail.enable_command(cmd, prev_command); + rcmail.env.cid = prev_cid; + } + }); +} + +function rcm_set_dest_book(obj, source, group) { + rcmail.env.rcm_destbook = obj; + rcmail.env.rcm_destsource = source; + rcmail.env.rcm_destgroup = group; +} + +function rcm_groupmenu_init(li) { + $(li).contextMenu({ + menu: 'rcmGroupMenu' + }, + function(command, el, pos) { + var matches = $(el).children('a').attr('rel').match(/([A-Z0-9\-_]+):?([A-Z0-9\-_]+)?/i); + if ($(el) && matches) { + prev_group = rcmail.env.group; + prev_source = rcmail.env.source; + + cur_source = matches[1]; + if (matches[2]) + cur_id = matches[2]; + else + cur_id = rcmail.env.group; + + rcmail.env.group = cur_id + rcmail.env.source = cur_source; + + // fix command string in IE + if (command.indexOf("#") > 0) + command = command.substr(command.indexOf("#") + 1); + + // enable the required command + var prev_command = rcmail.commands[command]; + rcmail.enable_command(command, true); + + // process external commands + if (typeof rcmail.contextmenu_command_handlers[command] == 'function') { + rcmail.contextmenu_command_handlers[command](command, el, pos); + } + else if (typeof rcmail.contextmenu_command_handlers[command] == 'string') { + window[rcmail.contextmenu_command_handlers[command]](command, el, pos); + } + else { + switch (command) { + case 'group-create': + rcmail.command(command, '', $(el).children('a')); + break; + case 'group-rename': + rcmail.command(command, '', $(el).children('a')); + + // callback requires target is selected + rcmail.enable_command('listgroup', true); + rcmail.env.group = prev_group; + rcmail.env.source = prev_source + prev_group = cur_id; + prev_source = cur_source; + rcmail.command('listgroup', {'source': prev_source,'id': prev_group}, $(el).children('a')); + rcmail.enable_command('listgroup', false); + break; + case 'group-delete': + rcmail.command(command, '', $(el).children('a')); + break; + } + } + + rcmail.enable_command(command, prev_command); + rcmail.env.group = prev_group; + rcmail.env.source = prev_source; + } + }); +} + +function rcm_groupmenu_update(action, props) { + var gid = props.source + props.id; + gid = gid.replace(rcmail.identifier_expr, '_'); + + switch (action) { + case 'insert': + var link = $('<a>') + .attr('id', 'rcm_contextgrps_G' + gid) + .attr('href', '#moveto') + .addClass('active') + .attr('onclick', "rcm_set_dest_book('G" + gid + "', '" + props.source + "','" + props.id + "')") + .html('<span>' + props.name + '</span>'); + + var li = $('<li>').addClass('contactgroup').append(link); + + var sibling = $('#rcm_contextaddr_' + props.source); + $('a[id^="rcm_contextgrps_G"]').each(function(i, elem) { + if (props.name.toUpperCase().trim() >= $(this).text().toUpperCase().trim()) + sibling = $(elem).parent(); + else + return false; + }); + + $(li).insertAfter($(sibling)); + + rcm_groupmenu_init(props.li); + break; + case 'update': + if ($('#rcm_contextgrps_G' + gid).length) { + if (props.newid) { + var new_gid = props.source + props.newid; + new_gid = new_gid.replace(rcmail.identifier_expr, '_'); + + var link = $('<a>') + .attr('id', 'rcm_contextgrps_G' + new_gid) + .attr('href', '#moveto') + .addClass('active') + .attr('onclick', "rcm_set_dest_book('G" + new_gid + "', '" + props.source + "','" + props.newid + "')") + .html('<span>' + props.name + '</span>'); + + $('#rcm_contextgrps_G' + gid).replaceWith(link); + } + else { + $('#rcm_contextgrps_G' + gid).html('<span>' + props.name + '</span>'); + } + + row = $('#rcm_contextgrps_G' + gid).parent().clone(true); + $('#rcm_contextgrps_G' + gid).parent().remove(); + + var sibling = $('#rcm_contextaddr_' + props.source); + $('a[id^="rcm_contextgrps_G"]').each(function(i, elem) { + if (props.name.toUpperCase().trim() >= $(this).text().toUpperCase().trim()) + sibling = $(elem).parent(); + else + return false; + }); + + $(row).insertAfter($(sibling)); + } + + break; + case 'remove': + if ($('#rcm_contextgrps_G' + gid).length) + $('#rcm_contextgrps_G' + gid).remove(); + + break; + } +} + +$(document).ready(function() { + if (window.rcmail) { + // init message list menu + if ($('#rcmContextMenu').length > 0) { + rcmail.addEventListener('listupdate', function(props) { rcm_contextmenu_update(); } ); + rcmail.addEventListener('insertrow', function(props) { rcm_contextmenu_init(props.row.id); } ); + } + + // init folder list menu + if ($('#rcmFolderMenu').length > 0) + rcmail.add_onload('rcm_foldermenu_init();'); + + // init contact list menu + if ($('#rcmAddressMenu').length > 0) + rcmail.addEventListener('insertrow', function(props) { rcm_addressmenu_init(props.row.id); } ); + + // init group list menu + if ($('#rcmGroupMenu').length > 0) { + rcmail.add_onload('rcm_groupmenu_init("#directorylist li");'); + rcmail.addEventListener('group_insert', function(props) { rcm_groupmenu_update('insert', props); } ); + rcmail.addEventListener('group_update', function(props) { rcm_groupmenu_update('update', props); } ); + rcmail.addEventListener('group_delete', function(props) { rcm_groupmenu_update('remove', props); } ); + } + } +});
\ No newline at end of file diff --git a/plugins/contextmenu/contextmenu.php b/plugins/contextmenu/contextmenu.php new file mode 100644 index 000000000..aa29aa8d5 --- /dev/null +++ b/plugins/contextmenu/contextmenu.php @@ -0,0 +1,315 @@ +<?php + +/** + * ContextMenu + * + * Plugin to add a context menu to the message list + * + * @version @package_version@ + * @author Philip Weir + */ +class contextmenu extends rcube_plugin +{ + public $task = 'mail|addressbook'; + + function init() + { + $rcmail = rcube::get_instance(); + if ($rcmail->task == 'mail' && ($rcmail->action == '' || $rcmail->action == 'show')) + $this->add_hook('render_mailboxlist', array($this, 'show_mailbox_menu')); + elseif ($rcmail->task == 'addressbook' && $rcmail->action == '') + $this->add_hook('addressbooks_list', array($this, 'show_addressbook_menu')); + + $this->register_action('plugin.contextmenu.messagecount', array($this, 'messagecount')); + $this->register_action('plugin.contextmenu.readfolder', array($this, 'readfolder')); + } + + public function messagecount() + { + $mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_GET); + $this->api->output->set_env('messagecount', rcube::get_instance()->storage->count($mbox)); + $this->api->output->send(); + } + + public function readfolder() + { + $storage = rcube::get_instance()->storage; + $cbox = rcube_utils::get_input_value('_cur', rcube_utils::INPUT_GET); + $mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_GET); + $oact = rcube_utils::get_input_value('_oact', rcube_utils::INPUT_GET); + + $uids = $storage->search_once($mbox, 'ALL UNSEEN', true); + + if ($uids->is_empty()) + return false; + + $storage->set_flag($uids->get(), 'SEEN', $mbox); + + if ($cbox == $mbox && $oact == '') + $this->api->output->command('toggle_read_status', 'read', $uids->get()); + + rcmail_send_unread_count($mbox, true); + $this->api->output->send(); + } + + public function show_mailbox_menu($args) + { + $rcmail = rcube::get_instance(); + $this->add_texts('localization/'); + $rcmail->output->add_label('nomessagesfound'); + $this->include_script('jquery.contextMenu.js'); + $this->include_script('jquery.mousewheel.js'); + $this->include_script('contextmenu.js'); + + $this->include_stylesheet($this->local_skin_path() . '/contextmenu.css'); + if ($rcmail->output->browser->ie && $rcmail->output->browser->ver == 6) + $this->include_stylesheet($this->local_skin_path() . '/ie6hacks.css'); + + $out = ''; + + // message list menu + if ($rcmail->action == '') { + $li = ''; + + $li .= html::tag('li', array('class' => 'conmentitle'), html::span(null, rcmail::Q($this->gettext('markmessages')))); + $li .= html::tag('li', array('class' => 'markmessage read'), html::a(array('href' => "#read", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('markread'))))); + $li .= html::tag('li', array('class' => 'markmessage unread'), html::a(array('href' => "#unread", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('markunread'))))); + $li .= html::tag('li', array('class' => 'markmessage flagged'), html::a(array('href' => "#flagged", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('markflagged'))))); + $li .= html::tag('li', array('class' => 'markmessage unflagged separator_below'), html::a(array('href' => "#unflagged", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('markunflagged'))))); + $li .= html::tag('li', array('class' => 'reply'), html::a(array('href' => "#reply", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('replytomessage'))))); + + $lis = ''; + $lis .= html::tag('li', array('class' => 'replyall'), html::a(array('href' => "#reply-all", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('replytoallmessage'))))); + $lis .= html::tag('li', array('class' => 'replylist'), html::a(array('href' => "#reply-list", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('replylist'))))); + $li .= html::tag('li', array('class' => 'submenu replyacts'), html::a(array('href' => "#reply-all", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('replyall')))) . html::tag('ul', array('class' => 'popupmenu toolbarmenu replyacts'), $lis)); + + $lis = ''; + $lis .= html::tag('li', array('class' => 'forwardinline'), html::a(array('href' => "#forward-inline", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('forwardinline'))))); + $lis .= html::tag('li', array('class' => 'forwardattachment'), html::a(array('href' => "#forward-attachment", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('forwardattachment'))))); + $li .= html::tag('li', array('class' => 'submenu forwardacts'), html::a(array('href' => "#forward-inline", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('forward')))) . html::tag('ul', array('class' => 'popupmenu toolbarmenu forwardacts'), $lis)); + + //$rcmail = rcmail::get_instance(); + //if (!$rcmail->config->get('flag_for_deletion', false) && $rcmail->config->get('trash_mbox') && $_SESSION['mbox'] != $rcmail->config->get('trash_mbox')) + // $li .= html::tag('li', array('class' => 'delete separator_below'), html::a(array('href' => "#delete", 'id' => 'rcm_delete', 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('movemessagetotrash'))))); + //else + $li .= html::tag('li', array('class' => 'delete separator_below'), html::a(array('href' => "#delete", 'id' => 'rcm_delete', 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('deletemessage'))))); + + $li .= html::tag('li', array('class' => 'submenu moveto'), html::span(null, rcmail::Q($this->gettext('moveto'))) . $this->_gen_folder_list($args['list'], '#moveto')); + + $lis = ''; + $lis .= html::tag('li', array('class' => 'print'), html::a(array('href' => "#print", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('printmessage'))))); + $lis .= html::tag('li', array('class' => 'save'), html::a(array('href' => "#download", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('emlsave'))))); + $lis .= html::tag('li', array('class' => 'edit'), html::a(array('href' => "#edit", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('editasnew'))))); + $lis .= html::tag('li', array('class' => 'source separator_below'), html::a(array('href' => "#viewsource", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('viewsource'))))); + $lis .= html::tag('li', array('class' => 'open'), html::a(array('href' => "#open", 'id' => 'rcm_open', 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('openinextwin'))))); + $li .= html::tag('li', array('class' => 'submenu moreacts'), html::span(null, rcmail::Q($this->gettext('moreactions'))) . html::tag('ul', array('class' => 'popupmenu toolbarmenu moreacts'), $lis)); + + $out .= html::tag('ul', array('id' => 'rcmContextMenu', 'class' => 'popupmenu toolbarmenu'), $li); + } + + // folder list menu + $li = ''; + + $li .= html::tag('li', array('class' => 'readfolder separator_below'), html::a(array('href' => "#readfolder", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('markreadfolder'))))); + + $li .= html::tag('li', array('class' => 'expunge'), html::a(array('href' => "#expunge", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('compact'))))); + $li .= html::tag('li', array('class' => 'purge separator_below'), html::a(array('href' => "#purge", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('empty'))))); + + $li .= html::tag('li', array('class' => 'collapseall'), html::a(array('href' => "#collapseall", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('collapseall'))))); + $li .= html::tag('li', array('class' => 'expandall separator_below'), html::a(array('href' => "#expandall", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('expandall'))))); + + $li .= html::tag('li', array('class' => 'openfolder'), html::a(array('href' => "#openfolder", 'id' => 'rcm_openfolder', 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('openinextwin'))))); + + $out .= html::tag('ul', array('id' => 'rcmFolderMenu', 'class' => 'popupmenu toolbarmenu'), $li); + + $this->api->output->add_footer(html::div(null , $out)); + + if ($rcmail->action == 'show') + $this->api->output->set_env('delimiter', $rcmail->storage->get_hierarchy_delimiter()); + } + + public function show_addressbook_menu($args) + { + $rcmail = rcube::get_instance(); + $this->add_texts('localization/'); + $this->include_script('jquery.contextMenu.js'); + $this->include_script('jquery.mousewheel.js'); + $this->include_stylesheet($this->local_skin_path() . '/contextmenu.css'); + $this->include_script('contextmenu.js'); + $out = ''; + + // contact list menu + $li = ''; + + $li .= html::tag('li', array('class' => 'composeto separator_below'), html::a(array('href' => "#compose", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('composeto'))))); + + $li .= html::tag('li', array('class' => 'editcontact'), html::a(array('href' => "#edit", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('editcontact'))))); + $li .= html::tag('li', array('class' => 'deletecontact'), html::a(array('href' => "#delete", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('deletecontact'))))); + $li .= html::tag('li', array('class' => 'removefromgroup'), html::a(array('href' => "#group-remove-selected", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('groupremoveselected'))))); + + if ($lis = $this->_gen_addressbooks_list($args['sources'], '#moveto')) + $li .= html::tag('li', array('class' => 'submenu separator_above'), html::span(null, rcmail::Q($this->gettext('copyto'))) . $lis); + + $out .= html::tag('ul', array('id' => 'rcmAddressMenu', 'class' => 'popupmenu toolbarmenu'), $li); + + // contact group menu + $li = ''; + + $li .= html::tag('li', array('class' => 'groupcreate'), html::a(array('href' => "#group-create", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('newcontactgroup'))))); + $li .= html::tag('li', array('class' => 'grouprename'), html::a(array('href' => "#group-rename", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('grouprename'))))); + $li .= html::tag('li', array('class' => 'groupdelete'), html::a(array('href' => "#group-delete", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('groupdelete'))))); + + $out .= html::tag('ul', array('id' => 'rcmGroupMenu', 'class' => 'popupmenu toolbarmenu'), $li); + + $this->api->output->add_footer(html::div(null , $out)); + } + + // based on rcmail->render_folder_tree_html() + private function _gen_folder_list($arrFolders, $command, $nestLevel = 0, &$folderTotal = 0) + { + $rcmail = rcube::get_instance(); + + $maxlength = 35; + $realnames = false; + + $out = ''; + foreach ($arrFolders as $key => $folder) { + $title = null; + + if (($folder_class = $rcmail->folder_classname($folder['id'])) && !$realnames) { + $foldername = $rcmail->gettext($folder_class); + } + else { + $foldername = $folder['name']; + + // shorten the folder name to a given length + if ($maxlength && $maxlength > 1) { + $fname = abbreviate_string($foldername, $maxlength); + + if ($fname != $foldername) + $title = $foldername; + + $foldername = $fname; + } + } + + // make folder name safe for ids and class names + $folder_id = asciiwords($folder['id'], true, '_'); + $classes = array(); + + // set special class for Sent, Drafts, Trash and Junk + if ($folder['id'] == $rcmail->config->get('sent_mbox')) + $classes[] = 'sent'; + else if ($folder['id'] == $rcmail->config->get('drafts_mbox')) + $classes[] = 'drafts'; + else if ($folder['id'] == $rcmail->config->get('trash_mbox')) + $classes[] = 'trash'; + else if ($folder['id'] == $rcmail->config->get('junk_mbox')) + $classes[] = 'junk'; + else if ($folder['id'] == 'INBOX') + $classes[] = 'inbox'; + else + $classes[] = '_'.asciiwords($folder_class ? $folder_class : strtolower($folder['id']), true); + + if ($folder['virtual']) + $classes[] = 'virtual'; + + if ($nestLevel > 0) + $classes[] = 'subfolder'; + + $out .= html::tag('li', array('class' => join(' ', $classes)), html::a(array('href' => $command, 'onclick' => "rcm_set_dest_folder('". rcmail::JQ($folder['id']) ."')", 'class' => 'active', 'title' => $title), html::span(null, str_repeat(' ', $nestLevel) . rcmail::Q($foldername)))); + + if (!empty($folder['folders'])) + $out .= $this->_gen_folder_list($folder['folders'], $command, $nestLevel+1, $folderTotal); + + $folderTotal++; + } + + if ($nestLevel == 0) { + if ($folderTotal > 5) { + $out = html::tag('ul', array('class' => 'toolbarmenu folders scrollable'), $out); + $out = html::tag('div', array('class' => 'scroll_up_pas'), '') . $out . html::tag('div', array('class' => 'scroll_down_act'), ''); + $out = html::tag('div', array('class' => 'popupmenu'), $out); + } + else { + $out = html::tag('ul', array('class' => 'popupmenu toolbarmenu folders'), $out); + } + } + + return $out; + } + + // based on rcmail_directory_list() + private function _gen_addressbooks_list($arrBooks, $command) + { + $rcmail = rcube::get_instance(); + $groupTotal = 0; + $maxlength = 35; + $maxlength_grp = 33; + $out = ''; + + // address books + foreach ($arrBooks as $j => $source) { + $title = null; + $id = $source['id'] ? $source['id'] : $j; + $bookname = !empty($source['name']) ? rcmail::Q($source['name']) : rcmail::Q($id); + + // shorten the address book name to a given length + if ($maxlength && $maxlength > 1) { + $bname = abbreviate_string($bookname, $maxlength); + + if ($bname != $bookname) + $title = $bookname; + + $bookname = $bname; + } + + if ($source['readonly']) + $out .= html::tag('li', array('id' => 'rcm_contextaddr_' . $id, 'class' => 'addressbook disabled'), html::a(array('href' => $command, 'id' => 'rcm_contextgrps_'. rcmail::JQ($id), 'onclick' => "rcm_set_dest_book('" . rcmail::JQ($id) ."', '" . rcmail::JQ($id) ."', null)", 'class' => 'active', 'title' => $title), html::span(null, rcmail::Q($bookname)))); + else + $out .= html::tag('li', array('id' => 'rcm_contextaddr_' . $id, 'class' => 'addressbook'), html::a(array('href' => $command, 'id' => 'rcm_contextgrps_'. rcmail::JQ($id), 'onclick' => "rcm_set_dest_book('" . rcmail::JQ($id) ."', '" . rcmail::JQ($id) ."', null)", 'class' => 'active', 'title' => $title), html::span(null, rcmail::Q($bookname)))); + + // contact groups + if ($source['groups']) { + $groups = $rcmail->get_address_book($source['id'])->list_groups(); + foreach ($groups as $group) { + $title = null; + $gid = 'G' . rcube_utils::html_identifier($id . $group['ID']); + $groupname = !empty($group['name']) ? rcmail::Q($group['name']) : rcmail::Q($gid); + + // shorten the address book name to a given length + if ($maxlength_grp && $maxlength_grp > 1) { + $gname = abbreviate_string($groupname, $maxlength_grp); + + if ($gname != $groupname) + $title = $groupname; + + $groupname = $gname; + } + + if ($source['readonly']) + $out .= html::tag('li', array('class' => 'contactgroup disabled'), html::a(array('href' => $command, 'id' => 'rcm_contextgrps_'. rcmail::JQ($gid), 'onclick' => "rcm_set_dest_book('" . rcmail::JQ($gid) . "', '" . rcmail::JQ($id) . "', '" . rcmail::JQ($group['ID']) ."')", 'class' => 'active', 'title' => $title), html::span(null, rcmail::Q($groupname)))); + else + $out .= html::tag('li', array('class' => 'contactgroup'), html::a(array('href' => $command, 'id' => 'rcm_contextgrps_'. rcmail::JQ($gid), 'onclick' => "rcm_set_dest_book('" . rcmail::JQ($gid) . "', '" . rcmail::JQ($id) . "', '" . rcmail::JQ($group['ID']) ."')", 'class' => 'active', 'title' => $title), html::span(null, rcmail::Q($groupname)))); + + $groupTotal++; + } + } + + $groupTotal++; + } + + if ($groupTotal > 5) { + $out = html::tag('ul', array('id' => 'rcm_contextgrps', 'class' => 'toolbarmenu folders scrollable'), $out); + $out = html::tag('div', array('class' => 'scroll_up_pas'), '') . $out . html::tag('div', array('class' => 'scroll_down_act'), ''); + $out = html::tag('div', array('class' => 'popupmenu'), $out); + } + else { + $out = html::tag('ul', array('id' => 'rcm_contextgrps', 'class' => 'popupmenu toolbarmenu folders'), $out); + } + + return $out; + } +} + +?>
\ No newline at end of file diff --git a/plugins/contextmenu/jquery.contextMenu.js b/plugins/contextmenu/jquery.contextMenu.js new file mode 100644 index 000000000..eaf33e5af --- /dev/null +++ b/plugins/contextmenu/jquery.contextMenu.js @@ -0,0 +1,21 @@ +// jQuery Context Menu Plugin +// +// Version 1.01 +// +// Cory S.N. LaViska +// A Beautiful Site (http://abeautifulsite.net/) +// +// More info: http://abeautifulsite.net/2008/09/jquery-context-menu-plugin/ +// +// Terms of Use +// +// This plugin is dual-licensed under the GNU General Public License +// and the MIT License and is copyright A Beautiful Site, LLC. +// +// Modified by Philip Weir: +// Added highlighting of selected row and submenu support +// Added sub menu functions +// Added bind to contextmenu event +// Adjust menu position for screen boundaries +// Shrunk with Google Closure Compiler (Simple Optimizations) +jQuery&&function(){$.extend($.fn,{contextMenu:function(a,e){if(void 0==a.menu)return!1;void 0==a.inSpeed&&(a.inSpeed=150);void 0==a.outSpeed&&(a.outSpeed=75);0==a.inSpeed&&(a.inSpeed=-1);0==a.outSpeed&&(a.outSpeed=-1);$(this).each(function(){var b=$(this),l=$(b).offset();$("#"+a.menu).addClass("contextMenu");$(this).mousedown(function(m){$(this).mouseup(function(g){var d=$(this);$(this).unbind("mouseup");if(2==m.button){$(".contextRow").removeClass("contextRow");$(".contextMenu").hide();d.addClass("contextRow"); rcm_update_options(d);var f=$("#"+a.menu);$(this).submenu_render(f);if($(b).hasClass("disabled"))return!1;var c={},h,j;self.innerHeight?(c.pageYOffset=self.pageYOffset,c.pageXOffset=self.pageXOffset,c.innerHeight=self.innerHeight,c.innerWidth=self.innerWidth):document.documentElement&&document.documentElement.clientHeight?(c.pageYOffset=document.documentElement.scrollTop,c.pageXOffset=document.documentElement.scrollLeft,c.innerHeight=document.documentElement.clientHeight,c.innerWidth=document.documentElement.clientWidth): document.body&&(c.pageYOffset=document.body.scrollTop,c.pageXOffset=document.body.scrollLeft,c.innerHeight=document.body.clientHeight,c.innerWidth=document.body.clientWidth);g.pageX?h=g.pageX:h=g.clientX+c.scrollLeft;g.pageY?j=g.pageY:j=g.clientY+c.scrollTop;h+$(f).width()+10>$(document).width()&&0<$(document).width()-$(f).width()-10&&(h=$(document).width()-$(f).width()-10);j+$(f).height()+10>$(document).height()&&0<$(document).height()-$(f).height()-10&&(j=$(document).height()-$(f).height()-10); $(document).unbind("click",$(this).document_click);$("#"+a.menu+" li ul").hide();$("#"+a.menu+" li div").hide();$(f).css({top:j,left:h}).fadeIn(a.inSpeed);$(document).bind("keypress",{menu:f},$(this).menu_keypress);$("#"+a.menu).find("a").unbind("click");$("#"+a.menu).find("li a:not(.disabled)").click(function(){$(document).unbind("click",$(this).document_click).unbind("keypress",$(this).menu_keypress);$(".contextMenu").hide();d.removeClass("contextRow");e&&e($(this).attr("href").substr(1),$(d),{x:h- l.left,y:j-l.top,docX:h,docY:j});return!1});setTimeout(function(){$(document).bind("click",{menu:f,o:a},$(this).document_click);$("iframe").load(function(){(this.contentDocument?this.contentDocument:this.contentWindow?this.contentWindow.document:null).onclick=function(){$(document).click()}});$("iframe").contents().mouseup(function(){$(document).click()})},0)}rcmail.drag_active||(g.cancelBubble=!0,g.stopPropagation&&g.stopPropagation())})});var d,k;$("#"+a.menu).children("li").mouseenter(function(){if($(this).hasClass("submenu")){if($(this).hasClass("submenu")&& !d&&!$(this).children("*:not(a, span)").is(":visible")){window.clearTimeout(k);k=null;var b=this;d=window.setTimeout(function(){$("#"+a.menu).children("li.submenu").children("div.popupmenu").children("ul.scrollable").scrollTop(0);$("#"+a.menu).children("li.submenu").children("div.popupmenu").children("div.scroll_up_act").addClass("scroll_up_pas").removeClass("scroll_up_act");$("#"+a.menu).children("li.submenu").children("div.popupmenu").children("div.scroll_down_pas").addClass("scroll_down_act").removeClass("scroll_down_pas"); $("#"+a.menu).children("li.submenu").children("*:not(a, span)").hide();doc_height=$(document).height();$(b).children("*:not(a, span)").css({left:$("#"+a.menu).width()-2,top:0});$(b).children("*:not(a, span)").show();$(b).children("*:not(a, span)").offset().left+$(b).children("*:not(a, span)").width()+10>$(document).width()&&0<$(document).width()-$(b).children("*:not(a, span)").width()-$("#"+a.menu).width()&&$(b).children("*:not(a, span)").css({left:-1*$(b).children("*:not(a, span)").width()});y=-1* ($(b).children("*:not(a, span)").offset().top+$(b).children("*:not(a, span)").height()+10-doc_height);0>y&&0<$(b).children("*:not(a, span)").offset().top+y&&$(b).children("*:not(a, span)").css({top:y});$(b).children("div.popupmenu").length&&$(b).children("div.popupmenu").children().show();d=null},a.submenu_delay)}}else k=window.setTimeout(function(){$("#"+a.menu).children("li.submenu").children("*:not(a, span)").hide();k=null},a.submenu_delay)});$("#"+a.menu).children("li.submenu").mouseleave(function(){window.clearTimeout(d); d=null});$(this).mouseleave(function(){window.clearTimeout(d);d=null});$("#"+a.menu).each(function(){$(this).attr("unselectable","on");$(this).css("user-select","none");$(this).on("selectstart",!1)});$(b).add($("ul.contextMenu")).bind("contextmenu",function(){return!1})});return $(this)},disableContextMenuItems:function(a){if(void 0==a)return $(this).find("a").addClass("disabled"),$(this);$(this).each(function(){if(void 0!=a)for(var e=a.split(","),b=0;b<e.length;b++)$(this).find('a[href="'+e[b]+'"]').addClass("disabled")}); return $(this)},enableContextMenuItems:function(a){if(void 0==a)return $(this).find("a.disabled").removeClass("disabled"),$(this);$(this).each(function(){if(void 0!=a)for(var e=a.split(","),b=0;b<e.length;b++)$(this).find('a[href="'+e[b]+'"]').removeClass("disabled")});return $(this)},disableContextMenu:function(){$(this).each(function(){$(this).addClass("disabled")});return $(this)},enableContextMenu:function(){$(this).each(function(){$(this).removeClass("disabled")});return $(this)},destroyContextMenu:function(){$(this).each(function(){$(this).unbind("mousedown").unbind("mouseup")}); return $(this)},submenu_render:function(a){$(a).show();$(a).children("li.submenu").children().show();$(a).children("li.submenu").children("div.popupmenu").each(function(){ul_overflow=$(this).children("ul").css("overflow");$(this).children("ul").css({overflow:"visible"});$(this).children("div").css({width:$(this).children("ul").width()+"px"});$(this).css({width:$(this).children("ul").width()+"px"});$(this).children("ul").css({overflow:ul_overflow});$(this).children("div").click(function(a){var b=$(this).parent().children("ul"); $(this).hasClass("scroll_up_act")?($(b).scrollTop($(b).scrollTop()-18),$(this).parent().children("div.scroll_down_pas").addClass("scroll_down_act"),$(this).parent().children("div.scroll_down_pas").removeClass("scroll_down_pas"),0==$(b).scrollTop()&&($(this).removeClass("scroll_up_act"),$(this).addClass("scroll_up_pas"))):$(this).hasClass("scroll_down_act")&&($(b).scrollTop($(b).scrollTop()+18),$(this).parent().children("div.scroll_up_pas").addClass("scroll_up_act"),$(this).parent().children("div.scroll_up_pas").removeClass("scroll_up_pas"), $(b).prop("scrollHeight")-$(b).scrollTop()==$(b).outerHeight()&&($(this).removeClass("scroll_down_act"),$(this).addClass("scroll_down_pas")));a.cancelBubble=!0;a.stopPropagation&&a.stopPropagation()});$(this).children("ul").mousewheel($(this).submenu_mousewheel)});$(a).children("li.submenu").children("*:not(a, span)").hide();$(a).hide()},submenu_mousewheel:function(a,e){0<e?$(this).parent().children("div.scroll_up_act").click():0>e&&$(this).parent().children("div.scroll_down_act").click()},menu_keypress:function(a){switch(a.keyCode){case 13:$(a.data.menu).find("li a.hover").trigger("click"); break;case 27:$(document).trigger("click")}},document_click:function(a){$(document).unbind("click",$(this).document_click).unbind("keypress",$(this).menu_keypress);$(".contextRow").removeClass("contextRow");$(a.data.menu).fadeOut(a.data.o.outSpeed);return!1}})}(jQuery);
\ No newline at end of file diff --git a/plugins/contextmenu/jquery.mousewheel.js b/plugins/contextmenu/jquery.mousewheel.js new file mode 120000 index 000000000..d86864a6a --- /dev/null +++ b/plugins/contextmenu/jquery.mousewheel.js @@ -0,0 +1 @@ +../../../javascript/jquery-mousewheel/jquery.mousewheel.min.js
\ No newline at end of file diff --git a/plugins/contextmenu/localization/ca_ES.inc b/plugins/contextmenu/localization/ca_ES.inc new file mode 100644 index 000000000..61081b6c8 --- /dev/null +++ b/plugins/contextmenu/localization/ca_ES.inc @@ -0,0 +1,12 @@ +<?php +/* Author: Daniel López */ + +$labels = array(); +$labels['markreadfolder'] = 'Marca tot com a llegit'; +$labels['collapseall'] = 'Compacta totes les carpetes'; +$labels['expandall'] = 'Expandeix totes les carpetes'; +$labels['copyto'] = 'Copia a ...'; + +$messages = array(); + +?>
\ No newline at end of file diff --git a/plugins/contextmenu/localization/cs_CZ.inc b/plugins/contextmenu/localization/cs_CZ.inc new file mode 100644 index 000000000..1dc4400db --- /dev/null +++ b/plugins/contextmenu/localization/cs_CZ.inc @@ -0,0 +1,12 @@ +<?php +/* Author: Martin Frajdl */ + +$labels = array(); +$labels['markreadfolder'] = 'Oznacit vše jako přečtené'; +$labels['collapseall'] = 'Sbalit všechny složky'; +$labels['expandall'] = 'Rozbalit všechny složky'; +$labels['copyto'] = 'Kopírovat do...'; + +$messages = array(); + +?>
\ No newline at end of file diff --git a/plugins/contextmenu/localization/da_DK.inc b/plugins/contextmenu/localization/da_DK.inc new file mode 100644 index 000000000..5b9c04f39 --- /dev/null +++ b/plugins/contextmenu/localization/da_DK.inc @@ -0,0 +1,12 @@ +<?php +/* Author: Johannes Hessellund */ + +$labels = array(); +$labels['markreadfolder'] = 'Markér alle som læst'; +$labels['collapseall'] = 'Fold alle mapper sammen'; +$labels['expandall'] = 'Udfold alle mapper'; +$labels['copyto'] = 'Kopier til...'; + +$messages = array(); + +?>
\ No newline at end of file diff --git a/plugins/contextmenu/localization/de_CH.inc b/plugins/contextmenu/localization/de_CH.inc new file mode 100644 index 000000000..fbfa57078 --- /dev/null +++ b/plugins/contextmenu/localization/de_CH.inc @@ -0,0 +1,12 @@ +<?php +/* Author: Mike Constabel */ + +$labels = array(); +$labels['markreadfolder'] = 'Alle als gelesen markieren'; +$labels['collapseall'] = 'Alle Unterordner einklappen'; +$labels['expandall'] = 'Alle Unterordner ausklappen'; +$labels['copyto'] = 'Kopieren nach ...'; + +$messages = array(); + +?>
\ No newline at end of file diff --git a/plugins/contextmenu/localization/de_DE.inc b/plugins/contextmenu/localization/de_DE.inc new file mode 100644 index 000000000..fbfa57078 --- /dev/null +++ b/plugins/contextmenu/localization/de_DE.inc @@ -0,0 +1,12 @@ +<?php +/* Author: Mike Constabel */ + +$labels = array(); +$labels['markreadfolder'] = 'Alle als gelesen markieren'; +$labels['collapseall'] = 'Alle Unterordner einklappen'; +$labels['expandall'] = 'Alle Unterordner ausklappen'; +$labels['copyto'] = 'Kopieren nach ...'; + +$messages = array(); + +?>
\ No newline at end of file diff --git a/plugins/contextmenu/localization/en_GB.inc b/plugins/contextmenu/localization/en_GB.inc new file mode 100644 index 000000000..d9cc7f9d7 --- /dev/null +++ b/plugins/contextmenu/localization/en_GB.inc @@ -0,0 +1,12 @@ +<?php +/* Author: Philip Weir */ + +$labels = array(); +$labels['markreadfolder'] = 'Mark all as read'; +$labels['collapseall'] = 'Collapse all folders'; +$labels['expandall'] = 'Expand all folders'; +$labels['copyto'] = 'Copy to...'; + +$messages = array(); + +?>
\ No newline at end of file diff --git a/plugins/contextmenu/localization/en_US.inc b/plugins/contextmenu/localization/en_US.inc new file mode 100644 index 000000000..d9cc7f9d7 --- /dev/null +++ b/plugins/contextmenu/localization/en_US.inc @@ -0,0 +1,12 @@ +<?php +/* Author: Philip Weir */ + +$labels = array(); +$labels['markreadfolder'] = 'Mark all as read'; +$labels['collapseall'] = 'Collapse all folders'; +$labels['expandall'] = 'Expand all folders'; +$labels['copyto'] = 'Copy to...'; + +$messages = array(); + +?>
\ No newline at end of file diff --git a/plugins/contextmenu/localization/es_ES.inc b/plugins/contextmenu/localization/es_ES.inc new file mode 100644 index 000000000..253106be6 --- /dev/null +++ b/plugins/contextmenu/localization/es_ES.inc @@ -0,0 +1,12 @@ +<?php +/* Author: Daniel López */ + +$labels = array(); +$labels['markreadfolder'] = 'Marcar todo como leído'; +$labels['collapseall'] = 'Compactar todas las carpetas'; +$labels['expandall'] = 'Expandir todas las carpetas'; +$labels['copyto'] = 'Copiar a...'; + +$messages = array(); + +?>
\ No newline at end of file diff --git a/plugins/contextmenu/localization/fr_FR.inc b/plugins/contextmenu/localization/fr_FR.inc new file mode 100644 index 000000000..6da00f498 --- /dev/null +++ b/plugins/contextmenu/localization/fr_FR.inc @@ -0,0 +1,12 @@ +<?php +/* Author: */ + +$labels = array(); +$labels['markreadfolder'] = 'Marquer tout comme lu'; +$labels['collapseall'] = 'Reduire les dossiers'; +$labels['expandall'] = 'Developper les dossiers'; +$labels['copyto'] = 'Copier vers...'; + +$messages = array(); + +?>
\ No newline at end of file diff --git a/plugins/contextmenu/localization/gl_ES.inc b/plugins/contextmenu/localization/gl_ES.inc new file mode 100644 index 000000000..33f2de1d6 --- /dev/null +++ b/plugins/contextmenu/localization/gl_ES.inc @@ -0,0 +1,12 @@ +<?php +/* Author: David Garabana Barro */ + +$labels = array(); +$labels['markreadfolder'] = 'Marcar todas coma lidas'; +$labels['collapseall'] = 'Pechar tódolos cartafoles'; +$labels['expandall'] = 'Abrir tódolos cartafoles'; +$labels['copyto'] = 'Copiar a...'; + +$messages = array(); + +?>
\ No newline at end of file diff --git a/plugins/contextmenu/localization/hu_HU.inc b/plugins/contextmenu/localization/hu_HU.inc new file mode 100644 index 000000000..699aa8df9 --- /dev/null +++ b/plugins/contextmenu/localization/hu_HU.inc @@ -0,0 +1,12 @@ +<?php +/* Author: Németh János */ + +$labels = array(); +$labels['markreadfolder'] = 'Összes megjelölése olvasottként'; +$labels['collapseall'] = 'Összes összecsukása'; +$labels['expandall'] = 'Összes kibontása'; +$labels['copyto'] = 'Másolás...'; + +$messages = array(); + +?>
\ No newline at end of file diff --git a/plugins/contextmenu/localization/it_IT.inc b/plugins/contextmenu/localization/it_IT.inc new file mode 100644 index 000000000..7e68214c5 --- /dev/null +++ b/plugins/contextmenu/localization/it_IT.inc @@ -0,0 +1,12 @@ +<?php +/* Author: Massimiliano Adamo */ + +$labels = array(); +$labels['markreadfolder'] = 'Marca tutto come letto'; +$labels['collapseall'] = 'Compatta tutte le cartelle'; +$labels['expandall'] = 'Espandi tutte le cartelle'; +$labels['copyto'] = 'Copia su...'; + +$messages = array(); + +?>
\ No newline at end of file diff --git a/plugins/contextmenu/localization/nl_NL.inc b/plugins/contextmenu/localization/nl_NL.inc new file mode 100644 index 000000000..57f3562d0 --- /dev/null +++ b/plugins/contextmenu/localization/nl_NL.inc @@ -0,0 +1,12 @@ +<?php +/* Author: Wouter Kevenaar */ + +$labels = array(); +$labels['markreadfolder'] = 'Alles markeren als gelezen'; +$labels['collapseall'] = 'Alle mappen inklappen'; +$labels['expandall'] = 'Alle mappen uitklappen'; +$labels['copyto'] = 'Kopiëren naar...'; + +$messages = array(); + +?>
\ No newline at end of file diff --git a/plugins/contextmenu/localization/pl_PL.inc b/plugins/contextmenu/localization/pl_PL.inc new file mode 100644 index 000000000..7cc2cd4b9 --- /dev/null +++ b/plugins/contextmenu/localization/pl_PL.inc @@ -0,0 +1,12 @@ +<?php +/* Author: Michał Jałocha */ + +$labels = array(); +$labels['markreadfolder'] = 'Oznacz wszystkie jako przeczytane'; +$labels['collapseall'] = 'Zwiń wszystkie foldery'; +$labels['expandall'] = 'Rozwiń wszystkie foldery'; +$labels['copyto'] = 'Kopiuj do...'; + +$messages = array(); + +?>
\ No newline at end of file diff --git a/plugins/contextmenu/localization/pt_BR.inc b/plugins/contextmenu/localization/pt_BR.inc new file mode 100644 index 000000000..60b0e7284 --- /dev/null +++ b/plugins/contextmenu/localization/pt_BR.inc @@ -0,0 +1,12 @@ +<?php +/* Author: Alexandre Gorges */ + +$labels = array(); +$labels['markreadfolder'] = 'Marcar todas como lidas'; +$labels['collapseall'] = 'Recolher todas as pastas'; +$labels['expandall'] = 'Expandir todas as pastas'; +$labels['copyto'] = 'Copiar para...'; + +$messages = array(); + +?>
\ No newline at end of file diff --git a/plugins/contextmenu/localization/ro_RO.inc b/plugins/contextmenu/localization/ro_RO.inc new file mode 100644 index 000000000..3ac7559ab --- /dev/null +++ b/plugins/contextmenu/localization/ro_RO.inc @@ -0,0 +1,12 @@ +<?php +/* Author: Ovidiu Bica */ + +$labels = array(); +$labels['markreadfolder'] = 'Marchează mesajele ca citite'; +$labels['collapseall'] = 'Ascunde toate folderele'; +$labels['expandall'] = 'Afişează toate folderele'; +$labels['copyto'] = 'Copiaza in'; + +$messages = array(); + +?>
\ No newline at end of file diff --git a/plugins/contextmenu/localization/ru_RU.inc b/plugins/contextmenu/localization/ru_RU.inc new file mode 100644 index 000000000..3a3d85df6 --- /dev/null +++ b/plugins/contextmenu/localization/ru_RU.inc @@ -0,0 +1,12 @@ +<?php +/* Author: Sergey Basov */ + +$labels = array(); +$labels['markreadfolder'] = 'Отметить все как прочитанные'; +$labels['collapseall'] = 'Свернуть все папки'; +$labels['expandall'] = 'Развернуть все папки'; +$labels['copyto'] = 'Копировать в...'; + +$messages = array(); + +?>
\ No newline at end of file diff --git a/plugins/contextmenu/localization/sv_SE.inc b/plugins/contextmenu/localization/sv_SE.inc new file mode 100644 index 000000000..92f3c13a0 --- /dev/null +++ b/plugins/contextmenu/localization/sv_SE.inc @@ -0,0 +1,12 @@ +<?php +/* Author: Jonas Nasholm */ + +$labels = array(); +$labels['markreadfolder'] = 'Märk allt som läst'; +$labels['collapseall'] = 'Dölj alla kataloger'; +$labels['expandall'] = 'Visa alla kataloger'; +$labels['copyto'] = 'Kopiera till...'; + +$messages = array(); + +?>
\ No newline at end of file diff --git a/plugins/contextmenu/localization/tr_TR.inc b/plugins/contextmenu/localization/tr_TR.inc new file mode 100644 index 000000000..62f7acf93 --- /dev/null +++ b/plugins/contextmenu/localization/tr_TR.inc @@ -0,0 +1,12 @@ +<?php +/* Author: Mustafa Icer */ + +$labels = array(); +$labels['markreadfolder'] = 'Tüm mesajları okunumuş olarak işaretle'; +$labels['collapseall'] = 'Tüm alt klasörleri kapat'; +$labels['expandall'] = 'Tüm alt klasörleri aç'; +$labels['copyto'] = '... kopyala'; + +$messages = array(); + +?>
\ No newline at end of file diff --git a/plugins/contextmenu/localization/uk_UA.inc b/plugins/contextmenu/localization/uk_UA.inc new file mode 100644 index 000000000..67ddb234c --- /dev/null +++ b/plugins/contextmenu/localization/uk_UA.inc @@ -0,0 +1,12 @@ +<?php +/* Author: Sergey Basov */ + +$labels = array(); +$labels['markreadfolder'] = 'Відмітити все як прочитане'; +$labels['collapseall'] = 'Згорнути усі папки'; +$labels['expandall'] = 'Розгорнути усі папки'; +$labels['copyto'] = 'Копіювати до...'; + +$messages = array(); + +?>
\ No newline at end of file diff --git a/plugins/contextmenu/localization/zh_TW.inc b/plugins/contextmenu/localization/zh_TW.inc new file mode 100644 index 000000000..bd33d27b8 --- /dev/null +++ b/plugins/contextmenu/localization/zh_TW.inc @@ -0,0 +1,12 @@ +<?php +/* Author: thomasysliu */ + +$labels = array(); +$labels['markreadfolder'] = '標示為已讀取'; +$labels['collapseall'] = '全部收起'; +$labels['expandall'] = '全部展開'; +$labels['copyto'] = '複製到...'; + +$messages = array(); + +?>
\ No newline at end of file diff --git a/plugins/contextmenu/package.xml b/plugins/contextmenu/package.xml new file mode 100644 index 000000000..c65375ae9 --- /dev/null +++ b/plugins/contextmenu/package.xml @@ -0,0 +1,90 @@ +<?xml version="1.0" encoding="UTF-8"?> +<package xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" packagerversion="1.9.0" version="2.0" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 + http://pear.php.net/dtd/tasks-1.0.xsd + http://pear.php.net/dtd/package-2.0 + http://pear.php.net/dtd/package-2.0.xsd"> + <name>contextmenu</name> + <uri>http://github.com/JohnDoh/Roundcube-Plugin-Context-Menu/</uri> + <summary>Adds context menus with common tasks to various parts of Roundcube</summary> + <description>Adds context menus to the message list, folder list and address book. Menu includes the abilities mark messages as read/unread, delete, reply and forward.</description> + <lead> + <name>Philip Weir</name> + <user>JohnDoh</user> + <email>roundcube@tehinterweb.co.uk</email> + <active>yes</active> + </lead> + <date>2013-02-24</date> + <time>10:50:37</time> + <version> + <release>1.10</release> + <api>1.10</api> + </version> + <stability> + <release>stable</release> + <api>stable</api> + </stability> + <license uri="http://www.gnu.org/licenses/gpl.html">GNU GPLv3+</license> + <notes>-</notes> + <contents> + <dir baseinstalldir="/" name="/"> + <file name="contextmenu.php" role="php"> + <tasks:replace from="@name@" to="name" type="package-info"/> + <tasks:replace from="@package_version@" to="version" type="package-info"/> + </file> + <file name="contextmenu.js" role="data"> + <tasks:replace from="@name@" to="name" type="package-info"/> + <tasks:replace from="@package_version@" to="version" type="package-info"/> + </file> + <file name="CHANGELOG" role="data"/> + <file name="README.md" role="data"/> + <file name="jquery.contextMenu.js" role="data"/> + <file name="jquery.mousewheel.js" role="data"/> + <file name="localization/ca_ES.inc" role="data"/> + <file name="localization/cs_CZ.inc" role="data"/> + <file name="localization/da_DK.inc" role="data"/> + <file name="localization/de_CH.inc" role="data"/> + <file name="localization/de_DE.inc" role="data"/> + <file name="localization/en_GB.inc" role="data"/> + <file name="localization/en_US.inc" role="data"/> + <file name="localization/es_ES.inc" role="data"/> + <file name="localization/fr_FR.inc" role="data"/> + <file name="localization/gl_ES.inc" role="data"/> + <file name="localization/hu_HU.inc" role="data"/> + <file name="localization/it_IT.inc" role="data"/> + <file name="localization/nl_NL.inc" role="data"/> + <file name="localization/pl_PL.inc" role="data"/> + <file name="localization/pt_BR.inc" role="data"/> + <file name="localization/ro_RO.inc" role="data"/> + <file name="localization/ru_RU.inc" role="data"/> + <file name="localization/sv_SE.inc" role="data"/> + <file name="localization/tr_TR.inc" role="data"/> + <file name="localization/uk_UA.inc" role="data"/> + <file name="localization/zh_TW.inc" role="data"/> + <file name="skins/classic/contexticons.gif" role="data"/> + <file name="skins/classic/contexticons.png" role="data"/> + <file name="skins/classic/contextmenu.css" role="data"/> + <file name="skins/classic/folders.gif" role="data"/> + <file name="skins/classic/folders.png" role="data"/> + <file name="skins/classic/ie6hacks.css" role="data"/> + <file name="skins/classic/messageactions.gif" role="data"/> + <file name="skins/classic/messageactions.png" role="data"/> + <file name="skins/larry/contexticons.png" role="data"/> + <file name="skins/larry/contextmenu.css" role="data"/> + <file name="skins/larry/folders.png" role="data"/> + <file name="skins/larry/ie6hacks.css" role="data"/> + <file name="skins/larry/messageactions.png" role="data"/> + </dir> + <!-- / --> + </contents> + <dependencies> + <required> + <php> + <min>5.2.1</min> + </php> + <pearinstaller> + <min>1.7.0</min> + </pearinstaller> + </required> + </dependencies> + <phprelease/> +</package> diff --git a/plugins/contextmenu/skins/classic/contexticons.gif b/plugins/contextmenu/skins/classic/contexticons.gif Binary files differnew file mode 100644 index 000000000..e1a77ea28 --- /dev/null +++ b/plugins/contextmenu/skins/classic/contexticons.gif diff --git a/plugins/contextmenu/skins/classic/contexticons.png b/plugins/contextmenu/skins/classic/contexticons.png Binary files differnew file mode 100644 index 000000000..fb0a7299c --- /dev/null +++ b/plugins/contextmenu/skins/classic/contexticons.png diff --git a/plugins/contextmenu/skins/classic/contextmenu.css b/plugins/contextmenu/skins/classic/contextmenu.css new file mode 100644 index 000000000..704878818 --- /dev/null +++ b/plugins/contextmenu/skins/classic/contextmenu.css @@ -0,0 +1,357 @@ +/** + * ContextMenu plugin styles + */ + +.contextRow td, +#mailboxlist li.contextRow, +#directorylistbox li.contextRow +{ + background-color: #EEEEEE; +} + +#mailboxlist li.selected, +#directorylistbox li.selected +{ + background-color: #929292; +} + +#rcmContextMenu, +#rcmFolderMenu, +#rcmAddressMenu, +#rcmGroupMenu +{ + padding-top: 3px; + min-width: 220px; +} + +#rcmContextMenu li, +#rcmFolderMenu li, +#rcmAddressMenu li, +#rcmGroupMenu li +{ + margin: 0; +} + +#rcmContextMenu li ul, +#rcmContextMenu li div, +#rcmFolderMenu li ul, +#rcmFolderMenu li div, +#rcmAddressMenu li ul, +#rcmAddressMenu li div, +#rcmGroupMenu li ul, +#rcmGroupMenu li div +{ + position: absolute; + top: 0px; + left: 0px; + width: auto; + display: none; + background-color: #F9F9F9; + border: 1px solid #CCC; + padding: 1px; + z-index: 901; +} + +#rcmContextMenu li.conmentitle, +#rcmContextMenu li.submenu, +#rcmFolderMenu li.conmentitle, +#rcmFolderMenu li.submenu, +#rcmAddressMenu li.conmentitle, +#rcmAddressMenu li.submenu, +#rcmGroupMenu li.conmentitle, +#rcmGroupMenu li.submenu +{ + padding: 2px 8px 3px 27px; + cursor: default; +} + +#rcmContextMenu li.sublink, +#rcmFolderMenu li.sublink, +#rcmAddressMenu li.sublink, +#rcmGroupMenu li.sublink +{ + padding: 0; +} + +#rcmContextMenu li.submenu, +#rcmFolderMenu li.submenu, +#rcmAddressMenu li.submenu, +#rcmGroupMenu li.submenu +{ + position: relative; + cursor: pointer; + background: url(contexticons.png) no-repeat right 0; + padding-right: 15px; +} + +#rcmContextMenu li.replyacts, +#rcmContextMenu li.forwardacts, +#rcmAddressMenu li.exportacts +{ + padding: 0 8px 0 0; +} + +#rcmContextMenu li.markmessage a, +#rcmAddressMenu li.contactgroup a +{ + text-indent: 8px; +} + +#rcmContextMenu li.submenu:hover, +#rcmContextMenu li.sublink:hover a.mainlink, +#rcmFolderMenu li.submenu:hover, +#rcmFolderMenu li.sublink:hover a.mainlink, +#rcmAddressMenu li.submenu:hover, +#rcmAddressMenu li.sublink:hover a.mainlink, +#rcmGroupMenu li.submenu:hover, +#rcmGroupMenu li.sublink:hover a.mainlink +{ + color: #fff; + background-color: #CC0000; +} + +#rcmContextMenu li a, +#rcmFolderMenu li a, +#rcmAddressMenu li a, +#rcmGroupMenu li a +{ + background: url(contexticons.png) no-repeat 7px 20px; +} + +#rcmContextMenu li a.active:hover, +#rcmFolderMenu li a.active:hover, +#rcmAddressMenu li a.active:hover, +#rcmGroupMenu li a.active:hover +{ + color: #fff; + background-color: #CC0000; +} + +#rcmContextMenu a.disabled, +#rcmFolderMenu a.disabled, +#rcmAddressMenu a.disabled, +#rcmGroupMenu a.disabled +{ + color: #AAA; + cursor: default; +} + +#rcmContextMenu a.disabled:hover, +#rcmFolderMenu a.disabled:hover, +#rcmAddressMenu a.disabled:hover, +#rcmGroupMenu a.disabled:hover +{ + color: #AAA; + background-color: transparent +} + +#rcmContextMenu .read a +{ + background-position: 7px -85px; +} + +#rcmFolderMenu .readfolder a +{ + background-position: 7px -85px; +} + +#rcmContextMenu .unread a +{ + background-position: 7px -136px; +} +#rcmContextMenu .flagged a +{ + background-position: 7px -170px; +} + +#rcmContextMenu .unflagged a +{ + background-position: 7px -153px; +} + +#rcmContextMenu .reply a, #rcmContextMenu .replyall a, #rcmContextMenu .replylist a +{ + background-position: 7px -119px; +} + +#rcmContextMenu .forwardinline a, #rcmContextMenu .forwardattachment a +{ + background-position: 7px -102px; +} + +#rcmContextMenu .delete a, +#rcmAddressMenu .deletecontact a +{ + background-position: 7px -187px; +} + +#rcmFolderMenu .expunge a +{ + background-position: 7px -255px; +} + +#rcmFolderMenu .purge a +{ + background-position: 7px -272px; +} + +#rcmFolderMenu .collapseall a +{ + background-position: 7px -204px; +} + +#rcmFolderMenu .expandall a +{ + background-position: 7px -220px; +} + +#rcmContextMenu ul.moreacts li a +{ + background: url(messageactions.png) no-repeat 5px 20px; +} + +#rcmContextMenu ul.moreacts li.print a +{ + background-position: 5px 1px; +} + +#rcmContextMenu ul.moreacts li.source a +{ + background-position: 5px -35px; +} + +#rcmContextMenu ul.moreacts li.save a +{ + background-position: 5px -17px; +} + +#rcmContextMenu ul.moreacts li.open a +{ + background-position: 5px -53px; +} + +#rcmFolderMenu .openfolder a +{ + background: url(messageactions.png) no-repeat 6px -53px; +} + +#rcmContextMenu ul.moreacts li.edit a +{ + background-position: 5px -71px; +} + +#rcmAddressMenu .editcontact a +{ + background: url(messageactions.png) no-repeat 6px -71px; +} + +#rcmAddressMenu .composeto a +{ + background-position: 8px -238px; +} + +#rcmContextMenu ul.folders li a, +#rcmAddressMenu ul.folders li a +{ + background: url(folders.png) 5px 1px no-repeat; +} + +#rcmContextMenu ul.folders li.inbox a +{ + background-position: 5px -17px; +} + +#rcmContextMenu ul.folders li.drafts a +{ + background-position: 5px -36px; +} + +#rcmContextMenu ul.folders li.sent a +{ + background-position: 5px -54px; +} + +#rcmContextMenu ul.folders li.junk a +{ + background-position: 5px -73px; +} + +#rcmContextMenu ul.folders li.trash a +{ + background-position: 5px -90px; +} + +#rcmAddressMenu ul.folders li.addressbook a +{ + background-position: 5px -108px; +} + +#rcmAddressMenu ul.folders li.contactgroup a +{ + background-position: 5px -144px; +} + +#rcmContextMenu div.popupmenu, +#rcmFolderMenu div.popupmenu, +#rcmAddressMenu div.popupmenu +{ + height: 129px; + padding: 0; +} + +#rcmContextMenu ul.scrollable, +#rcmFolderMenu ul.scrollable, +#rcmAddressMenu ul.scrollable +{ + top: 15px; + height: 100px; + overflow: hidden; + border-top: 0; + border-bottom: 0; + margin: 0; +} + +#rcmContextMenu li div, +#rcmFolderMenu li div, +#rcmAddressMenu li div +{ + height: 12px; + overflow: hidden; + background: url(contexticons.png) #F9F9F9 no-repeat center 20px; +} + +#rcmContextMenu li div.scroll_up_act, +#rcmFolderMenu li div.scroll_up_act, +#rcmAddressMenu li div.scroll_up_act +{ + background-position: center -17px; + border-bottom: 0; +} + +#rcmContextMenu li div.scroll_up_pas, +#rcmFolderMenu li div.scroll_up_pas, +#rcmAddressMenu li div.scroll_up_pas +{ + background-position: center -34px; + border-bottom: 0; + cursor: default; +} + +#rcmContextMenu li div.scroll_down_act, +#rcmFolderMenu li div.scroll_down_act, +#rcmAddressMenu li div.scroll_down_act +{ + top: 117px; + background-position: center -51px; + border-top: 0; +} + +#rcmContextMenu li div.scroll_down_pas, +#rcmFolderMenu li div.scroll_down_pas, +#rcmAddressMenu li div.scroll_down_pas +{ + top: 117px; + background-position: center -68px; + border-top: 0; + cursor: default; +}
\ No newline at end of file diff --git a/plugins/contextmenu/skins/classic/folders.gif b/plugins/contextmenu/skins/classic/folders.gif Binary files differnew file mode 100644 index 000000000..0fccb2c18 --- /dev/null +++ b/plugins/contextmenu/skins/classic/folders.gif diff --git a/plugins/contextmenu/skins/classic/folders.png b/plugins/contextmenu/skins/classic/folders.png Binary files differnew file mode 100644 index 000000000..5013318f8 --- /dev/null +++ b/plugins/contextmenu/skins/classic/folders.png diff --git a/plugins/contextmenu/skins/classic/ie6hacks.css b/plugins/contextmenu/skins/classic/ie6hacks.css new file mode 100644 index 000000000..909915176 --- /dev/null +++ b/plugins/contextmenu/skins/classic/ie6hacks.css @@ -0,0 +1,54 @@ +/** + * ContextMenu plugin styles (IE6 hacks) + */ + +#rcmContextMenu, +#rcmFolderMenu, +#rcmAddressMenu, +#rcmGroupMenu +{ + width: 220px; +} + +#rcmContextMenu li.submenu, +#rcmFolderMenu li.submenu, +#rcmAddressMenu li.submenu, +#rcmGroupMenu li.submenu +{ + background-image: url(contexticons.gif); +} + +#rcmContextMenu li a, +#rcmFolderMenu li a, +#rcmAddressMenu li a, +#rcmGroupMenu li a +{ + background-image: url(contexticons.gif); +} + +#rcmContextMenu ul.moreacts li a +{ + background-image: url(messageactions.gif); +} + +#rcmFolderMenu .openfolder a +{ + background-image: url(messageactions.gif); +} + +#rcmAddressMenu .editcontact a +{ + background-image: url(messageactions.gif); +} + +#rcmContextMenu ul.folders li a, +#rcmAddressMenu ul.folders li a +{ + background-image: url(folders.gif); +} + +#rcmContextMenu li div, +#rcmAddressMenu li div +{ + background-image: url(contexticons.gif); +}
\ No newline at end of file diff --git a/plugins/contextmenu/skins/classic/messageactions.gif b/plugins/contextmenu/skins/classic/messageactions.gif Binary files differnew file mode 100644 index 000000000..d2d647bed --- /dev/null +++ b/plugins/contextmenu/skins/classic/messageactions.gif diff --git a/plugins/contextmenu/skins/classic/messageactions.png b/plugins/contextmenu/skins/classic/messageactions.png Binary files differnew file mode 100644 index 000000000..e9447f211 --- /dev/null +++ b/plugins/contextmenu/skins/classic/messageactions.png diff --git a/plugins/contextmenu/skins/larry/contexticons.png b/plugins/contextmenu/skins/larry/contexticons.png Binary files differnew file mode 100644 index 000000000..dbbfa4de1 --- /dev/null +++ b/plugins/contextmenu/skins/larry/contexticons.png diff --git a/plugins/contextmenu/skins/larry/contextmenu.css b/plugins/contextmenu/skins/larry/contextmenu.css new file mode 100644 index 000000000..d0b84ded3 --- /dev/null +++ b/plugins/contextmenu/skins/larry/contextmenu.css @@ -0,0 +1,425 @@ +/** + * ContextMenu plugin styles + */ + +.records-table tbody tr.contextRow td +{ + background-color: #F2F2F2; +} + +#mailboxlist li.contextRow, +#directorylist li.contextRow, +#addresslist .contextRow +{ + background-color: #C7E3EF; +} + +#rcmContextMenu, +#rcmFolderMenu, +#rcmAddressMenu, +#rcmGroupMenu +{ + padding-top: 3px; + min-width: 220px; +} + +#rcmContextMenu li, +#rcmFolderMenu li, +#rcmAddressMenu li, +#rcmGroupMenu li +{ + margin: 0; +} + +#rcmContextMenu li ul, +#rcmContextMenu li div, +#rcmFolderMenu li ul, +#rcmFolderMenu li div, +#rcmAddressMenu li ul, +#rcmAddressMenu li div, +#rcmGroupMenu li ul, +#rcmGroupMenu li div +{ + position: absolute; + top: 0px; + left: 0px; + width: auto; + display: none; + background-color: #444; + border: 1px solid #999; + padding: 1px; + z-index: 901; + border-radius: 4px; + box-shadow: 0 2px 6px 0 #333; + -moz-box-shadow: 0 2px 6px 0 #333; + -webkit-box-shadow: 0 2px 6px 0 #333; + -o-box-shadow: 0 2px 6px 0 #333; +} + +#rcmContextMenu li.conmentitle, +#rcmContextMenu li.submenu, +#rcmFolderMenu li.conmentitle, +#rcmFolderMenu li.submenu, +#rcmAddressMenu li.conmentitle, +#rcmAddressMenu li.submenu, +#rcmGroupMenu li.conmentitle, +#rcmGroupMenu li.submenu +{ + padding: 0; + cursor: default; +} + +#rcmContextMenu li.conmentitle span, +#rcmContextMenu li.submenu span, +#rcmFolderMenu li.conmentitle span, +#rcmFolderMenu li.submenu span, +#rcmAddressMenu li.conmentitle span, +#rcmAddressMenu li.submenu span, +#rcmGroupMenu li.conmentitle span, +#rcmGroupMenu li.submenu span +{ + display: block; + padding: 6px 10px 6px 29px; +} + +#rcmContextMenu li.sublink, +#rcmFolderMenu li.sublink, +#rcmAddressMenu li.sublink, +#rcmGroupMenu li.sublink +{ + padding: 0; +} + +#rcmContextMenu li.submenu, +#rcmFolderMenu li.submenu, +#rcmAddressMenu li.submenu, +#rcmGroupMenu li.submenu +{ + position: relative; +} + +#rcmContextMenu li.submenu span, +#rcmFolderMenu li.submenu span, +#rcmAddressMenu li.submenu span, +#rcmGroupMenu li.submenu span +{ + cursor: pointer; + background: url(contexticons.png) no-repeat right -188px; + padding-right: 18px; +} + +#rcmContextMenu li.markmessage a span, +#rcmAddressMenu li.contactgroup a span +{ + text-indent: 15px; +} + +#rcmContextMenu li.submenu:hover, +#rcmContextMenu li.sublink:hover a.mainlink, +#rcmFolderMenu li.submenu:hover, +#rcmFolderMenu li.sublink:hover a.mainlink, +#rcmAddressMenu li.submenu:hover, +#rcmAddressMenu li.sublink:hover a.mainlink, +#rcmGroupMenu li.submenu:hover, +#rcmGroupMenu li.sublink:hover a.mainlink +{ + background-color: #00aad6; + background: -moz-linear-gradient(top, #00aad6 0%, #008fc9 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#00aad6), color-stop(100%,#008fc9)); + background: -o-linear-gradient(top, #00aad6 0%, #008fc9 100%); + background: -ms-linear-gradient(top, #00aad6 0%, #008fc9 100%); + background: linear-gradient(top, #00aad6 0%, #008fc9 100%); +} + +#rcmContextMenu li a, +#rcmFolderMenu li a, +#rcmAddressMenu li a, +#rcmGroupMenu li a +{ + padding: 0; + margin-left: 0; +} + + +#rcmContextMenu li a span, +#rcmFolderMenu li a span, +#rcmAddressMenu li a span, +#rcmGroupMenu li a span +{ + display: block; + background: url(contexticons.png) no-repeat 7px 20px; + padding: 6px 10px 6px 29px; + cursor: pointer; +} + +#rcmContextMenu li a.active:hover, +#rcmFolderMenu li a.active:hover, +#rcmAddressMenu li a.active:hover, +#rcmGroupMenu li a.active:hover +{ + background-color: #00aad6; + background: -moz-linear-gradient(top, #00aad6 0%, #008fc9 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#00aad6), color-stop(100%,#008fc9)); + background: -o-linear-gradient(top, #00aad6 0%, #008fc9 100%); + background: -ms-linear-gradient(top, #00aad6 0%, #008fc9 100%); + background: linear-gradient(top, #00aad6 0%, #008fc9 100%); +} + +#rcmContextMenu a.disabled, +#rcmFolderMenu a.disabled, +#rcmAddressMenu a.disabled, +#rcmGroupMenu a.disabled +{ + opacity: 0.5; + filter: alpha(opacity=50); +} + +#rcmContextMenu li a.disabled span, +#rcmFolderMenu li a.disabled span, +#rcmAddressMenu li a.disabled span, +#rcmGroupMenu li a.disabled span +{ + cursor: default; +} + +#rcmContextMenu li a.disabled:hover, +#rcmFolderMenu li a.disabled:hover, +#rcmAddressMenu li a.disabled:hover, +#rcmGroupMenu li a.disabled:hover +{ + background-color: #444444; + background: -moz-linear-gradient(top, #444444 0%, #444444 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#444444), color-stop(100%,#444444)); + background: -o-linear-gradient(top, #444444 0%, #444444 100%); + background: -ms-linear-gradient(top, #444444 0%, #444444 100%); + background: linear-gradient(top, #444444 0%, #444444 100%); +} + +#rcmContextMenu .read a span +{ + background-position: 5px -24px; +} + +#rcmFolderMenu .readfolder a span +{ + background-position: 5px -24px; +} + +#rcmContextMenu .unread a span +{ + background-position: 5px 0px; +} +#rcmContextMenu .flagged a span +{ + background-position: 5px -46px; +} + +#rcmContextMenu .unflagged a span +{ + background-position: 5px -72px; +} + +#rcmContextMenu .reply a span +{ + background-position: 5px -120px; +} + +#rcmContextMenu .replyall a span, #rcmContextMenu .replylist a span +{ + background-position: 5px -144px; +} + +#rcmContextMenu .forwardinline a span, #rcmContextMenu .forwardattachment a span +{ + background-position: 5px -167px; +} + +#rcmContextMenu .delete a span, +#rcmAddressMenu .deletecontact a span +{ + background-position: 5px -94px; +} + +#rcmFolderMenu .expunge a span +{ + background-position: 5px 66px; +} + +#rcmFolderMenu .purge a span +{ + background-position: 5px 66px; +} + +#rcmFolderMenu .collapseall a span +{ + background-position: 5px -323px; +} + +#rcmFolderMenu .expandall a span +{ + background-position: 5px -302px; +} + +#rcmContextMenu ul.moreacts li a span +{ + background: url(messageactions.png) no-repeat 5px 30px; +} + +#rcmContextMenu ul.moreacts li.print a span +{ + background-position: 5px -48px; +} + +#rcmContextMenu ul.moreacts li.source a span +{ + background-position: 5px -72px; +} + +#rcmContextMenu ul.moreacts li.save a span +{ + background-position: 5px -24px; +} + +#rcmContextMenu ul.moreacts li.open a span +{ + background-position: 5px -96px; +} + +#rcmFolderMenu .openfolder a span +{ + background: url(messageactions.png) no-repeat 5px -96px; +} + +#rcmContextMenu ul.moreacts li.edit a span +{ + background-position: 5px 0px; +} + +#rcmAddressMenu .editcontact a span +{ + background: url(messageactions.png) no-repeat 5px 0px; +} + +#rcmAddressMenu .composeto a span +{ + background-position: 5px -279px; +} + +#rcmAddressMenu .removefromgroup a span +{ + background-position: 5px -344px; +} + +#rcmContextMenu ul.folders li a span, +#rcmAddressMenu ul.folders li a span +{ + background: url(folders.png) 5px 3px no-repeat; +} + +#rcmContextMenu ul.folders li.subfolder a span +{ + background-position: 5px -39px; +} + + +#rcmContextMenu ul.folders li.inbox a span +{ + background-position: 5px -61px; +} + +#rcmContextMenu ul.folders li.drafts a span +{ + background-position: 5px -84px; +} + +#rcmContextMenu ul.folders li.sent a span +{ + background-position: 5px -106px; +} + +#rcmContextMenu ul.folders li.junk a span +{ + background-position: 5px -132px; +} + +#rcmContextMenu ul.folders li.trash a span +{ + background-position: 5px -159px; +} + +#rcmAddressMenu ul.folders li.addressbook a span +{ + background-position: 5px -183px; +} + +#rcmAddressMenu ul.folders li.contactgroup a span +{ + background-position: 5px -209px; +} + +#rcmContextMenu div.popupmenu, +#rcmFolderMenu div.popupmenu, +#rcmAddressMenu div.popupmenu +{ + height: 129px; + padding: 0; +} + +#rcmContextMenu ul.scrollable, +#rcmFolderMenu ul.scrollable, +#rcmAddressMenu ul.scrollable +{ + top: 15px; + height: 100px; + overflow: hidden; + border-top: 0; + border-bottom: 0; + margin: 0; +} + +#rcmContextMenu li div, +#rcmFolderMenu li div, +#rcmAddressMenu li div +{ + height: 12px; + overflow: hidden; + background: url(contexticons.png) #444 no-repeat center 20px; +} + +#rcmContextMenu li div.scroll_up_act, +#rcmFolderMenu li div.scroll_up_act, +#rcmAddressMenu li div.scroll_up_act +{ + background-position: center -216px; + border-bottom: 0; + cursor: pointer; +} + +#rcmContextMenu li div.scroll_up_pas, +#rcmFolderMenu li div.scroll_up_pas, +#rcmAddressMenu li div.scroll_up_pas +{ + background-position: center -233px; + border-bottom: 0; + cursor: default; +} + +#rcmContextMenu li div.scroll_down_act, +#rcmFolderMenu li div.scroll_down_act, +#rcmAddressMenu li div.scroll_down_act +{ + top: 117px; + background-position: center -251px; + border-top: 0; + cursor: pointer; +} + +#rcmContextMenu li div.scroll_down_pas, +#rcmFolderMenu li div.scroll_down_pas, +#rcmAddressMenu li div.scroll_down_pas +{ + top: 117px; + background-position: center -270px; + border-top: 0; + cursor: default; +}
\ No newline at end of file diff --git a/plugins/contextmenu/skins/larry/folders.png b/plugins/contextmenu/skins/larry/folders.png Binary files differnew file mode 100644 index 000000000..ce6f3e3db --- /dev/null +++ b/plugins/contextmenu/skins/larry/folders.png diff --git a/plugins/contextmenu/skins/larry/ie6hacks.css b/plugins/contextmenu/skins/larry/ie6hacks.css new file mode 100644 index 000000000..effc427f9 --- /dev/null +++ b/plugins/contextmenu/skins/larry/ie6hacks.css @@ -0,0 +1,3 @@ +/** + * ContextMenu plugin styles (IE6 hacks) + */ diff --git a/plugins/contextmenu/skins/larry/messageactions.png b/plugins/contextmenu/skins/larry/messageactions.png Binary files differnew file mode 100644 index 000000000..156c23970 --- /dev/null +++ b/plugins/contextmenu/skins/larry/messageactions.png |