diff options
Diffstat (limited to 'program')
| -rw-r--r-- | program/js/list.js | 69 | 
1 files changed, 31 insertions, 38 deletions
| diff --git a/program/js/list.js b/program/js/list.js index dafc9eb66..022ed3180 100644 --- a/program/js/list.js +++ b/program/js/list.js @@ -1150,6 +1150,7 @@ highlight_children: function(id, status)  key_press: function(e)  {    var target = e.target || {}; +    if (this.focused != true || target.nodeName == 'INPUT' || target.nodeName == 'TEXTAREA' || target.nodeName == 'SELECT')      return true; @@ -1171,11 +1172,9 @@ key_press: function(e)      case 37: // Left arrow key      case 39: // Right arrow key -    case 107: // Plus sign on a numeric keypad -    case 109: // Minus sign on a numeric keypad        // Stop propagation        rcube_event.cancel(e); -      var ret = this.use_plusminus_key(keyCode, mod_key); +      var ret = this.use_arrow_key(keyCode, mod_key);        this.key_pressed = keyCode;        this.modkey = mod_key;        this.triggerEvent('keypress'); @@ -1220,56 +1219,50 @@ key_press: function(e)   */  use_arrow_key: function(keyCode, mod_key)  { -  var new_row; +  var new_row, +    selected_row = this.rows[this.last_selected]; +    // Safari uses the nonstandard keycodes 63232/63233 for up/down, if we're    // using the keypress event (but not the keydown or keyup event).    if (keyCode == 40 || keyCode == 63233) // down arrow key pressed      new_row = this.get_next_row();    else if (keyCode == 38 || keyCode == 63232) // up arrow key pressed      new_row = this.get_prev_row(); +  else { +    if (!selected_row || !selected_row.has_children) +      return; -  if (new_row) { -    this.select_row(new_row.uid, mod_key, false); -    this.scrollto(new_row.uid); -  } - -  return false; -}, - +    // expand +    if (keyCode == 39) { +      if (selected_row.expanded) +        return; -/** - * Special handling method for +/- keys - */ -use_plusminus_key: function(keyCode, mod_key) -{ -  var selected_row = this.rows[this.last_selected]; +      if (mod_key == CONTROL_KEY || this.multiexpand) +        this.expand_all(selected_row); +      else +        this.expand(selected_row); +    } +    // collapse +    else { +      if (!selected_row.expanded) +        return; -  if (!selected_row || !selected_row.has_children) -    return; +      if (mod_key == CONTROL_KEY || this.multiexpand) +        this.collapse_all(selected_row); +      else +        this.collapse(selected_row); +    } -  // expand -  if (keyCode == 39 || keyCode == 107) { -    if (selected_row.expanded) -      return; +    this.update_expando(selected_row.uid, selected_row.expanded); -    if (mod_key == CONTROL_KEY || this.multiexpand) -      this.expand_all(selected_row); -    else -      this.expand(selected_row); +    return false;    } -  // collapse -  else { -    if (!selected_row.expanded) -      return; -    if (mod_key == CONTROL_KEY || this.multiexpand) -      this.collapse_all(selected_row); -    else -      this.collapse(selected_row); +  if (new_row) { +    this.select_row(new_row.uid, mod_key, false); +    this.scrollto(new_row.uid);    } -  this.update_expando(selected_row.uid, selected_row.expanded); -    return false;  }, | 
