diff options
Diffstat (limited to 'program/js/list.js')
-rw-r--r-- | program/js/list.js | 81 |
1 files changed, 41 insertions, 40 deletions
diff --git a/program/js/list.js b/program/js/list.js index dafc9eb66..d54b59d24 100644 --- a/program/js/list.js +++ b/program/js/list.js @@ -195,6 +195,12 @@ init_fixed_header: function() var me = this; $(window).resize(function(){ me.resize() }); + $(window).scroll(function(){ + var w = $(window); + me.fixed_header.css('marginLeft', (-w.scrollLeft()) + 'px'); + if (!bw.webkit) + me.fixed_header.css('marginTop', (-w.scrollTop()) + 'px'); + }); } else { $(this.fixed_header).find('thead').replaceWith(clone); @@ -221,6 +227,8 @@ resize: function() $(this.thead).find('tr td').each(function(index) { $(this).css('width', column_widths[index]); }); + + $(window).scroll(); }, /** @@ -357,7 +365,7 @@ focus: function(e) // Un-focus already focused elements (#1487123, #1487316, #1488600, #1488620) // It looks that window.focus() does the job for all browsers, but not Firefox (#1489058) - $(':focus:not(body)').blur(); + $('iframe,:focus:not(body)').blur(); window.focus(); if (e || (e = window.event)) @@ -1150,6 +1158,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 +1180,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 +1227,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; }, @@ -1344,7 +1345,7 @@ drag_mouse_move: function(e) var uid = RegExp.$1, row = self.rows[uid]; - if ($.inArray(uid, selection) > -1) + if (!row || $.inArray(uid, selection) > -1) return; selection.push(uid); |