Fix issue where children of selected and collapsed thread were skipped on various actions (#1489457)

pull/158/merge
Aleksander Machniak 11 years ago
parent ae4717cb6c
commit 7eecf873da

@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail
===========================
- Fix issue where children of selected and collapsed thread were skipped on various actions (#1489457)
- Fix issue where groups were not deleted when "Replace entire addressbook" option on contacts import was used (#1489420)
- Fix unreliable mimetype tests in Installer (#1489453)
- Fix performance of listing writeable folders (#1489451)

@ -2662,20 +2662,7 @@ function rcube_webmail()
// delete selected messages from the current mailbox
this.delete_messages = function(event)
{
var uid, i, len, trash = this.env.trash_mailbox,
list = this.message_list,
selection = list ? list.get_selection() : [];
// exit if no mailbox specified or if selection is empty
if (!this.env.uid && !selection.length)
return;
// also select childs of collapsed rows
for (i=0, len=selection.length; i<len; i++) {
uid = selection[i];
if (list.rows[uid].has_children && !list.rows[uid].expanded)
list.select_children(uid);
}
var list = this.message_list, trash = this.env.trash_mailbox;
// if config is set to flag for deletion
if (this.env.flag_for_deletion) {
@ -2715,7 +2702,7 @@ function rcube_webmail()
this._with_selected_messages('delete', post_data);
};
// Send a specifc move/delete request with UIDs of all selected messages
// Send a specific move/delete request with UIDs of all selected messages
// @private
this._with_selected_messages = function(action, post_data, lock)
{

@ -542,17 +542,18 @@ expand_row: function(e, id)
collapse: function(row)
{
var r, depth = row.depth,
new_row = row ? row.obj.nextSibling : null;
row.expanded = false;
this.triggerEvent('expandcollapse', { uid:row.uid, expanded:row.expanded, obj:row.obj });
var depth = row.depth;
var new_row = row ? row.obj.nextSibling : null;
var r;
while (new_row) {
if (new_row.nodeType == 1) {
var r = this.rows[new_row.uid];
r = this.rows[new_row.uid];
if (r && r.depth <= depth)
break;
$(new_row).css('display', 'none');
if (r.expanded) {
r.expanded = false;
@ -564,6 +565,7 @@ collapse: function(row)
this.resize();
this.triggerEvent('listupdate');
return false;
},
@ -961,7 +963,7 @@ _rowIndex: function(obj)
in_selection: function(id)
{
for (var n in this.selection)
if (this.selection[n]==id)
if (this.selection[n] == id)
return true;
return false;
@ -1057,9 +1059,26 @@ clear_selection: function(id)
/**
* Getter for the selection array
*/
get_selection: function()
get_selection: function(deep)
{
return this.selection;
var res = $.merge([], this.selection);
// return children of selected threads even if only root is selected
if (deep !== false && res.length) {
for (var uid, uids, i=0, len=res.length; i<len; i++) {
uid = res[i];
if (this.rows[uid].has_children && !this.rows[uid].expanded) {
uids = this.row_children(uid);
for (var j=0, uids_len=uids.length; j<uids_len; j++) {
uid = uids[j];
if (!this.in_selection(uid))
res.push(uid);
}
}
}
}
return res;
},
@ -1325,7 +1344,7 @@ drag_mouse_move: function(e)
this.draglayer.html('');
// get subjects of selected messages
var i, n, obj, me;
var n, obj, me = this;
for (n=0; n<this.selection.length; n++) {
// only show 12 lines
if (n>12) {
@ -1333,9 +1352,8 @@ drag_mouse_move: function(e)
break;
}
me = this;
if (obj = this.rows[this.selection[n]].obj) {
$('> '+this.col_tagname(), obj).each(function(i,elem){
$('> '+this.col_tagname(), obj).each(function(i, elem) {
if (n == 0)
me.drag_start_pos = $(elem).offset();
@ -1541,7 +1559,7 @@ row_children: function(uid)
while (row) {
if (row.nodeType == 1) {
if ((r = this.rows[row.uid])) {
if (r = this.rows[row.uid]) {
if (!r.depth || r.depth <= depth)
break;
res.push(r.uid);

Loading…
Cancel
Save