thomascube
2010-03-24 84a3312f0b16fdf02061d8bbdc62228290b0beeb
Only select childs when a message row is collapsed but also do it when deleting a thread

2 files modified
64 ■■■■■ changed files
program/js/app.js 24 ●●●●● patch | view | raw | blame | history
program/js/list.js 40 ●●●●● patch | view | raw | blame | history
program/js/app.js
@@ -2203,32 +2203,38 @@
  // 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 @@
      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
program/js/list.js
@@ -658,6 +658,29 @@
    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 @@
    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