summaryrefslogtreecommitdiff
path: root/program/js/list.js
diff options
context:
space:
mode:
Diffstat (limited to 'program/js/list.js')
-rw-r--r--program/js/list.js81
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);