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.js38
1 files changed, 14 insertions, 24 deletions
diff --git a/program/js/list.js b/program/js/list.js
index c2ad3f7c3..33f88ab10 100644
--- a/program/js/list.js
+++ b/program/js/list.js
@@ -35,7 +35,7 @@ function rcube_list_widget(list, p)
this.tbody;
this.fixed_header;
this.frame = null;
- this.rows = [];
+ this.rows = {};
this.selection = [];
this.rowcount = 0;
this.colcount = 0;
@@ -50,7 +50,6 @@ function rcube_list_widget(list, p)
this.keyboard = false;
this.toggleselect = false;
- this.dont_select = false;
this.drag_active = false;
this.col_drag_active = false;
this.column_fixed = null;
@@ -86,7 +85,7 @@ init: function()
}
if (this.tbody) {
- this.rows = [];
+ this.rows = {};
this.rowcount = 0;
var r, len, rows = this.tbody.childNodes;
@@ -240,7 +239,7 @@ clear: function(sel)
$(this.row_tagname() + ':not(.thead)', this.tbody).remove();
}
- this.rows = [];
+ this.rows = {};
this.rowcount = 0;
if (sel)
@@ -409,7 +408,7 @@ drag_row: function(e, id)
var evtarget = rcube_event.get_target(e),
tagname = evtarget.tagName.toLowerCase();
- if (this.dont_select || (evtarget && (tagname == 'input' || tagname == 'img')))
+ if (evtarget && (tagname == 'input' || tagname == 'img' || (tagname != 'a' && evtarget.onclick)))
return true;
// accept right-clicks
@@ -455,23 +454,16 @@ click_row: function(e, id)
if ((evtarget && (tagname == 'input' || tagname == 'img')))
return true;
- // don't do anything (another action processed before)
- if (this.dont_select) {
- this.dont_select = false;
- return false;
- }
-
var dblclicked = now - this.rows[id].clicked < this.dblclick_time;
- // unselects currently selected row
- if (!this.drag_active && this.in_selection_before == id && !dblclicked)
- this.select_row(id, mod_key, false);
-
+ // selects/unselects currently selected row
+ if (!this.drag_active && !dblclicked)
+ this.select_row(id, mod_key, true);
+
this.drag_start = false;
- this.in_selection_before = false;
// row was double clicked
- if (this.rows && dblclicked && this.in_selection(id)) {
+ if (this.rowcount && dblclicked && this.in_selection(id)) {
this.triggerEvent('dblclick');
now = 0;
}
@@ -509,8 +501,6 @@ expand_row: function(e, id)
evtarget = rcube_event.get_target(e),
mod_key = rcube_event.get_modifier(e);
- // Don't select this message
- this.dont_select = true;
// Don't treat double click on the expando as double click on the message.
row.clicked = 0;
@@ -703,7 +693,7 @@ update_expando: function(uid, expanded)
*/
get_next_row: function()
{
- if (!this.rows)
+ if (!this.rowcount)
return false;
var last_selected_row = this.rows[this.last_selected],
@@ -717,7 +707,7 @@ get_next_row: function()
get_prev_row: function()
{
- if (!this.rows)
+ if (!this.rowcount)
return false;
var last_selected_row = this.rows[this.last_selected],
@@ -796,7 +786,7 @@ select_row: function(id, mod_key, with_mouse)
break;
case CONTROL_KEY:
- if (!with_mouse)
+ if (with_mouse)
this.highlight_row(id, true);
break;
@@ -969,7 +959,7 @@ in_selection: function(id)
*/
select_all: function(filter)
{
- if (!this.rows || !this.rows.length)
+ if (!this.rowcount)
return false;
// reset but remember selection first
@@ -1001,7 +991,7 @@ select_all: function(filter)
*/
invert_selection: function()
{
- if (!this.rows || !this.rows.length)
+ if (!this.rowcount)
return false;
// remember old selection