| Roundcube List Widget |
| |
| This file is part of the Roundcube Webmail client |
- | Copyright (C) 2006-2009, Roundcube Dev, - Switzerland |
+ | Copyright (C) 2006-2009, The Roundcube Dev Team |
| Licensed under the GNU GPL |
| |
+-----------------------------------------------------------------------+
| Requires: common.js |
+-----------------------------------------------------------------------+
- $Id: list.js 4666 2011-04-17 09:34:02Z alec $
+ $Id: list.js 5757 2012-01-12 07:29:48Z alec $
*/
this.colcount = 0;
this.subject_col = -1;
- this.shiftkey = false;
+ this.modkey = 0;
this.multiselect = false;
this.multiexpand = false;
this.multi_selecting = false;
this.row_init = function(){};
// overwrite default paramaters
- if (p && typeof(p) == 'object')
+ if (p && typeof p === 'object')
for (var n in p)
this[n] = p[n];
};
init_row: function(row)
{
// make references in internal array and set event handlers
- if (row && String(row.id).match(/rcmrow([a-z0-9\-_=\+\/]+)/i)) {
+ if (row && String(row.id).match(/^rcmrow([a-z0-9\-_=\+\/]+)/i)) {
var self = this,
uid = RegExp.$1;
row.uid = uid;
*/
remove_row: function(uid, sel_next)
{
- if (this.rows[uid].obj)
- this.rows[uid].obj.style.display = 'none';
+ var obj = this.rows[uid] ? this.rows[uid].obj : null;
+
+ if (!obj)
+ return;
+
+ obj.style.display = 'none';
if (sel_next)
this.select_next();
var i, len, rows = this.list.tBodies[0].rows;
for (i=0, len=rows.length-1; i<len; i++)
- if (rows[i].id && String(rows[i].id).match(/rcmrow([a-z0-9\-_=\+\/]+)/i) && this.rows[RegExp.$1] != null)
+ if (rows[i].id && String(rows[i].id).match(/^rcmrow([a-z0-9\-_=\+\/]+)/i) && this.rows[RegExp.$1] != null)
return RegExp.$1;
}
var i, rows = this.list.tBodies[0].rows;
for (i=rows.length-1; i>=0; i--)
- if (rows[i].id && String(rows[i].id).match(/rcmrow([a-z0-9\-_=\+\/]+)/i) && this.rows[RegExp.$1] != null)
+ if (rows[i].id && String(rows[i].id).match(/^rcmrow([a-z0-9\-_=\+\/]+)/i) && this.rows[RegExp.$1] != null)
return RegExp.$1;
}
case CONTROL_KEY:
if (!with_mouse)
this.highlight_row(id, true);
- break;
+ break;
case CONTROL_SHIFT_KEY:
this.shift_select(id, true);
*/
key_press: function(e)
{
- if (this.focused != true)
+ var target = e.target || {};
+ if (this.focused != true || target.nodeName == 'INPUT' || target.nodeName == 'TEXTAREA' || target.nodeName == 'SELECT')
return true;
var keyCode = rcube_event.get_keycode(e),
switch (keyCode) {
case 40:
- case 38:
+ case 38:
case 63233: // "down", in safari keypress
case 63232: // "up", in safari keypress
// Stop propagation so that the browser doesn't scroll
rcube_event.cancel(e);
var ret = this.use_plusminus_key(keyCode, mod_key);
this.key_pressed = keyCode;
+ this.modkey = mod_key;
this.triggerEvent('keypress');
+ this.modkey = 0;
return ret;
case 36: // Home
this.select_first(mod_key);
this.select_last(mod_key);
return rcube_event.cancel(e);
default:
- this.shiftkey = e.shiftKey;
this.key_pressed = keyCode;
+ this.modkey = mod_key;
this.triggerEvent('keypress');
+ this.modkey = 0;
if (this.key_pressed == this.BACKSPACE_KEY)
return rcube_event.cancel(e);
*/
key_down: function(e)
{
+ var target = e.target || {};
+ if (this.focused != true || target.nodeName == 'INPUT' || target.nodeName == 'TEXTAREA' || target.nodeName == 'SELECT')
+ return true;
+
switch (rcube_event.get_keycode(e)) {
case 27:
if (this.drag_active)
- return this.drag_mouse_up(e);
+ return this.drag_mouse_up(e);
if (this.col_drag_active) {
this.selected_column = null;
- return this.column_drag_mouse_up(e);
+ return this.column_drag_mouse_up(e);
}
case 40:
new_row = this.get_prev_row();
if (new_row) {
- this.select_row(new_row.uid, mod_key, true);
+ this.select_row(new_row.uid, mod_key, false);
this.scrollto(new_row.uid);
}