diff options
Diffstat (limited to 'program/js/list.js')
-rw-r--r-- | program/js/list.js | 38 |
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 |