diff options
author | Thomas Bruederli <thomas@roundcube.net> | 2014-06-03 14:11:13 +0200 |
---|---|---|
committer | Thomas Bruederli <thomas@roundcube.net> | 2014-06-03 14:11:13 +0200 |
commit | 458af8d30a1bca153f770358b8f914554b0da6c3 (patch) | |
tree | 148d6d162cafedab14143f47312041a436136c23 | |
parent | 5cf77e1159b3aea337a08a9a8eef82c47b49bbd7 (diff) |
Apply accessibility improvements to the address book task
-rw-r--r-- | program/js/app.js | 1 | ||||
-rw-r--r-- | program/localization/en_US/labels.inc | 19 | ||||
-rw-r--r-- | program/steps/addressbook/func.inc | 8 | ||||
-rw-r--r-- | skins/larry/addressbook.css | 4 | ||||
-rw-r--r-- | skins/larry/includes/mailtoolbar.html | 8 | ||||
-rw-r--r-- | skins/larry/templates/addressbook.html | 120 | ||||
-rw-r--r-- | skins/larry/templates/compose.html | 4 | ||||
-rw-r--r-- | skins/larry/templates/mail.html | 24 |
8 files changed, 116 insertions, 72 deletions
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) { $('<a href="#list">...</a>') + .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 @@ <roundcube:button command="reply" type="link" class="button reply disabled" classAct="button reply" classSel="button reply pressed" label="reply" title="replytomessage" /> <span class="dropbutton"> <roundcube:button command="reply-all" type="link" class="button reply-all disabled" classAct="button reply-all" classSel="button reply-all pressed" label="replyall" title="replytoallmessage" /> - <a href="#reply-all" class="dropbuttontip" id="replyallmenulink" onclick="UI.toggle_popup('replyallmenu',event);return false" aria-haspopup="true" aria-expanded="false"aria-owns="replyallmenu-menu" tabindex="0">Reply-all options</a> + <a href="#reply-all" class="dropbuttontip" id="replyallmenulink" onclick="UI.toggle_popup('replyallmenu',event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="replyallmenu-menu" tabindex="0">Reply-all options</a> </span> <span class="dropbutton"> <roundcube:button command="forward" type="link" class="button forward disabled" classAct="button forward" classSel="button forward pressed" label="forward" title="forwardmessage" /> - <a href="#reply-all" class="dropbuttontip" id="forwardmenulink" onclick="UI.toggle_popup('forwardmenu',event);return false" aria-haspopup="true" aria-expanded="false"aria-owns="forwardmenu-menu" tabindex="0">Forwarding options</a> + <a href="#forward" class="dropbuttontip" id="forwardmenulink" onclick="UI.toggle_popup('forwardmenu',event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="forwardmenu-menu" tabindex="0">Forwarding options</a> </span> <roundcube:button command="delete" type="link" class="button delete disabled" classAct="button delete" classSel="button delete pressed" label="delete" title="deletemessage" /> <roundcube:if condition="template:name == 'message'" /> @@ -15,8 +15,8 @@ <roundcube:button command="print" type="link" class="button print disabled" classAct="button print" classSel="button print pressed" label="print" title="printmessage" /> <roundcube:endif /> <roundcube:container name="toolbar" id="mailtoolbar" /> -<roundcube:button name="markmenulink" id="markmessagemenulink" type="link" class="button markmessage" label="mark" title="markmessages" onclick="UI.toggle_popup('markmessagemenu',event);return false" aria-haspopup="true" aria-expanded="false"aria-owns="markmessagemenu-menu" /> -<roundcube:button name="messagemenulink" id="messagemenulink" type="link" class="button more" label="more" title="moreactions" onclick="UI.toggle_popup('messagemenu',event);return false" aria-haspopup="true" aria-expanded="false"aria-owns="messagemenu-menu" /> +<roundcube:button name="markmenulink" id="markmessagemenulink" type="link" class="button markmessage" label="mark" title="markmessages" onclick="UI.toggle_popup('markmessagemenu',event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="markmessagemenu-menu" /> +<roundcube:button name="messagemenulink" id="messagemenulink" type="link" class="button more" label="more" title="moreactions" onclick="UI.toggle_popup('messagemenu',event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="messagemenu-menu" /> <div id="forwardmenu" class="popupmenu" aria-hidden="true"> <h3 id="aria-label-forwardmenu" class="voice">Forwarding options</h3> diff --git a/skins/larry/templates/addressbook.html b/skins/larry/templates/addressbook.html index 0b1009f7e..c9aa5acad 100644 --- a/skins/larry/templates/addressbook.html +++ b/skins/larry/templates/addressbook.html @@ -10,25 +10,50 @@ <div id="mainscreen"> +<h1 class="voice"><roundcube:label name="addressbook" /></h1> + <!-- toolbar --> -<div id="addressbooktoolbar" class="toolbar"> +<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2> +<div id="addressbooktoolbar" class="toolbar" role="toolbar" aria-labelledby="aria-label-toolbar"> <roundcube:button command="import" type="link" class="button import disabled" classAct="button import" classSel="button import pressed" label="import" title="importcontacts" /> <span class="dropbutton"> <roundcube:button command="export" type="link" class="button export disabled" classAct="button export" classSel="button export pressed" label="export" title="exportvcards" /> - <span class="dropbuttontip" id="exportmenulink" onclick="UI.show_popup('exportmenu');return false"></span> + <a href="#export" class="dropbuttontip" id="exportmenulink" onclick="return UI.toggle_popup('exportmenu',event)" aria-haspopup="true" aria-expanded="false" aria-owns="exportmenu-menu" tabindex="0"><roundcube:label name="arialabelcontactexportoptions" /></a> </span> <span class="spacer"></span> <roundcube:button command="compose" type="link" class="button compose disabled" classAct="button compose" classSel="button compose pressed" label="compose" title="writenewmessage" /> <roundcube:button command="advanced-search" type="link" class="button search disabled" classAct="button search" classSel="button search pressed" label="advanced" title="advsearch" /> <roundcube:container name="toolbar" id="addressbooktoolbar" /> + + <div id="exportmenu" class="popupmenu" aria-hidden="true"> + <h3 id="aria-label-exportmenu" class="voice"><roundcube:label name="arialabelcontactexportoptions" /></h3> + <ul id="exportmenu-menu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-exportmenu"> + <li role="menuitem"><roundcube:button command="export" label="exportall" prop="sub" class="exportalllink" classAct="exportalllink active" /></li> + <li role="menuitem"><roundcube:button command="export-selected" label="exportsel" prop="sub" class="exportsellink" classAct="exportsellink active" /></li> + </ul> + </div> + </div> <!-- search box --> -<div id="quicksearchbar" class="searchbox"> +<div id="quicksearchbar" class="searchbox" role="search" aria-labelledby="aria-label-searchform"> +<h2 id="aria-label-searchform" class="voice"><roundcube:label name="arialabelcontactsearchform" /></h2> +<label for="quicksearchbox" class="voice"><roundcube:label name="arialabelquicksearchbox" /></label> <roundcube:object name="searchform" id="quicksearchbox" /> -<roundcube:button name="searchmenulink" id="searchmenulink" class="iconbutton searchoptions" onclick="UI.show_popup('searchmenu');return false" title="searchmod" content=" " /> -<roundcube:button command="reset-search" id="searchreset" class="iconbutton reset" title="resetsearch" content=" " /> +<roundcube:button command="menu-open" prop="searchmenu" id="searchmenulink" class="iconbutton searchoptions" title="searchmod" label="options" aria-haspopup="true" aria-expanded="false" aria-owns="searchmenu-menu" /> +<roundcube:button command="reset-search" id="searchreset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> + +<div id="searchmenu" class="popupmenu" data-editable="true"> + <h3 id="aria-label-searchmenu" class="voice"><roundcube:label name="searchmod" /></h3> + <ul class="toolbarmenu" id="searchmenu-menu" role="menu" aria-labelledby="aria-label-searchmenu"> + <li role="menuitem"><label><input type="checkbox" name="s_mods[]" value="name" id="s_mod_name" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="name" /></span></label></li> + <li role="menuitem"><label><input type="checkbox" name="s_mods[]" value="firstname" id="s_mod_firstname" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="firstname" /></span></label></li> + <li role="menuitem"><label><input type="checkbox" name="s_mods[]" value="surname" id="s_mod_surname" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="surname" /></span></label></li> + <li role="menuitem"><label><input type="checkbox" name="s_mods[]" value="email" id="s_mod_email" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="email" /></span></label></li> + <li role="menuitem"><label><input type="checkbox" name="s_mods[]" value="*" id="s_mod_all" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="allfields" /></span></label></li> + </ul> +</div> </div> <div id="mainscreencontent"> @@ -36,42 +61,64 @@ <div id="addressview-left"> <!-- sources/groups list --> -<div id="directorylistbox" class="uibox listbox"> +<div id="directorylistbox" class="uibox listbox" role="navigation" aria-labelledby="directorylist-header"> <h2 id="directorylist-header" class="boxtitle"><roundcube:label name="groups" /></h2> <div id="directorylist-content" class="scroller withfooter"> <roundcube:object name="directorylist" id="directorylist" class="treelist listing iconized" /> </div> <div id="directorylist-footer" class="boxfooter"> - <roundcube:button command="group-create" type="link" title="newcontactgroup" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" content="+" /><roundcube:button name="groupoptions" id="groupoptionslink" type="link" title="moreactions" class="listbutton groupactions" onclick="UI.show_popup('groupoptions');return false" innerClass="inner" content="⚙" /> + <roundcube:button command="group-create" type="link" title="newcontactgroup" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" label="newcontactgroup" /><roundcube:button name="groupoptions" id="groupoptionslink" type="link" title="moreactions" class="listbutton groupactions" onclick="return UI.toggle_popup('groupoptions',event)" innerClass="inner" label="arialabelabookgroupoptions" aria-haspopup="true" aria-expanded="false" aria-owns="groupoptionsmenu" /> </div> </div> +<div id="groupoptions" class="popupmenu" aria-hidden="true"> + <h3 id="aria-label-groupoptions" class="voice"><roundcube:label name="arialabelabookgroupoptions" /></h3> + <ul id="groupoptionsmenu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-groupoptions"> + <li role="menuitem"><roundcube:button command="group-rename" label="grouprename" classAct="active" /></li> + <li role="menuitem"><roundcube:button command="group-delete" label="groupdelete" classAct="active" /></li> + <li role="menuitem"><roundcube:button command="search-create" label="searchsave" classAct="active" /></li> + <li role="menuitem"><roundcube:button command="search-delete" label="searchdelete" classAct="active" /></li> + <roundcube:container name="groupoptions" id="groupoptionsmenu" /> + </ul> +</div> + </div><!-- end addressview-left --> -<div id="addressview-right"> +<div id="addressview-right" role="main"> <!-- contacts list --> -<div id="addresslist" class="uibox listbox"> -<roundcube:object name="addresslisttitle" label="contacts" tag="h2" class="boxtitle" /> +<div id="addresslist" class="uibox listbox" aria-labelledby="aria-label-contactslist"> +<roundcube:object name="addresslisttitle" label="contacts" tag="h2" class="boxtitle" id="aria-label-contactslist" /> <div class="scroller withfooter"> -<roundcube:object name="addresslist" id="contacts-table" class="listing iconized" noheader="true" /> +<roundcube:object name="addresslist" id="contacts-table" class="listing iconized" noheader="true" role="listbox" /> +</div> +<div class="boxpagenav"> + <roundcube:button command="firstpage" type="link" class="icon firstpage disabled" classAct="icon firstpage" title="firstpage" label="first" /> + <roundcube:button command="previouspage" type="link" class="icon prevpage disabled" classAct="icon prevpage" title="previouspage" label="previous" /> + <roundcube:button command="nextpage" type="link" class="icon nextpage disabled" classAct="icon nextpage" title="nextpage" label="next" /> + <roundcube:button command="lastpage" type="link" class="icon lastpage disabled" classAct="icon lastpage" title="lastpage" label="last" /> </div> <div class="boxfooter"> - <roundcube:button command="add" type="link" title="newcontact" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" content="+" /><roundcube:button command="delete" type="link" title="deletecontact" class="listbutton delete disabled" classAct="listbutton delete" innerClass="inner" content="x" /><roundcube:button command="group-remove-selected" type="link" title="groupremoveselected" class="listbutton removegroup disabled" classAct="listbutton removegroup" innerClass="inner" content="-" /> - <roundcube:object name="recordsCountDisplay" class="countdisplay" label="fromtoshort" /> + <roundcube:button command="add" type="link" title="newcontact" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" label="newcontact" /><roundcube:button command="delete" type="link" title="deletecontact" class="listbutton delete disabled" classAct="listbutton delete" innerClass="inner" label="deletecontact" /><roundcube:button command="group-remove-selected" type="link" title="groupremoveselected" class="listbutton removegroup disabled" classAct="listbutton removegroup" innerClass="inner" label="groupremoveselected" /> + <span class="countdisplay" aria-live="polite" aria-relevant="text"> + <span class="voice"><roundcube:label name="contacts" /></span> + <roundcube:object name="recordsCountDisplay" label="fromtoshort" /> + </span> </div> -<div class="boxpagenav"> - <roundcube:button command="firstpage" type="link" class="icon firstpage disabled" classAct="icon firstpage" title="firstpage" content="|&lt;" /> - <roundcube:button command="previouspage" type="link" class="icon prevpage disabled" classAct="icon prevpage" title="previouspage" content="&lt;" /> - <roundcube:button command="nextpage" type="link" class="icon nextpage disabled" classAct="icon nextpage" title="nextpage" content="&gt;" /> - <roundcube:button command="lastpage" type="link" class="icon lastpage disabled" classAct="icon lastpage" title="lastpage" content="&gt;|" /> </div> + +<div class="voice" role="note"> +<h3><roundcube:label name="helplistnavigation" /></h3> +<pre> +<roundcube:label name="helplistkeyboardnavigation" /> +<roundcube:label name="helplistkeyboardnavcontacts" /> +</pre> </div> <div id="contacts-box" class="uibox"> <div class="iframebox"> - <roundcube:object name="addressframe" id="contact-frame" style="width:100%; height:100%" frameborder="0" src="/watermark.html" /> + <roundcube:object name="addressframe" id="contact-frame" style="width:100%; height:100%" frameborder="0" src="/watermark.html" title="contactproperties" /> </div> </div> @@ -81,37 +128,10 @@ </div><!-- end mainscreen --> -<div id="exportmenu" class="popupmenu"> - <ul class="toolbarmenu"> - <li><roundcube:button command="export" label="exportall" prop="sub" class="exportalllink" classAct="exportalllink active" /></li> - <li><roundcube:button command="export-selected" label="exportsel" prop="sub" class="exportsellink" classAct="exportsellink active" /></li> - </ul> -</div> - -<div id="searchmenu" class="popupmenu"> - <ul class="toolbarmenu"> - <li><label><input type="checkbox" name="s_mods[]" value="name" id="s_mod_name" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="name" /></span></label></li> - <li><label><input type="checkbox" name="s_mods[]" value="firstname" id="s_mod_firstname" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="firstname" /></span></label></li> - <li><label><input type="checkbox" name="s_mods[]" value="surname" id="s_mod_surname" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="surname" /></span></label></li> - <li><label><input type="checkbox" name="s_mods[]" value="email" id="s_mod_email" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="email" /></span></label></li> - <li><label><input type="checkbox" name="s_mods[]" value="*" id="s_mod_all" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="allfields" /></span></label></li> - </ul> -</div> - -<div id="groupoptions" class="popupmenu"> - <ul id="groupoptionsmenu" class="toolbarmenu"> - <li><roundcube:button command="group-rename" label="grouprename" classAct="active" /></li> - <li><roundcube:button command="group-delete" label="groupdelete" classAct="active" /></li> - <li><roundcube:button command="search-create" label="searchsave" classAct="active" /></li> - <li><roundcube:button command="search-delete" label="searchdelete" classAct="active" /></li> - <roundcube:container name="groupoptions" id="groupoptionsmenu" /> - </ul> -</div> - -<div id="dragcontactmenu" class="popupmenu"> - <ul class="toolbarmenu"> - <li><roundcube:button command="move" onclick="return rcmail.drag_menu_action('move')" label="move" classAct="active" /></li> - <li><roundcube:button command="copy" onclick="return rcmail.drag_menu_action('copy')" label="copy" classAct="active" /></li> +<div id="dragcontactmenu" class="popupmenu" aria-hidden="true"> + <ul class="toolbarmenu" role="menu"> + <li role="menuitem"><roundcube:button command="move" onclick="return rcmail.drag_menu_action('move')" label="move" classAct="active" /></li> + <li role="menuitem"><roundcube:button command="copy" onclick="return rcmail.drag_menu_action('copy')" label="copy" classAct="active" /></li> </ul> </div> diff --git a/skins/larry/templates/compose.html b/skins/larry/templates/compose.html index c643b36f5..bfa6e6d14 100644 --- a/skins/larry/templates/compose.html +++ b/skins/larry/templates/compose.html @@ -32,7 +32,7 @@ <roundcube:endif /> <roundcube:button name="addattachment" type="link" class="button attach" label="attach" title="addattachment" onclick="UI.show_uploadform(event);return false" aria-haspopup="true" aria-expanded="false"tabindex="2" /> <roundcube:button command="insert-sig" type="link" class="button insertsig disabled" classAct="button insertsig" label="signature" title="insertsignature" tabindex="2" /> - <a href="#responses" class="button responses" label="responses" title="<roundcube:label name='insertresponse' />" id="responsesmenulink" unselectable="on" onmousedown="return false" onclick="UI.toggle_popup('responsesmenu',event);return false" tabindex="2" aria-haspopup="true" aria-expanded="false"aria-owns="textresponsesmenu"><roundcube:label name="responses" /></a> + <a href="#responses" class="button responses" label="responses" title="<roundcube:label name='insertresponse' />" id="responsesmenulink" unselectable="on" onmousedown="return false" onclick="UI.toggle_popup('responsesmenu',event);return false" tabindex="2" aria-haspopup="true" aria-expanded="false" aria-owns="textresponsesmenu"><roundcube:label name="responses" /></a> <roundcube:container name="toolbar" id="compose-toolbar" /> </div> @@ -54,7 +54,7 @@ </div> <roundcube:object name="addressbooks" id="directorylist" class="treelist listing" summary="ariasummarycomposecontacts" /> <div class="scroller withfooter" tabindex="-1"> - <roundcube:object name="addresslist" id="contacts-table" class="listing iconized" noheader="true" /> + <roundcube:object name="addresslist" id="contacts-table" class="listing iconized" noheader="true" role="listbox" /> </div> <div class="boxfooter"> <roundcube:button command="add-recipient" prop="to" type="link" title="to" class="listbutton addto disabled" classAct="listbutton addto" innerClass="inner" content="To+" /><roundcube:button command="add-recipient" prop="cc" type="link" title="cc" class="listbutton addcc disabled" classAct="listbutton addcc" innerClass="inner" content="Cc+" /><roundcube:button command="add-recipient" prop="bcc" type="link" title="bcc" class="listbutton addbcc disabled" classAct="listbutton addbcc" innerClass="inner" content="Bcc+" /> diff --git a/skins/larry/templates/mail.html b/skins/larry/templates/mail.html index cf8ff2f7d..1ca5fbba0 100644 --- a/skins/larry/templates/mail.html +++ b/skins/larry/templates/mail.html @@ -36,11 +36,11 @@ <!-- search box --> <div id="quicksearchbar" class="searchbox" role="search" aria-labelledby="aria-label-searchform"> -<h2 id="aria-label-searchform" class="voice"><roundcube:label name="arialabelsearchform" /></h2> -<label for="quicksearchbox" class="voice"><roundcube:label name="arialabelquicksearchbox" /></label> +<h2 id="aria-label-searchform" class="voice"><roundcube:label name="arialabelmailsearchform" /></h2> +<label for="quicksearchbox" class="voice"><roundcube:label name="arialabelmailquicksearchbox" /></label> <roundcube:object name="searchform" id="quicksearchbox" /> -<roundcube:button command="menu-open" prop="searchmenu" id="searchmenulink" class="iconbutton searchoptions" title="searchmod" label="options" aria-haspopup="true" aria-expanded="false"aria-owns="searchmenu-menu" /> -<roundcube:button command="reset-search" id="searchreset" class="iconbutton reset" title="resetsearch" content="Reset" /> +<roundcube:button command="menu-open" prop="searchmenu" id="searchmenulink" class="iconbutton searchoptions" title="searchmod" label="options" aria-haspopup="true" aria-expanded="false" aria-owns="searchmenu-menu" /> +<roundcube:button command="reset-search" id="searchreset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> <div id="searchmenu" class="popupmenu" data-editable="true"> <h3 id="aria-label-searchmenu" class="voice"><roundcube:label name="searchmod" /></h3> @@ -73,7 +73,7 @@ <roundcube:object name="mailboxlist" id="mailboxlist" class="treelist listing" folder_filter="mail" unreadwrap="%s" /> </div> <div id="folderlist-footer" class="boxfooter"> - <roundcube:button name="mailboxmenulink" id="mailboxmenulink" type="link" title="folderactions" class="listbutton groupactions" onclick="UI.toggle_popup('mailboxmenu',event);return false" innerClass="inner" content="⚙" aria-haspopup="true" aria-expanded="false"aria-owns="mailboxmenu-menu" /> + <roundcube:button name="mailboxmenulink" id="mailboxmenulink" type="link" title="folderactions" class="listbutton groupactions" onclick="UI.toggle_popup('mailboxmenu',event);return false" innerClass="inner" content="⚙" aria-haspopup="true" aria-expanded="false" aria-owns="mailboxoptionsmenu" /> <roundcube:if condition="env:quota" /> <span class="voice"><roundcube:label name="quota"></span> <roundcube:object name="quotaDisplay" id="quotadisplay" class="countdisplay" display="text" /> @@ -101,6 +101,14 @@ aria-labelledby="aria-label-messagelist" /> </div> +<div class="voice" role="note"> +<h3><roundcube:label name="helplistnavigation" /></h3> +<pre> +<roundcube:label name="helplistkeyboardnavigation" /> +<roundcube:label name="helplistkeyboardnavmessages" /> +</pre> +</div> + <!-- list footer --> <div id="messagelistfooter"> <div id="listcontrols"> @@ -109,9 +117,9 @@ </div> <div id="listselectors"> - <a href="#select" id="listselectmenulink" class="menuselector" onclick="UI.toggle_popup('listselectmenu', event);return false" aria-haspopup="true" aria-expanded="false"aria-owns="listselectmenu-menu"><span class="handle"><roundcube:label name="select" /></span></a> + <a href="#select" id="listselectmenulink" class="menuselector" onclick="UI.toggle_popup('listselectmenu', event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="listselectmenu-menu"><span class="handle"><roundcube:label name="select" /></span></a> <roundcube:if condition="env:threads" /> - <a href="#threads" id="threadselectmenulink" class="menuselector" onclick="UI.toggle_popup('threadselectmenu', event);return false" aria-haspopup="true" aria-expanded="false"aria-owns="threadselectmenu-menu"><span class="handle"><roundcube:label name="threads" /></span></a> + <a href="#threads" id="threadselectmenulink" class="menuselector" onclick="UI.toggle_popup('threadselectmenu', event);return false" aria-haspopup="true" aria-expanded="false" aria-owns="threadselectmenu-menu"><span class="handle"><roundcube:label name="threads" /></span></a> <roundcube:endif /> </div> @@ -156,7 +164,7 @@ <div id="mailboxmenu" class="popupmenu" aria-hidden="true"> <h3 id="aria-label-mailboxmenu" class="voice"><roundcube:label name="arialabelmailboxmenu" /></h3> - <ul id="mailboxmenu-menu" class="toolbarmenu" id="mailboxoptionsmenu" role="menu" aria-labelledby="aria-label-mailboxmenu"> + <ul class="toolbarmenu" id="mailboxoptionsmenu" role="menu" aria-labelledby="aria-label-mailboxmenu"> <li role="menuitem"><roundcube:button command="expunge" type="link" label="compact" classAct="active" /></li> <li role="menuitem"><roundcube:button command="purge" type="link" label="empty" classAct="active" /></li> <li role="menuitem"><roundcube:button command="import-messages" name="messageimport" type="link" classAct="active" label="importmessages" onclick="if(rcmail.command_enabled('import-messages'))UI.show_uploadform();return false" /></li> |