From b2992dd2283c3d0ac95f3293497dfaed0493f607 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Wed, 7 May 2014 17:34:28 +0200 Subject: Further accessibility improvements regarding keyboard navigation and document structure --- program/steps/mail/compose.inc | 5 +++-- program/steps/mail/func.inc | 21 +++++++++++++-------- program/steps/mail/show.inc | 7 ++++++- 3 files changed, 22 insertions(+), 11 deletions(-) (limited to 'program/steps') diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc index 2b717d673..b56938596 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -977,7 +977,7 @@ function rcmail_compose_body($attrib) $OUTPUT->set_env('spellcheck_langs', join(',', $editor_lang_set)); } - $out .= "\n".''; + $out .= "\n".''; return $out; } @@ -1864,9 +1864,10 @@ function rcmail_compose_responses_list($attrib) foreach ($RCMAIL->get_compose_responses(true) as $response) { $key = $response['key']; $item = html::a(array( - 'href '=> '#'.urlencode($response['name']), + 'href' => '#'.urlencode($response['name']), 'class' => rtrim('insertresponse ' . $attrib['itemclass']), 'unselectable' => 'on', + 'tabindex' => '0', 'rel' => $key, ), rcube::Q($response['name'])); diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index b9971ce0c..811e8782d 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -507,14 +507,19 @@ function rcmail_message_list_head($attrib, $a_show_cols) $a_sort_cols = array('subject', 'date', 'from', 'to', 'fromto', 'size', 'cc'); if (!empty($attrib['optionsmenuicon'])) { - $onclick = 'return ' . rcmail_output::JS_OBJECT_NAME . ".command('menu-open', 'messagelistmenu')"; - if ($attrib['optionsmenuicon'] === true || $attrib['optionsmenuicon'] == 'true') - $list_menu = html::div(array('onclick' => $onclick, 'class' => 'listmenu', - 'id' => 'listmenulink', 'title' => $RCMAIL->gettext('listoptions'))); - else - $list_menu = html::a(array('href' => '#', 'onclick' => $onclick), - html::img(array('src' => $skin_path . $attrib['optionsmenuicon'], - 'id' => 'listmenulink', 'title' => $RCMAIL->gettext('listoptions')))); + $onclick = 'return ' . rcmail_output::JS_OBJECT_NAME . ".command('menu-open', 'messagelistmenu', null, event)"; + $inner = 'v'; + if (is_string($attrib['optionsmenuicon']) && $attrib['optionsmenuicon'] != 'true') { + $inner = html::img(array('src' => $skin_path . $attrib['optionsmenuicon'], 'alt' => $RCMAIL->gettext('listoptions'))); + } + $list_menu = html::a(array( + 'href' => '#list-options', + 'onclick' => $onclick, + 'class' => 'listmenu', + 'id' => 'listmenulink', + 'title' => $RCMAIL->gettext('listoptions'), + 'tabindex' => '0', + ), $inner); } else { $list_menu = ''; diff --git a/program/steps/mail/show.inc b/program/steps/mail/show.inc index 9498d1dc5..7f9a23e7d 100644 --- a/program/steps/mail/show.inc +++ b/program/steps/mail/show.inc @@ -198,6 +198,7 @@ function rcmail_message_attachments($attrib) if (sizeof($MESSAGE->attachments)) { foreach ($MESSAGE->attachments as $attach_prop) { $filename = rcmail_attachment_name($attach_prop, true); + $size = ''; if ($PRINT_MODE) { $size = $RCMAIL->message_part_size($attach_prop); @@ -212,6 +213,10 @@ function rcmail_message_attachments($attrib) $title = ''; } + if ($attach_prop->size) { + $size = ' ' . html::span('attachment-size', '(' . $RCMAIL->show_bytes($attach_prop->size) . ')'); + } + $mimetype = rcmail_fix_mimetype($attach_prop->mimetype); $class = rcube_utils::file2class($mimetype, $filename); $id = 'attach' . $attach_prop->mime_id; @@ -221,7 +226,7 @@ function rcmail_message_attachments($attrib) rcmail_output::JS_OBJECT_NAME, $attach_prop->mime_id), 'onmouseover' => $title ? '' : 'rcube_webmail.long_subject_title_ex(this, 0)', 'title' => rcube::Q($title), - ), rcube::Q($filename)); + ), rcube::Q($filename) . $size); $ol .= html::tag('li', array('class' => $class, 'id' => $id), $link); -- cgit v1.2.3 From b4446aa7a9b0722bc68d61ed1e03b7c399122016 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Wed, 28 May 2014 17:35:08 +0200 Subject: Add message status labels to client --- program/localization/en_US/labels.inc | 4 ++++ program/steps/mail/func.inc | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'program/steps') diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc index 23f22a969..0b5ff8c5a 100644 --- a/program/localization/en_US/labels.inc +++ b/program/localization/en_US/labels.inc @@ -165,12 +165,16 @@ $labels['select'] = 'Select'; $labels['all'] = 'All'; $labels['none'] = 'None'; $labels['currpage'] = 'Current page'; +$labels['isread'] = 'Read'; $labels['unread'] = 'Unread'; $labels['flagged'] = 'Flagged'; +$labels['unflagged'] = 'Not Flagged'; $labels['unanswered'] = 'Unanswered'; $labels['withattachment'] = 'With attachment'; $labels['deleted'] = 'Deleted'; $labels['undeleted'] = 'Not deleted'; +$labels['replied'] = 'Replied'; +$labels['forwarded'] = 'Forwarded'; $labels['invert'] = 'Invert'; $labels['filter'] = 'Filter'; $labels['list'] = 'List'; diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index 811e8782d..cbfb1200b 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -142,7 +142,9 @@ if (empty($RCMAIL->action) || $RCMAIL->action == 'list') { if (!$OUTPUT->ajax_call) { $OUTPUT->add_label('checkingmail', 'deletemessage', 'movemessagetotrash', 'movingmessage', 'copyingmessage', 'deletingmessage', 'markingmessage', - 'copy', 'move', 'quota', 'replyall', 'replylist', 'stillsearching'); + 'copy', 'move', 'quota', 'replyall', 'replylist', 'stillsearching', + 'flagged', 'unflagged', 'unread', 'deleted', 'replied', 'forwarded', + 'priority', 'withattachment'); } $pagetitle = $RCMAIL->localize_foldername($mbox_name, true); -- cgit v1.2.3 From d58c39126f6e1754e29b6f3bbc01f0f6a3ea2581 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Mon, 2 Jun 2014 16:35:12 +0200 Subject: Some more improvemements on content structure, text representation and keyboard navigation within the mail view --- program/include/rcmail.php | 2 +- program/include/rcmail_output_html.php | 4 ++-- program/js/app.js | 35 ++++++++++++++++++++++++------- program/js/list.js | 3 +-- program/localization/en_US/labels.inc | 3 +++ program/steps/mail/list_contacts.inc | 2 +- program/steps/mail/search_contacts.inc | 2 +- skins/classic/mail.css | 1 + skins/larry/styles.css | 6 ++++++ skins/larry/templates/compose.html | 10 ++++----- skins/larry/templates/mail.html | 1 + skins/larry/templates/messagepart.html | 4 ++-- skins/larry/templates/messagepreview.html | 4 ++-- 13 files changed, 54 insertions(+), 23 deletions(-) (limited to 'program/steps') diff --git a/program/include/rcmail.php b/program/include/rcmail.php index cc70739cf..8e66e85e7 100644 --- a/program/include/rcmail.php +++ b/program/include/rcmail.php @@ -1501,7 +1501,7 @@ class rcmail extends rcube $html_name = $this->Q($foldername) . ($unread ? html::span('unreadcount', sprintf($attrib['unreadwrap'], $unread)) : ''); $link_attrib = $folder['virtual'] ? array() : array( 'href' => $this->url(array('_mbox' => $folder['id'])), - 'onclick' => sprintf("return %s.command('list','%s',this)", rcmail_output::JS_OBJECT_NAME, $js_name), + 'onclick' => sprintf("return %s.command('list','%s',this,event)", rcmail_output::JS_OBJECT_NAME, $js_name), 'rel' => $folder['id'], 'title' => $title, ); diff --git a/program/include/rcmail_output_html.php b/program/include/rcmail_output_html.php index 1fa0376fb..e8b5c9828 100644 --- a/program/include/rcmail_output_html.php +++ b/program/include/rcmail_output_html.php @@ -859,10 +859,10 @@ EOF; } // localize title and summary attributes - if (!empty($attrib['title']) && $this->app->text_exists($attrib['title'])) { + if ($command != 'button' && !empty($attrib['title']) && $this->app->text_exists($attrib['title'])) { $attrib['title'] = $this->app->gettext($attrib['title']); } - if (!empty($attrib['summary']) && $this->app->text_exists($attrib['summary'])) { + if ($command != 'button' && !empty($attrib['summary']) && $this->app->text_exists($attrib['summary'])) { $attrib['summary'] = $this->app->gettext($attrib['summary']); } diff --git a/program/js/app.js b/program/js/app.js index bf163c614..e7f9d02b6 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -342,7 +342,16 @@ function rcube_webmail() .addEventListener('initrow', function(o) { ref.triggerEvent('insertrow', { cid:o.uid, row:o }); }) .addEventListener('select', function(o) { ref.compose_recipient_select(o); }) .addEventListener('dblclick', function(o) { ref.compose_add_recipient('to'); }) - .addEventListener('keypress', function(o) { if (o.key_pressed == o.ENTER_KEY) ref.compose_add_recipient('to'); }) + .addEventListener('keypress', function(o) { + if (o.key_pressed == o.ENTER_KEY) { + if (!ref.compose_add_recipient('to')) { + // execute link action on if not a recipient entry + if (o.last_selected && String(o.last_selected).charAt(0) == 'G') { + $(o.rows[o.last_selected].obj).find('a').first().click(); + } + } + } + }) .init(); } @@ -602,7 +611,7 @@ function rcube_webmail() { var ret, uid, cid, url, flag, aborted = false; - if (obj && obj.blur) + if (obj && obj.blur && !(event || rcube_event.is_keyboard(event))) obj.blur(); // do nothing if interface is locked by other command (with exception for searching reset) @@ -1647,9 +1656,12 @@ function rcube_webmail() { // Helper method to move focus to the next/prev active menu item var focus_menu_item = function(dir) { - var obj, mod = dir < 0 ? 'prevAll' : 'nextAll', limit = dir < 0 ? 'last' : 'first'; + var obj, item, mod = dir < 0 ? 'prevAll' : 'nextAll', limit = dir < 0 ? 'last' : 'first'; if (ref.focused_menu && (obj = $('#'+ref.focused_menu))) { - return obj.find(':focus').closest('li')[mod](':has(:not([aria-disabled=true]))').find('a,input')[limit]().focus().length; + item = obj.find(':focus').closest('li')[mod](':has(:not([aria-disabled=true]))').find('a,input')[limit](); + if (!item.length) + item = obj.find(':focus').closest('ul')[mod](':has(:not([aria-disabled=true]))').find('a,input')[limit](); + return item.focus().length; } return 0; @@ -2402,7 +2414,6 @@ function rcube_webmail() this.clear_message_list = function() { this.env.messages = {}; - this.last_selected = 0; this.show_contentframe(false); if (this.message_list) @@ -3490,6 +3501,8 @@ function rcube_webmail() input.val(oldval + recipients.join(delim + ' ') + delim + ' '); this.triggerEvent('add-recipient', { field:field, recipients:recipients }); } + + return recipients.length; }; // checks the input fields before sending a message @@ -7405,7 +7418,8 @@ function rcube_webmail() this.enable_command('set-listmode', this.env.threads && !is_multifolder); if ((response.action == 'list' || response.action == 'search') && this.message_list) { - this.message_list.focus(); + if (this.message_list.rowcount > 0) + this.message_list.focus(); this.msglist_select(this.message_list); this.triggerEvent('listupdate', { folder:this.env.mailbox, rowcount:this.message_list.rowcount }); } @@ -7417,11 +7431,18 @@ function rcube_webmail() this.enable_command('search-create', this.env.source == ''); this.enable_command('search-delete', this.env.search_id); this.update_group_commands(); - this.contact_list.focus(); + if (this.contact_list.rowcount > 0) + this.contact_list.focus(); this.triggerEvent('listupdate', { folder:this.env.source, rowcount:this.contact_list.rowcount }); } } break; + + case 'list-contacts': + case 'search-contacts': + if (this.contact_list && this.contact_list.rowcount > 0) + this.contact_list.focus(); + break; } if (response.unlock) diff --git a/program/js/list.js b/program/js/list.js index 0bf5d568b..65d4a9260 100644 --- a/program/js/list.js +++ b/program/js/list.js @@ -274,11 +274,10 @@ clear: function(sel) this.rows = {}; this.rowcount = 0; + this.last_selected = 0; if (sel) this.clear_selection(); - else - this.last_selected = 0; // reset scroll position (in Opera) if (this.frame) diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc index 0b5ff8c5a..874f19be2 100644 --- a/program/localization/en_US/labels.inc +++ b/program/localization/en_US/labels.inc @@ -591,11 +591,14 @@ $labels['arialabelmessagelistoptions'] = 'Message list display and sorting optio $labels['arialabelmailimportdialog'] = 'Message import dialog'; $labels['arialabelmessagenav'] = 'Message navigation'; $labels['arialabelmessagebody'] = 'Message Body'; +$labels['arialabelmessageactions'] = 'Message actions'; $labels['arialabelcontactquicksearch'] = 'Contacts search form'; $labels['arialabelcontactsearchbox'] = 'Contact search input'; $labels['arialabelmessageheaders'] = 'Message headers'; $labels['arialabelcomposeoptions'] = 'Composition options'; $labels['arialabelresponsesmenu'] = 'Canned responses menu'; $labels['arialabelattachmentuploadform'] = 'Attachment upload form'; +$labels['arialabelattachmentpreview'] = 'Attachment preview'; +$labels['ariasummarycomposecontacts'] = 'List of contacts and groups to select as recipients'; ?> diff --git a/program/steps/mail/list_contacts.inc b/program/steps/mail/list_contacts.inc index 0ee81135b..4f17beffd 100644 --- a/program/steps/mail/list_contacts.inc +++ b/program/steps/mail/list_contacts.inc @@ -110,7 +110,7 @@ else if (!empty($result) && $result->count > 0) { $keyname = $row['_type'] == 'group' ? 'contactgroup' : 'contact'; $OUTPUT->command('add_contact_row', $row_id, array( - $keyname => html::span(array('title' => $email), rcube::Q($name ? $name : $email) . + $keyname => html::a(array('title' => $email), rcube::Q($name ? $name : $email) . ($name && count($emails) > 1 ? ' ' . html::span('email', rcube::Q($email)) : '') )), $classname); } diff --git a/program/steps/mail/search_contacts.inc b/program/steps/mail/search_contacts.inc index d56581695..ccef32dd2 100644 --- a/program/steps/mail/search_contacts.inc +++ b/program/steps/mail/search_contacts.inc @@ -87,7 +87,7 @@ if (!empty($result) && $result->count > 0) { $row_id = $row['ID'].'-'.$i; $jsresult[$row_id] = format_email_recipient($email, $name); $OUTPUT->command('add_contact_row', $row_id, array( - 'contact' => html::span(array('title' => $email), rcube::Q($name ? $name : $email) . + 'contact' => html::a(array('title' => $email), rcube::Q($name ? $name : $email) . ($name && count($emails) > 1 ? ' ' . html::span('email', rcube::Q($email)) : '') )), 'person'); } diff --git a/skins/classic/mail.css b/skins/classic/mail.css index 0a4653a3a..3310ac54f 100644 --- a/skins/classic/mail.css +++ b/skins/classic/mail.css @@ -780,6 +780,7 @@ table.messagelist.fixedcopy -o-text-overflow: ellipsis; border-bottom: 1px solid #EBEBEB; cursor: default; + outline: none; } .messagelist tbody tr td a diff --git a/skins/larry/styles.css b/skins/larry/styles.css index d7ad74c01..add47324d 100644 --- a/skins/larry/styles.css +++ b/skins/larry/styles.css @@ -1187,6 +1187,12 @@ a.iconlink.upload { outline: none; } +.listing tbody td a { + color: #376572; + text-shadow: 0px 1px 1px #fff; + text-decoration: none; +} + .webkit .listing tbody td { height: 14px; } diff --git a/skins/larry/templates/compose.html b/skins/larry/templates/compose.html index 87993ed70..c643b36f5 100644 --- a/skins/larry/templates/compose.html +++ b/skins/larry/templates/compose.html @@ -52,7 +52,7 @@ - +
@@ -93,25 +93,25 @@ - x + - x + - x + - x + diff --git a/skins/larry/templates/mail.html b/skins/larry/templates/mail.html index 92b01e019..cf8ff2f7d 100644 --- a/skins/larry/templates/mail.html +++ b/skins/larry/templates/mail.html @@ -75,6 +75,7 @@ diff --git a/skins/larry/templates/messagepart.html b/skins/larry/templates/messagepart.html index 2df9c7b77..edf275f6e 100644 --- a/skins/larry/templates/messagepart.html +++ b/skins/larry/templates/messagepart.html @@ -29,9 +29,9 @@
-

