diff options
Diffstat (limited to 'program')
-rw-r--r-- | program/js/app.js | 24 | ||||
-rw-r--r-- | program/js/list.js | 40 |
2 files changed, 40 insertions, 24 deletions
diff --git a/program/js/app.js b/program/js/app.js index ad2ecf50f..1f7290913 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -2203,32 +2203,38 @@ function rcube_webmail() // delete selected messages from the current mailbox this.delete_messages = function() - { - var selection = this.message_list ? this.message_list.get_selection() : new Array(); + { + var selection = this.message_list ? $.merge([], this.message_list.get_selection()) : new Array(); // exit if no mailbox specified or if selection is empty if (!this.env.uid && !selection.length) return; - + + // also select childs of collapsed rows + for (var uid, i=0; i < selection.length; i++) { + uid = selection[i]; + if (this.message_list.rows[uid].has_children && !this.message_list.rows[uid].expanded) + this.message_list.select_childs(uid); + } + // if config is set to flag for deletion if (this.env.flag_for_deletion) { this.mark_message('delete'); return false; - } + } // if there isn't a defined trash mailbox or we are in it else if (!this.env.trash_mailbox || this.env.mailbox == this.env.trash_mailbox) this.permanently_remove_messages(); // if there is a trash mailbox defined and we're not currently in it else { // if shift was pressed delete it immediately - if (this.message_list && this.message_list.shiftkey) - { + if (this.message_list && this.message_list.shiftkey) { if (confirm(this.get_label('deletemessagesconfirm'))) this.permanently_remove_messages(); - } + } else this.move_messages(this.env.trash_mailbox); - } + } return true; }; @@ -2260,7 +2266,7 @@ function rcube_webmail() for (var n=0; n<selection.length; n++) { id = selection[n]; a_uids[a_uids.length] = id; - count += this.update_thread(id); + count += this.update_thread(id); this.message_list.remove_row(id, (this.env.display_next && n == selection.length-1)); } // make sure there are no selected rows diff --git a/program/js/list.js b/program/js/list.js index c5267eeb3..614d9c3c7 100644 --- a/program/js/list.js +++ b/program/js/list.js @@ -658,6 +658,29 @@ select_first: function() this.select_row(first_row, false, false); }, +/** + * Add all childs of the given row to selection + */ +select_childs: function(uid) +{ + if (!this.rows[uid] || !this.rows[uid].has_children) + return; + + var depth = this.rows[uid].depth; + var row = this.rows[uid].obj.nextSibling; + 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; + } +}, + /** * Perform selection when shift key is pressed @@ -1013,21 +1036,8 @@ drag_mouse_move: function(e) var depth, row, uid, r; for (var n=0; n < selection.length; n++) { uid = selection[n]; - if (this.rows[uid].has_children /*&& !this.rows[uid].expanded*/) { - depth = this.rows[uid].depth; - row = this.rows[uid].obj.nextSibling; - 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; - } - } + if (this.rows[uid].has_children && !this.rows[uid].expanded) + this.select_childs(uid); } // get subjects of selected messages |