Navigate with arrow keys only in treelist widgets; fix keyboard event detection in IE; new text label to help screen readers
| | |
| | | var target = e.target || {}, |
| | | keyCode = rcube_event.get_keycode(e); |
| | | |
| | | // save global reference for keyboard detection on click events in IE |
| | | rcube_event._last_keyboard_event = e; |
| | | |
| | | if (e.keyCode != 27 && (!this.menu_keyboard_active || target.nodeName == 'TEXTAREA' || target.nodeName == 'SELECT')) { |
| | | return true; |
| | | } |
| | |
| | | var SHIFT_KEY = 2; |
| | | var CONTROL_SHIFT_KEY = 3; |
| | | |
| | | |
| | | /** |
| | | * Default browser check class |
| | | * @constructor |
| | |
| | | is_keyboard: function(e) |
| | | { |
| | | return e && ( |
| | | (e.mozInputSource && e.mozInputSource == e.MOZ_SOURCE_KEYBOARD) || |
| | | (!e.pageX && (e.pageY || 0) <= 0 && !e.clientX && (e.clientY || 0) <= 0) |
| | | (e.pointerType !== undefined && e.pointerType !== 'mouse') || // IE 11+ |
| | | (e.mozInputSource && e.mozInputSource == e.MOZ_SOURCE_KEYBOARD) || // Firefox |
| | | (!e.pageX && (e.pageY || 0) <= 0 && !e.clientX && (e.clientY || 0) <= 0) || // others |
| | | (bw.ie && rcube_event._last_keyboard_event && rcube_event._last_keyboard_event.target == e.target) // hack for IE <= 10 |
| | | ); |
| | | }, |
| | | |
| | |
| | | if (li.length) { |
| | | id = dom2id(li); |
| | | node = indexbyid[id]; |
| | | if (node && node.children.length) |
| | | if (node && node.children.length && node.collapsed != (keyCode == 37)) |
| | | toggle(id, rcube_event.get_modifier(e) == SHIFT_KEY); // toggle subtree |
| | | } |
| | | return false; |
| | | |
| | | case 9: // Tab |
| | | // jump to last/first item to move focus away from the treelist widget by tab |
| | | var limit = rcube_event.get_modifier(e) == SHIFT_KEY ? 'first' : 'last'; |
| | | container.find('li[role=treeitem]:has(a)')[limit]().find('a:'+limit).focus(); |
| | | break; |
| | | } |
| | | |
| | | return true; |
| | |
| | | $labels['arialabeltopnav'] = 'Window control'; |
| | | $labels['arialabeltasknav'] = 'Application tasks'; |
| | | $labels['arialabeltoolbar'] = 'Application toolbar'; |
| | | $labels['arialabelactivetask'] = 'Active task'; |
| | | $labels['arialabelmessagessearchfilter'] = 'Email listing filter'; |
| | | $labels['arialabelmailsearchform'] = 'Email message search form'; |
| | | $labels['arialabelcontactsearchform'] = 'Contacts search form'; |