Attachment preview

+

- +
diff --git a/skins/larry/templates/messagepreview.html b/skins/larry/templates/messagepreview.html index 97efdf3e7..82ecd7a43 100644 --- a/skins/larry/templates/messagepreview.html +++ b/skins/larry/templates/messagepreview.html @@ -10,7 +10,7 @@
-

Message Body

+

-- cgit v1.2.3 From 458af8d30a1bca153f770358b8f914554b0da6c3 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Tue, 3 Jun 2014 14:11:13 +0200 Subject: Apply accessibility improvements to the address book task --- program/js/app.js | 1 + program/localization/en_US/labels.inc | 19 +++++- program/steps/addressbook/func.inc | 8 +-- skins/larry/addressbook.css | 4 +- skins/larry/includes/mailtoolbar.html | 8 +-- skins/larry/templates/addressbook.html | 120 +++++++++++++++++++-------------- skins/larry/templates/compose.html | 4 +- skins/larry/templates/mail.html | 24 ++++--- 8 files changed, 116 insertions(+), 72 deletions(-) (limited to 'program/steps') diff --git a/program/js/app.js b/program/js/app.js index e7f9d02b6..9398c6a21 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -5014,6 +5014,7 @@ function rcube_webmail() // add link to pop back to parent group if (this.env.address_group_stack.length > 1) { $('...') + .attr('title', this.gettext('uponelevel')) .addClass('poplink') .appendTo(boxtitle) .click(function(e){ return ref.command('popgroup','',this); }); diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc index 874f19be2..2b44ac188 100644 --- a/program/localization/en_US/labels.inc +++ b/program/localization/en_US/labels.inc @@ -377,6 +377,7 @@ $labels['newcontactgroup'] = 'Create new contact group'; $labels['grouprename'] = 'Rename group'; $labels['groupdelete'] = 'Delete group'; $labels['groupremoveselected'] = 'Remove selected contacts from group'; +$labels['uponelevel'] = 'Up one level'; $labels['previouspage'] = 'Show previous page'; $labels['firstpage'] = 'Show first page'; @@ -579,8 +580,10 @@ $labels['arialabeltopnav'] = 'Window control'; $labels['arialabeltasknav'] = 'Application tasks'; $labels['arialabeltoolbar'] = 'Application toolbar'; $labels['arialabelmessagessearchfilter'] = 'Email listing filter'; -$labels['arialabelsearchform'] = 'Email message search form'; -$labels['arialabelquicksearchbox'] = 'Email search input'; +$labels['arialabelmailsearchform'] = 'Email message search form'; +$labels['arialabelcontactsearchform'] = 'Contacts search form'; +$labels['arialabelmailquicksearchbox'] = 'Email search input'; +$labels['arialabelquicksearchbox'] = 'Search input'; $labels['arialabelfolderlist'] = 'Email folder selection'; $labels['arialabelmessagelist'] = 'Email Messages Listing'; $labels['arialabelmailpreviewframe'] = 'Message preview'; @@ -600,5 +603,17 @@ $labels['arialabelresponsesmenu'] = 'Canned responses menu'; $labels['arialabelattachmentuploadform'] = 'Attachment upload form'; $labels['arialabelattachmentpreview'] = 'Attachment preview'; $labels['ariasummarycomposecontacts'] = 'List of contacts and groups to select as recipients'; +$labels['arialabelcontactexportoptions'] = 'Contact export options'; +$labels['arialabelabookgroupoptions'] = 'Addressbook/group options'; + +$labels['helplistnavigation'] = 'List keyboard navigation'; +$labels['helplistkeyboardnavigation'] = "Arrows up/down: Move row focus/selection. +Space: Select focused row. +Shift + up/down: Select additional row above/below. +Ctrl + Space: Add focused row to selection/remove from selection."; +$labels['helplistkeyboardnavmessages'] = "Arrows right/left: expand/collapse message thread (in threads mode only). +Enter: Open the selected/focused message. +Delete: Move selected messages to Trash."; +$labels['helplistkeyboardnavcontacts'] = "Enter: Open the selected/focused contact."; ?> diff --git a/program/steps/addressbook/func.inc b/program/steps/addressbook/func.inc index be0dd2a33..e68a694ef 100644 --- a/program/steps/addressbook/func.inc +++ b/program/steps/addressbook/func.inc @@ -395,7 +395,7 @@ function rcmail_js_contacts_list($result, $prefix='') ), '»'); } else - $val = ' '; + $val = ''; break; default: @@ -422,7 +422,7 @@ function rcmail_contacts_list_title($attrib) unset($attrib['name']); $OUTPUT->add_gui_object('addresslist_title', $attrib['id']); - $OUTPUT->add_label('contacts'); + $OUTPUT->add_label('contacts','uponelevel'); return html::tag($attrib['tag'], $attrib, $RCMAIL->gettext($attrib['label']), html::$common_attrib); } @@ -518,7 +518,7 @@ function rcmail_contact_form($form, $record, $attrib = null) foreach ($coltypes as $col => $prop) { if ($prop['subtypes']) { $subtype_names = array_map('rcmail_get_type_label', $prop['subtypes']); - $select_subtype = new html_select(array('name' => '_subtype_'.$col.'[]', 'class' => 'contactselectsubtype')); + $select_subtype = new html_select(array('name' => '_subtype_'.$col.'[]', 'class' => 'contactselectsubtype', 'title' => $prop['label'] . ' ' . $RCMAIL->gettext('type'))); $select_subtype->add($subtype_names, $prop['subtypes']); $coltypes[$col]['subtypes_select'] = $select_subtype->show(); } @@ -607,7 +607,7 @@ function rcmail_contact_form($form, $record, $attrib = null) // prepare subtype selector in edit mode if ($edit_mode && is_array($colprop['subtypes'])) { $subtype_names = array_map('rcmail_get_type_label', $colprop['subtypes']); - $select_subtype = new html_select(array('name' => '_subtype_'.$col.'[]', 'class' => 'contactselectsubtype')); + $select_subtype = new html_select(array('name' => '_subtype_'.$col.'[]', 'class' => 'contactselectsubtype', 'title' => $colprop['label'] . ' ' . $RCMAIL->gettext('type'))); $select_subtype->add($subtype_names, $colprop['subtypes']); } else diff --git a/skins/larry/addressbook.css b/skins/larry/addressbook.css index 8350d0a59..e590831a1 100644 --- a/skins/larry/addressbook.css +++ b/skins/larry/addressbook.css @@ -142,7 +142,7 @@ background-position: 6px -1603px; } -#contacts-table .contact.focused td.name { +#contacts-table.focus .contact.focused td.name { background-position: 4px -1603px; } @@ -159,7 +159,7 @@ background-position: 6px -1555px; } -#contacts-table .group.focused td.name { +#contacts-table.focus .group.focused td.name { background-position: 4px -1555px; } diff --git a/skins/larry/includes/mailtoolbar.html b/skins/larry/includes/mailtoolbar.html index a70cc023a..691345bb4 100644 --- a/skins/larry/includes/mailtoolbar.html +++ b/skins/larry/includes/mailtoolbar.html @@ -3,11 +3,11 @@ - + - + @@ -15,8 +15,8 @@ -