Thomas Bruederli
2014-06-05 bf33799377eab662f8f25365cf15f57cf6697947
Navigate with arrow keys only in treelist widgets; fix keyboard event detection in IE; new text label to help screen readers
4 files modified
19 ■■■■ changed files
program/js/app.js 3 ●●●●● patch | view | raw | blame | history
program/js/common.js 7 ●●●●● patch | view | raw | blame | history
program/js/treelist.js 8 ●●●● patch | view | raw | blame | history
program/localization/en_US/labels.inc 1 ●●●● patch | view | raw | blame | history
program/js/app.js
@@ -1669,6 +1669,9 @@
    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;
    }
program/js/common.js
@@ -31,7 +31,6 @@
var SHIFT_KEY = 2;
var CONTROL_SHIFT_KEY = 3;
/**
 * Default browser check class
 * @constructor
@@ -287,8 +286,10 @@
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
    );
},
program/js/treelist.js
@@ -747,10 +747,16 @@
        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;
program/localization/en_US/labels.inc
@@ -586,6 +586,7 @@
$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';