From 4e10778caf04d05c90caa827212a141d3a4a619f Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 20 Nov 2012 09:56:43 +0100 Subject: Fix selection of collapsed thread rows (#1488772) Conflicts: CHANGELOG --- CHANGELOG | 1 + program/js/list.js | 87 +++++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 64 insertions(+), 24 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 61b088d0c..69f0cac9f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -3,6 +3,7 @@ CHANGELOG Roundcube Webmail - Fix cache (in)validation after setting \Deleted flag - Fix keybord events on messages list in opera browser (#1488823) +- Fix selection of collapsed thread rows (#1488772) - Fix wrapping of quoted text with format=flowed (#1488177) RELEASE 0.8.4 diff --git a/program/js/list.js b/program/js/list.js index 76ccaa535..f101804bb 100644 --- a/program/js/list.js +++ b/program/js/list.js @@ -528,6 +528,7 @@ collapse_all: function(row) return false; }, + expand_all: function(row) { var depth, new_row, r; @@ -563,6 +564,7 @@ expand_all: function(row) return false; }, + update_expando: function(uid, expanded) { var expando = document.getElementById('rcmexpando' + uid); @@ -735,7 +737,7 @@ select_first: function(mod_key) /** - * Select last row + * Select last row */ select_last: function(mod_key) { @@ -756,25 +758,13 @@ select_last: function(mod_key) /** * Add all childs of the given row to selection */ -select_childs: function(uid) +select_children: function(uid) { - if (!this.rows[uid] || !this.rows[uid].has_children) - return; - - var depth = this.rows[uid].depth, - row = this.rows[uid].obj.nextSibling; + var i, children = this.row_children(uid), len = children.length; - while (row) { - if (row.nodeType == 1) { - if ((r = this.rows[row.uid])) { - if (!r.depth || r.depth <= depth) - break; - if (!this.in_selection(r.uid)) - this.select_row(r.uid, CONTROL_KEY); - } - } - row = row.nextSibling; - } + for (i=0; i 1 || !this.in_selection(id)) { this.clear_selection(); this.selection[0] = id; $(this.rows[id].obj).addClass('selected'); } } - else if (this.rows[id]) { + else { if (!this.in_selection(id)) { // select row - this.selection[this.selection.length] = id; + this.selection.push(id); $(this.rows[id].obj).addClass('selected'); + if (!this.rows[id].expanded) + this.highlight_children(id, true); } else { // unselect row var p = $.inArray(id, this.selection), @@ -951,11 +946,29 @@ highlight_row: function(id, multiple) this.selection = a_pre.concat(a_post); $(this.rows[id].obj).removeClass('selected').removeClass('unfocused'); + if (!this.rows[id].expanded) + this.highlight_children(id, false); } } }, +/** + * Highlight/unhighlight all childs of the given row + */ +highlight_children: function(id, status) +{ + var i, selected, + children = this.row_children(id), len = children.length; + + for (i=0; i